ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/VHbbDataFormats/src/Cuts200X.cc
Revision: 1.8
Committed: Tue Aug 9 17:03:11 2011 UTC (13 years, 8 months ago) by arizzi
Content type: text/plain
Branch: MAIN
CVS Tags: AndreaAug10th
Changes since 1.7: +10 -7 lines
Log Message:
update cregions

File Contents

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