ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/VHbbDataFormats/interface/Cuts200X.h
Revision: 1.3
Committed: Mon Aug 22 14:06:54 2011 UTC (13 years, 8 months ago) by arizzi
Content type: text/plain
Branch: MAIN
Changes since 1.2: +207 -91 lines
Log Message:
incremental Signal Region selection

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 arizzi 1.3 Bool_t pass(VHbbProxy &p){
36     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
37 arizzi 1.1 if(iCand->size() < 1) return false;
38 arizzi 1.3 VHbbCandidate::VectorCandidate V = p.getVHbbCandidate()->at(0).V;
39     VHbbCandidate::HiggsCandidate H = p.getVHbbCandidate()->at(0).H;
40 arizzi 1.1
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 arizzi 1.3 && p.trigger()->accept("HLT_IsoMu17_v.*")
55 arizzi 1.1 );
56     }
57     };
58    
59    
60     class VlightRegionHWen: public Cut {
61     std::string name() {return "VlightRegionHWen";};
62 arizzi 1.3 Bool_t pass(VHbbProxy &p){
63     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
64 arizzi 1.1 if(iCand->size() < 1) return false;
65 arizzi 1.3 VHbbCandidate::VectorCandidate V = p.getVHbbCandidate()->at(0).V;
66     VHbbCandidate::HiggsCandidate H = p.getVHbbCandidate()->at(0).H;
67 arizzi 1.1
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 arizzi 1.3 && p.trigger()->accept("HLT_Ele\\(\\(27\\)\\|\\(32\\)\\)_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v.")
80 arizzi 1.1 );
81     }
82     };
83    
84     class VlightRegionHZmumu: public Cut {
85     std::string name() {return "VlightRegionHZmumu";};
86 arizzi 1.3 Bool_t pass(VHbbProxy &p){
87     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
88 arizzi 1.1 if(iCand->size() < 1) return false;
89 arizzi 1.3 VHbbCandidate::VectorCandidate V = p.getVHbbCandidate()->at(0).V;
90     VHbbCandidate::HiggsCandidate H = p.getVHbbCandidate()->at(0).H;
91 arizzi 1.1
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 arizzi 1.3 && p.trigger()->accept("HLT_IsoMu17_v.*")
103 arizzi 1.1 && 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 arizzi 1.3 Bool_t pass(VHbbProxy &p){
112     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
113 arizzi 1.1 if(iCand->size() < 1) return false;
114 arizzi 1.3 VHbbCandidate::VectorCandidate V = p.getVHbbCandidate()->at(0).V;
115     VHbbCandidate::HiggsCandidate H = p.getVHbbCandidate()->at(0).H;
116 arizzi 1.1
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 arizzi 1.3 && p.trigger()->accept("HLT_Ele17_CaloIdL_CaloIsoVL_Ele8_CaloIdL_CaloIsoVL_v.*")
127 arizzi 1.1 && 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 arizzi 1.3 Bool_t pass(VHbbProxy &p){
138     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
139 arizzi 1.1 if(iCand->size() < 1) return false;
140 arizzi 1.3 VHbbCandidate::VectorCandidate V = p.getVHbbCandidate()->at(0).V;
141     VHbbCandidate::HiggsCandidate H = p.getVHbbCandidate()->at(0).H;
142 arizzi 1.1
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 arizzi 1.3 && p.trigger()->accept("HLT_IsoMu17_v.*")
155 arizzi 1.1 );
156     }
157     };
158    
159     class TTbarRegionHWen: public Cut {
160     std::string name() {return "TTbarRegionHWen";};
161 arizzi 1.3 Bool_t pass(VHbbProxy &p){
162     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
163 arizzi 1.1 if(iCand->size() < 1) return false;
164 arizzi 1.3 VHbbCandidate::VectorCandidate V = p.getVHbbCandidate()->at(0).V;
165     VHbbCandidate::HiggsCandidate H = p.getVHbbCandidate()->at(0).H;
166 arizzi 1.1
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 arizzi 1.3 && p.trigger()->accept("HLT_Ele\\(\\(27\\)\\|\\(32\\)\\)_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v.")
181 arizzi 1.1
182    
183     );
184     }
185     };
186    
187    
188     class TTbarRegionHZmumu: public Cut {
189     std::string name() {return "TTbarRegionHZmumu";};
190 arizzi 1.3 Bool_t pass(VHbbProxy &p){
191     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
192 arizzi 1.1 if(iCand->size() < 1) return false;
193 arizzi 1.3 VHbbCandidate::VectorCandidate V = p.getVHbbCandidate()->at(0).V;
194     VHbbCandidate::HiggsCandidate H = p.getVHbbCandidate()->at(0).H;
195 arizzi 1.1
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 arizzi 1.3 && p.trigger()->accept("HLT_IsoMu17_v.*")
206 arizzi 1.1 );
207     }
208     };
209    
210    
211     class TTbarRegionHZee: public Cut {
212     std::string name() {return "TTbarRegionHZee";};
213 arizzi 1.3 Bool_t pass(VHbbProxy &p){
214     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
215 arizzi 1.1 if(iCand->size() < 1) return false;
216 arizzi 1.3 VHbbCandidate::VectorCandidate V = p.getVHbbCandidate()->at(0).V;
217     VHbbCandidate::HiggsCandidate H = p.getVHbbCandidate()->at(0).H;
218 arizzi 1.1
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 arizzi 1.3 && p.trigger()->accept("HLT_Ele17_CaloIdL_CaloIsoVL_Ele8_CaloIdL_CaloIsoVL_v.*")
227 arizzi 1.1
228     );
229     }
230     };
231    
232    
233     class VbbRegionHWmun: public Cut {
234     std::string name() {return "VbbRegionHWmun";};
235 arizzi 1.3 Bool_t pass(VHbbProxy &p){
236     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
237 arizzi 1.1 if(iCand->size() < 1) return false;
238 arizzi 1.3 VHbbCandidate::VectorCandidate V = p.getVHbbCandidate()->at(0).V;
239     VHbbCandidate::HiggsCandidate H = p.getVHbbCandidate()->at(0).H;
240 arizzi 1.1
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 arizzi 1.3 && p.trigger()->accept("HLT_IsoMu17_v.*")
255 arizzi 1.1 );
256     }
257     };
258    
259     class VbbRegionHWen: public Cut {
260     std::string name() {return "VbbRegionHWen";};
261 arizzi 1.3 Bool_t pass(VHbbProxy &p){
262     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
263 arizzi 1.1 if(iCand->size() < 1) return false;
264 arizzi 1.3 VHbbCandidate::VectorCandidate V = p.getVHbbCandidate()->at(0).V;
265     VHbbCandidate::HiggsCandidate H = p.getVHbbCandidate()->at(0).H;
266 arizzi 1.1
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 arizzi 1.3 && p.trigger()->accept("HLT_Ele\\(\\(27\\)\\|\\(32\\)\\)_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v.*")
279 arizzi 1.1
280     );
281     }
282     };
283    
284     class VbbRegionHZmumu: public Cut {
285     std::string name() {return "VbbRegionHZmumu";};
286 arizzi 1.3 Bool_t pass(VHbbProxy &p){
287     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
288 arizzi 1.1 if(iCand->size() < 1) return false;
289 arizzi 1.3 VHbbCandidate::VectorCandidate V = p.getVHbbCandidate()->at(0).V;
290     VHbbCandidate::HiggsCandidate H = p.getVHbbCandidate()->at(0).H;
291 arizzi 1.1
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 arizzi 1.3 && p.trigger()->accept("HLT_IsoMu17_v.*")
304 arizzi 1.1 && 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 arizzi 1.3 Bool_t pass(VHbbProxy &p){
314     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
315 arizzi 1.1 if(iCand->size() < 1) return false;
316 arizzi 1.3 VHbbCandidate::VectorCandidate V = p.getVHbbCandidate()->at(0).V;
317     VHbbCandidate::HiggsCandidate H = p.getVHbbCandidate()->at(0).H;
318 arizzi 1.1
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 arizzi 1.3 && p.trigger()->accept("HLT_Ele17_CaloIdL_CaloIsoVL_Ele8_CaloIdL_CaloIsoVL_v.*")
330 arizzi 1.1 && 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 arizzi 1.3 Bool_t pass(VHbbProxy &p){
341     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
342 arizzi 1.2 if(iCand->size() < 1) return false;
343 arizzi 1.3 return ( iCand->at(0).candidateType == VHbbCandidate::Wen);
344 arizzi 1.2 }
345     };
346    
347 arizzi 1.3 class SignalPreSelectionWmun : public Cut {
348 arizzi 1.2 std::string name() {return "SignalPreSelWmun";};
349 arizzi 1.1
350 arizzi 1.3 Bool_t pass(VHbbProxy &p){
351     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
352 arizzi 1.2 if(iCand->size() < 1) return false;
353 arizzi 1.3 return ( iCand->at(0).candidateType == VHbbCandidate::Wmun);
354 arizzi 1.2 }
355     };
356 arizzi 1.1
357 arizzi 1.3 class SignalPreSelectionZee : public Cut {
358 arizzi 1.2 std::string name() {return "SignalPreSelZee";};
359    
360 arizzi 1.3 Bool_t pass(VHbbProxy &p){
361     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
362 arizzi 1.2 if(iCand->size() < 1) return false;
363 arizzi 1.3 return ( iCand->at(0).candidateType == VHbbCandidate::Zee);
364 arizzi 1.2 }
365     };
366 arizzi 1.1
367 arizzi 1.3 class SignalPreSelectionZmumu : public Cut {
368 arizzi 1.2 std::string name() {return "SignalPreSelZmumu";};
369    
370 arizzi 1.3 Bool_t pass(VHbbProxy &p){
371     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
372 arizzi 1.2 if(iCand->size() < 1) return false;
373 arizzi 1.3 return ( iCand->at(0).candidateType == VHbbCandidate::Zmumu);
374 arizzi 1.2 }
375     };
376 arizzi 1.1
377 arizzi 1.3 class SignalPreSelectionZnn : public Cut {
378 arizzi 1.2 std::string name() {return "SignalPreSelZnn";};
379    
380 arizzi 1.3 Bool_t pass(VHbbProxy &p){
381     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
382 arizzi 1.2 if(iCand->size() < 1) return false;
383 arizzi 1.3 return ( iCand->at(0).candidateType == VHbbCandidate::Znn);
384 arizzi 1.2 }
385     };
386    
387     class HPtCut : public PCut
388     {
389     public:
390     HPtCut(double ptMin):PCut(ptMin){}
391     bool pass(VHbbProxy &p) {
392 arizzi 1.3 const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
393 arizzi 1.2 if(iCand->size() < 1) return false;
394 arizzi 1.3 return ( iCand->at(0).H.p4.Pt() > m_cut);
395 arizzi 1.2 }
396     virtual std::string name() {return "Higgs_Pt_Gt_"+cutValueString(); }
397     };
398    
399     class VPtCut : public PCut
400     {
401     public:
402     VPtCut(double ptMin):PCut(ptMin){}
403     bool pass(VHbbProxy &p) {
404 arizzi 1.3 const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
405 arizzi 1.2 if(iCand->size() < 1) return false;
406 arizzi 1.3 return ( iCand->at(0).V.p4.Pt() > m_cut);
407 arizzi 1.2 }
408     virtual std::string name() {return "Vector_Pt_Gt_"+cutValueString(); }
409 arizzi 1.1 };
410    
411    
412 arizzi 1.2 class DoubleBTagCut : public PCut
413 arizzi 1.3 {
414 arizzi 1.2 public:
415     DoubleBTagCut(double csvMin):PCut(csvMin){}
416     bool pass(VHbbProxy &p) {
417 arizzi 1.3 const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
418 arizzi 1.2 if(iCand->size() < 1) return false;
419 arizzi 1.3 VHbbCandidate::HiggsCandidate H = p.getVHbbCandidate()->at(0).H;
420 arizzi 1.2 return (
421     H.jets.size() >= 2
422     && ( H.jets.at(0).csv > m_cut && H.jets.at(1).csv > m_cut)
423 arizzi 1.3 );
424 arizzi 1.2 }
425     virtual std::string name() {return "DoubleCSV_"+cutValueString(); }
426     };
427    
428 arizzi 1.3 class SingleBTagCut : public PCut
429     {
430     SingleBTagCut(double csvMin):PCut(csvMin){}
431     bool pass(VHbbProxy &p) {
432     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
433     if(iCand->size() < 1) return false;
434     const VHbbCandidate::HiggsCandidate & H = p.getVHbbCandidate()->at(0).H;
435     return (
436     H.jets.size() >= 2
437     && ( H.jets.at(0).csv > m_cut || H.jets.at(1).csv > m_cut)
438     );
439     }
440     virtual std::string name() {return "SingleCSV_"+cutValueString(); }
441    
442     };
443    
444     class VHDeltaPhiCut : public PCut
445     {
446     VHDeltaPhiCut(double deltaPhiMin):PCut(deltaPhiMin){}
447     bool pass(VHbbProxy &p) {
448     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
449     if(iCand->size() < 1) return false;
450     const VHbbCandidate::HiggsCandidate & H = p.getVHbbCandidate()->at(0).H;
451     const VHbbCandidate::VectorCandidate & V = p.getVHbbCandidate()->at(0).V;
452    
453     return (TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > m_cut
454     );
455     }
456     virtual std::string name() {return "VHDeltaPhi_Gt_"+cutValueString(); }
457     };
458    
459    
460     class AdditionalJetsCut : public PCut
461     {
462     /// Filtering "< n"
463     AdditionalJetsCut(int n):PCut(n) {}
464     bool pass(VHbbProxy &p) {
465     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
466     if(iCand->size() < 1) return false;
467     return (iCand->at(0).additionalJets.size() < m_cut);
468     }
469     virtual std::string name() {return "NumAddJets_Lt_"+cutValueString(); }
470     };
471    
472     class AdditionalLeptonsCut : public PCut
473     {
474     /// Filtering "< n"
475     AdditionalLeptonsCut(int n):PCut(n) {}
476     bool pass(VHbbProxy &p) {
477     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
478     if(iCand->size() < 1) return false;
479     const VHbbCandidate::VectorCandidate & V = p.getVHbbCandidate()->at(0).V;
480     int expectedLeptons = 0;
481     if( iCand->at(0).candidateType == VHbbCandidate::Wmun || iCand->at(0).candidateType == VHbbCandidate::Wen) expectedLeptons =1;
482     if( iCand->at(0).candidateType == VHbbCandidate::Zmumu || iCand->at(0).candidateType == VHbbCandidate::Zee) expectedLeptons =2;
483    
484     return ( V.muons.size() + V.electrons.size() - expectedLeptons < m_cut);
485     }
486     virtual std::string name() {return "NumAddLeptons_Lt_"+cutValueString(); }
487     };
488    
489     class METCut : public PCut
490     {
491     public:
492     METCut(double metMin):PCut(metMin){}
493     bool pass(VHbbProxy &p) {
494     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
495     if(iCand->size() < 1) return false;
496     return ( iCand->at(0).V.mets.at(0).p4.Pt() > m_cut);
497     }
498     virtual std::string name() {return "MET_Gt_"+cutValueString(); }
499     };
500 arizzi 1.2
501 arizzi 1.3 class METSignificanceCut : public PCut
502     {
503     public:
504     METSignificanceCut(double metMin):PCut(metMin){}
505     bool pass(VHbbProxy &p) {
506     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
507     if(iCand->size() < 1) return false;
508     return ( iCand->at(0).V.mets[0].metSig > m_cut);
509     }
510     virtual std::string name() {return "METSig_Gt_"+cutValueString(); }
511     };
512 arizzi 1.2
513 arizzi 1.3 class JetMETDeltaPhiCut : public PCut
514     {
515     public:
516     JetMETDeltaPhiCut(double deltaPhiMin):PCut(deltaPhiMin){}
517     bool pass(VHbbProxy &p) {
518     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
519     if(iCand->size() < 1) return false;
520     const VHbbCandidate::VectorCandidate V = p.getVHbbCandidate()->at(0).V;
521     const VHbbCandidate::HiggsCandidate H = p.getVHbbCandidate()->at(0).H;
522    
523     return ( TMath::Abs( Geom::deltaPhi( V.mets[0].p4.Phi(), H.jets.at(0).p4.Phi())) > m_cut
524     && TMath::Abs( Geom::deltaPhi(V.mets[0].p4.Phi(), H.jets.at(1).p4.Phi())) > m_cut );
525     }
526     virtual std::string name() {return "JetMETDeltaPhi_Gt_"+cutValueString(); }
527     };
528     class DiJetMassMinCut : public PCut
529     {
530     public:
531     DiJetMassMinCut(double mMin):PCut(mMin){}
532     bool pass(VHbbProxy &p) {
533     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
534     if(iCand->size() < 1) return false;
535     return ( iCand->at(0).H.p4.M() > m_cut);
536     }
537     virtual std::string name() {return "Higgs_M_Gt_"+cutValueString(); }
538     };
539 arizzi 1.2
540    
541 arizzi 1.3 class DiJetMassMaxCut : public PCut
542     {
543     public:
544     DiJetMassMaxCut(double mMax):PCut(mMax){}
545     bool pass(VHbbProxy &p) {
546     const std::vector<VHbbCandidate> *iCand = p.getVHbbCandidate();
547     if(iCand->size() < 1) return false;
548     return ( iCand->at(0).H.p4.M() <= m_cut);
549     }
550     virtual std::string name() {return "Higgs_M_Lt_"+cutValueString(); }
551     };
552 arizzi 1.2
553 arizzi 1.1
554     #endif