ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/VHbbDataFormats/src/Cuts200X.cc
Revision: 1.4
Committed: Mon Jul 25 08:55:41 2011 UTC (13 years, 9 months ago) by tboccali
Content type: text/plain
Branch: MAIN
Changes since 1.3: +37 -37 lines
Log Message:
as asked by andrea fourMomentum->p4

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     && H.jets.size() >= 2
41     && H.jets.at(0).Pt() > 30
42     && H.jets.at(1).Pt() > 30
43 tboccali 1.4 && H.p4.Pt() > 150
44     && V.p4.Pt() > 150
45 arizzi 1.3 && ( H.jets.at(0).csv < CSVM)
46     && ( H.jets.at(1).csv < CSVM)
47     && iCand->at(0).additionalJets.size() < 2
48     && V.mets[0].metSig > 2
49 tboccali 1.4 && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.5
50 arizzi 1.3 );
51     }
52     };
53 bortigno 1.1
54    
55 arizzi 1.3 class VlightRegionHWen: public Cut {
56     std::string name() {return "VlightRegionHWen";};
57     Bool_t pass(VHbbProxy &iProxy){
58     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
59     if(iCand->size() < 1) return false;
60     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
61     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
62    
63     return ( iCand->at(0).candidateType == VHbbCandidate::Wen
64     && H.jets.size() >= 2
65     && H.jets.at(0).Pt() > 30
66     && H.jets.at(1).Pt() > 30
67 tboccali 1.4 && H.p4.Pt() > 150
68     && V.p4.Pt() > 150
69 arizzi 1.3 && ( H.jets.at(0).csv < CSVM)
70     && ( H.jets.at(1).csv < CSVM)
71     && iCand->at(0).additionalJets.size() < 5
72     && V.mets[0].metSig > 2
73 tboccali 1.4 && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.5
74 arizzi 1.3 );
75     }
76     };
77 bortigno 1.1
78 arizzi 1.3 class VlightRegionHZmumu: public Cut {
79     std::string name() {return "VlightRegionHZmumu";};
80     Bool_t pass(VHbbProxy &iProxy){
81     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
82     if(iCand->size() < 1) return false;
83     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
84     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
85    
86     return ( iCand->at(0).candidateType == VHbbCandidate::Zmumu
87     && H.jets.size() >= 2
88     && H.jets.at(0).Pt() > 20
89     && H.jets.at(1).Pt() > 20
90 tboccali 1.4 && H.p4.Pt() > 100
91     && V.p4.Pt() > 100
92 arizzi 1.3 && ( H.jets.at(0).csv < CSVL)
93     && ( H.jets.at(1).csv < CSVL)
94     && iCand->at(0).additionalJets.size() < 2
95     );
96     }
97     };
98 bortigno 1.1
99 arizzi 1.3 class VlightRegionHZee: public Cut {
100     std::string name() {return "VlightRegionHZee";};
101     Bool_t pass(VHbbProxy &iProxy){
102     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
103     if(iCand->size() < 1) return false;
104     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
105     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
106    
107     return ( iCand->at(0).candidateType == VHbbCandidate::Zee
108     && H.jets.size() >= 2
109     && H.jets.at(0).Pt() > 20
110     && H.jets.at(1).Pt() > 20
111 tboccali 1.4 && H.p4.Pt() > 100
112     && V.p4.Pt() > 100
113 arizzi 1.3 && ( H.jets.at(0).csv < CSVL)
114     && ( H.jets.at(1).csv < CSVL)
115     && iCand->at(0).additionalJets.size() < 2
116     );
117 bortigno 1.1 }
118 arizzi 1.3 };
119    
120 bortigno 1.1
121    
122 arizzi 1.3 class TTbarRegionHWmun: public Cut {
123     std::string name() {return "TTbarRegionHWmun";};
124     Bool_t pass(VHbbProxy &iProxy){
125     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
126     if(iCand->size() < 1) return false;
127     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
128     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
129    
130     return ( iCand->at(0).candidateType == VHbbCandidate::Wmun
131     && H.jets.size() >= 2
132     && H.jets.at(0).Pt() > 30
133     && H.jets.at(1).Pt() > 30
134 tboccali 1.4 && H.p4.Pt() > 100
135     && V.p4.Pt() > 100
136 arizzi 1.3 && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
137     && iCand->at(0).additionalJets.size() > 1
138     );
139     }
140 bortigno 1.1 };
141    
142 arizzi 1.3 class TTbarRegionHWen: public Cut {
143     std::string name() {return "TTbarRegionHWen";};
144     Bool_t pass(VHbbProxy &iProxy){
145     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
146     if(iCand->size() < 1) return false;
147     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
148     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
149 bortigno 1.1
150 arizzi 1.3 return ( iCand->at(0).candidateType == VHbbCandidate::Wen
151     && H.jets.size() >= 2
152     && H.jets.at(0).Pt() > 30
153     && H.jets.at(1).Pt() > 30
154 tboccali 1.4 && H.p4.Pt() > 75
155     && V.p4.Pt() > 75
156 arizzi 1.3 && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
157 tboccali 1.4 && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.5
158 arizzi 1.3 && iCand->at(0).additionalJets.size() > 0
159 tboccali 1.4 && iCand->at(0).additionalJets.at(0).p4.Pt() > 35
160 arizzi 1.3 && V.mets[0].metSig > 2
161 tboccali 1.4 && ( TMath::Abs( Geom::deltaPhi( V.mets[0].p4.Phi(), H.jets.at(0).p4.Phi())) > 1.5
162     || TMath::Abs( Geom::deltaPhi(V.mets[0].p4.Phi(), H.jets.at(1).p4.Phi())) > 1.5 )
163 arizzi 1.3 );
164     }
165     };
166 bortigno 1.1
167    
168 arizzi 1.3 class TTbarRegionHZmumu: public Cut {
169     std::string name() {return "TTbarRegionHZmumu";};
170     Bool_t pass(VHbbProxy &iProxy){
171     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
172     if(iCand->size() < 1) return false;
173     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
174     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
175    
176     return ( iCand->at(0).candidateType == VHbbCandidate::Zmumu
177     && H.jets.size() >= 2
178     && H.jets.at(0).Pt() > 20
179     && H.jets.at(1).Pt() > 20
180     && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
181     && iCand->at(0).additionalJets.size() > 1
182 tboccali 1.4 && V.p4.M() > 120
183 arizzi 1.3 );
184     }
185     };
186 bortigno 1.1
187    
188 arizzi 1.3 class TTbarRegionHZee: public Cut {
189     std::string name() {return "TTbarRegionHZee";};
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::Zee
197     && H.jets.size() >= 2
198     && H.jets.at(0).Pt() > 20
199     && H.jets.at(1).Pt() > 20
200     && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
201     && iCand->at(0).additionalJets.size() > 1
202     );
203 bortigno 1.1 }
204 arizzi 1.3 };
205 bortigno 1.1
206    
207 arizzi 1.3 class VbbRegionHWmun: public Cut {
208     std::string name() {return "VbbRegionHWmun";};
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::Wmun
216     && H.jets.size() >= 2
217     && H.jets.at(0).Pt() > 30
218     && H.jets.at(1).Pt() > 30
219 tboccali 1.4 && H.p4.Pt() < 150
220     && V.p4.Pt() < 150
221     && V.p4.M() > 50
222 arizzi 1.3 && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
223 tboccali 1.4 && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.5
224 arizzi 1.3 && iCand->at(0).additionalJets.size() ==0
225     && V.mets[0].metSig > 1
226     );
227     }
228     };
229 bortigno 1.1
230 arizzi 1.3 class VbbRegionHWen: public Cut {
231     std::string name() {return "VbbRegionHWen";};
232     Bool_t pass(VHbbProxy &iProxy){
233     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
234     if(iCand->size() < 1) return false;
235     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
236     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
237    
238     return ( iCand->at(0).candidateType == VHbbCandidate::Wen
239     && 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     && V.p4.M() > 50
245 arizzi 1.3 && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
246 tboccali 1.4 && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.4
247 arizzi 1.3 && iCand->at(0).additionalJets.size() < 2
248     && V.mets[0].metSig > 2
249     );
250     }
251 bortigno 1.1 };
252    
253 arizzi 1.3 class VbbRegionHZmumu: public Cut {
254     std::string name() {return "VbbRegionHZmumu";};
255     Bool_t pass(VHbbProxy &iProxy){
256     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
257     if(iCand->size() < 1) return false;
258     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
259     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
260    
261     return ( iCand->at(0).candidateType == VHbbCandidate::Zmumu
262     && H.jets.size() >= 2
263     && H.jets.at(0).Pt() > 20
264     && H.jets.at(1).Pt() > 20
265 tboccali 1.4 && ( V.p4.M() < 100 || V.p4.M() > 140)
266 arizzi 1.3 && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
267     && ( H.jets.at(0).csv > 0.5 && H.jets.at(1).csv > 0.5)
268 tboccali 1.4 && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.9
269 arizzi 1.3 && iCand->at(0).additionalJets.size() < 2
270 tboccali 1.4 && ( V.mets.size() ==0 || V.mets.at(0).p4.Pt() < 30)
271 arizzi 1.3 );
272     }
273     };
274 bortigno 1.1
275 arizzi 1.3 class VbbRegionHZee: public Cut {
276     std::string name() {return "VbbRegionHZee";};
277 bortigno 1.1 Bool_t pass(VHbbProxy &iProxy){
278 arizzi 1.3 const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
279     if(iCand->size() < 1) return false;
280     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
281     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
282    
283     return ( iCand->at(0).candidateType == VHbbCandidate::Zee
284     && H.jets.size() >= 2
285     && H.jets.at(0).Pt() > 20
286     && H.jets.at(1).Pt() > 20
287 tboccali 1.4 && ( V.p4.M() < 95 || V.p4.M() > 145)
288 arizzi 1.3 && ( H.jets.at(0).csv > CSVT || H.jets.at(1).csv > CSVT)
289     && ( H.jets.at(0).csv > 0.5 && H.jets.at(1).csv > 0.5)
290 tboccali 1.4 // && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > 2.9
291 arizzi 1.3 && iCand->at(0).additionalJets.size() < 2
292 tboccali 1.4 // && V.mets[0].p4.Pt() < 30
293 arizzi 1.3 );
294     }
295     };
296 bortigno 1.1
297    
298    
299    
300    
301    
302    
303    
304    
305    
306 arizzi 1.3 class SignalRegion: public Cut {
307     std::string name() {return "SignalRegion";};
308 bortigno 1.1
309     Bool_t pass(VHbbProxy &iProxy){
310    
311     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
312    
313     if(iCand->size() < 1)
314     return false;
315    
316     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
317     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
318    
319 arizzi 1.3 if(iCand->at(0).candidateType == VHbbCandidate::Zmumu || iCand->at(0).candidateType == VHbbCandidate::Zee){
320 bortigno 1.1 btag_csv_min = 0.5;
321     btag_csv_max = 0.9;
322     Higgs_pt = 150;
323     V_pt = 150;
324     VH_deltaPhi = 2.70;
325     nOfAdditionalJets = 2;
326     pullAngle = 1.57;
327     helicityAngle = 0.8;
328     }
329 arizzi 1.3 else if(iCand->at(0).candidateType == VHbbCandidate::Wmun || iCand->at(0).candidateType == VHbbCandidate::Wen){
330 bortigno 1.1 btag_csv_min = 0.5;
331     btag_csv_max = 0.9;
332     Higgs_pt = 150;
333     V_pt = 150;
334     VH_deltaPhi = 2.95;
335     nOfAdditionalJets = 2;
336     pullAngle = 1.57;
337     helicityAngle = 0.8;
338     }
339 arizzi 1.3 else if(iCand->at(0).candidateType == VHbbCandidate::Znn){
340 bortigno 1.1 btag_csv_min = 0.5;
341     btag_csv_max = 0.9;
342     Higgs_pt = 150;
343     V_pt = 150;
344     VH_deltaPhi = 2.95;
345     nOfAdditionalJets = 2;
346     pullAngle = 1.57;
347     helicityAngle = 0.8;
348     }
349     else
350 arizzi 1.3 std::cerr << "No vector boson reconstructed. No histos will be filled." << std::endl;
351 bortigno 1.1
352     Bool_t go = false;
353 tboccali 1.4 if( H.jets.size() >= 2 && H.p4.Pt() > Higgs_pt
354     && V.p4.Pt() > V_pt
355     && TMath::Abs( Geom::deltaPhi(H.p4.Phi(), V.p4.Phi()) ) > VH_deltaPhi
356 bortigno 1.1 && ( H.jets.at(0).csv > btag_csv_min && H.jets.at(1).csv > btag_csv_min )
357     && ( H.jets.at(0).csv > btag_csv_max || H.jets.at(1).csv > btag_csv_max )
358     && iCand->at(0).additionalJets.size() < nOfAdditionalJets
359     && TMath::Abs(H.deltaTheta) < pullAngle
360     // && TMath::Abs(H.helicityAngle) < helicityAngle
361     )
362     go = true;
363     return go;
364    
365     }
366    
367     private:
368    
369 arizzi 1.2 Double_t pt_b1;
370     Double_t pt_b2;
371 bortigno 1.1 Double_t btag_csv_min;
372     Double_t btag_csv_max;
373     Double_t Higgs_pt;
374     Double_t V_pt;
375     Double_t VH_deltaPhi;
376     unsigned int nOfAdditionalJets;
377     unsigned int nOfAdditionalLeptons;
378     Double_t pullAngle;
379     Double_t helicityAngle;
380 arizzi 1.3 };
381    
382 bortigno 1.1
383    
384