ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/Development/Plotting/Modules/SampleClass.C
(Generate patch)

Comparing UserCode/cbrown/Development/Plotting/Modules/SampleClass.C (file contents):
Revision 1.6 by buchmann, Tue May 22 10:21:36 2012 UTC vs.
Revision 1.12 by buchmann, Fri Aug 10 12:59:45 2012 UTC

# Line 45 | Line 45 | public:
45    bool is_data;
46    bool is_signal;
47    bool is_active;
48 +  float weightrenormalization;
49    int groupindex;
50    Color_t samplecolor;
51    
# Line 72 | Line 73 | sample::sample(string m_filename, string
73    this->groupindex=m_groupindex;
74    this->is_active=true;
75    this->samplecolor=mycolor;
76 +  this->weightrenormalization=1.0;
77    if(!doesROOTFileExist(this->filename)) {
78      stringstream message;
79      message << "The " << write_mc_or_data(is_data) << " sample " << this->samplename << " is invalid because the associated file path, " << this->filename << " is incorrect.";
# Line 87 | Line 89 | sample::sample(string m_filename, string
89      gErrorIgnoreLevel=currlevel;
90      this->events=(TTree*)(this->tfile)->Get(treename.c_str());
91      if(Verbosity>0) dout << "The " << write_mc_or_data(is_data) << " file " << this->filename << " has been added successfully to the list of samples. " << endl;
92 <    long long measured_nevents=(this->events)->GetEntries();
93 <    if(((this->Nentries>1)||(this->Nentries==0))&measured_nevents!=this->Nentries) {
92 >    long long measured_nevents=(long)1;
93 >    TH1F *weight_histo = (TH1F*)(this->tfile)->Get("weight_histo");
94 >    float average_weight = 1.0;
95 >    if(weight_histo) {
96 >      average_weight = weight_histo->Integral()/weight_histo->GetEntries();
97 >      measured_nevents = (long)weight_histo->GetEntries();
98 >    } else {
99 >      measured_nevents=(this->events)->GetEntries();
100 >    }
101 >
102 >    if(((this->Nentries>1)||(this->Nentries==0))&&measured_nevents!=this->Nentries) {
103        //special cases: m_Nentries=1 : we want to give each event the full weight (->scans!)
104        //               m_Nentries=0: detect the number of events and set the nevents automatically
105 +      //               m_Nentries<0: set manually (see below)
106  
107        stringstream warning;
108        warning << "Detected incorrect number of events in sample initialization of sample " << m_filename << " (detected Nevents: " << measured_nevents << " , definition claims: " << this->Nentries << "; will use measured number of events. If you want to use this algorithm to set the number of events anyway, set the number of events to 0.";
109        if(m_Nentries>1) write_warning(__FUNCTION__,warning.str());
110        this->Nentries=measured_nevents;
111 +    } else if ( this->Nentries<0 ) {
112 +      this->Nentries = -this->Nentries;
113      }
114 <    this->weight=(xs/(float)Nentries);
115 <    TH1F *weight_histo = (TH1F*)(this->tfile)->Get("weight_histo");
116 <    float average_weight = 1.0;
117 <    if(weight_histo) {
118 <      average_weight = weight_histo->Integral()/weight_histo->GetEntries();
119 <      this->Nentries=weight_histo->GetEntries();
114 >    if ( average_weight>0 ) {
115 >      this->weight=(xs/(float)Nentries)/average_weight;
116 >      this->weightrenormalization=(1.0/average_weight);
117 >    } else {
118 >      if(average_weight>0) {
119 >      this->weight=(xs/(float)Nentries)/average_weight;
120 >      this->weightrenormalization=(1.0/average_weight);
121 >      } else {
122 >        this->weight = (xs/(float)Nentries);
123 >        this->weightrenormalization=1;
124 >      }
125      }
107    this->weight/=average_weight;
126    }
127    else {
128      this->is_active=false;
# Line 142 | Line 160 | bool doesROOTFileExist(string filename)
160  
161   TCut essentialcut("mll>0");
162   // The following cut (cutWeight) will reweight all the events: use "weight" to correct MC for pileUP, "1.0" otherwise
163 < TCut cutWeight("weight3D");
163 > TCut cutWeight("weight");
164 > //TCut cutWeight("(weight*(((id1==id2&&id1==0)*1.2)+((id1==id2&&id1==1)/1.2)+(id1!=id2)))");
165  
166   void setessentialcut(TCut ess) {
167    essentialcut=ess;
# Line 213 | Line 232 | void samplecollection::ListSamples()
232      dout << "MC sample(s): " << endl;
233      for (int isamp=0;isamp<(int)this->collection.size();isamp++)
234        {
235 <        if(!(this->collection)[isamp].is_data) dout << " - " << (this->collection)[isamp].samplename << " (" << (this->collection)[isamp].filename << ") xs=" << (this->collection)[isamp].xs << " pb, N(events)=" << (this->collection)[isamp].Nentries << endl;
235 >        if(!(this->collection)[isamp].is_data) dout << " - " << (this->collection)[isamp].samplename << " (" << (this->collection)[isamp].filename << ") xs=" << (this->collection)[isamp].xs << " pb, N(events)=" << (this->collection)[isamp].Nentries << " , RN = " << (this->collection)[isamp].weightrenormalization << endl;
236        }
237    }
238    dout << "---------------------------------------------------------------------------------------------------" << endl;
# Line 266 | Line 285 | TH1F* samplecollection::Draw(string m_hi
285    if(Verbosity>0) dout << endl << endl;
286    if(Verbosity>0) dout << "-------------------------------------------------------------------------------------" << endl;
287    if(Verbosity>0) dout << "histoname : " << m_histoname << " , m_var = " << m_var << ", m_xlabel=" << m_xlabel << " m_ylabel=" << m_ylabel << " m_is_data = " << m_is_data << " lumi = " << luminosity << " onlyindex size: " << onlyindex.size() << endl;
288 +  
289    if(HUSH==0) dout << "Drawing histo called " << m_histoname << "... " << endl;
290    bool do_only_selected_samples=false;
291    if(onlyindex.size()>0&&onlyindex[0]!=-1) {
# Line 302 | Line 322 | TH1F* samplecollection::Draw(string m_hi
322      TH1F *tempdrawhisto = new TH1F("tempdrawhisto","tempdrawhisto",binning.size()-1,binningarray);
323      tempdrawhisto->Sumw2();
324      if(use_this_sample) {
305      if(Verbosity>0) dout << "[samplecollection::Draw] : Added contribution from sample " << (this->collection)[isample].samplename << endl;
325        (this->collection)[isample].events->Draw(drawthis.str().c_str(),(essentialcut&&Cut)*cutWeight);//this weight is based on PU etc. not XS
326 + //cout << "Drawing " << drawthis.str() << "   with cut   " << (const char*) (essentialcut&&Cut)*cutWeight << endl;
327        if(addoverunderflowbins) {
328          //now also adding the overflow & underflow bins:
329          tempdrawhisto->SetBinContent(tempdrawhisto->GetNbinsX(),tempdrawhisto->GetBinContent(tempdrawhisto->GetNbinsX()+1)+tempdrawhisto->GetBinContent(tempdrawhisto->GetNbinsX()));
# Line 313 | Line 333 | TH1F* samplecollection::Draw(string m_hi
333        }
334  
335        if(!(this->collection)[isample].is_data) tempdrawhisto->Scale(luminosity*((this->collection)[isample].weight));//weight applied here is XS & N(entries)
336 +      if(Verbosity>0) dout << "[samplecollection::Draw] : Added contribution from sample " << (this->collection)[isample].samplename << ": " <<tempdrawhisto->Integral() << endl;
337        histo->Add(tempdrawhisto);
338      }
339      tempdrawhisto->Delete();
# Line 356 | Line 377 | TH2F* samplecollection::Draw(string m_hi
377    float binningarray[binningx.size()+1];
378    float binningyarray[binningy.size()+1];
379    for(int i=0;i<(int)binningx.size();i++) {binningarray[i]=binningx[i];binningyarray[i]=binningy[i];}
380 <  TH2F *histo = new TH2F(m_histoname.c_str(),"",binningx.size()-1,binningarray,binningy.size(),binningyarray);
380 >  TH2F *histo = new TH2F(m_histoname.c_str(),"",binningx.size()-1,binningarray,binningy.size()-1,binningyarray);
381    histo->Sumw2();
382    
383    stringstream drawthis;
# Line 377 | Line 398 | TH2F* samplecollection::Draw(string m_hi
398      if(use_this_sample) {
399        if(Verbosity>0) dout << "[samplecollection::Draw] : Added contribution from sample " << (this->collection)[isample].samplename << endl;
400        (this->collection)[isample].events->Draw(drawthis.str().c_str(),(essentialcut&&Cut)*cutWeight);//this weight is based on PU etc. not XS
401 +      cout << "About to draw : " << drawthis.str() << "  with cut   " << (const char*) (essentialcut&&Cut)*cutWeight << endl;
402        if(addoverunderflowbins) {
403          //now also adding the overflow & underflow bins:
404          tempdrawhisto->SetBinContent(tempdrawhisto->GetNbinsX(),tempdrawhisto->GetBinContent(tempdrawhisto->GetNbinsX()+1)+tempdrawhisto->GetBinContent(tempdrawhisto->GetNbinsX()));

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines