ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/VHbbDataFormats/interface/TriggerWeight.h
Revision: 1.11.2.1
Committed: Tue Oct 30 08:55:25 2012 UTC (12 years, 6 months ago) by wilken
Content type: text/plain
Branch: V21emuCandidate
CVS Tags: V21TauCand_0
Branch point for: V21TauCand
Changes since 1.11: +17 -1 lines
Log Message:
emu cross trigger efficiencies

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