Public Member Functions | Private Attributes

BCMTFChannel Class Reference

A class for ... More...

#include <BCMTFChannel.h>

Collaboration diagram for BCMTFChannel:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 BCMTFChannel (const char *name)
 ~BCMTFChannel ()
void SetName (const char *name)
void SetData (BCMTFTemplate *bctemplate)
void SetFlagChannelActive (bool flag)
std::string GetName ()
BCMTFTemplateGetTemplate (int index)
BCMTFSystematicVariationGetSystematicVariation (int index)
BCMTFTemplateGetData ()
bool GetFlagChannelActive ()
void AddTemplate (BCMTFTemplate *bctemplate)
void AddSystematicVariation (BCMTFSystematicVariation *variation)
void PrintTemplates (const char *filename)
void PrintTemplate (int index, const char *filename)

Private Attributes

std::string fName
BCMTFTemplatefData
std::vector< BCMTFTemplate * > fTemplateContainer
std::vector
< BCMTFSystematicVariation * > 
fSystematicVariationContainer
bool fFlagChannelActive

Detailed Description

A class for ...

Author:
Daniel Kollar
Kevin Kröninger
Version:
1.0
Date:
04.2012

Definition at line 34 of file BCMTFChannel.h.


Constructor & Destructor Documentation

BCMTFChannel::BCMTFChannel ( const char *  name  ) 

Definition at line 21 of file BCMTFChannel.cxx.

 : fData(0)
 , fFlagChannelActive(true)
{
   fName = name;
}

BCMTFChannel::~BCMTFChannel (  ) 

Definition at line 29 of file BCMTFChannel.cxx.

{
   if (fData)
      delete fData;

   for (unsigned int i = 0; i < fTemplateContainer.size(); ++i)
      delete (fTemplateContainer.at(i));

   for (unsigned int i = 0; i < fSystematicVariationContainer.size(); ++i)
      delete (fSystematicVariationContainer.at(i));
}


Member Function Documentation

void BCMTFChannel::AddSystematicVariation ( BCMTFSystematicVariation variation  )  [inline]

Definition at line 84 of file BCMTFChannel.h.

         { fSystematicVariationContainer.push_back(variation); };

void BCMTFChannel::AddTemplate ( BCMTFTemplate bctemplate  )  [inline]

Definition at line 80 of file BCMTFChannel.h.

         { fTemplateContainer.push_back(bctemplate); };

BCMTFTemplate* BCMTFChannel::GetData (  )  [inline]

Definition at line 70 of file BCMTFChannel.h.

         { return fData; };

bool BCMTFChannel::GetFlagChannelActive (  )  [inline]

Definition at line 74 of file BCMTFChannel.h.

         { return fFlagChannelActive; };

std::string BCMTFChannel::GetName (  )  [inline]

Definition at line 58 of file BCMTFChannel.h.

         { return fName; };

BCMTFSystematicVariation* BCMTFChannel::GetSystematicVariation ( int  index  )  [inline]

Definition at line 66 of file BCMTFChannel.h.

         { return fSystematicVariationContainer.at(index); };

BCMTFTemplate* BCMTFChannel::GetTemplate ( int  index  )  [inline]

Definition at line 62 of file BCMTFChannel.h.

         { return fTemplateContainer.at(index); };

void BCMTFChannel::PrintTemplate ( int  index,
const char *  filename 
)

Definition at line 107 of file BCMTFChannel.cxx.

{
   // create new canvas
   TCanvas * c1 = new TCanvas();
   c1->cd();

   // get number of systematics
   unsigned int nsystematics = fSystematicVariationContainer.size();

   // draw template
   GetTemplate(index)->GetHistogram()->Draw();

   // print to file
   if (nsystematics == 0)
      c1->Print(filename);
   else
      c1->Print( (std::string(filename)+std::string("(")).c_str() );

   // loop over systematics
   for (unsigned int isystematic = 0; isystematic < nsystematics; ++isystematic) {
      c1->cd();

      // check that histogram exists
      if (!GetSystematicVariation(isystematic)->GetHistogramUp(index) ||
            !GetSystematicVariation(isystematic)->GetHistogramDown(index))
         continue;

      // get histogram
      TH1D hist = TH1D(*GetTemplate(index)->GetHistogram());
      TH1D hist_up(hist);
      TH1D hist_down(hist);

      // set style
      hist.SetFillStyle(0);
      hist_up.SetFillStyle(0);
      hist_up.SetLineStyle(2);
      hist_down.SetFillStyle(0);
      hist_down.SetLineStyle(3);

      // get efficiency
      double efficiency = GetTemplate(index)->GetEfficiency();

      // scale histogram
      hist.Scale(efficiency/ hist.Integral());

      // loop over all bins
      for (int i = 1; i <= hist.GetNbinsX(); ++i) {
         hist.SetBinContent(i, GetTemplate(index)->GetHistogram()->GetBinContent(i));
         hist_up.SetBinContent(i, hist.GetBinContent(i) * (1.0 + GetSystematicVariation(isystematic)->GetHistogramUp(index)->GetBinContent(i)));
         hist_down.SetBinContent(i, hist.GetBinContent(i) * (1.0 - GetSystematicVariation(isystematic)->GetHistogramDown(index)->GetBinContent(i)));
      }

      // draw histogram
      hist_up.Draw("HIST");
      hist.Draw("HISTSAME");
      hist_down.Draw("HISTSAME");

      if (isystematic < nsystematics-1)
         c1->Print(filename);
      else
         c1->Print( (std::string(filename)+std::string(")")).c_str() );
   }

   // free memory
   delete c1;
}

void BCMTFChannel::PrintTemplates ( const char *  filename  ) 

Definition at line 42 of file BCMTFChannel.cxx.

{
   // create new canvas
   TCanvas * c1 = new TCanvas();
   c1->Divide(2, 2);

   std::string f(filename);

   // get number of templates
   unsigned int ntemplates = fTemplateContainer.size();

   // calculate number of pages
   unsigned int npages =  ntemplates / 4;
   if (ntemplates % 4 > 0)
      npages++;

   // loop over pages
   for (unsigned int i = 0; i < npages; ++i) {
      // loop over pads
      for (unsigned int j = 0; j < 4; ++j) {
         // calculate template index
         unsigned int templateindex = 4 * i + j;

         if (templateindex < ntemplates && GetTemplate(templateindex)->GetHistogram()) {
            // cd into pad
            c1->cd(j+1);

            // get histogram
            TH1D * hist = new TH1D( *( (TH1D *) GetTemplate(templateindex)->GetHistogram()->Clone() ) );

            // get efficiency
            double efficiency = GetTemplate(templateindex)->GetEfficiency();

            // scale histogram
            hist->Scale(efficiency/hist->Integral());

            // draw histogram
            hist->Draw("HIST");
         }
         else {
            // clear pad
            c1->cd(j+1)->Clear();
         }
      }

      if (npages == 1)
         c1->Print(f.c_str());
      else if (i == 0) {
         c1->Print( (f+std::string("[")).c_str() );
         c1->Print(f.c_str());
      }
      else if (i < npages-1) {
         c1->Print(f.c_str());
      }
      else {
         c1->Print(f.c_str());
         c1->Print( (f+std::string("]")).c_str() );
      }
   }

   // free memory
   delete c1;
}

void BCMTFChannel::SetData ( BCMTFTemplate bctemplate  )  [inline]

Definition at line 50 of file BCMTFChannel.h.

         { fData = bctemplate; };

void BCMTFChannel::SetFlagChannelActive ( bool  flag  )  [inline]

Definition at line 54 of file BCMTFChannel.h.

         { fFlagChannelActive = flag; };

void BCMTFChannel::SetName ( const char *  name  )  [inline]

Definition at line 46 of file BCMTFChannel.h.

         { fName = name; };


Member Data Documentation

Definition at line 99 of file BCMTFChannel.h.

Definition at line 108 of file BCMTFChannel.h.

std::string BCMTFChannel::fName [private]

Definition at line 96 of file BCMTFChannel.h.

Definition at line 105 of file BCMTFChannel.h.

Definition at line 102 of file BCMTFChannel.h.


The documentation for this class was generated from the following files: