ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/VHbbDataFormats/src/Cuts200X.cc
Revision: 1.7
Committed: Tue Aug 9 09:35:47 2011 UTC (13 years, 8 months ago) by arizzi
Content type: text/plain
Branch: MAIN
Changes since 1.6: +30 -13 lines
Log Message:
add methods for transverse mass computation

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     && H.jets.size() >= 2
92     && H.jets.at(0).Pt() > 20
93     && H.jets.at(1).Pt() > 20
94 arizzi 1.7 // && H.p4.Pt() > 100
95 tboccali 1.4 && V.p4.Pt() > 100
96 arizzi 1.3 && ( H.jets.at(0).csv < CSVL)
97     && ( H.jets.at(1).csv < CSVL)
98     && iCand->at(0).additionalJets.size() < 2
99 arizzi 1.6 && iProxy.trigger()->accept("HLT_IsoMu17_v.*")
100 arizzi 1.7 && V.p4.M() > 75
101     && V.p4.M() < 105
102 arizzi 1.3 );
103     }
104     };
105 bortigno 1.1
106 arizzi 1.3 class VlightRegionHZee: public Cut {
107     std::string name() {return "VlightRegionHZee";};
108     Bool_t pass(VHbbProxy &iProxy){
109     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
110     if(iCand->size() < 1) return false;
111     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
112     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
113    
114     return ( iCand->at(0).candidateType == VHbbCandidate::Zee
115     && H.jets.size() >= 2
116     && H.jets.at(0).Pt() > 20
117     && H.jets.at(1).Pt() > 20
118 arizzi 1.7 // && H.p4.Pt() > 100
119 tboccali 1.4 && V.p4.Pt() > 100
120 arizzi 1.3 && ( H.jets.at(0).csv < CSVL)
121     && ( H.jets.at(1).csv < CSVL)
122     && iCand->at(0).additionalJets.size() < 2
123 arizzi 1.6 && iProxy.trigger()->accept("HLT_Ele17_CaloIdL_CaloIsoVL_Ele8_CaloIdL_CaloIsoVL_v.*")
124 arizzi 1.7 && V.p4.M() > 75
125     && V.p4.M() < 105
126 arizzi 1.3 );
127 bortigno 1.1 }
128 arizzi 1.3 };
129    
130 bortigno 1.1
131    
132 arizzi 1.3 class TTbarRegionHWmun: public Cut {
133     std::string name() {return "TTbarRegionHWmun";};
134     Bool_t pass(VHbbProxy &iProxy){
135     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
136     if(iCand->size() < 1) return false;
137     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
138     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
139    
140     return ( iCand->at(0).candidateType == VHbbCandidate::Wmun
141 arizzi 1.7 && V.muons[0].p4.Pt() > 20
142 arizzi 1.3 && H.jets.size() >= 2
143     && H.jets.at(0).Pt() > 30
144     && H.jets.at(1).Pt() > 30
145 tboccali 1.4 && H.p4.Pt() > 100
146     && V.p4.Pt() > 100
147 arizzi 1.7 && V.Mt(VHbbCandidate::Wmun) > 40
148     && V.Mt(VHbbCandidate::Wmun) < 120
149 arizzi 1.3 && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
150     && iCand->at(0).additionalJets.size() > 1
151 arizzi 1.6 && iProxy.trigger()->accept("HLT_IsoMu17_v.*")
152 arizzi 1.3 );
153     }
154 bortigno 1.1 };
155    
156 arizzi 1.3 class TTbarRegionHWen: public Cut {
157     std::string name() {return "TTbarRegionHWen";};
158     Bool_t pass(VHbbProxy &iProxy){
159     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
160     if(iCand->size() < 1) return false;
161     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
162     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
163 bortigno 1.1
164 arizzi 1.3 return ( iCand->at(0).candidateType == VHbbCandidate::Wen
165     && H.jets.size() >= 2
166     && H.jets.at(0).Pt() > 30
167     && H.jets.at(1).Pt() > 30
168 tboccali 1.4 && H.p4.Pt() > 75
169     && V.p4.Pt() > 75
170 arizzi 1.3 && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
171 tboccali 1.4 && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.5
172 arizzi 1.3 && iCand->at(0).additionalJets.size() > 0
173 tboccali 1.4 && iCand->at(0).additionalJets.at(0).p4.Pt() > 35
174 arizzi 1.3 && V.mets[0].metSig > 2
175 tboccali 1.4 && ( TMath::Abs( Geom::deltaPhi( V.mets[0].p4.Phi(), H.jets.at(0).p4.Phi())) > 1.5
176     || TMath::Abs( Geom::deltaPhi(V.mets[0].p4.Phi(), H.jets.at(1).p4.Phi())) > 1.5 )
177 arizzi 1.6 && iProxy.trigger()->accept("HLT_Ele\\(\\(27\\)\\|\\(32\\)\\)_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v.")
178    
179    
180 arizzi 1.3 );
181     }
182     };
183 bortigno 1.1
184    
185 arizzi 1.3 class TTbarRegionHZmumu: public Cut {
186     std::string name() {return "TTbarRegionHZmumu";};
187     Bool_t pass(VHbbProxy &iProxy){
188     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
189     if(iCand->size() < 1) return false;
190     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
191     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
192    
193     return ( iCand->at(0).candidateType == VHbbCandidate::Zmumu
194     && H.jets.size() >= 2
195     && H.jets.at(0).Pt() > 20
196     && H.jets.at(1).Pt() > 20
197 arizzi 1.7 // && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
198     && ( V.mets.size() >0 && V.mets.at(0).p4.Pt() > 50)
199     // && iCand->at(0).additionalJets.size() > 1
200 tboccali 1.4 && V.p4.M() > 120
201 arizzi 1.6 && iProxy.trigger()->accept("HLT_IsoMu17_v.*")
202 arizzi 1.3 );
203     }
204     };
205 bortigno 1.1
206    
207 arizzi 1.3 class TTbarRegionHZee: public Cut {
208     std::string name() {return "TTbarRegionHZee";};
209     Bool_t pass(VHbbProxy &iProxy){
210     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
211     if(iCand->size() < 1) return false;
212     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
213     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
214    
215     return ( iCand->at(0).candidateType == VHbbCandidate::Zee
216     && H.jets.size() >= 2
217     && H.jets.at(0).Pt() > 20
218     && H.jets.at(1).Pt() > 20
219 arizzi 1.7 // && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
220     && ( V.mets.size() >0 && V.mets.at(0).p4.Pt() > 50)
221     // && iCand->at(0).additionalJets.size() > 1
222 arizzi 1.6 && iProxy.trigger()->accept("HLT_Ele17_CaloIdL_CaloIsoVL_Ele8_CaloIdL_CaloIsoVL_v.*")
223    
224 arizzi 1.3 );
225 bortigno 1.1 }
226 arizzi 1.3 };
227 bortigno 1.1
228    
229 arizzi 1.3 class VbbRegionHWmun: public Cut {
230     std::string name() {return "VbbRegionHWmun";};
231     Bool_t pass(VHbbProxy &iProxy){
232     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
233     if(iCand->size() < 1) return false;
234     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
235     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
236    
237     return ( iCand->at(0).candidateType == VHbbCandidate::Wmun
238 arizzi 1.7 && V.muons[0].p4.Pt() > 20
239 arizzi 1.3 && H.jets.size() >= 2
240     && H.jets.at(0).Pt() > 30
241     && H.jets.at(1).Pt() > 30
242 tboccali 1.4 && H.p4.Pt() < 150
243     && V.p4.Pt() < 150
244 arizzi 1.7 && V.Mt(VHbbCandidate::Wmun) < 120
245     && V.Mt(VHbbCandidate::Wmun) > 40
246 arizzi 1.3 && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
247 tboccali 1.4 && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.5
248 arizzi 1.3 && iCand->at(0).additionalJets.size() ==0
249     && V.mets[0].metSig > 1
250 arizzi 1.6 && iProxy.trigger()->accept("HLT_IsoMu17_v.*")
251 arizzi 1.3 );
252     }
253     };
254 bortigno 1.1
255 arizzi 1.3 class VbbRegionHWen: public Cut {
256     std::string name() {return "VbbRegionHWen";};
257     Bool_t pass(VHbbProxy &iProxy){
258     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
259     if(iCand->size() < 1) return false;
260     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
261     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
262    
263     return ( iCand->at(0).candidateType == VHbbCandidate::Wen
264     && H.jets.size() >= 2
265     && H.jets.at(0).Pt() > 30
266     && H.jets.at(1).Pt() > 30
267 tboccali 1.4 && H.p4.Pt() < 150
268     && V.p4.Pt() < 150
269     && V.p4.M() > 50
270 arizzi 1.3 && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
271 tboccali 1.4 && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.4
272 arizzi 1.3 && iCand->at(0).additionalJets.size() < 2
273     && V.mets[0].metSig > 2
274 arizzi 1.6 && iProxy.trigger()->accept("HLT_Ele\\(\\(27\\)\\|\\(32\\)\\)_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v.*")
275    
276 arizzi 1.3 );
277     }
278 bortigno 1.1 };
279    
280 arizzi 1.3 class VbbRegionHZmumu: public Cut {
281     std::string name() {return "VbbRegionHZmumu";};
282     Bool_t pass(VHbbProxy &iProxy){
283     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
284     if(iCand->size() < 1) return false;
285     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
286     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
287    
288     return ( iCand->at(0).candidateType == VHbbCandidate::Zmumu
289     && H.jets.size() >= 2
290     && H.jets.at(0).Pt() > 20
291     && H.jets.at(1).Pt() > 20
292 arizzi 1.7 && ( H.p4.M() < 100 || H.p4.M() > 140)
293 arizzi 1.3 && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
294     && ( H.jets.at(0).csv > 0.5 && H.jets.at(1).csv > 0.5)
295 tboccali 1.4 && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.9
296 arizzi 1.3 && iCand->at(0).additionalJets.size() < 2
297 tboccali 1.4 && ( V.mets.size() ==0 || V.mets.at(0).p4.Pt() < 30)
298 arizzi 1.6 && iProxy.trigger()->accept("HLT_IsoMu17_v.*")
299 arizzi 1.7 && V.p4.M() > 75
300     && V.p4.M() < 105
301    
302     );
303 arizzi 1.3 }
304     };
305 bortigno 1.1
306 arizzi 1.3 class VbbRegionHZee: public Cut {
307     std::string name() {return "VbbRegionHZee";};
308 bortigno 1.1 Bool_t pass(VHbbProxy &iProxy){
309 arizzi 1.3 const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
310     if(iCand->size() < 1) return false;
311     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
312     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
313    
314     return ( iCand->at(0).candidateType == VHbbCandidate::Zee
315     && H.jets.size() >= 2
316     && H.jets.at(0).Pt() > 20
317     && H.jets.at(1).Pt() > 20
318 arizzi 1.7 && ( H.p4.M() < 95 || H.p4.M() > 145)
319 arizzi 1.3 && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
320     && ( H.jets.at(0).csv > 0.5 && H.jets.at(1).csv > 0.5)
321 tboccali 1.4 // && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.9
322 arizzi 1.3 && iCand->at(0).additionalJets.size() < 2
323 tboccali 1.4 // && V.mets[0].p4.Pt() < 30
324 arizzi 1.6 && iProxy.trigger()->accept("HLT_Ele17_CaloIdL_CaloIsoVL_Ele8_CaloIdL_CaloIsoVL_v.*")
325 arizzi 1.7 && V.p4.M() > 75
326     && V.p4.M() < 105
327 arizzi 1.3 );
328     }
329     };
330 bortigno 1.1
331    
332 arizzi 1.3 class SignalRegion: public Cut {
333     std::string name() {return "SignalRegion";};
334 bortigno 1.1
335     Bool_t pass(VHbbProxy &iProxy){
336    
337     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
338    
339     if(iCand->size() < 1)
340     return false;
341    
342     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
343     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
344    
345 arizzi 1.3 if(iCand->at(0).candidateType == VHbbCandidate::Zmumu || iCand->at(0).candidateType == VHbbCandidate::Zee){
346 bortigno 1.1 btag_csv_min = 0.5;
347     btag_csv_max = 0.9;
348     Higgs_pt = 150;
349     V_pt = 150;
350     VH_deltaPhi = 2.70;
351     nOfAdditionalJets = 2;
352     pullAngle = 1.57;
353     helicityAngle = 0.8;
354     }
355 arizzi 1.3 else if(iCand->at(0).candidateType == VHbbCandidate::Wmun || iCand->at(0).candidateType == VHbbCandidate::Wen){
356 bortigno 1.1 btag_csv_min = 0.5;
357     btag_csv_max = 0.9;
358     Higgs_pt = 150;
359     V_pt = 150;
360     VH_deltaPhi = 2.95;
361     nOfAdditionalJets = 2;
362     pullAngle = 1.57;
363     helicityAngle = 0.8;
364     }
365 arizzi 1.3 else if(iCand->at(0).candidateType == VHbbCandidate::Znn){
366 bortigno 1.1 btag_csv_min = 0.5;
367     btag_csv_max = 0.9;
368     Higgs_pt = 150;
369     V_pt = 150;
370     VH_deltaPhi = 2.95;
371     nOfAdditionalJets = 2;
372     pullAngle = 1.57;
373     helicityAngle = 0.8;
374     }
375     else
376 arizzi 1.3 std::cerr << "No vector boson reconstructed. No histos will be filled." << std::endl;
377 bortigno 1.1
378     Bool_t go = false;
379 tboccali 1.4 if( H.jets.size() >= 2 && H.p4.Pt() > Higgs_pt
380     && V.p4.Pt() > V_pt
381     && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > VH_deltaPhi
382 bortigno 1.1 && ( H.jets.at(0).csv > btag_csv_min && H.jets.at(1).csv > btag_csv_min )
383     && ( H.jets.at(0).csv > btag_csv_max || H.jets.at(1).csv > btag_csv_max )
384     && iCand->at(0).additionalJets.size() < nOfAdditionalJets
385     && TMath::Abs(H.deltaTheta) < pullAngle
386     // && TMath::Abs(H.helicityAngle) < helicityAngle
387     )
388     go = true;
389     return go;
390    
391     }
392    
393     private:
394    
395 arizzi 1.2 Double_t pt_b1;
396     Double_t pt_b2;
397 bortigno 1.1 Double_t btag_csv_min;
398     Double_t btag_csv_max;
399     Double_t Higgs_pt;
400     Double_t V_pt;
401     Double_t VH_deltaPhi;
402     unsigned int nOfAdditionalJets;
403     unsigned int nOfAdditionalLeptons;
404     Double_t pullAngle;
405     Double_t helicityAngle;
406 arizzi 1.3 };
407    
408 bortigno 1.1
409    
410