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

Comparing UserCode/cbrown/AnalysisFramework/Plotting/Modules/Systematics.C (file contents):
Revision 1.1 by buchmann, Fri Jul 15 10:40:43 2011 UTC vs.
Revision 1.3 by buchmann, Tue Jul 19 09:28:30 2011 UTC

# Line 15 | Line 15
15   #ifndef Verbosity
16   #define Verbosity 0
17   #endif
18 #ifndef HUSH
19 #define HUSH 1
20 #endif
18  
19   #include <TFile.h>
20   #include <TTree.h>
# Line 37 | Line 34 | Float_t jzbMax =  243;
34   Float_t jzbSel =  100;
35   int iplot=0;
36   int verbose=0;
37 + string geqleq;
38 + string mcjzbexpression;
39 +
40 + TString geq_or_leq() {
41 +  if(geqleq=="geq") return TString(">=");
42 +  if(geqleq=="leq") return TString("<=");
43 +  return TString("GEQ_OR_LEQ_ERROR");
44 + }
45  
46   //______________________________________________________________________________
47   Double_t Interpolate(Double_t x, TH1 *histo)
# Line 81 | Line 86 | TH1F* plotEff(TTree* events, TCut kbase,
86                                                           nBins,jzbMin,jzbMax);
87          Float_t step = (jzbMax-jzbMin)/static_cast<Float_t>(nBins);
88          
89 <        events->Draw("jzb[1]","genJZBSel>-400"&&kbase,"goff");
89 >        events->Draw(mcjzbexpression.c_str(),"genJZBSel>-400"&&kbase,"goff");
90          Float_t maxEff = events->GetSelectedRows();
91          if(verbose>0) std::cout << hname << " (" << informalname <<") " << maxEff <<  std::endl;
92          
# Line 90 | Line 95 | TH1F* plotEff(TTree* events, TCut kbase,
95          char cut[256];
96          for ( Int_t iBin = 0; iBin<nBins; ++iBin ) {
97                  sprintf(cut,"genJZBSel>%3f",jzbMin+iBin*step);
98 <                events->Draw("jzb[1]",TCut(cut)&&kbase,"goff");
98 >                events->Draw(mcjzbexpression.c_str(),TCut(cut)&&kbase,"goff");
99                  Float_t eff = static_cast<Float_t>(events->GetSelectedRows())/maxEff;
100                  //     std::cout << "COUCOU " << __LINE__ << std::endl;
101                  hJzbEff->SetBinContent(iBin+1,eff);
# Line 109 | Line 114 | float pileup(TTree *events, string infor
114          jzbMax = myJzbMax;
115          
116          // Acceptance cuts
117 <        TCut kbase("abs(genMllSel-91.2)<20&&pfJetGoodNum>2&&genZPtSel>0&&abs(mll-91.2)<20&&((id1+1)*(id2+1)*ch1*ch2)!=-2");
117 >        TCut kbase("abs(genMllSel-91.2)<20&&genNjets>2&&genZPtSel>0&&abs(mll-91.2)<20&&((id1+1)*(id2+1)*ch1*ch2)!=-2");
118          
119          TH1F* hLM4 = plotEff(events,kbase,informalname);
120          hLM4->SetMinimum(0.);
# Line 132 | Line 137 | float pileup(TTree *events, string infor
137  
138   //____________________________________________________________________________________
139   // Total selection efficiency (MC)
140 < void MCefficiency(TTree *events,float &res, float &reserr) {
140 > void MCefficiency(TTree *events,float &res, float &reserr,string mcjzb) {
141          
142          char jzbSelStr[256]; sprintf(jzbSelStr,"%f",jzbSel);
143          // All acceptance cuts at gen. level
144 <        TCut kbase("abs(genMllSel-91.2)<20&&pfJetGoodNum>2&&genZPt>0&&genJZB>"+TString(jzbSelStr)+"&&genId1==-genId2");
144 >        TCut kbase("abs(genMllSel-91.2)<20&&genNjets>2&&genZPt>0&&genJZB"+geq_or_leq()+TString(jzbSelStr)+"&&genId1==-genId2");
145          // Corresponding reco. cuts
146 <        TCut ksel("abs(mll-91.2)<20&&id1==id2&&jzb[1]+0.9>"+TString(jzbSelStr));
146 >        TCut ksel("abs(mll-91.2)<20&&id1==id2&&"+TString(mcjzb)+geq_or_leq()+TString(jzbSelStr));
147          
148 <        events->Draw("jzb[1]",kbase&&ksel,"goff");
148 >        events->Draw(mcjzbexpression.c_str(),kbase&&ksel,"goff");
149          Float_t sel = events->GetSelectedRows();
150 <        events->Draw("jzb[1]",kbase,"goff");
150 >        events->Draw(mcjzbexpression.c_str(),kbase,"goff");
151          Float_t tot = events->GetSelectedRows();
152          
153          res=sel/tot;
# Line 151 | Line 156 | void MCefficiency(TTree *events,float &r
156   }
157  
158   float JZBefficiency(TTree *events, string informalname) {
159 <        TCut kbase("abs(genMllSel-91.2)<20&&pfJetGoodNum>2&&genZPt>0&&abs(mll-91.2)<20&&((id1+1)*(id2+1)*ch1*ch2)!=-2");
159 >        TCut kbase("abs(genMllSel-91.2)<20&&genNjets>2&&genZPt>0&&abs(mll-91.2)<20&&((id1+1)*(id2+1)*ch1*ch2)!=-2");
160          TH1F* hLM4 = plotEff(events,kbase,informalname);
161          Int_t bin = hLM4->FindBin(jzbSel); // To get the error
162          std::cout << "  Efficiency at JZB==" << jzbSel  << std::endl;
# Line 199 | Line 204 | void JZBjetScale(TTree *events, float &j
204   // Effect of energy scale on JZB efficiency
205   void doJZBscale(TTree *events, float &down, float &up, float &syst, float systematic, string informalname) {
206          
207 <        TCut kbase("abs(genMllSel-91.2)<20&&genZPt>0&&pfJetGoodNum>2");
207 >        TCut kbase("abs(genMllSel-91.2)<20&&genZPt>0&&genNjets>2");
208          TCut ksel("abs(mll-91.2)<20&&((id1+1)*(id2+1)*ch1*ch2)!=-2");
209          
210          nBins =    50;
# Line 224 | Line 229 | void doJZBscale(TTree *events, float &do
229   void JZBresponse(TTree *events, bool isMET = kFALSE, Float_t myJzbMax = 200., Int_t nPeriods = 9 ) {
230          
231          jzbMin = 20;
232 <        TCut kbase("abs(genMllSel-91.2)<20&&genZPtSel>0&&pfJetGoodNum>2");
232 >        TCut kbase("abs(genMllSel-91.2)<20&&genZPtSel>0&&genNjets>2");
233          TCut ksel("abs(mll-91.2)<20&&((id1+1)*(id2+1)*ch1*ch2)!=-2");
234          
235          TProfile* hJzbResp = new TProfile("hJzbResp","JZB response  ; JZB true (GeV/c); JZB reco. / JZB true",
236                                                                            nPeriods, jzbMin, myJzbMax, "" );
237          
238 <        if (!isMET) events->Project("hJzbResp","jzb[1]/genJZBSel:genJZBSel",kbase&&ksel);
238 >        if (!isMET) events->Project("hJzbResp","("+TString(mcjzbexpression)+")/genJZBSel:genJZBSel",kbase&&ksel);
239          else events->Project("hJzbResp","met[4]/genMET:genMET",kbase&&ksel);
240          
241          hJzbResp->SetMaximum(1.2);
# Line 241 | Line 246 | void JZBresponse(TTree *events, bool isM
246   }
247  
248  
249 < void do_systematics_for_one_file(TTree *events,string informalname, vector<vector<float> > &uncertainties) {
249 > void do_systematics_for_one_file(TTree *events,string informalname, vector<vector<float> > &uncertainties,string mcjzb,string datajzb) {
250    
251    float JetEnergyScaleUncert=0.1;
252    float JZBScaleUncert=0.1;
253 +  mcjzbexpression=mcjzb;
254    
255    float triggereff=4;//percent!
256    cout << "Trigger efficiency not implemented in this script  yet, still using external one" << endl;
# Line 253 | Line 259 | void do_systematics_for_one_file(TTree *
259    
260    float mceff,mcefferr;
261    cout << "MC efficiencies:" << endl;
262 <  MCefficiency(events,mceff,mcefferr);
262 >  MCefficiency(events,mceff,mcefferr,mcjzb);
263    JZBefficiency(events,informalname);
264    
265    std::cout << "Jet energy scale: " << std::endl;
# Line 296 | Line 302 | vector<vector<float> > compute_systemati
302        cout << "Looking at signal " << (signalsamples.collection)[isignal].filename << endl;
303        for(int ibin=0;ibin<bins.size();ibin++) {
304          jzbSel=bins[ibin];
305 <        do_systematics_for_one_file((signalsamples.collection)[isignal].events,(signalsamples.collection)[isignal].samplename,uncertainties);
305 >        geqleq="geq";
306 >        do_systematics_for_one_file((signalsamples.collection)[isignal].events,(signalsamples.collection)[isignal].samplename,uncertainties,mcjzb,datajzb);
307        }//end of bin loop
308    }//end of signal loop
309    return uncertainties;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines