ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/VHbbDataFormats/interface/TriggerWeight.h
Revision: 1.12
Committed: Fri Jun 1 08:23:06 2012 UTC (12 years, 11 months ago) by arizzi
Content type: text/plain
Branch: MAIN
CVS Tags: Step2ForV32_v0
Changes since 1.11: +51 -1 lines
Log Message:
Update of step2 for V32 new PU recipe. Add 2012A trigger weights from Seth (preliminary, still sorting out the dZ ineff)

File Contents

# User Rev Content
1 arizzi 1.1 #ifndef TRIGGERWEIGHT_H
2     #define TRIGGERWEIGHT_H
3    
4     #include "FWCore/ParameterSet/interface/ProcessDesc.h"
5     #include "FWCore/PythonParameterSet/interface/PythonProcessDesc.h"
6 arizzi 1.11 //#include "VHbbAnalysis/VHbbDataFormats/interface/TriggerZnunuCurve.h"
7 arizzi 1.4 #include "VHbbAnalysis/VHbbDataFormats/interface/MultiThresholdEfficiency.h"
8 arizzi 1.1 #include <TH1F.h>
9 arizzi 1.3 #include <TF1.h>
10 arizzi 1.1 #include <TFile.h>
11     #include <TTree.h>
12     #include <iostream>
13     class TriggerWeight
14     {
15     public:
16 arizzi 1.11 TriggerWeight(const edm::ParameterSet& ana) : combiner2Thr(2), combiner1Thr(1)
17 arizzi 1.1 {
18 arizzi 1.4 tscaleHLTmu=openFile(ana,"hltMuFileName");
19     tscaleIDmu=openFile(ana,"idMuFileName");
20     tscaleHLTele1=openFile(ana,"hltEle1FileName");
21     tscaleHLTele2=openFile(ana,"hltEle2FileName");
22 arizzi 1.9 tscaleHLTele1Aug=openFile(ana,"hltEle1AugFileName");
23     tscaleHLTele2Aug=openFile(ana,"hltEle2AugFileName");
24 arizzi 1.5 tscaleID80Ele=openFile(ana,"idEle80FileName");
25     tscaleID95Ele=openFile(ana,"idEle95FileName");
26 arizzi 1.4 tscaleHLTeleJet1=openFile(ana,"hltJetEle1FileName");
27     tscaleHLTeleJet2=openFile(ana,"hltJetEle2FileName");
28 arizzi 1.5 tscaleRecoEle=openFile(ana,"recoEleFileName");
29     // tscalePFMHTele=openFile(ana,"hltPFMHTEleFileName");
30     tscaleSingleEleMay=openFile(ana,"hltSingleEleMayFileName");
31     tscaleSingleEleV4=openFile(ana,"hltSingleEleV4FileName");
32 arizzi 1.6 tscaleHLTmuOr30=openFile(ana,"hltMuOr30FileName");
33 arizzi 1.4
34 arizzi 1.12 tscaleSingleEle2012Awp95=openFile(ana,"hltSingleEle2012Awp95");
35     tscaleSingleEle2012Awp80=openFile(ana,"hltSingleEle2012Awp80");
36     tscaleSingleMuon2012A=openFile(ana,"hltSingleMuon2012A");
37     tscaleDoubleEle2012A_leg8=openFile(ana,"hltDoubleEle2012A_leg8");
38     tscaleDoubleEle2012A_leg17=openFile(ana,"hltDoubleEle2012A_leg17");
39     tscaleDoubleMuon2012A_leg8=openFile(ana,"hltDoubleMuon2012A_leg8");
40     tscaleDoubleMuon2012A_leg17=openFile(ana,"hltDoubleMuon2012A_leg17");
41    
42     tscaleMuPlusWCandPt2012A_legMu=openFile(ana,"hltMuPlusWCandPt2012A_legMu");
43     tscaleMuPlusWCandPt2012A_legW=openFile(ana,"hltMuPlusWCandPt2012A_legW");
44    
45 arizzi 1.1 if(tscaleHLTmu == 0 || tscaleIDmu == 0)
46     {
47     std::cout << "ERROR: cannot load Muon Trigger efficiencies" << std::endl;
48     }
49 arizzi 1.4
50    
51 arizzi 1.1
52     }
53 arizzi 1.4
54 arizzi 1.10 static TTree * openFile(const edm::ParameterSet& ana, const char * name)
55 arizzi 1.4 {
56 arizzi 1.5 TFile *hltMuFile = new TFile (ana.getParameter<std::string> (name).c_str(),"read");
57 arizzi 1.4 if(hltMuFile) return (TTree*) hltMuFile->Get("tree");
58     else return 0;
59     }
60    
61 arizzi 1.10 static std::pair<float,float> efficiencyFromPtEta(float pt1, float eta1, TTree *t)
62 arizzi 1.4 {
63     float s1 = 1.,err=1.;
64     std::pair<float,float> r(s1,err);
65     if(!t) return r;
66     float ptMin,ptMax,etaMin,etaMax,scale,error;
67     int count = 0;
68     t->SetBranchAddress("ptMin",&ptMin);
69     t->SetBranchAddress("ptMax",&ptMax);
70     t->SetBranchAddress("etaMin",&etaMin);
71     t->SetBranchAddress("etaMax",&etaMax);
72     t->SetBranchAddress("scale",&scale);
73     t->SetBranchAddress("error",&error);
74 arizzi 1.7 float lastPtBin = 200;
75     /* for(int jentry = 0; jentry < t->GetEntries(); jentry++)
76     {
77     t->GetEntry(jentry);
78     if(ptMax >= lastPtBin) lastPtBin =ptMax;
79     }*/
80 arizzi 1.4 for(int jentry = 0; jentry < t->GetEntries(); jentry++)
81     {
82     t->GetEntry(jentry);
83 arizzi 1.7 if(ptMax==lastPtBin) ptMax=1e99;
84 arizzi 1.4 if((pt1 > ptMin) && (pt1 < ptMax) && (eta1 > etaMin) && (eta1 < etaMax))
85     {
86     s1 = scale;
87     err=error;
88     count++;
89     }
90     }
91    
92     if(count == 0 || s1 == 0)
93     {
94     return r;
95     }
96    
97     r.first=s1;
98     r.second = err;
99     return (r);
100     }
101 arizzi 1.1
102     float scaleMuIsoHLT(float pt1, float eta1)
103     {
104 arizzi 1.4 return efficiencyFromPtEta(pt1,eta1,tscaleHLTmu).first;
105 arizzi 1.1 }
106    
107    
108    
109     float scaleMuID(float pt1, float eta1)
110     {
111 arizzi 1.4 return efficiencyFromPtEta(pt1,eta1,tscaleIDmu).first;
112 arizzi 1.1 }
113    
114 arizzi 1.3
115 arizzi 1.9 double scaleDoubleEle17Ele8Aug( std::vector<float> pt, std::vector<float> eta )
116     {
117     std::vector< std::vector<float> > allEleWithEffs;
118     for(unsigned int j=0; j< pt.size(); j++)
119     {
120     std::vector<float> thisEleEffs;
121     thisEleEffs.push_back(efficiencyFromPtEta(pt[j],eta[j],tscaleHLTele1Aug).first);
122     thisEleEffs.push_back(efficiencyFromPtEta(pt[j],eta[j],tscaleHLTele2Aug).first);
123    
124     allEleWithEffs.push_back(thisEleEffs);
125     }
126    
127     return combiner2Thr.weight<Trigger1High2Loose>(allEleWithEffs);
128    
129     }
130    
131    
132 arizzi 1.5 double scaleDoubleEle17Ele8( std::vector<float> pt, std::vector<float> eta )
133     {
134     std::vector< std::vector<float> > allEleWithEffs;
135     for(unsigned int j=0; j< pt.size(); j++)
136     {
137     std::vector<float> thisEleEffs;
138     thisEleEffs.push_back(efficiencyFromPtEta(pt[j],eta[j],tscaleHLTele1).first);
139     thisEleEffs.push_back(efficiencyFromPtEta(pt[j],eta[j],tscaleHLTele2).first);
140 arizzi 1.9
141 arizzi 1.5 allEleWithEffs.push_back(thisEleEffs);
142     }
143    
144     return combiner2Thr.weight<Trigger1High2Loose>(allEleWithEffs);
145    
146     }
147    
148     double scaleSingleEleMay( float pt, float eta){ return efficiencyFromPtEta(pt,eta,tscaleSingleEleMay).first;}
149     double scaleSingleEleV4( float pt, float eta){ return efficiencyFromPtEta(pt,eta,tscaleSingleEleV4).first; }
150     double scaleID80Ele( float pt, float eta) { return efficiencyFromPtEta(pt,eta,tscaleID80Ele).first; }
151     double scaleID95Ele( float pt, float eta) { return efficiencyFromPtEta(pt,eta,tscaleID95Ele).first; }
152     double scaleRecoEle( float pt, float eta){ return efficiencyFromPtEta(pt,eta,tscaleRecoEle).first; }
153     double scalePFMHTEle( float MetPFPt){
154     double weightPFMHTrigger=0.;
155    
156     //FIXME: read from file
157 dlopes 1.8 if(MetPFPt>0. && MetPFPt<5.) weightPFMHTrigger=0.305;
158     if(MetPFPt>5. && MetPFPt<10.) weightPFMHTrigger=0.351;
159     if(MetPFPt>10. && MetPFPt<15.) weightPFMHTrigger=0.461;
160     if(MetPFPt>15. && MetPFPt<20.) weightPFMHTrigger=0.572;
161     if(MetPFPt>20. && MetPFPt<25.) weightPFMHTrigger=0.713;
162     if(MetPFPt>25. && MetPFPt<30.) weightPFMHTrigger=0.844;
163     if(MetPFPt>30. && MetPFPt<35.) weightPFMHTrigger=0.914;
164     if(MetPFPt>35. && MetPFPt<40.) weightPFMHTrigger=0.939;
165     if(MetPFPt>40. && MetPFPt<45.) weightPFMHTrigger=0.981;
166     if(MetPFPt>45. && MetPFPt<50.) weightPFMHTrigger=0.982;
167     if(MetPFPt>50. && MetPFPt<60.) weightPFMHTrigger=0.993;
168     if(MetPFPt>60. && MetPFPt<70.) weightPFMHTrigger=0.995;
169     if(MetPFPt>70. && MetPFPt<100.) weightPFMHTrigger=0.995;
170     if(MetPFPt>100.) weightPFMHTrigger=1.;
171 arizzi 1.5 return weightPFMHTrigger;
172     }
173    
174 arizzi 1.11
175 arizzi 1.5 double scaleJet30Jet25( std::vector<float> pt, std::vector<float> eta)
176 arizzi 1.4 {
177 arizzi 1.5
178     std::vector< std::vector<float> > allJetsWithEffs;
179     for(unsigned int j=0; j< pt.size(); j++)
180     {
181     std::vector<float> thisJetEffs;
182     thisJetEffs.push_back(efficiencyFromPtEta(pt[j],eta[j],tscaleHLTeleJet1).first);
183     thisJetEffs.push_back(efficiencyFromPtEta(pt[j],eta[j],tscaleHLTeleJet2).first);
184 arizzi 1.11 // std::cout << " jet pt " << pt[j] << " eta " << eta[j] << " eff1 " << thisJetEffs[0] << " eff2 " << thisJetEffs[1] << std::endl;
185 arizzi 1.5 allJetsWithEffs.push_back(thisJetEffs);
186 arizzi 1.11
187     }
188     float res = combiner2Thr.weight<Trigger1High2Loose>(allJetsWithEffs);
189     // std::cout << "Result is " << res << std::endl;
190     return res;
191     // return combiner2Thr.weight<Trigger1High2Loose>(allJetsWithEffs);
192    
193     }
194     /*
195     TF1 fpt("f","1-exp(-0.157*(x-19.3))", 0., 9999999.);
196    
197     MET80:
198     TF1 fmet80("f","1/ (1 + exp( -0.0709 * (x - 100.7)))", 0., 9999999.);
199    
200     MET100:
201     TF1 fmet100("f","1/ (1 + exp( -0.0679 * (x - 128.8)))", 0., 9999999.);
202     */
203    
204     //LP curve used for MET
205     double scaleMetHLT( double met){
206     return 1. / (1. + ( exp( 0.059486 * ( 123.27 - met ))));
207     }
208    
209     //MET80 component of the factorized JET+MET trigger
210     double scaleMET80(double et)
211     {
212     return 1. / (1. + exp( -0.0709 * (et - 100.7)));
213     }
214    
215     //MET100 component
216     double scaleMET100(double et)
217     {
218     return 1. / (1. + exp( -0.0679 * (et - 128.8)));
219     }
220    
221     //Single jet20 efficiency for MET+2CJet20
222     double jet20efficiency( double pt)
223     {
224     if(pt < 10 ) return 0;
225     return 1. - exp(-0.157*(pt-19.3));
226     }
227    
228     //combined 2 jets efficiency out of N jets, using jet20 efficiency curve
229     double scale2CentralJet( std::vector<float> pt, std::vector<float> eta)
230     {
231    
232     std::vector< std::vector<float> > allJetsWithEffs;
233     for(unsigned int j=0; j< pt.size(); j++)
234     {
235     if(fabs(eta[j]) < 2.5)
236     {
237     std::vector<float> thisJetEffs;
238     thisJetEffs.push_back(jet20efficiency(pt[j]));
239     allJetsWithEffs.push_back(thisJetEffs);
240     }
241    
242 arizzi 1.5 }
243    
244 arizzi 1.11 return combiner1Thr.weight<Trigger2SingleThr>(allJetsWithEffs);
245     }
246    
247     //New MET 150
248     double scaleMET150(double et)
249     {
250     return 1./ (1. + exp( -0.129226 * (et - 156.699)));
251 arizzi 1.4 }
252 arizzi 1.3
253 arizzi 1.6 float scaleMuOr30IsoHLT(float pt1, float eta1)
254     {
255     return efficiencyFromPtEta(pt1,eta1,tscaleHLTmuOr30).first;
256     }
257 arizzi 1.3
258    
259 arizzi 1.12 float doubleEle2012A( float pt1, float eta1, float pt2, float eta2)
260     {
261     float eff1_17 = efficiencyFromPtEta(pt1,eta1,tscaleDoubleEle2012A_leg17).first;
262     float eff2_17 = efficiencyFromPtEta(pt2,eta2,tscaleDoubleEle2012A_leg17).first;
263     float eff1_8 = efficiencyFromPtEta(pt1,eta1,tscaleDoubleEle2012A_leg8).first;
264     float eff2_8 = efficiencyFromPtEta(pt2,eta2,tscaleDoubleEle2012A_leg8).first;
265    
266     return eff1_17 * eff2_8 + eff2_17 * eff1_8 - eff1_17*eff2_17;
267    
268     }
269     float doubleMuon2012A( float pt1, float eta1, float pt2, float eta2)
270     {
271     float eff1_17 = efficiencyFromPtEta(pt1,eta1,tscaleDoubleMuon2012A_leg17).first;
272     float eff2_17 = efficiencyFromPtEta(pt2,eta2,tscaleDoubleMuon2012A_leg17).first;
273     float eff1_8 = efficiencyFromPtEta(pt1,eta1,tscaleDoubleMuon2012A_leg8).first;
274     float eff2_8 = efficiencyFromPtEta(pt2,eta2,tscaleDoubleMuon2012A_leg8).first;
275    
276     return eff1_17 * eff2_8 + eff2_17 * eff1_8 - eff1_17*eff2_17;
277    
278     }
279    
280    
281    
282     float muPlusWCandPt2012A_legW( float pt, float eta){ return efficiencyFromPtEta(pt,eta,tscaleMuPlusWCandPt2012A_legW).first;}
283     float muPlusWCandPt2012A_legMu( float pt, float eta){ return efficiencyFromPtEta(pt,eta,tscaleMuPlusWCandPt2012A_legMu).first;}
284     float singleEle2012Awp80( float pt, float eta){ return efficiencyFromPtEta(pt,eta,tscaleSingleEle2012Awp80).first;}
285     float singleEle2012Awp95( float pt, float eta){ return efficiencyFromPtEta(pt,eta,tscaleSingleEle2012Awp95).first;}
286     float singleMuon2012A( float pt, float eta){ return efficiencyFromPtEta(pt,eta,tscaleSingleMuon2012A).first;}
287    
288    
289 arizzi 1.1 private:
290 arizzi 1.4 TTree * tscaleHLTele1;
291     TTree * tscaleHLTele2;
292     TTree * tscaleHLTeleJet1;
293     TTree * tscaleHLTeleJet2;
294 arizzi 1.5 TTree * tscaleID80Ele;
295     TTree * tscaleID95Ele;
296     TTree * tscaleRecoEle;
297 arizzi 1.6 TTree * tscaleHLTmuOr30;
298    
299 arizzi 1.12 TTree * tscaleSingleEle2012Awp95;
300     TTree * tscaleSingleEle2012Awp80;
301     TTree * tscaleSingleMuon2012A;
302     TTree * tscaleDoubleEle2012A_leg8;
303     TTree * tscaleDoubleEle2012A_leg17;
304     TTree * tscaleDoubleMuon2012A_leg8;
305     TTree * tscaleDoubleMuon2012A_leg17;
306     TTree * tscaleMuPlusWCandPt2012A_legMu;
307     TTree * tscaleMuPlusWCandPt2012A_legW;
308    
309 arizzi 1.5 // TTree * tscalePFMHTele;
310     TTree * tscaleSingleEleMay;
311     TTree * tscaleSingleEleV4;
312 arizzi 1.4
313 arizzi 1.9 TTree * tscaleHLTele1Aug;
314     TTree * tscaleHLTele2Aug;
315    
316 arizzi 1.1 TTree * tscaleHLTmu;
317     TTree * tscaleIDmu;
318 arizzi 1.4 MultiThresholdEfficiency combiner2Thr;
319 arizzi 1.11 MultiThresholdEfficiency combiner1Thr;
320 arizzi 1.1 };
321    
322     #endif