ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/VHbbDataFormats/src/CutsAndHistos.cc
Revision: 1.1
Committed: Fri Jul 8 07:32:36 2011 UTC (13 years, 9 months ago) by tboccali
Content type: text/plain
Branch: MAIN
CVS Tags: Jul8th2011
Log Message:
split in DF and EDM parts

File Contents

# User Rev Content
1 tboccali 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     //class LeptonSelection : public Cut
11    
12     class mcHPt70Cut : public Cut {
13     std::string name() {return "mcHpT70";};
14     bool pass(VHbbProxy &iProxy) {
15     return iProxy.getVHbbEvent()->mcH.fourMomentum.Pt() > 70;
16     }
17     };
18    
19     class mcHPt100Cut : public Cut {
20     std::string name() {return "mcHpT100";};
21     bool pass(VHbbProxy &iProxy) {
22     return iProxy.getVHbbEvent()->mcH.fourMomentum.Pt() > 100;
23     }
24     };
25    
26     class mcHPt150Cut : public Cut {
27     std::string name() {return "mcHpT150";};
28     bool pass(VHbbProxy &iProxy) {
29     return iProxy.getVHbbEvent()->mcH.fourMomentum.Pt() > 150;
30     }
31     };
32    
33     class mcWPt50To150Cut: public Cut {
34     std::string name() {return "mcWpT50To150";};
35     bool pass(VHbbProxy &iProxy) {
36     const VHbbEvent* iEvent = iProxy.getVHbbEvent();
37     return ( iEvent->mcW.fourMomentum.Pt() > 50
38     && iEvent->mcW.fourMomentum.Pt() < 150 );
39     }
40     };
41    
42     class mcZPt50To150Cut: public Cut {
43     std::string name() {return "mcZpT50To150";};
44     bool pass(VHbbProxy &iProxy) {
45     const VHbbEvent* iEvent = iProxy.getVHbbEvent();
46     return ( iEvent->mcZ.fourMomentum.Pt() > 50
47     && iEvent->mcZ.fourMomentum.Pt() < 150 );
48     }
49     };
50    
51     class SimpleJet1PtCut: public Cut {
52     public:
53     SimpleJet1PtCut(Double_t simpleJet1PtCut_):
54     simpleJet1PtCut(simpleJet1PtCut_){}
55     std::ostringstream oss_simpleJet1PtCut;
56     std::string name() {
57     oss_simpleJet1PtCut << simpleJet1PtCut;
58     return "SimpleJet1PtCut"+oss_simpleJet1PtCut.str();
59     }
60     bool pass(VHbbProxy &iProxy) {
61     if(iProxy.getVHbbCandidate()->size() < 1)
62     return false;
63     else
64     return ((iProxy.getVHbbCandidate()->at(0)).H.jets.at(0).fourMomentum.Pt() > simpleJet1PtCut);
65     }
66     private:
67     Double_t simpleJet1PtCut;
68     };
69    
70     class VPtCut: public Cut {
71     public:
72     VPtCut(Double_t VptCut_):
73     VptCut(VptCut_){}
74     std::ostringstream V_pt;
75     std::string name() {
76     V_pt << VptCut;
77     return "VpT"+V_pt.str();
78     }
79     bool pass(VHbbProxy &iProxy) {
80     if(iProxy.getVHbbCandidate()->size() < 1)
81     return false;
82     else
83     return ((iProxy.getVHbbCandidate()->at(0)).V.fourMomentum.Pt() > VptCut);
84     }
85     private:
86     Double_t VptCut;
87     };
88    
89     class HPt120Cut: public Cut {
90     public:
91     HPt120Cut(): HptCut(120){}
92     std::ostringstream H_pt;
93     std::string name() {
94     H_pt << HptCut;
95     return "HpT"+H_pt.str();
96     }
97     bool pass(VHbbProxy &iProxy) {
98     if(iProxy.getVHbbCandidate()->size() < 1)
99     return false;
100     else
101     return ((iProxy.getVHbbCandidate()->at(0)).H.fourMomentum.Pt() > HptCut);
102     }
103     private:
104     Double_t HptCut;
105     };
106    
107     class HPt130Cut: public Cut {
108     public:
109     HPt130Cut(): HptCut(130){}
110     std::ostringstream H_pt;
111     std::string name() {
112     H_pt << HptCut;
113     return "HpT"+H_pt.str();
114     }
115     bool pass(VHbbProxy &iProxy) {
116     if(iProxy.getVHbbCandidate()->size() < 1)
117     return false;
118     else
119     return ((iProxy.getVHbbCandidate()->at(0)).H.fourMomentum.Pt() > HptCut);
120     }
121     private:
122     Double_t HptCut;
123     };
124    
125     class HPt140Cut: public Cut {
126     public:
127     HPt140Cut(): HptCut(140){}
128     std::ostringstream H_pt;
129     std::string name() {
130     H_pt << HptCut;
131     return "HpT"+H_pt.str();
132     }
133     bool pass(VHbbProxy &iProxy) {
134     if(iProxy.getVHbbCandidate()->size() < 1)
135     return false;
136     else
137     return ((iProxy.getVHbbCandidate()->at(0)).H.fourMomentum.Pt() > HptCut);
138     }
139     private:
140     Double_t HptCut;
141     };
142    
143     class HPt145Cut: public Cut {
144     public:
145     HPt145Cut(): HptCut(145){}
146     std::ostringstream H_pt;
147     std::string name() {
148     H_pt << HptCut;
149     return "HpT"+H_pt.str();
150     }
151     bool pass(VHbbProxy &iProxy) {
152     if(iProxy.getVHbbCandidate()->size() < 1)
153     return false;
154     else
155     return ((iProxy.getVHbbCandidate()->at(0)).H.fourMomentum.Pt() > HptCut);
156     }
157     private:
158     Double_t HptCut;
159     };
160    
161     class HPt150Cut: public Cut {
162     public:
163     HPt150Cut(): HptCut(150){}
164     std::ostringstream H_pt;
165     std::string name() {
166     H_pt << HptCut;
167     return "HpT"+H_pt.str();
168     }
169     bool pass(VHbbProxy &iProxy) {
170     if(iProxy.getVHbbCandidate()->size() < 1)
171     return false;
172     else
173     return ((iProxy.getVHbbCandidate()->at(0)).H.fourMomentum.Pt() > HptCut);
174     }
175     private:
176     Double_t HptCut;
177    
178     };
179    
180     class SignalRegion: public Cut {
181     std::string name() {return "SignalRegion";};
182    
183     Bool_t pass(VHbbProxy &iProxy){
184    
185     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
186    
187     if(iCand->size() < 1)
188     return false;
189    
190     VHbbCandidate::VectorCandidate V = iProxy.getVHbbCandidate()->at(0).V;
191     VHbbCandidate::HiggsCandidate H = iProxy.getVHbbCandidate()->at(0).H;
192    
193     if(iCand->at(0).candidateType == VHbbCandidate::Zmumu || iCand->at(0).candidateType == VHbbCandidate::Zee){
194     btag_csv_min = 0.5;
195     btag_csv_max = 0.9;
196     Higgs_pt = 150;
197     V_pt = 150;
198     VH_deltaPhi = 2.70;
199     nOfAdditionalJets = 2;
200     pullAngle = 1.57;
201     helicityAngle = 0.8;
202     }
203     else if(iCand->at(0).candidateType == VHbbCandidate::Wmun || iCand->at(0).candidateType == VHbbCandidate::Wen){
204     btag_csv_min = 0.5;
205     btag_csv_max = 0.9;
206     Higgs_pt = 150;
207     V_pt = 150;
208     VH_deltaPhi = 2.95;
209     nOfAdditionalJets = 2;
210     pullAngle = 1.57;
211     helicityAngle = 0.8;
212     }
213     else if(iCand->at(0).candidateType == VHbbCandidate::Znn){
214     btag_csv_min = 0.5;
215     btag_csv_max = 0.9;
216     Higgs_pt = 150;
217     V_pt = 150;
218     VH_deltaPhi = 2.95;
219     nOfAdditionalJets = 2;
220     pullAngle = 1.57;
221     helicityAngle = 0.8;
222     }
223     else
224     std::cerr << "No vector boson reconstructed. No histos will be filled." << std::endl;
225    
226     Bool_t go = false;
227     if( H.fourMomentum.Pt() > Higgs_pt
228     && V.fourMomentum.Pt() > V_pt
229     && TMath::Abs( Geom::deltaPhi(H.fourMomentum.Phi(), V.fourMomentum.Phi()) ) > VH_deltaPhi
230     && ( H.jets.at(0).csv > btag_csv_min && H.jets.at(1).csv > btag_csv_min )
231     && ( H.jets.at(0).csv > btag_csv_max || H.jets.at(1).csv > btag_csv_max )
232     && iCand->at(0).additionalJets.size() < nOfAdditionalJets
233     // && V.additionalLeptons.size() < nOfAddionalLeptons
234     && TMath::Abs(H.deltaTheta) < pullAngle
235     // && TMath::Abs(H.helicityAngle) < helicityAngle
236     )
237     go = true;
238     return go;
239    
240     }
241    
242     private:
243    
244     Double_t btag_csv_min;
245     Double_t btag_csv_max;
246     Double_t Higgs_pt;
247     Double_t V_pt;
248     Double_t VH_deltaPhi;
249     unsigned int nOfAdditionalJets;
250     unsigned int nOfAdditionalLeptons;
251     Double_t pullAngle;
252     Double_t helicityAngle;
253    
254     };
255    
256    
257    
258    
259     class MCHistos : public Histos {
260    
261     public:
262    
263     virtual void book(TFile &f, std::string suffix) {
264    
265     TDirectory *subDir;
266    
267     if( ! f.GetDirectory(suffix.c_str()) )
268     subDir = f.mkdir(suffix.c_str());
269     else
270     subDir = f.GetDirectory(suffix.c_str());
271    
272     subDir->cd();
273    
274     bin_mass = 500;
275     min_mass = 0;
276     max_mass = 300;
277    
278     bin_pt = 500;
279     min_pt = 0;
280     max_pt = 500;
281    
282     bin_hel = 50;
283     min_hel = 0;
284     max_hel = 1;
285    
286     //from MC
287     McH_simHMass = new TH1F(("simHiggsMass"+suffix).c_str(),("Sim Higgs Mass ("+suffix+")").c_str(), bin_mass, min_mass, max_mass );
288     McH_simHPt = new TH1F(("simHiggsPt"+suffix).c_str(),("Sim Higgs Pt ("+suffix+")").c_str(), bin_pt, min_pt, max_pt );
289     McH_simZMass = new TH1F(("simZMass"+suffix).c_str(),("Sim Z Mass ("+suffix+")").c_str(), bin_mass, min_mass, max_mass );
290     McH_simZPt = new TH1F(("simZPt"+suffix).c_str(),("Sim Z Pt ("+suffix+")").c_str(), bin_pt, min_pt, max_pt );
291     McH_simWMass = new TH1F(("simWMass"+suffix).c_str(),("Sim W Mass ("+suffix+")").c_str(), bin_mass, min_mass, max_mass );
292     McH_simWPt = new TH1F(("simWPt"+suffix).c_str(),("Sim W Pt ("+suffix+")").c_str(), bin_pt, min_pt, max_pt );
293    
294     }
295    
296     virtual void fill(VHbbProxy &iProxy,float w) {
297    
298     const VHbbEvent *iEvent = iProxy.getVHbbEvent();
299    
300     //from MC
301     McH_simHMass->Fill(iEvent->mcH.fourMomentum.M(), w);
302     McH_simHPt->Fill(iEvent->mcH.fourMomentum.Pt(), w);
303     McH_simZMass->Fill(iEvent->mcZ.fourMomentum.M(), w);
304     McH_simZPt->Fill(iEvent->mcZ.fourMomentum.Pt(), w);
305     McH_simWMass->Fill(iEvent->mcW.fourMomentum.M(), w);
306     McH_simWPt->Fill(iEvent->mcW.fourMomentum.Pt(), w);
307    
308     }
309    
310    
311     TH1F * McH_simHMass;
312     TH1F * McH_simHPt;
313     TH1F * McH_simWMass;
314     TH1F * McH_simWPt;
315     TH1F * McH_simZMass;
316     TH1F * McH_simZPt;
317    
318     private:
319    
320     Int_t bin_mass;
321     Double_t min_mass;
322     Double_t max_mass;
323    
324     Int_t bin_pt;
325     Double_t min_pt;
326     Double_t max_pt;
327    
328     Int_t bin_hel;
329     Double_t min_hel;
330     Double_t max_hel;
331    
332    
333     };
334    
335    
336     class BTagHistos : public Histos {
337    
338     public:
339    
340     virtual void book(TFile &f, std::string suffix) {
341    
342     TDirectory *subDir;
343     if( ! f.GetDirectory(suffix.c_str()) )
344     subDir = f.mkdir(suffix.c_str());
345     else
346     subDir = f.GetDirectory(suffix.c_str());
347     subDir->cd();
348    
349     bin_btag_prob = 20;
350     min_btag_prob = 0;
351     max_btag_prob = 1;
352    
353     bin_btag_count = 10;
354     min_btag_count = 0;
355     max_btag_count = 10;
356    
357     //Candidates
358     BTagH_bJet1_csv = new TH1F(("BJet1_CSV"+suffix).c_str(),("BJet1 CSV ("+suffix+")").c_str(), bin_btag_prob, min_btag_prob, max_btag_prob );
359     BTagH_bJet2_csv = new TH1F(("BJet2_CSV"+suffix).c_str(),("BJet2 CSV ("+suffix+")").c_str(), bin_btag_prob, min_btag_prob, max_btag_prob );
360     BTagH_bJet1_csvmva = new TH1F(("BJet1_CSVMVA"+suffix).c_str(),("BJet1 CSVMVA ("+suffix+")").c_str(), bin_btag_prob, min_btag_prob, max_btag_prob );
361     BTagH_bJet2_csvmva = new TH1F(("BJet2_CSVMVA"+suffix).c_str(),("BJet2 CSVMVA ("+suffix+")").c_str(), bin_btag_prob, min_btag_prob, max_btag_prob );
362     BTagH_bJet1_ssvhe = new TH1F(("BJet1_SSVHE"+suffix).c_str(),("BJet1 SSVHE ("+suffix+")").c_str(), bin_btag_prob, min_btag_prob, max_btag_prob );
363     BTagH_bJet2_ssvhe = new TH1F(("BJet2_SSVHE"+suffix).c_str(),("BJet2 SSVHE ("+suffix+")").c_str(), bin_btag_prob, min_btag_prob, max_btag_prob );
364     BTagH_bJet1_jpb = new TH1F(("BJet1_JPB"+suffix).c_str(),("BJet1 JPB ("+suffix+")").c_str(), bin_btag_prob, min_btag_prob, max_btag_prob );
365     BTagH_bJet2_jpb = new TH1F(("BJet2_JPB"+suffix).c_str(),("BJet2 JPB ("+suffix+")").c_str(), bin_btag_prob, min_btag_prob, max_btag_prob );
366     BTagH_bJet1_tche = new TH1F(("BJet1_TCHE"+suffix).c_str(),("BJet1 TCHE ("+suffix+")").c_str(), bin_btag_count, min_btag_count, max_btag_count );
367     BTagH_bJet2_tche = new TH1F(("BJet2_TCHE"+suffix).c_str(),("BJet2 TCHE ("+suffix+")").c_str(), bin_btag_count, min_btag_count, max_btag_count );
368     BTagH_bJet1_jp = new TH1F(("BJet1_JP"+suffix).c_str(),("BJet1 JP ("+suffix+")").c_str(), bin_btag_prob, min_btag_prob, max_btag_prob );
369     BTagH_bJet2_jp = new TH1F(("BJet2_JP"+suffix).c_str(),("BJet2 JP ("+suffix+")").c_str(), bin_btag_prob, min_btag_prob, max_btag_prob );
370     BTagH_bJet1_tchp = new TH1F(("BJet1_TCHP"+suffix).c_str(),("BJet1 TCHP ("+suffix+")").c_str(), bin_btag_count, min_btag_count, max_btag_count );
371     BTagH_bJet2_tchp = new TH1F(("BJet2_TCHP"+suffix).c_str(),("BJet2 TCHP ("+suffix+")").c_str(), bin_btag_count, min_btag_count, max_btag_count );
372    
373     }
374    
375     virtual void fill(VHbbProxy &iProxy,float w) {
376    
377     const VHbbEvent *iEvent = iProxy.getVHbbEvent();
378     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
379    
380     //Candidates
381     if(iCand->size() > 0){
382     VHbbCandidate::CandidateType iCandType = iCand->at(0).candidateType;
383     VHbbCandidate::HiggsCandidate H = iCand->at(0).H;
384    
385     BTagH_bJet1_csv->Fill(H.jets.at(0).csv, w);
386     BTagH_bJet2_csv->Fill(H.jets.at(1).csv, w);
387     BTagH_bJet1_csvmva->Fill(H.jets.at(0).csvmva, w);
388     BTagH_bJet2_csvmva->Fill(H.jets.at(1).csvmva, w);
389     BTagH_bJet1_ssvhe->Fill(H.jets.at(0).ssvhe, w);
390     BTagH_bJet2_ssvhe->Fill(H.jets.at(1).ssvhe, w);
391     BTagH_bJet1_tche->Fill(H.jets.at(0).tche, w);
392     BTagH_bJet2_tche->Fill(H.jets.at(1).tche, w);
393     BTagH_bJet1_tchp->Fill(H.jets.at(0).tchp, w);
394     BTagH_bJet2_tchp->Fill(H.jets.at(1).tchp, w);
395     BTagH_bJet1_jpb->Fill(H.jets.at(0).jpb, w);
396     BTagH_bJet2_jpb->Fill(H.jets.at(1).jpb, w);
397     BTagH_bJet1_jp->Fill(H.jets.at(0).jp, w);
398     BTagH_bJet2_jp->Fill(H.jets.at(1).jp, w);
399    
400     }
401     }
402    
403     TH1F * BTagH_bJet1_csv;
404     TH1F * BTagH_bJet2_csv;
405     TH1F * BTagH_bJet1_csvmva;
406     TH1F * BTagH_bJet2_csvmva;
407     TH1F * BTagH_bJet1_ssvhe;
408     TH1F * BTagH_bJet2_ssvhe;
409     TH1F * BTagH_bJet1_jpb;
410     TH1F * BTagH_bJet2_jpb;
411     TH1F * BTagH_bJet1_tche;
412     TH1F * BTagH_bJet2_tche;
413     TH1F * BTagH_bJet1_jp;
414     TH1F * BTagH_bJet2_jp;
415     TH1F * BTagH_bJet1_tchp;
416     TH1F * BTagH_bJet2_tchp;
417    
418     private:
419    
420     Int_t bin_btag_prob;
421     Double_t min_btag_prob;
422     Double_t max_btag_prob;
423    
424     Int_t bin_btag_count;
425     Double_t min_btag_count;
426     Double_t max_btag_count;
427    
428     };
429    
430     class StandardHistos : public Histos {
431    
432     public:
433    
434     virtual void book(TFile &f, std::string suffix) {
435    
436     TDirectory *subDir;
437     if( ! f.GetDirectory(suffix.c_str()) )
438     subDir = f.mkdir(suffix.c_str());
439     else
440     subDir = f.GetDirectory(suffix.c_str());
441     subDir->cd();
442    
443     bin_mass = 500;
444     min_mass = 0;
445     max_mass = 300;
446    
447     bin_pt = 500;
448     min_pt = 0;
449     max_pt = 500;
450    
451     bin_hel = 50;
452     min_hel = 0;
453     max_hel = 1;
454    
455     bin_btag = 20;
456     min_btag = 0;
457     max_btag = 1;
458    
459     bin_deltaR = bin_deltaPhi = bin_deltaEta = 20;
460     min_deltaR = min_deltaPhi = min_deltaEta = 0;
461     max_deltaR = max_deltaPhi = max_deltaEta = 5;
462    
463     //Candidates
464     StH_simpleJet1_pt = new TH1F(("SimpleJet1_pt"+suffix).c_str(),("Simple Jet1 pt ("+suffix+")").c_str(), bin_pt, min_pt, max_pt );
465     StH_simpleJet2_pt = new TH1F(("SimpleJet2_pt"+suffix).c_str(),("Simple Jet2 pt ("+suffix+")").c_str(), bin_pt, min_pt, max_pt );
466     StH_simpleJet1_bTag = new TH1F(("SimpleJet1_bTag"+suffix).c_str(),("Simple Jet1 bTag ("+suffix+")").c_str(), bin_btag, min_btag, max_btag );
467     StH_simpleJet2_bTag = new TH1F(("SimpleJet2_bTag"+suffix).c_str(),("Simple Jet2 bTag ("+suffix+")").c_str(), bin_btag, min_btag, max_btag );
468     StH_simpleJets_dR = new TH1F(("SimpleJets_dR"+suffix).c_str(),("Simple Jets deltaR ("+suffix+")").c_str(), bin_deltaR, min_deltaR, max_deltaR );
469     StH_simpleJets_dPhi = new TH1F(("SimpleJets_dPhi"+suffix).c_str(),("Simple Jets deltaPhi ("+suffix+")").c_str(), bin_deltaPhi, min_deltaPhi, max_deltaPhi );
470     StH_simpleJets_dEta = new TH1F(("SimpleJets_dEta"+suffix).c_str(),("Simple Jets deltaEta ("+suffix+")").c_str(), bin_deltaEta, min_deltaEta, max_deltaEta );
471    
472     StH_HMass = new TH1F(("HiggsMass"+suffix).c_str(),(" Higgs Mass ("+suffix+")").c_str(), bin_mass, min_mass, max_mass );
473     StH_HPt = new TH1F(("HiggsPt"+suffix).c_str(),(" Higgs Pt ("+suffix+")").c_str(), bin_pt, min_pt, max_pt );
474     StH_HHel = new TH1F(("HiggsHel"+suffix).c_str(),("Higgs helicity angle ("+suffix+")").c_str(), bin_hel, min_hel, max_hel );
475     StH_HPullAngle = new TH1F(("HiggsPullAngle"+suffix).c_str(),("Higgs pull angle ("+suffix+")").c_str(), bin_deltaPhi, min_deltaPhi, max_deltaPhi );
476    
477     StH_ZMass = new TH1F(("ZMass"+suffix).c_str(),(" Z Mass ("+suffix+")").c_str(), bin_mass, min_mass, max_mass );
478     StH_ZPt = new TH1F(("ZPt"+suffix).c_str(),(" Z Pt ("+suffix+")").c_str(), bin_pt, min_pt, max_pt );
479     StH_ZH_dPhi = new TH1F(("ZH_dPhi"+suffix).c_str(),(" ZH delta Phi ("+suffix+")").c_str(), bin_deltaPhi, min_deltaPhi, max_deltaPhi );
480    
481     StH_WMass = new TH1F(("WMass"+suffix).c_str(),(" W Mass ("+suffix+")").c_str(), bin_mass, min_mass, max_mass );
482     StH_WPt = new TH1F(("WPt"+suffix).c_str(),(" W Pt ("+suffix+")").c_str(), bin_pt, min_pt, max_pt );
483     StH_WH_dPhi = new TH1F(("WH_dPhi"+suffix).c_str(),(" WH delta Phi ("+suffix+")").c_str(), bin_deltaPhi, min_deltaPhi, max_deltaPhi );
484    
485     }
486    
487     virtual void fill(VHbbProxy &iProxy,float w) {
488    
489     const VHbbEvent *iEvent = iProxy.getVHbbEvent();
490     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
491    
492     //Candidates
493     if(iCand->size() > 0){
494     VHbbCandidate::CandidateType iCandType = iCand->at(0).candidateType;
495     VHbbCandidate::HiggsCandidate H = iCand->at(0).H;
496     VHbbCandidate::VectorCandidate V = iCand->at(0).V;
497    
498     StH_simpleJet1_pt->Fill(H.jets.at(0).fourMomentum.Pt(), w);
499     StH_simpleJet2_pt->Fill(H.jets.at(1).fourMomentum.Pt(), w);
500     StH_simpleJet1_bTag->Fill(H.jets.at(0).csv, w);
501     StH_simpleJet2_bTag->Fill(H.jets.at(1).csv, w);
502     StH_simpleJets_dR->Fill(H.jets.at(0).fourMomentum.DeltaR(H.jets.at(1).fourMomentum), w);
503     StH_simpleJets_dPhi->Fill(H.jets.at(0).fourMomentum.DeltaPhi(H.jets.at(1).fourMomentum), w);
504     StH_simpleJets_dEta->Fill(TMath::Abs(H.jets.at(0).fourMomentum.Eta()-H.jets.at(1).fourMomentum.Eta()), w);
505    
506     StH_HMass->Fill(H.fourMomentum.M(), w);
507     StH_HPt->Fill(H.fourMomentum.Pt(), w);
508     // StH_HHel->Fill(H.hel(), w);
509     StH_HPullAngle->Fill(H.deltaTheta, w);
510     if( iCandType == VHbbCandidate::Zmumu || iCandType == VHbbCandidate::Zee || iCandType == VHbbCandidate::Znn ){
511     StH_ZMass->Fill(V.fourMomentum.M(), w);
512     StH_ZPt->Fill(V.fourMomentum.Pt(), w);
513     StH_ZH_dPhi->Fill(V.fourMomentum.DeltaPhi(H.fourMomentum.Phi()), w);
514     }
515     else if(iCandType == VHbbCandidate::Wen || iCandType == VHbbCandidate::Wmun){
516     StH_WMass->Fill(V.fourMomentum.M(), w);
517     StH_WPt->Fill(V.fourMomentum.Pt(), w);
518     StH_WH_dPhi->Fill(V.fourMomentum.DeltaPhi(H.fourMomentum.Phi()), w);
519     }
520    
521     }
522     }
523    
524     TH1F * StH_simpleJet1_pt;
525     TH1F * StH_simpleJet2_pt;
526     TH1F * StH_simpleJet1_bTag;
527     TH1F * StH_simpleJet2_bTag;
528     TH1F * StH_simpleJets_dR;
529     TH1F * StH_simpleJets_dPhi;
530     TH1F * StH_simpleJets_dEta;
531    
532     TH1F * StH_HMass;
533     TH1F * StH_HPt;
534     TH1F * StH_HHel;
535     TH1F * StH_HPullAngle;
536     TH1F * StH_WMass;
537     TH1F * StH_WPt;
538     TH1F * StH_WH_dPhi;
539     TH1F * StH_ZMass;
540     TH1F * StH_ZPt;
541     TH1F * StH_ZH_dPhi;
542    
543     private:
544    
545     Int_t bin_btag;
546     Double_t min_btag;
547     Double_t max_btag;
548    
549     Int_t bin_deltaEta;
550     Double_t min_deltaEta;
551     Double_t max_deltaEta;
552    
553     Int_t bin_deltaPhi;
554     Double_t min_deltaPhi;
555     Double_t max_deltaPhi;
556    
557     Int_t bin_deltaR;
558     Double_t min_deltaR;
559     Double_t max_deltaR;
560    
561     Int_t bin_mass;
562     Double_t min_mass;
563     Double_t max_mass;
564    
565     Int_t bin_pt;
566     Double_t min_pt;
567     Double_t max_pt;
568    
569     Int_t bin_hel;
570     Double_t min_hel;
571     Double_t max_hel;
572    
573     };
574    
575     class HardJetHistos : public Histos {
576    
577     public:
578    
579     virtual void book(TFile &f, std::string suffix) {
580    
581     TDirectory *subDir;
582     if( ! f.GetDirectory(suffix.c_str()) )
583     subDir = f.mkdir(suffix.c_str());
584     else
585     subDir = f.GetDirectory(suffix.c_str());
586     subDir->cd();
587    
588     bin_mass = 500;
589     min_mass = 0;
590     max_mass = 300;
591    
592     bin_pt = 500;
593     min_pt = 0;
594     max_pt = 500;
595    
596     bin_hel = 50;
597     min_hel = 0;
598     max_hel = 1;
599    
600     bin_btag = 20;
601     min_btag = 0;
602     max_btag = 1;
603    
604     bin_deltaR = bin_deltaPhi = bin_deltaEta = 20;
605     min_deltaR = min_deltaPhi = min_deltaEta = 0;
606     max_deltaR = max_deltaPhi = max_deltaEta = 5;
607    
608     //Candidates
609    
610     HardJetH_subJet1_pt = new TH1F(("SubJet1_pt"+suffix).c_str(),("Sub Jet1 pt ("+suffix+")").c_str(), bin_pt, min_pt, max_pt );
611     HardJetH_subJet2_pt = new TH1F(("SubJet2_pt"+suffix).c_str(),("Sub Jet2 pt ("+suffix+")").c_str(), bin_pt, min_pt, max_pt );
612     HardJetH_subJet1_bTag = new TH1F(("SubJet1_bTag"+suffix).c_str(),("Sub Jet1 bTag ("+suffix+")").c_str(), bin_btag, min_btag, max_btag );
613     HardJetH_subJet2_bTag = new TH1F(("SubJet2_bTag"+suffix).c_str(),("Sub Jet2 bTag ("+suffix+")").c_str(), bin_btag, min_btag, max_btag );
614     HardJetH_subJets_dR = new TH1F(("SubJets_dR"+suffix).c_str(),("Sub Jets deltaR ("+suffix+")").c_str(), bin_deltaR, min_deltaR, max_deltaR );
615     HardJetH_subJets_dPhi = new TH1F(("SubJets_dPhi"+suffix).c_str(),("Sub Jets deltaPhi ("+suffix+")").c_str(), bin_deltaPhi, min_deltaPhi, max_deltaPhi );
616     HardJetH_subJets_dEta = new TH1F(("SubJets_dEta"+suffix).c_str(),("Sub Jets deltaEta ("+suffix+")").c_str(), bin_deltaEta, min_deltaEta, max_deltaEta );
617    
618     HardJetH_HMass = new TH1F(("HiggsMass"+suffix).c_str(),(" Higgs Mass ("+suffix+")").c_str(), bin_mass, min_mass, max_mass );
619     HardJetH_HPt = new TH1F(("HiggsPt"+suffix).c_str(),(" Higgs Pt ("+suffix+")").c_str(), bin_pt, min_pt, max_pt );
620     HardJetH_HHel = new TH1F(("HiggsHel"+suffix).c_str(),("Higgs helicity angle ("+suffix+")").c_str(), bin_hel, min_hel, max_hel );
621    
622     HardJetH_ZMass = new TH1F(("ZMass"+suffix).c_str(),(" Z Mass ("+suffix+")").c_str(), bin_mass, min_mass, max_mass );
623     HardJetH_ZPt = new TH1F(("ZPt"+suffix).c_str(),(" Z Pt ("+suffix+")").c_str(), bin_pt, min_pt, max_pt );
624     HardJetH_ZH_dPhi = new TH1F(("ZH_dPhi"+suffix).c_str(),(" ZH delta Phi ("+suffix+")").c_str(), bin_deltaPhi, min_deltaPhi, max_deltaPhi );
625    
626     HardJetH_WMass = new TH1F(("WMass"+suffix).c_str(),(" W Mass ("+suffix+")").c_str(), bin_mass, min_mass, max_mass );
627     HardJetH_WPt = new TH1F(("WPt"+suffix).c_str(),(" W Pt ("+suffix+")").c_str(), bin_pt, min_pt, max_pt );
628     HardJetH_WH_dPhi = new TH1F(("WH_dPhi"+suffix).c_str(),(" WH delta Phi ("+suffix+")").c_str(), bin_deltaPhi, min_deltaPhi, max_deltaPhi );
629    
630     }
631    
632     virtual void fill(VHbbProxy &iProxy,float w) {
633    
634     const VHbbEvent *iEvent = iProxy.getVHbbEvent();
635     const std::vector<VHbbCandidate> *iCand = iProxy.getVHbbCandidate();
636    
637     //Candidates
638     if(iCand->size() > 0){
639     VHbbCandidate::CandidateType iCandType = iCand->at(0).candidateType;
640     VHbbCandidate::HiggsCandidate H = iCand->at(0).H;
641     VHbbCandidate::VectorCandidate V = iCand->at(0).V;
642    
643     std::vector<VHbbEvent::HardJet> iHardJets = iEvent->hardJets;
644     VHbbEvent::HardJet iHardJet = iHardJets.at(0);
645    
646     HardJetH_subJet1_pt->Fill(iHardJet.subFourMomentum.at(0).Pt(), w);
647     HardJetH_subJet2_pt->Fill(iHardJet.subFourMomentum.at(1).Pt(), w);
648     //SubJet information on btag missing
649     // HardJetH_subJet1_bTag->Fill(iHardJet.at(0).csv, w);
650     // HardJetH_subJet2_bTag->Fill(iHardJet.at(1).csv, w);
651     HardJetH_subJets_dR->Fill(iHardJet.subFourMomentum.at(0).DeltaR(iHardJet.subFourMomentum.at(1)), w);
652     HardJetH_subJets_dPhi->Fill(iHardJet.subFourMomentum.at(0).DeltaPhi(iHardJet.subFourMomentum.at(1)), w);
653     HardJetH_subJets_dEta->Fill(TMath::Abs(iHardJet.subFourMomentum.at(0).Eta()-iHardJet.subFourMomentum.at(1).Eta()), w);
654    
655     //Here there should be the higgs candidate from HardJet
656     // HardJetH_HMass->Fill(H.fourMomentum.M(), w);
657     // HardJetH_HPt->Fill(H.fourMomentum.Pt(), w);
658     // // HardJetH_HHel->Fill(H.hel(), w);
659     // if( iCandType == VHbbCandidate::Zmumu || iCandType == VHbbCandidate::Zee || iCandType == VHbbCandidate::Znn ){
660     // HardJetH_ZMass->Fill(V.fourMomentum.M(), w);
661     // HardJetH_ZPt->Fill(V.fourMomentum.Pt(), w);
662     // HardJetH_ZH_dPhi->Fill(V.fourMomentum.DeltaPhi(H.fourMomentum.Phi()), w);
663     // }
664     // else if(iCandType == VHbbCandidate::Wen || iCandType == VHbbCandidate::Wmun){
665     // HardJetH_WMass->Fill(V.fourMomentum.M(), w);
666     // HardJetH_WPt->Fill(V.fourMomentum.Pt(), w);
667     // HardJetH_WH_dPhi->Fill(V.fourMomentum.DeltaPhi(H.fourMomentum.Phi()), w);
668     // }
669    
670     }
671     }
672    
673     TH1F * HardJetH_subJet1_pt;
674     TH1F * HardJetH_subJet2_pt;
675     TH1F * HardJetH_subJet1_bTag;
676     TH1F * HardJetH_subJet2_bTag;
677     TH1F * HardJetH_subJets_dR;
678     TH1F * HardJetH_subJets_dPhi;
679     TH1F * HardJetH_subJets_dEta;
680    
681     TH1F * HardJetH_HMass;
682     TH1F * HardJetH_HPt;
683     TH1F * HardJetH_HHel;
684     TH1F * HardJetH_WMass;
685     TH1F * HardJetH_WPt;
686     TH1F * HardJetH_WH_dPhi;
687     TH1F * HardJetH_ZMass;
688     TH1F * HardJetH_ZPt;
689     TH1F * HardJetH_ZH_dPhi;
690    
691     private:
692    
693     Int_t bin_btag;
694     Double_t min_btag;
695     Double_t max_btag;
696    
697     Int_t bin_deltaEta;
698     Double_t min_deltaEta;
699     Double_t max_deltaEta;
700    
701     Int_t bin_deltaPhi;
702     Double_t min_deltaPhi;
703     Double_t max_deltaPhi;
704    
705     Int_t bin_deltaR;
706     Double_t min_deltaR;
707     Double_t max_deltaR;
708    
709     Int_t bin_mass;
710     Double_t min_mass;
711     Double_t max_mass;
712    
713     Int_t bin_pt;
714     Double_t min_pt;
715     Double_t max_pt;
716    
717     Int_t bin_hel;
718     Double_t min_hel;
719     Double_t max_hel;
720    
721     };