ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/VHbbDataFormats/interface/Cuts200X.h
Revision: 1.2
Committed: Mon Aug 22 12:15:03 2011 UTC (13 years, 8 months ago) by arizzi
Content type: text/plain
Branch: MAIN
Changes since 1.1: +92 -69 lines
Log Message:
start implementing signal selection as a stack of cuts

File Contents

# User Rev Content
1 arizzi 1.1 #ifndef CUTS200X_H
2     #define CUTS200X_H
3     #include "VHbbAnalysis/VHbbDataFormats/interface/VHbbEvent.h"
4     #include "VHbbAnalysis/VHbbDataFormats/interface/VHbbCandidate.h"
5     #include "VHbbAnalysis/VHbbDataFormats/interface/VHbbProxy.h"
6     #include "VHbbAnalysis/VHbbDataFormats/interface/CutsAndHistos.h"
7     #include <TH1F.h>
8     #include "DataFormats/GeometryVector/interface/VectorUtil.h"
9     #include <sstream>
10     #include "TKey.h"
11    
12    
13     #define CSVM 0.679
14     #define CSVL 0.244
15     #define CSVT 0.898
16    
17     struct CompareJetPt {
18     bool operator()( const VHbbEvent::SimpleJet& j1, const VHbbEvent::SimpleJet& j2 ) const {
19     return j1.p4.Pt() > j2.p4.Pt();
20     }
21     };
22    
23     struct CompareBTag {
24     bool operator()(const VHbbEvent::SimpleJet& j1, const VHbbEvent::SimpleJet& j2 ) const {
25     return j1.csv > j2.csv;
26     }
27     };
28    
29    
30     // New implementations of the control region
31     // The signal regions must be implemented incrementally since cutflow is needed
32    
33     class VlightRegionHWmun: public Cut {
34     std::string name() {return "VlightRegionHWmun";};
35     Bool_t pass(VHbbProxy &iProxy){
36     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
37     if(iCand->size() < 1) return false;
38     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
39     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
40    
41     return ( iCand->at(0).candidateType == VHbbCandidate::Wmun
42     && V.muons[0].p4.Pt() > 20
43     && H.jets.size() >= 2
44     && H.jets.at(0).Pt() > 30
45     && H.jets.at(1).Pt() > 30
46     && H.p4.Pt() > 150
47     && V.p4.Pt() > 150
48     && V.Mt(VHbbCandidate::Wmun) < 160
49     && ( H.jets.at(0).csv < CSVM)
50     && ( H.jets.at(1).csv < CSVM)
51     && iCand->at(0).additionalJets.size() < 2
52     && V.mets[0].metSig > 2.5
53     // && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.5
54     && iProxy.trigger()->accept("HLT_IsoMu17_v.*")
55     );
56     }
57     };
58    
59    
60     class VlightRegionHWen: public Cut {
61     std::string name() {return "VlightRegionHWen";};
62     Bool_t pass(VHbbProxy &iProxy){
63     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
64     if(iCand->size() < 1) return false;
65     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
66     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
67    
68     return ( iCand->at(0).candidateType == VHbbCandidate::Wen
69     && H.jets.size() >= 2
70     && H.jets.at(0).Pt() > 30
71     && H.jets.at(1).Pt() > 30
72     && H.p4.Pt() > 150
73     && V.p4.Pt() > 150
74     && ( H.jets.at(0).csv < CSVM)
75     && ( H.jets.at(1).csv < CSVM)
76     && iCand->at(0).additionalJets.size() < 5
77     && V.mets[0].metSig > 2
78     && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.5
79     && iProxy.trigger()->accept("HLT_Ele\\(\\(27\\)\\|\\(32\\)\\)_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v.")
80     );
81     }
82     };
83    
84     class VlightRegionHZmumu: public Cut {
85     std::string name() {return "VlightRegionHZmumu";};
86     Bool_t pass(VHbbProxy &iProxy){
87     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
88     if(iCand->size() < 1) return false;
89     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
90     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
91    
92     return ( iCand->at(0).candidateType == VHbbCandidate::Zmumu
93     && V.muons[0].p4.Pt() > 20
94     && H.jets.size() >= 2
95     && H.jets.at(0).Pt() > 20
96     && H.jets.at(1).Pt() > 20
97     // && H.p4.Pt() > 100
98     && V.p4.Pt() > 100
99     && ( H.jets.at(0).csv < CSVL)
100     && ( H.jets.at(1).csv < CSVL)
101     && iCand->at(0).additionalJets.size() < 2
102     && iProxy.trigger()->accept("HLT_IsoMu17_v.*")
103     && V.p4.M() > 75
104     && V.p4.M() < 105
105     );
106     }
107     };
108    
109     class VlightRegionHZee: public Cut {
110     std::string name() {return "VlightRegionHZee";};
111     Bool_t pass(VHbbProxy &iProxy){
112     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
113     if(iCand->size() < 1) return false;
114     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
115     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
116    
117     return ( iCand->at(0).candidateType == VHbbCandidate::Zee
118     && H.jets.size() >= 2
119     && H.jets.at(0).Pt() > 20
120     && H.jets.at(1).Pt() > 20
121     // && H.p4.Pt() > 100
122     && V.p4.Pt() > 100
123     && ( H.jets.at(0).csv < CSVL)
124     && ( H.jets.at(1).csv < CSVL)
125     && iCand->at(0).additionalJets.size() < 2
126     && iProxy.trigger()->accept("HLT_Ele17_CaloIdL_CaloIsoVL_Ele8_CaloIdL_CaloIsoVL_v.*")
127     && V.p4.M() > 75
128     && V.p4.M() < 105
129     );
130     }
131     };
132    
133    
134    
135     class TTbarRegionHWmun: public Cut {
136     std::string name() {return "TTbarRegionHWmun";};
137     Bool_t pass(VHbbProxy &iProxy){
138     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
139     if(iCand->size() < 1) return false;
140     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
141     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
142    
143     return ( iCand->at(0).candidateType == VHbbCandidate::Wmun
144     && V.muons[0].p4.Pt() > 20
145     && H.jets.size() >= 2
146     && H.jets.at(0).Pt() > 30
147     && H.jets.at(1).Pt() > 30
148     && H.p4.Pt() > 100
149     && V.p4.Pt() > 100
150     // && V.Mt(VHbbCandidate::Wmun) > 40
151     // && V.Mt(VHbbCandidate::Wmun) < 120
152     && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
153     && iCand->at(0).additionalJets.size() > 1
154     && iProxy.trigger()->accept("HLT_IsoMu17_v.*")
155     );
156     }
157     };
158    
159     class TTbarRegionHWen: public Cut {
160     std::string name() {return "TTbarRegionHWen";};
161     Bool_t pass(VHbbProxy &iProxy){
162     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
163     if(iCand->size() < 1) return false;
164     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
165     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
166    
167     return ( iCand->at(0).candidateType == VHbbCandidate::Wen
168     && H.jets.size() >= 2
169     && H.jets.at(0).Pt() > 30
170     && H.jets.at(1).Pt() > 30
171     && H.p4.Pt() > 75
172     && V.p4.Pt() > 75
173     && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
174     && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.5
175     && iCand->at(0).additionalJets.size() > 0
176     && iCand->at(0).additionalJets.at(0).p4.Pt() > 35
177     && V.mets[0].metSig > 2
178     && ( TMath::Abs( Geom::deltaPhi( V.mets[0].p4.Phi(), H.jets.at(0).p4.Phi())) > 1.5
179     || TMath::Abs( Geom::deltaPhi(V.mets[0].p4.Phi(), H.jets.at(1).p4.Phi())) > 1.5 )
180     && iProxy.trigger()->accept("HLT_Ele\\(\\(27\\)\\|\\(32\\)\\)_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v.")
181    
182    
183     );
184     }
185     };
186    
187    
188     class TTbarRegionHZmumu: public Cut {
189     std::string name() {return "TTbarRegionHZmumu";};
190     Bool_t pass(VHbbProxy &iProxy){
191     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
192     if(iCand->size() < 1) return false;
193     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
194     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
195    
196     return ( iCand->at(0).candidateType == VHbbCandidate::Zmumu
197     && V.muons[0].p4.Pt() > 20
198     && H.jets.size() >= 2
199     && H.jets.at(0).Pt() > 20
200     && H.jets.at(1).Pt() > 20
201     && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
202     && ( V.mets.size() >0 && V.mets.at(0).p4.Pt() > 50)
203     && iCand->at(0).additionalJets.size() > 1
204     && V.p4.M() > 120
205     && iProxy.trigger()->accept("HLT_IsoMu17_v.*")
206     );
207     }
208     };
209    
210    
211     class TTbarRegionHZee: public Cut {
212     std::string name() {return "TTbarRegionHZee";};
213     Bool_t pass(VHbbProxy &iProxy){
214     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
215     if(iCand->size() < 1) return false;
216     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
217     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
218    
219     return ( iCand->at(0).candidateType == VHbbCandidate::Zee
220     && H.jets.size() >= 2
221     && H.jets.at(0).Pt() > 20
222     && H.jets.at(1).Pt() > 20
223     // && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
224     && ( V.mets.size() >0 && V.mets.at(0).p4.Pt() > 50)
225     // && iCand->at(0).additionalJets.size() > 1
226     && iProxy.trigger()->accept("HLT_Ele17_CaloIdL_CaloIsoVL_Ele8_CaloIdL_CaloIsoVL_v.*")
227    
228     );
229     }
230     };
231    
232    
233     class VbbRegionHWmun: public Cut {
234     std::string name() {return "VbbRegionHWmun";};
235     Bool_t pass(VHbbProxy &iProxy){
236     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
237     if(iCand->size() < 1) return false;
238     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
239     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
240    
241     return ( iCand->at(0).candidateType == VHbbCandidate::Wmun
242     && V.muons[0].p4.Pt() > 20
243     && H.jets.size() >= 2
244     && H.jets.at(0).Pt() > 30
245     && H.jets.at(1).Pt() > 30
246     && H.p4.Pt() < 150
247     && V.p4.Pt() < 150
248     && V.Mt(VHbbCandidate::Wmun) < 120
249     && V.Mt(VHbbCandidate::Wmun) > 40
250     && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
251     && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.5
252     && iCand->at(0).additionalJets.size() ==0
253     && V.mets[0].metSig > 2.5
254     && iProxy.trigger()->accept("HLT_IsoMu17_v.*")
255     );
256     }
257     };
258    
259     class VbbRegionHWen: public Cut {
260     std::string name() {return "VbbRegionHWen";};
261     Bool_t pass(VHbbProxy &iProxy){
262     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
263     if(iCand->size() < 1) return false;
264     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
265     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
266    
267     return ( iCand->at(0).candidateType == VHbbCandidate::Wen
268     && H.jets.size() >= 2
269     && H.jets.at(0).Pt() > 30
270     && H.jets.at(1).Pt() > 30
271     && H.p4.Pt() < 150
272     && V.p4.Pt() < 150
273     && V.p4.M() > 50
274     && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
275     && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.4
276     && iCand->at(0).additionalJets.size() < 2
277     && V.mets[0].metSig > 2
278     && iProxy.trigger()->accept("HLT_Ele\\(\\(27\\)\\|\\(32\\)\\)_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v.*")
279    
280     );
281     }
282     };
283    
284     class VbbRegionHZmumu: public Cut {
285     std::string name() {return "VbbRegionHZmumu";};
286     Bool_t pass(VHbbProxy &iProxy){
287     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
288     if(iCand->size() < 1) return false;
289     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
290     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
291    
292     return ( iCand->at(0).candidateType == VHbbCandidate::Zmumu
293     && V.muons[0].p4.Pt() > 20
294     && H.jets.size() >= 2
295     && H.jets.at(0).Pt() > 20
296     && H.jets.at(1).Pt() > 20
297     && ( H.p4.M() < 100 || H.p4.M() > 140)
298     // && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
299     && ( H.jets.at(0).csv > CSVT && H.jets.at(1).csv > CSVT)
300     && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.9
301     && iCand->at(0).additionalJets.size() < 2
302     && ( V.mets.size() ==0 || V.mets.at(0).p4.Pt() < 30)
303     && iProxy.trigger()->accept("HLT_IsoMu17_v.*")
304     && V.p4.M() > 75
305     && V.p4.M() < 105
306    
307     );
308     }
309     };
310    
311     class VbbRegionHZee: public Cut {
312     std::string name() {return "VbbRegionHZee";};
313     Bool_t pass(VHbbProxy &iProxy){
314     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
315     if(iCand->size() < 1) return false;
316     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
317     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
318    
319     return ( iCand->at(0).candidateType == VHbbCandidate::Zee
320     && H.jets.size() >= 2
321     && H.jets.at(0).Pt() > 20
322     && H.jets.at(1).Pt() > 20
323     && ( H.p4.M() < 95 || H.p4.M() > 145)
324     && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
325     && ( H.jets.at(0).csv > 0.5 && H.jets.at(1).csv > 0.5)
326     // && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.9
327     && iCand->at(0).additionalJets.size() < 2
328     // && V.mets[0].p4.Pt() < 30
329     && iProxy.trigger()->accept("HLT_Ele17_CaloIdL_CaloIsoVL_Ele8_CaloIdL_CaloIsoVL_v.*")
330     && V.p4.M() > 75
331     && V.p4.M() < 105
332     );
333     }
334     };
335    
336    
337 arizzi 1.2 class SignalPreSelectionWen : public Cut {
338     std::string name() {return "SignalPreSelWen";};
339    
340     Bool_t pass(VHbbProxy &iProxy){
341     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
342     if(iCand->size() < 1) return false;
343     return ( iCand->at(0).candidateType == VHbbCandidate::Wen)
344     }
345     };
346    
347     class SignalPreSelectionWen : public Cut {
348     std::string name() {return "SignalPreSelWmun";};
349 arizzi 1.1
350     Bool_t pass(VHbbProxy &iProxy){
351 arizzi 1.2 const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
352     if(iCand->size() < 1) return false;
353     return ( iCand->at(0).candidateType == VHbbCandidate::Wmun)
354     }
355     };
356 arizzi 1.1
357 arizzi 1.2 class SignalPreSelectionWen : public Cut {
358     std::string name() {return "SignalPreSelZee";};
359    
360     Bool_t pass(VHbbProxy &iProxy){
361     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
362     if(iCand->size() < 1) return false;
363     return ( iCand->at(0).candidateType == VHbbCandidate::Zee)
364     }
365     };
366 arizzi 1.1
367 arizzi 1.2 class SignalPreSelectionWen : public Cut {
368     std::string name() {return "SignalPreSelZmumu";};
369    
370     Bool_t pass(VHbbProxy &iProxy){
371     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
372     if(iCand->size() < 1) return false;
373     return ( iCand->at(0).candidateType == VHbbCandidate::Zmumu)
374     }
375     };
376 arizzi 1.1
377 arizzi 1.2 class SignalPreSelectionWen : public Cut {
378     std::string name() {return "SignalPreSelZnn";};
379    
380     Bool_t pass(VHbbProxy &iProxy){
381     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
382     if(iCand->size() < 1) return false;
383     return ( iCand->at(0).candidateType == VHbbCandidate::Znn)
384     }
385     };
386    
387     class HPtCut : public PCut
388     {
389     public:
390     HPtCut(double ptMin):PCut(ptMin){}
391     bool pass(VHbbProxy &p) {
392     if(iCand->size() < 1) return false;
393     return ( iCand->at(0).H.p4.pT() > m_cut)
394     }
395     virtual std::string name() {return "Higgs_Pt_Gt_"+cutValueString(); }
396     };
397    
398     class VPtCut : public PCut
399     {
400     public:
401     VPtCut(double ptMin):PCut(ptMin){}
402     bool pass(VHbbProxy &p) {
403     if(iCand->size() < 1) return false;
404     return ( iCand->at(0).V.p4.pT() > m_cut)
405     }
406     virtual std::string name() {return "Vector_Pt_Gt_"+cutValueString(); }
407 arizzi 1.1 };
408    
409    
410 arizzi 1.2 class DoubleBTagCut : public PCut
411     public:
412     DoubleBTagCut(double csvMin):PCut(csvMin){}
413     bool pass(VHbbProxy &p) {
414     if(iCand->size() < 1) return false;
415     VHbbCandidate::HiggsCandidate & H = iProxy.getVHbbCandidate()->at(0).H;
416     return (
417     H.jets.size() >= 2
418     && ( H.jets.at(0).csv > m_cut && H.jets.at(1).csv > m_cut)
419     )
420     }
421     virtual std::string name() {return "DoubleCSV_"+cutValueString(); }
422     };
423    
424     //class SingleBTagCut : public PCut
425     //class VHDeltaPhiCut : public PCut
426     //class AdditionalJetsCut : public PCut
427     //class AdditionalLeptonsCut : public PCut
428     //class METCut : public PCut
429     //class METSignificanceCut : public PCut
430     //class JetMETDEltaPhiCut : public PCut
431     //class DiJetMassCut : public PCut
432    
433    
434    
435    
436    
437 arizzi 1.1
438     #endif