ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/plugins/HbbTreeMaker.cc
Revision: 1.4
Committed: Tue Feb 9 14:52:23 2010 UTC (15 years, 3 months ago) by amagnan
Content type: text/plain
Branch: MAIN
Changes since 1.3: +62 -33 lines
Log Message:
export code to CMSSW_3_4_X

File Contents

# User Rev Content
1 amagnan 1.1 #include "DataFormats/Common/interface/Handle.h"
2     #include "DataFormats/Common/interface/TriggerResults.h"
3     #include "DataFormats/Common/interface/HLTenums.h"
4     #include "DataFormats/Common/interface/ValueMap.h"
5     #include "DataFormats/Candidate/interface/Candidate.h"
6     #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
7     #include "DataFormats/MuonReco/interface/Muon.h"
8     #include "DataFormats/MuonReco/interface/MuonFwd.h"
9 amagnan 1.4 #include "DataFormats/MuonReco/interface/MuonSelectors.h"
10 amagnan 1.1 #include "DataFormats/VertexReco/interface/Vertex.h"
11     #include "DataFormats/HLTReco/interface/TriggerEvent.h"
12     #include "DataFormats/TrackReco/interface/TrackFwd.h"
13    
14     #include "DataFormats/PatCandidates/interface/Lepton.h"
15     #include "DataFormats/PatCandidates/interface/Muon.h"
16     #include "DataFormats/PatCandidates/interface/Electron.h"
17     #include "DataFormats/PatCandidates/interface/Tau.h"
18     #include "DataFormats/PatCandidates/interface/Jet.h"
19     #include "DataFormats/PatCandidates/interface/MET.h"
20    
21     #include "FWCore/ServiceRegistry/interface/Service.h"
22     #include "PhysicsTools/UtilAlgos/interface/TFileService.h"
23    
24    
25     #include "UserCode/HbbAnalysis/interface/Electron.hh"
26     #include "UserCode/HbbAnalysis/interface/Muon.hh"
27     #include "UserCode/HbbAnalysis/interface/Tau.hh"
28     #include "UserCode/HbbAnalysis/interface/Jet.hh"
29     #include "UserCode/HbbAnalysis/interface/Met.hh"
30     #include "UserCode/HbbAnalysis/interface/Trigger.hh"
31    
32     #include "UserCode/HbbAnalysis/plugins/HbbTreeMaker.hh"
33    
34     using namespace HbbAnalysis;
35    
36     HbbTreeMaker::HbbTreeMaker(const edm::ParameterSet & pset):
37     debug_(pset.getParameter<int>("DEBUG")),
38 amagnan 1.4 processData_(pset.getParameter<bool>("ProcessData")),
39 amagnan 1.1 flavour_(pset.getParameter<unsigned int>("JetFlavour")),
40     doGen_(pset.getParameter<bool>("DOGEN")),
41     genParticleSrc_(pset.getParameter<edm::InputTag>("GenParticles")),
42     electronSrc_(pset.getParameter<edm::InputTag>("Electrons")),
43     muonSrc_(pset.getParameter<edm::InputTag>("Muons")),
44     caloTauSrc_(pset.getParameter<edm::InputTag>("CaloTaus")),
45     pfTauSrc_(pset.getParameter<edm::InputTag>("PFTaus")),
46     caloJetSrc_(pset.getParameter<edm::InputTag>("CaloJets")),
47     jptJetSrc_(pset.getParameter<edm::InputTag>("JPTJets")),
48     pfJetSrc_(pset.getParameter<edm::InputTag>("PFJets")),
49     caloMetSrc_(pset.getParameter<edm::InputTag>("CaloMET")),
50     tcMetSrc_(pset.getParameter<edm::InputTag>("TCMET")),
51     pfMetSrc_(pset.getParameter<edm::InputTag>("PFMET")),
52     //pairSrc_(pset.getParameter<edm::InputTag>("Pair")),
53     //mmPairSrc_(pset.getParameter<edm::InputTag>("MuMuPair")),
54     //etPairSrc_(pset.getParameter<edm::InputTag>("ETauPair")),
55     //mtPairSrc_(pset.getParameter<edm::InputTag>("MuTauPair")),
56     vertexSrc_(pset.getParameter<edm::InputTag>("Vertex")),
57     triggerSrc_(pset.getParameter<edm::InputTag>("Trigger")),
58     hltPaths_(pset.getParameter<std::vector<std::string> >("HLTPaths")),
59     event_(0),
60     tree_(0)
61     //processVec_(pset.getParameter<std::vector<std::string> >("ProcessVec"))
62     {//constructor
63    
64    
65     }//constructor
66    
67     HbbTreeMaker::~HbbTreeMaker(){//destructor
68     }//destructor
69    
70    
71    
72     void HbbTreeMaker::beginJob(const edm::EventSetup&){//beginJob
73    
74    
75     edm::Service<TFileService> lFileService;
76    
77     TFileDirectory lDir = lFileService->mkdir("HbbAnalysis");
78    
79     tree_ = lDir.make<TTree>("Tree","Tree");
80     tree_->Branch("HbbEvent","HbbAnalysis::HbbEvent",&event_);
81     event_ = new HbbEvent();
82    
83     if (debug_) std::cout << "Initialising JetFlavour : " << std::endl;
84    
85     lDir = lFileService->mkdir("JetFlavours");
86    
87 amagnan 1.4 if (!processData_) jetFlav_.Initialise(lDir, debug_, flavour_);
88 amagnan 1.1
89     }//beginJob
90    
91     void HbbTreeMaker::endJob(){//endJob
92 amagnan 1.4 if (!processData_) jetFlav_.printSummary();
93 amagnan 1.1
94     //tree_->Write();
95     //delete tree_;
96     //delete event_;
97    
98     }//endJob
99    
100     void HbbTreeMaker::analyze(const edm::Event& aEvt, const edm::EventSetup& aEvtSetup){//analyze
101    
102     //dumpContent(aEvt,"","MuTauPAT");
103     if (debug_) std::cout << "Processing event #" << aEvt.id().event() << std::endl;
104    
105    
106     static bool firstEvent = true;
107    
108     event_->Clear();
109     event_->event(aEvt.id().event());
110    
111     edm::Handle<reco::GenParticleCollection> lGenParticles;
112     try {
113     aEvt.getByLabel(genParticleSrc_,lGenParticles);
114     if (debug_) std::cout << "** ngenParticles = " << lGenParticles->size() << std::endl;
115     } catch(cms::Exception& e) {
116 amagnan 1.4 if (!processData_) std::cout << "AMM: Collection genParticles not available! Exception : " << e.what() << ". " << std::endl;
117 amagnan 1.1 }
118    
119 amagnan 1.4 if (doGen_ && !processData_) HbbParticles(lGenParticles,event_->particles());
120 amagnan 1.1
121 amagnan 1.4 unsigned int lNPartons = 0;
122     if (!processData_) lNPartons = jetFlav_.fillPartons(lGenParticles);
123 amagnan 1.1
124 amagnan 1.4 if (debug_ && !processData_) std::cout << "--- Number of partons = " << lNPartons << "." << std::endl;
125 amagnan 1.1
126    
127     edm::Handle<std::vector<reco::Vertex> > lRecoVertices;
128     try {
129     aEvt.getByLabel(vertexSrc_, lRecoVertices);
130     if (!lRecoVertices.isValid()){
131     edm::LogInfo("ERROR")<< "Error! Can't get vertex by label. ";
132     }
133     if (debug_) std::cout << "** vertexcollection = " << lRecoVertices->size() << " elements." << std::endl;
134     } catch(cms::Exception& e) {
135     std::cout << "AMM: Collection " << vertexSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
136     }
137    
138     edm::Handle<std::vector<pat::Electron> > lElectronCollection;
139    
140     try {
141     aEvt.getByLabel(electronSrc_,lElectronCollection);
142     if (!lElectronCollection.isValid()){
143     edm::LogInfo("ERROR")<< "Error! Can't get electron by label. ";
144     }
145     if (debug_) std::cout << "** electroncollection = " << lElectronCollection->size() << " elements." << std::endl;
146     } catch(cms::Exception& e) {
147     std::cout << "AMM: Collection " << electronSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
148     }
149    
150     HbbElectrons(lElectronCollection,event_->electrons());
151    
152    
153     edm::Handle<std::vector<pat::Muon> > lMuonCollection;
154    
155     try {
156     aEvt.getByLabel(muonSrc_,lMuonCollection);
157     if (!lMuonCollection.isValid()){
158     edm::LogInfo("ERROR")<< "Error! Can't get muon by label. ";
159     }
160     if (debug_) std::cout << "** muoncollection = " << lMuonCollection->size() << " elements." << std::endl;
161     } catch(cms::Exception& e) {
162     std::cout << "AMM: Collection " << muonSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
163     }
164    
165 amagnan 1.3 HbbMuons(lMuonCollection,lRecoVertices,event_->muons());
166 amagnan 1.1
167    
168     edm::Handle<std::vector<pat::Tau> > lTauCollection;
169    
170     try {
171     aEvt.getByLabel(caloTauSrc_,lTauCollection);
172     if (!lTauCollection.isValid()){
173     edm::LogInfo("ERROR")<< "Error! Can't get caloTau by label. ";
174     }
175     if (debug_) std::cout << "** caloTaucollection = " << lTauCollection->size() << " elements." << std::endl;
176     } catch(cms::Exception& e) {
177     std::cout << "AMM: Collection " << caloTauSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
178     }
179    
180     HbbTaus(lTauCollection,lRecoVertices,event_->caloTaus());
181    
182     edm::Handle<std::vector<pat::Tau> > lPFTauCollection;
183    
184     try {
185     aEvt.getByLabel(pfTauSrc_,lPFTauCollection);
186     if (!lPFTauCollection.isValid()){
187     edm::LogInfo("ERROR")<< "Error! Can't get pfTau by label. ";
188     }
189     if (debug_) std::cout << "** pfTaucollection = " << lPFTauCollection->size() << " elements." << std::endl;
190     } catch(cms::Exception& e) {
191     std::cout << "AMM: Collection " << pfTauSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
192     }
193    
194     HbbTaus(lPFTauCollection,lRecoVertices,event_->pfTaus());
195    
196     edm::Handle<std::vector<pat::Jet> > lCaloJetCollection;
197    
198     try {
199     aEvt.getByLabel(caloJetSrc_,lCaloJetCollection);
200     if (!lCaloJetCollection.isValid()){
201     edm::LogInfo("ERROR")<< "Error! Can't get caloJets by label. ";
202     }
203     if (debug_) std::cout << "** caloJetcollection = " << lCaloJetCollection->size() << " elements." << std::endl;
204     } catch(cms::Exception& e) {
205     std::cout << "AMM: Collection " << caloJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
206     }
207    
208     HbbJets(lCaloJetCollection,jetFlav_,lGenParticles,event_->caloJets());
209    
210     edm::Handle<std::vector<pat::Jet> > lJptJetCollection;
211    
212     try {
213     aEvt.getByLabel(jptJetSrc_,lJptJetCollection);
214     if (!lJptJetCollection.isValid()){
215     edm::LogInfo("ERROR")<< "Error! Can't get jptJets by label. ";
216     }
217     if (debug_) std::cout << "** jptJetcollection = " << lJptJetCollection->size() << " elements." << std::endl;
218     } catch(cms::Exception& e) {
219     std::cout << "AMM: Collection " << jptJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
220     }
221    
222     HbbJets(lJptJetCollection,jetFlav_,lGenParticles,event_->jptJets());
223    
224     edm::Handle<std::vector<pat::Jet> > lPfJetCollection;
225    
226     try {
227     aEvt.getByLabel(pfJetSrc_,lPfJetCollection);
228     if (!lPfJetCollection.isValid()){
229     edm::LogInfo("ERROR")<< "Error! Can't get pfJets by label. ";
230     }
231     if (debug_) std::cout << "** pfJetcollection = " << lPfJetCollection->size() << " elements." << std::endl;
232     } catch(cms::Exception& e) {
233     std::cout << "AMM: Collection " << pfJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
234     }
235    
236     HbbJets(lPfJetCollection,jetFlav_,lGenParticles,event_->pfJets());
237    
238     edm::Handle<std::vector<pat::MET> > lCaloMetCol;
239    
240     try {
241     aEvt.getByLabel(caloMetSrc_,lCaloMetCol);
242     if (!lCaloMetCol.isValid()){
243     edm::LogInfo("ERROR")<< "Error! Can't get caloMet by label. ";
244     }
245     if (debug_) std::cout << "** caloMet = " << lCaloMetCol->size() << " elements." << std::endl;
246     } catch(cms::Exception& e) {
247     std::cout << "AMM: Collection " << caloMetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
248     }
249    
250     HbbMet(lCaloMetCol,event_->caloMet());
251    
252     edm::Handle<std::vector<pat::MET> > lTcMetCol;
253    
254     try {
255     aEvt.getByLabel(tcMetSrc_,lTcMetCol);
256     if (!lTcMetCol.isValid()){
257     edm::LogInfo("ERROR")<< "Error! Can't get tcMet by label. ";
258     }
259     if (debug_) std::cout << "** tcMet = " << lTcMetCol->size() << " elements." << std::endl;
260     } catch(cms::Exception& e) {
261     std::cout << "AMM: Collection " << tcMetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
262     }
263    
264     HbbMet(lTcMetCol,event_->tcMet());
265    
266     edm::Handle<std::vector<pat::MET> > lPfMetCol;
267    
268     try {
269     aEvt.getByLabel(pfMetSrc_,lPfMetCol);
270     if (!lPfMetCol.isValid()){
271     edm::LogInfo("ERROR")<< "Error! Can't get pfMet by label. ";
272     }
273     if (debug_) std::cout << "** pfMet = " << lPfMetCol->size() << " elements." << std::endl;
274     } catch(cms::Exception& e) {
275     std::cout << "AMM: Collection " << pfMetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
276     }
277    
278     HbbMet(lPfMetCol,event_->pfMet());
279    
280    
281    
282     //triggers
283     edm::Handle<edm::TriggerResults> lTrigCol;
284     try {
285     aEvt.getByLabel(triggerSrc_,lTrigCol);
286     if (!lTrigCol.isValid()){
287     edm::LogInfo("ERROR")<< "Error! Can't get triggers by label. ";
288     }
289     if (debug_) std::cout << "** triggers = " << lTrigCol->size() << std::endl;
290     } catch(cms::Exception& e) {
291     std::cout << "AMM: Collection " << triggerSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
292     }
293    
294     HbbTrigger(lTrigCol,event_->triggers());
295    
296     //event_->order();
297     tree_->Fill();
298     firstEvent = false;
299    
300     }//analyze
301    
302    
303     void HbbTreeMaker::HbbElectrons(const edm::Handle<std::vector<pat::Electron> > & aCol,
304 amagnan 1.2 std::vector<HbbAnalysis::Electron> & aVec)
305 amagnan 1.1 {//HbbElectrons
306    
307     if (aCol.isValid()){
308     if (aCol->size() > 0) {
309    
310     unsigned int iEle = 0;
311     for (std::vector<pat::Electron>::const_iterator iter = aCol->begin();
312     iter != aCol->end();
313     iter++)
314     {
315     //if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
316    
317     HbbAnalysis::GenVars lGen;
318 amagnan 1.4 if (!processData_ && (*iter).genLepton()){
319 amagnan 1.1 lGen.valid = true;
320 amagnan 1.2 lGen.E = (*iter).genLepton()->energy();
321 amagnan 1.1 lGen.pT = (*iter).genLepton()->pt();
322     lGen.eta = (*iter).genLepton()->eta();
323     lGen.phi = (*iter).genLepton()->phi();
324     lGen.charge = (*iter).genLepton()->charge();
325     lGen.pdgId = (*iter).genLepton()->pdgId();
326     lGen.status = (*iter).genLepton()->status();
327     lGen.mass = (*iter).genLepton()->mass();
328     lGen.vx = (*iter).genLepton()->vx();
329     lGen.vy = (*iter).genLepton()->vy();
330     lGen.vz = (*iter).genLepton()->vz();
331     }
332     else {
333     lGen.valid = false;
334 amagnan 1.2 lGen.E = 0;
335 amagnan 1.1 lGen.pT = 0;
336     lGen.eta = 0;
337     lGen.phi = 0;
338     lGen.charge = 0;
339     lGen.pdgId = 0;
340     lGen.status = 0;
341     lGen.mass = 0;
342     lGen.vx = 0;
343     lGen.vy = 0;
344     lGen.vz = 0;
345     }
346    
347     HbbAnalysis::BaseVars lReco;
348 amagnan 1.2 lReco.E = (*iter).energy();
349 amagnan 1.1 lReco.pT = (*iter).pt();
350     lReco.eta = (*iter).eta();
351     lReco.phi = (*iter).phi();
352     lReco.charge = (*iter).charge();
353     lReco.vx = (*iter).vx();
354     lReco.vy = (*iter).vy();
355     lReco.vz = (*iter).vz();
356    
357     HbbAnalysis::SCVars lSC;
358     lSC.sigmaEtaEta = (*iter).scSigmaEtaEta();
359     lSC.sigmaIEtaIEta = (*iter).scSigmaIEtaIEta();
360     lSC.e1x5 = (*iter).scE1x5();
361     lSC.e2x5Max = (*iter).scE2x5Max();
362     lSC.e5x5 = (*iter).scE5x5();
363     lSC.eOverP = (*iter).eSuperClusterOverP();
364    
365     HbbAnalysis::EleIsoVars lIso;
366     lIso.calo = (*iter).caloIso();
367     lIso.track = (*iter).trackIso();
368     lIso.ecal = (*iter).ecalIso();
369     lIso.hcal = (*iter).hcalIso();
370    
371     HbbAnalysis::EleIDVars lID;
372     lID.electronIDs = (*iter).electronIDs();
373     lID.hOverE = (*iter).hadronicOverEm();
374     lID.deltaPhiIn = (*iter).deltaPhiSuperClusterTrackAtVtx();
375     lID.deltaEtaIn = (*iter).deltaEtaSuperClusterTrackAtVtx();
376    
377     HbbAnalysis::Electron lObj(lGen,lReco,lSC,lIso,lID);
378     aVec.push_back(lObj);
379     iEle++;
380     }
381     }
382     }
383    
384     }//HbbElectrons
385    
386    
387     void HbbTreeMaker::HbbMuons(const edm::Handle<std::vector<pat::Muon> > & aCol,
388 amagnan 1.3 const edm::Handle<std::vector<reco::Vertex> > & aRecoVertices,
389     std::vector<HbbAnalysis::Muon> & aVec)
390 amagnan 1.1 {//HbbMuons
391    
392     if (aCol.isValid()){
393     if (aCol->size() > 0) {
394    
395     unsigned int iEle = 0;
396     for (std::vector<pat::Muon>::const_iterator iter = aCol->begin();
397     iter != aCol->end();
398     iter++)
399     {
400     const reco::Muon* recoMuon = dynamic_cast<const reco::Muon*>((*iter).originalObject());
401    
402     HbbAnalysis::GenVars lGen;
403 amagnan 1.4 if (!processData_ && (*iter).genLepton()){
404 amagnan 1.1 lGen.valid = true;
405 amagnan 1.2 lGen.E = (*iter).genLepton()->energy();
406 amagnan 1.1 lGen.pT = (*iter).genLepton()->pt();
407     lGen.eta = (*iter).genLepton()->eta();
408     lGen.phi = (*iter).genLepton()->phi();
409     lGen.charge = (*iter).genLepton()->charge();
410     lGen.pdgId = (*iter).genLepton()->pdgId();
411     lGen.status = (*iter).genLepton()->status();
412     lGen.mass = (*iter).genLepton()->mass();
413     lGen.vx = (*iter).genLepton()->vx();
414     lGen.vy = (*iter).genLepton()->vy();
415     lGen.vz = (*iter).genLepton()->vz();
416     }
417     else {
418     lGen.valid = false;
419 amagnan 1.2 lGen.E = 0;
420 amagnan 1.1 lGen.pT = 0;
421     lGen.eta = 0;
422     lGen.phi = 0;
423     lGen.charge = 0;
424     lGen.pdgId = 0;
425     lGen.status = 0;
426     lGen.mass = 0;
427     lGen.vx = 0;
428     lGen.vy = 0;
429     lGen.vz = 0;
430     }
431    
432     HbbAnalysis::BaseVars lReco;
433 amagnan 1.2 lReco.E = (*iter).energy();
434 amagnan 1.1 lReco.pT = (*iter).pt();
435     lReco.eta = (*iter).eta();
436     lReco.phi = (*iter).phi();
437     lReco.charge = (*iter).charge();
438     lReco.vx = (*iter).vx();
439     lReco.vy = (*iter).vy();
440     lReco.vz = (*iter).vz();
441    
442 amagnan 1.3 HbbAnalysis::MuTrkVars lTrk;
443    
444     reco::TrackRef lTrackerTrk = (*iter).innerTrack();
445     if ( lTrackerTrk.isAvailable() && lTrackerTrk.isNonnull() ) {
446     if ( aRecoVertices->size() >= 1 ) {
447     const reco::Vertex& thePrimaryEventVertex = (*aRecoVertices->begin());
448     lTrk.IPd0 = -lTrackerTrk->dxy(thePrimaryEventVertex.position());
449     lTrk.IPdz = lTrackerTrk->dz(thePrimaryEventVertex.position());
450     }
451     else {
452     lTrk.IPd0 = 0;
453     lTrk.IPdz = 0;
454     }
455    
456     lTrk.nHits = lTrackerTrk->numberOfValidHits();
457     }
458     else {
459     lTrk.IPd0 = 0;
460     lTrk.IPdz = 0;
461     lTrk.nHits = 0;
462     }
463    
464 amagnan 1.1 HbbAnalysis::MuIsoVars lIsoR03;
465     lIsoR03.sumPt = recoMuon->isolationR03().sumPt;
466     lIsoR03.emEt = recoMuon->isolationR03().emEt;
467     lIsoR03.hadEt = recoMuon->isolationR03().hadEt;
468     lIsoR03.nTracks = recoMuon->isolationR03().nTracks;
469     lIsoR03.nJets = recoMuon->isolationR03().nJets;
470    
471     HbbAnalysis::MuIsoVars lIsoR05;
472     lIsoR05.sumPt = recoMuon->isolationR05().sumPt;
473     lIsoR05.emEt = recoMuon->isolationR05().emEt;
474     lIsoR05.hadEt = recoMuon->isolationR05().hadEt;
475     lIsoR05.nTracks = recoMuon->isolationR05().nTracks;
476     lIsoR05.nJets = recoMuon->isolationR05().nJets;
477    
478     HbbAnalysis::MuIDVars lID;
479     if (recoMuon->isGlobalMuon()) lID.type = 1;
480     else if (recoMuon->isTrackerMuon()) lID.type = 2;
481     else if (recoMuon->isStandAloneMuon()) lID.type = 3;
482     else if (recoMuon->isCaloMuon()) lID.type = 4;
483     else lID.type = 0;
484    
485 amagnan 1.4 if (muon::isGoodMuon(*recoMuon,muon::AllGlobalMuons)) lID.ids.push_back(1);
486     if (muon::isGoodMuon(*recoMuon,muon::AllStandAloneMuons)) lID.ids.push_back(2);
487     if (muon::isGoodMuon(*recoMuon,muon::AllTrackerMuons)) lID.ids.push_back(3);
488     if (muon::isGoodMuon(*recoMuon,muon::TrackerMuonArbitrated)) lID.ids.push_back(4);
489     if (muon::isGoodMuon(*recoMuon,muon::AllArbitrated)) lID.ids.push_back(5);
490     if (muon::isGoodMuon(*recoMuon,muon::GlobalMuonPromptTight)) lID.ids.push_back(6);
491     if (muon::isGoodMuon(*recoMuon,muon::TMLastStationLoose)) lID.ids.push_back(7);
492     if (muon::isGoodMuon(*recoMuon,muon::TMLastStationTight)) lID.ids.push_back(8);
493     if (muon::isGoodMuon(*recoMuon,muon::TM2DCompatibilityLoose)) lID.ids.push_back(9);
494     if (muon::isGoodMuon(*recoMuon,muon::TM2DCompatibilityTight)) lID.ids.push_back(10);
495     if (muon::isGoodMuon(*recoMuon,muon::TMOneStationLoose)) lID.ids.push_back(11);
496     if (muon::isGoodMuon(*recoMuon,muon::TMOneStationTight)) lID.ids.push_back(12);
497     if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedLowPtLoose)) lID.ids.push_back(13);
498     if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedLowPtTight)) lID.ids.push_back(14);
499     if (muon::isGoodMuon(*recoMuon,muon::GMTkChiCompatibility)) lID.ids.push_back(15);
500     if (muon::isGoodMuon(*recoMuon,muon::GMStaChiCompatibility)) lID.ids.push_back(16);
501     if (muon::isGoodMuon(*recoMuon,muon::GMTkKinkTight)) lID.ids.push_back(17);
502     if (muon::isGoodMuon(*recoMuon,muon::TMLastStationAngLoose)) lID.ids.push_back(18);
503     if (muon::isGoodMuon(*recoMuon,muon::TMLastStationAngTight)) lID.ids.push_back(19);
504     if (muon::isGoodMuon(*recoMuon,muon::TMOneStationAngLoose)) lID.ids.push_back(20);
505     if (muon::isGoodMuon(*recoMuon,muon::TMOneStationAngTight)) lID.ids.push_back(21);
506     if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedBarrelLowPtLoose)) lID.ids.push_back(22);
507     if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedBarrelLowPtTight)) lID.ids.push_back(23);
508 amagnan 1.1
509     lID.caloCompat = recoMuon->caloCompatibility();
510 amagnan 1.4 lID.segCompat = muon::segmentCompatibility(*recoMuon);
511 amagnan 1.1 lID.nChambers = recoMuon->numberOfChambers();
512     lID.nMatchesLoose = recoMuon->numberOfMatches(reco::Muon::NoArbitration);
513     lID.nMatchesMedium = recoMuon->numberOfMatches(reco::Muon::SegmentArbitration);
514     lID.nMatchesTight = recoMuon->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
515    
516 amagnan 1.3 HbbAnalysis::Muon lObj(lGen,lReco,lTrk,lIsoR03,lIsoR05,lID);
517 amagnan 1.1 aVec.push_back(lObj);
518     iEle++;
519     }
520     }
521     }
522    
523     }//HbbMuons
524    
525     void HbbTreeMaker::HbbTaus(const edm::Handle<std::vector<pat::Tau> > & aCol,
526 amagnan 1.3 const edm::Handle<std::vector<reco::Vertex> > & aRecoVertices,
527     std::vector<HbbAnalysis::Tau> & aVec)
528 amagnan 1.1 {//HbbTaus
529    
530     if (aCol.isValid()){
531     if (aCol->size() > 0) {
532    
533     unsigned int iEle = 0;
534     for (std::vector<pat::Tau>::const_iterator iter = aCol->begin();
535     iter != aCol->end();
536     iter++)
537     {
538     //if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
539    
540     HbbAnalysis::GenVars lGen;
541 amagnan 1.4 if (!processData_ && (*iter).genLepton()){
542 amagnan 1.1 lGen.valid = true;
543 amagnan 1.2 lGen.E = (*iter).genLepton()->energy();
544 amagnan 1.1 lGen.pT = (*iter).genLepton()->pt();
545     lGen.eta = (*iter).genLepton()->eta();
546     lGen.phi = (*iter).genLepton()->phi();
547     lGen.charge = (*iter).genLepton()->charge();
548     lGen.pdgId = (*iter).genLepton()->pdgId();
549     lGen.status = (*iter).genLepton()->status();
550     lGen.mass = (*iter).genLepton()->mass();
551     lGen.vx = (*iter).genLepton()->vx();
552     lGen.vy = (*iter).genLepton()->vy();
553     lGen.vz = (*iter).genLepton()->vz();
554     }
555     else {
556     lGen.valid = false;
557 amagnan 1.2 lGen.E = 0;
558 amagnan 1.1 lGen.pT = 0;
559     lGen.eta = 0;
560     lGen.phi = 0;
561     lGen.charge = 0;
562     lGen.pdgId = 0;
563     lGen.status = 0;
564     lGen.mass = 0;
565     lGen.vx = 0;
566     lGen.vy = 0;
567     lGen.vz = 0;
568     }
569    
570    
571     HbbAnalysis::GenVars lGenJet;
572 amagnan 1.4 if (!processData_ && (*iter).genJet()){
573 amagnan 1.1 lGenJet.valid = true;
574 amagnan 1.4 lGenJet.E = (*iter).genJet()->energy();
575 amagnan 1.1 lGenJet.pT = (*iter).genJet()->pt();
576     lGenJet.eta = (*iter).genJet()->eta();
577     lGenJet.phi = (*iter).genJet()->phi();
578     lGenJet.charge = (*iter).genJet()->charge();
579     lGenJet.pdgId = (*iter).genJet()->pdgId();
580     lGenJet.status = (*iter).genJet()->status();
581     lGenJet.mass = (*iter).genJet()->mass();
582     lGenJet.vx = (*iter).genJet()->vx();
583     lGenJet.vy = (*iter).genJet()->vy();
584     lGenJet.vz = (*iter).genJet()->vz();
585     }
586     else {
587     lGenJet.valid = false;
588 amagnan 1.4 lGenJet.E = 0;
589 amagnan 1.1 lGenJet.pT = 0;
590     lGenJet.eta = 0;
591     lGenJet.phi = 0;
592     lGenJet.charge = 0;
593     lGenJet.pdgId = 0;
594     lGenJet.status = 0;
595     lGenJet.mass = 0;
596     lGenJet.vx = 0;
597     lGenJet.vy = 0;
598     lGenJet.vz = 0;
599     }
600    
601     HbbAnalysis::BaseVars lReco;
602 amagnan 1.2 lReco.E = (*iter).energy();
603 amagnan 1.1 lReco.pT = (*iter).pt();
604     lReco.eta = (*iter).eta();
605     lReco.phi = (*iter).phi();
606     lReco.charge = (*iter).charge();
607     lReco.vx = (*iter).vx();
608     lReco.vy = (*iter).vy();
609     lReco.vz = (*iter).vz();
610    
611     bool isCalo = (*iter).isCaloTau();
612     bool isPF = (*iter).isPFTau();
613    
614     assert (isCalo == !isPF);
615    
616     HbbAnalysis::TauLeadTrkVars lLead;
617     if (isCalo) {
618     lLead.signedSipt = (*iter).leadTracksignedSipt();
619    
620     reco::TrackRef lCaloTrk = (*iter).leadTrack();
621    
622     if ( lCaloTrk.isAvailable() && lCaloTrk.isNonnull() ) {
623     lLead.pT = lCaloTrk->pt();
624     lLead.eta = lCaloTrk->eta();
625     lLead.phi = lCaloTrk->phi();
626    
627     lLead.matchDist = reco::deltaR(lCaloTrk->momentum(), (*iter).p4());
628    
629     if ( aRecoVertices->size() >= 1 ) {
630     const reco::Vertex& thePrimaryEventVertex = (*aRecoVertices->begin());
631     lLead.IPxy = lCaloTrk->dxy(thePrimaryEventVertex.position());
632     lLead.IPz = lCaloTrk->dz(thePrimaryEventVertex.position());
633     }
634     else {
635     lLead.IPxy = 0;
636     lLead.IPz = 0;
637     }
638     }
639     else {
640     lLead.pT = 0;
641     lLead.eta = 0;
642     lLead.phi = 0;
643     lLead.matchDist = 0;
644     lLead.IPxy = 0;
645     lLead.IPz = 0;
646     lLead.signedSipt = 0;
647     }
648     }//calo
649     else {
650     lLead.signedSipt = (*iter).leadPFChargedHadrCandsignedSipt();
651    
652     reco::PFCandidateRef lHadrCand = (*iter).leadPFChargedHadrCand();
653    
654     if ( lHadrCand.isAvailable() && lHadrCand.isNonnull() ) {
655     lLead.pT = lHadrCand->pt();
656     lLead.eta = lHadrCand->eta();
657     lLead.phi = lHadrCand->phi();
658    
659     lLead.matchDist = reco::deltaR(lHadrCand->p4(), (*iter).p4());
660    
661     reco::TrackRef lTrk = lHadrCand->trackRef();
662    
663     if ( aRecoVertices->size() >= 1) {
664     const reco::Vertex& thePrimaryEventVertex = (*aRecoVertices->begin());
665     lLead.IPxy = lTrk->dxy(thePrimaryEventVertex.position());
666     lLead.IPz = lTrk->dz(thePrimaryEventVertex.position());
667     }
668     else {
669     lLead.IPxy = 0;
670     lLead.IPz = 0;
671     }
672     }
673     else {
674     lLead.pT = 0;
675     lLead.eta = 0;
676     lLead.phi = 0;
677     lLead.matchDist = 0;
678     lLead.IPxy = 0;
679     lLead.IPz = 0;
680     lLead.signedSipt = 0;
681     }
682    
683     }//pf
684    
685    
686    
687     const std::vector<std::pair<std::string,float> > & lIDs = (*iter).tauIDs();
688     bool lPrint = false;
689     //a few warning if additional discriminants are found:
690     if ((isPF && lIDs.size() != 7) ||
691     (isCalo && lIDs.size() != 3))
692     lPrint = true;
693    
694     if (lPrint) {
695     std::cout << "!!!!!!! Discriminants changed, please update histograms !!!!!!!" << std::endl;
696     std::cout << "--- isCaloTau = " << isCalo << ", isPFTau = " << isPF << std::endl;
697     std::cout << "------ ID names = " << std::endl;
698     }
699    
700    
701 amagnan 1.4 HbbAnalysis::CaloTauIDVars lcaloId;
702     lcaloId.byIsolation = 0;
703     lcaloId.byLeadingTrackFinding = 0;
704     lcaloId.byLeadingTrackPtCut = 0;
705    
706 amagnan 1.1 HbbAnalysis::PFTauIDVars lpfId;
707 amagnan 1.4 lpfId.byLeadingTrackFinding = 0;
708     lpfId.byLeadingTrackPtCut = 0;
709     lpfId.byTrackIsolation = 0;
710     lpfId.byECALIsolation = 0;
711     lpfId.byIsolation = 0;
712     lpfId.againstElectron = 0;
713     lpfId.againstMuon = 0;
714    
715    
716 amagnan 1.1
717     for (unsigned int id(0); id<lIDs.size(); id++){
718    
719     std::string lName = lIDs.at(id).first;
720     float lDiscri = lIDs.at(id).second;
721    
722     if (lPrint) std::cout << "--------- " << lName << " = " << lDiscri << std::endl;
723     //pf
724    
725     if (isPF) {
726     if (lName.find("leadingTrackFinding") != lName.npos) lpfId.byLeadingTrackFinding = lDiscri;
727     if (lName.find("leadingTrackPtCut") != lName.npos) lpfId.byLeadingTrackPtCut = lDiscri;
728     if (lName.find("trackIsolation") != lName.npos) lpfId.byTrackIsolation = lDiscri;
729     if (lName.find("ecalIsolation") != lName.npos) lpfId.byECALIsolation = lDiscri;
730     if (lName.find("byIsolation") != lName.npos) lpfId.byIsolation = lDiscri;
731     if (lName.find("againstElectron") != lName.npos) lpfId.againstElectron = lDiscri;
732     if (lName.find("againstMuon") != lName.npos) lpfId.againstMuon = lDiscri;
733     }
734     if (isCalo){
735     if (lName.find("byIsolation") != lName.npos) lcaloId.byIsolation = lDiscri;
736     if (lName.find("leadingTrackFinding") != lName.npos) lcaloId.byLeadingTrackFinding = lDiscri;
737     if (lName.find("leadingTrackPtCut") != lName.npos) lcaloId.byLeadingTrackPtCut = lDiscri;
738     }
739    
740    
741     }
742    
743    
744     if (isCalo){
745    
746     HbbAnalysis::CaloTauIsoVars lcaloIso;
747     lcaloIso.nIsoTracks = (*iter).isolationTracks().size();
748     lcaloIso.nSigTracks = (*iter).signalTracks().size();
749     lcaloIso.leadTrackHCAL3x3hitsEtSum = (*iter).leadTrackHCAL3x3hitsEtSum();
750     lcaloIso.leadTrackHCAL3x3hottesthitDEta = (*iter).leadTrackHCAL3x3hottesthitDEta();
751     lcaloIso.signalTracksInvariantMass = (*iter).signalTracksInvariantMass();
752     lcaloIso.tracksInvariantMass = (*iter).TracksInvariantMass();
753     lcaloIso.isolationTracksPtSum = (*iter).isolationTracksPtSum();
754     lcaloIso.isolationECALhitsEtSum = (*iter).isolationECALhitsEtSum();
755     lcaloIso.maximumHCALhitEt = (*iter).maximumHCALhitEt();
756    
757     HbbAnalysis::Tau lObj(lGen,lGenJet,lReco,lLead,lcaloIso,lcaloId);
758     aVec.push_back(lObj);
759     }
760     else {
761    
762     HbbAnalysis::PFTauIsoVars lpfIso;
763     lpfIso.nSigCands = (*iter).signalPFCands().size();
764     lpfIso.nIsoCands = (*iter).isolationPFCands().size();
765     lpfIso.maximumHCALPFClusterEt = (*iter).maximumHCALPFClusterEt();
766     //lpfIso.emFraction = (*iter).emFraction();
767     lpfIso.hcalTotOverPLead = (*iter).hcalTotOverPLead();
768     lpfIso.hcalMaxOverPLead = (*iter).hcalMaxOverPLead();
769     lpfIso.hcal3x3OverPLead = (*iter).hcal3x3OverPLead();
770     lpfIso.ecalStripSumEOverPLead = (*iter).ecalStripSumEOverPLead();
771     lpfIso.bremsRecoveryEOverPLead = (*iter).bremsRecoveryEOverPLead();
772    
773     HbbAnalysis::PFTauCandVars lHadr;
774     lHadr.nSigCands = (*iter).signalPFChargedHadrCands().size();
775     lHadr.nIsoCands = (*iter).isolationPFChargedHadrCands().size();
776     lHadr.isolationPtSum = (*iter).isolationPFChargedHadrCandsPtSum();
777    
778     HbbAnalysis::PFTauCandVars lNeutr;
779     lNeutr.nSigCands = (*iter).signalPFNeutrHadrCands().size();
780     lNeutr.nIsoCands = (*iter).isolationPFNeutrHadrCands().size();
781 amagnan 1.4 lNeutr.isolationPtSum = (*iter).neutralHadronIso();
782 amagnan 1.1
783     HbbAnalysis::PFTauCandVars lGamma;
784     lGamma.nSigCands = (*iter).signalPFGammaCands().size();
785     lGamma.nIsoCands = (*iter).isolationPFGammaCands().size();
786     lGamma.isolationPtSum = (*iter).isolationPFGammaCandsEtSum();
787    
788     HbbAnalysis::PFTauEleIDVars lEleId;
789     if ( (*iter).electronPreIDTrack().isAvailable() && (*iter).electronPreIDTrack().isNonnull() ) {
790     lEleId.pT = (*iter).electronPreIDTrack()->pt();
791     lEleId.eta = (*iter).electronPreIDTrack()->eta();
792     lEleId.phi = (*iter).electronPreIDTrack()->phi();
793     }
794     else {
795     lEleId.pT = 0;
796     lEleId.eta = 0;
797     lEleId.phi = 0;
798     }
799    
800     lEleId.output = (*iter).electronPreIDOutput();
801     lEleId.decision = (*iter).electronPreIDDecision();
802    
803     HbbAnalysis::PFTauMuIDVars lMuId;
804     lMuId.caloCompat = (*iter).caloComp();
805     lMuId.segCompat = (*iter).segComp();
806     lMuId.decision = (*iter).muonDecision();
807    
808     HbbAnalysis::Tau lObj(lGen,lGenJet,lReco,lLead,lpfIso,lHadr,lNeutr,lGamma,lpfId,lEleId,lMuId);
809     aVec.push_back(lObj);
810     }
811     iEle++;
812     }
813     }
814     }
815    
816     }//HbbTaus
817    
818     void HbbTreeMaker::HbbJets(const edm::Handle<std::vector<pat::Jet> > & aCol,
819     const HbbAnalysis::JetFlavour & aJetFlav,
820     const edm::Handle<reco::GenParticleCollection> & aGenParticles,
821     std::vector<HbbAnalysis::Jet> & aVec)
822     {//HbbJets
823    
824     if (aCol.isValid()){//valid
825     if (aCol->size() > 0) {//non empty
826    
827     unsigned int iEle = 0;
828     for (std::vector<pat::Jet>::const_iterator iter = aCol->begin();
829     iter != aCol->end();
830     iter++)
831     {//loop on element
832     //if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
833    
834     HbbAnalysis::GenVars lGen;
835 amagnan 1.4 if (!processData_ && (*iter).genParton()){
836 amagnan 1.1 lGen.valid = true;
837 amagnan 1.2 lGen.E = (*iter).genParton()->energy();
838 amagnan 1.1 lGen.pT = (*iter).genParton()->pt();
839     lGen.eta = (*iter).genParton()->eta();
840     lGen.phi = (*iter).genParton()->phi();
841     lGen.charge = (*iter).genParton()->charge();
842     lGen.pdgId = (*iter).genParton()->pdgId();
843     lGen.status = (*iter).genParton()->status();
844     lGen.mass = (*iter).genParton()->mass();
845     lGen.vx = (*iter).genParton()->vx();
846     lGen.vy = (*iter).genParton()->vy();
847     lGen.vz = (*iter).genParton()->vz();
848     }
849     else {
850     lGen.valid = false;
851 amagnan 1.2 lGen.E = 0;
852 amagnan 1.1 lGen.pT = 0;
853     lGen.eta = 0;
854     lGen.phi = 0;
855     lGen.charge = 0;
856     lGen.pdgId = 0;
857     lGen.status = 0;
858     lGen.mass = 0;
859     lGen.vx = 0;
860     lGen.vy = 0;
861     lGen.vz = 0;
862     }
863    
864    
865     HbbAnalysis::GenVars lGenJet;
866 amagnan 1.4 if (!processData_ && (*iter).genJet()){
867 amagnan 1.1 lGenJet.valid = true;
868 amagnan 1.4 lGenJet.E = (*iter).genJet()->energy();
869 amagnan 1.1 lGenJet.pT = (*iter).genJet()->pt();
870     lGenJet.eta = (*iter).genJet()->eta();
871     lGenJet.phi = (*iter).genJet()->phi();
872     lGenJet.charge = (*iter).genJet()->charge();
873     lGenJet.pdgId = (*iter).genJet()->pdgId();
874     lGenJet.status = (*iter).genJet()->status();
875     lGenJet.mass = (*iter).genJet()->mass();
876     lGenJet.vx = (*iter).genJet()->vx();
877     lGenJet.vy = (*iter).genJet()->vy();
878     lGenJet.vz = (*iter).genJet()->vz();
879     }
880     else {
881     lGenJet.valid = false;
882 amagnan 1.4 lGenJet.E = 0;
883 amagnan 1.1 lGenJet.pT = 0;
884     lGenJet.eta = 0;
885     lGenJet.phi = 0;
886     lGenJet.charge = 0;
887     lGenJet.pdgId = 0;
888     lGenJet.status = 0;
889     lGenJet.mass = 0;
890     lGenJet.vx = 0;
891     lGenJet.vy = 0;
892     lGenJet.vz = 0;
893     }
894    
895     HbbAnalysis::BaseVars lReco;
896 amagnan 1.2 lReco.E = (*iter).energy();
897 amagnan 1.1 lReco.pT = (*iter).pt();
898     lReco.eta = (*iter).eta();
899     lReco.phi = (*iter).phi();
900     lReco.charge = (*iter).jetCharge();
901     lReco.vx = (*iter).vx();
902     lReco.vy = (*iter).vy();
903     lReco.vz = (*iter).vz();
904    
905     unsigned int lFlav = 0;
906 amagnan 1.4 if (!processData_ && aJetFlav.nPartons()) {
907 amagnan 1.1 lFlav = aJetFlav.partonMatchingGenJet((*iter),aGenParticles,0.4).second;
908     }
909    
910     HbbAnalysis::JetVars lCommon;
911     lCommon.flavour = lFlav;
912     lCommon.partonFlavour = (*iter).partonFlavour();
913     lCommon.nAssociatedTracks = ((*iter).associatedTracks()).size();
914     lCommon.rawpT = (*iter).pt();
915 amagnan 1.4 if ((*iter).hasCorrFactors())
916     lCommon.rawpT = (*iter).pt()/((*iter).corrFactor((*iter).corrStep()));
917 amagnan 1.1 //lCommon.rawEta = (*iter).;
918     //lCommon.rawPhi = (*iter).;
919     // p_hasJetCorrFactors->Fill(aJet.hasJetCorrFactors());
920    
921     HbbAnalysis::JetBtagVars lBtag;
922     lBtag.cSV = (*iter).bDiscriminator("combinedSecondaryVertexBJetTags");
923     lBtag.cSVMVA = (*iter).bDiscriminator("combinedSecondaryVertexMVABJetTags");
924     lBtag.iPMVA = (*iter).bDiscriminator("impactParameterMVABJetTags");
925     lBtag.bProba = (*iter).bDiscriminator("jetBProbabilityBJetTags");
926     lBtag.probability = (*iter).bDiscriminator("jetProbabilityBJetTags");
927     lBtag.sSV = (*iter).bDiscriminator("simpleSecondaryVertexBJetTags");
928     lBtag.softElectron = (*iter).bDiscriminator("softElectronBJetTags");
929     lBtag.softMuon = (*iter).bDiscriminator("softMuonBJetTags");
930     lBtag.softMuonNoIP = (*iter).bDiscriminator("softMuonNoIPBJetTags");
931     lBtag.tCHE = (*iter).bDiscriminator("trackCountingHighEffBJetTags");
932     lBtag.tCHP = (*iter).bDiscriminator("trackCountingHighPurBJetTags");
933    
934     bool isCalo = (*iter).isCaloJet();
935     bool isPF = (*iter).isPFJet();
936    
937     assert (isCalo == !isPF);
938     if (isCalo) {
939     HbbAnalysis::CaloJetVars lCalo;
940     lCalo.maxEInEmTowers = (*iter).maxEInEmTowers();
941     lCalo.maxEInHadTowers = (*iter).maxEInHadTowers();
942     lCalo.energyFractionHadronic = (*iter).energyFractionHadronic();
943     lCalo.emEnergyFraction = (*iter).emEnergyFraction();
944     lCalo.hadEnergyInHB = (*iter).hadEnergyInHB();
945     lCalo.hadEnergyInHO = (*iter).hadEnergyInHO();
946     lCalo.hadEnergyInHE = (*iter).hadEnergyInHE();
947     lCalo.hadEnergyInHF = (*iter).hadEnergyInHF();
948     lCalo.emEnergyInEB = (*iter).emEnergyInEB();
949     lCalo.emEnergyInEE = (*iter).emEnergyInEE();
950     lCalo.emEnergyInHF = (*iter).emEnergyInHF();
951     lCalo.towersArea = (*iter).towersArea();
952     lCalo.n90 = (*iter).n90();
953     lCalo.n60 = (*iter).n60();
954    
955     HbbAnalysis::Jet lObj(lGen,lGenJet,lReco,lCommon,lCalo,lBtag);
956     aVec.push_back(lObj);
957    
958     }
959    
960     if (isPF){
961     HbbAnalysis::PFJetVars lPF;
962     lPF.chargedHadronEnergy = (*iter).chargedHadronEnergy();
963     lPF.chargedHadronEnergyFraction = (*iter).chargedHadronEnergyFraction();
964     lPF.neutralHadronEnergy = (*iter).neutralHadronEnergy();
965     lPF.neutralHadronEnergyFraction = (*iter).neutralHadronEnergyFraction();
966     lPF.chargedEmEnergy = (*iter).chargedEmEnergy();
967     lPF.chargedEmEnergyFraction = (*iter).chargedEmEnergyFraction();
968     lPF.chargedMuEnergy = (*iter).chargedMuEnergy();
969     lPF.chargedMuEnergyFraction = (*iter).chargedMuEnergyFraction();
970     lPF.neutralEmEnergy = (*iter).neutralEmEnergy();
971     lPF.neutralEmEnergyFraction = (*iter).neutralEmEnergyFraction();
972     lPF.chargedMultiplicity = (*iter).chargedMultiplicity();
973     lPF.neutralMultiplicity = (*iter).neutralMultiplicity();
974     lPF.muonMultiplicity = (*iter).muonMultiplicity();
975    
976     HbbAnalysis::Jet lObj(lGen,lGenJet,lReco,lCommon,lPF,lBtag);
977     aVec.push_back(lObj);
978    
979     }
980    
981     iEle++;
982     }//loop on element
983     }//non empty
984     }//valid
985    
986     }//HbbJets
987    
988     void HbbTreeMaker::HbbMet(const edm::Handle<std::vector<pat::MET> > & aCol,
989     HbbAnalysis::Met & aMet)
990     {//HbbMet
991     HbbAnalysis::MetVars lGen;
992     HbbAnalysis::MetVars lReco;
993    
994     assert(aCol->size() == 1);
995     const pat::MET & lMet = *(aCol->begin());
996    
997     lReco.mET = lMet.pt();
998     lReco.mEx = lMet.px();
999     lReco.mEy = lMet.py();
1000     lReco.sumET = lMet.sumEt();
1001     lReco.phi = lMet.phi();
1002     lReco.mEtSig = lMet.mEtSig();
1003    
1004     const reco::GenMET *lGenMET = lMet.genMET();
1005    
1006 amagnan 1.4 if (!processData_ && lGenMET){
1007 amagnan 1.1 lGen.mET = lGenMET->pt();
1008     lGen.mEx = lGenMET->px();
1009     lGen.mEy = lGenMET->py();
1010     lGen.sumET = lGenMET->sumEt();
1011     lGen.phi = lGenMET->phi();
1012     lGen.mEtSig = lGenMET->mEtSig();
1013     }
1014     else {
1015     lGen.mET = 0;
1016     lGen.mEx = 0;
1017     lGen.mEy = 0;
1018     lGen.sumET = 0;
1019     lGen.phi = 0;
1020     lGen.mEtSig = 0;
1021     }
1022    
1023     aMet.genVars(lGen);
1024     aMet.recoVars(lReco);
1025    
1026     }//HbbMet
1027    
1028     void HbbTreeMaker::HbbTrigger(const edm::Handle<edm::TriggerResults> & aCol,
1029     std::vector<HbbAnalysis::Trigger> & aVec)
1030     {//HbbTrigger
1031    
1032     if (aCol.isValid()){
1033     edm::TriggerNames lNames;
1034     lNames.init(*aCol);
1035    
1036     //for (unsigned int j=0; j<hltPaths_.size(); j++) {
1037     //bool valid=false;
1038     for (unsigned int i=0; i<aCol->size(); i++){
1039     std::string trueName = lNames.triggerNames().at(i);
1040    
1041     HbbAnalysis::TriggerVars lTrigVars;
1042     lTrigVars.name = trueName;
1043     lTrigVars.index = i;
1044     lTrigVars.accept = aCol->accept(i);
1045    
1046     HbbAnalysis::Trigger lObj(lTrigVars);
1047    
1048     aVec.push_back(lObj);
1049     }
1050    
1051     }
1052    
1053     }
1054    
1055     void HbbTreeMaker::HbbParticles(const edm::Handle<reco::GenParticleCollection> & aCol,
1056     std::vector<HbbAnalysis::GenParticle> & aVec)
1057     {//genparticles
1058    
1059     //add genParticle inside vector
1060     for (unsigned int mccount = 0;mccount<aCol->size();mccount++)
1061     {//loop on particles
1062     const reco::Candidate & p = (*aCol)[mccount];
1063    
1064     HbbAnalysis::MCVars lMC;
1065     lMC.index = mccount;
1066 amagnan 1.2 lMC.E = p.energy();
1067 amagnan 1.1 lMC.pT = p.pt();
1068     lMC.eta = p.eta();
1069     lMC.phi = p.phi();
1070     lMC.pdgId = p.pdgId();
1071     lMC.status = p.status();
1072     HbbAnalysis::GenParticle lObj(lMC);
1073     aVec.push_back(lObj);
1074    
1075     }//loop on particles
1076    
1077     //now need to get the list of parents....
1078    
1079     for (unsigned int mccount = 0;mccount<aCol->size();mccount++)
1080     {//loop on particles
1081     const reco::Candidate & p = (*aCol)[mccount];
1082    
1083     unsigned int nD = p.numberOfDaughters();
1084     //std::cout << mccount << " has " << nD << " daughter(s) : " ;
1085     for(unsigned int dau=0;dau<nD;dau++){//loop on daughters
1086     const reco::Candidate * pDau = p.daughter(dau);
1087     //std::cout << pDau << " ("<<std::flush;
1088     for (unsigned int mccount2 = 0;mccount2<aCol->size();mccount2++)
1089     {//loop on particles
1090     const reco::Candidate & p2 = (*aCol)[mccount2];
1091     //std::cout<<"DBG: mccount2 = "<<mccount2<<" gen size = "<<data_->gen().size()<<std::endl;
1092    
1093     HbbAnalysis::GenParticle & part2 = aVec.at(mccount2);
1094     if (pDau == &p2) {
1095     part2.setParent(mccount);
1096     //std::cout << &p2 << ", index = " << mccount2 << "), "<<std::flush;
1097     break;
1098     }
1099     //else std::cout << std::endl << "****no match " << mccount2 << " " << &p2 << std::endl;
1100     //if (p2.pdgId() == pDau->pdgId() && fabs(p2.energy()-pDau->energy())<0.000001 && fabs(p2.eta()-pDau->eta())<0.000001 && fabs(p2.phi()-pDau->phi())<0.000001){
1101     //part2.parent(mccount);
1102     //}
1103     }//loop on particles
1104     }//loop on daughters
1105     //std::cout << std::endl;
1106    
1107     }//loop on particles
1108    
1109     if (debug_){
1110     for (unsigned int imc(0); imc < aVec.size(); imc++){
1111     HbbAnalysis::GenParticle & p = aVec.at(imc);
1112     p.print();
1113     }
1114     }
1115    
1116    
1117     }//genparticles