ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/plugins/HbbTreeMaker.cc
Revision: 1.16
Committed: Wed May 19 17:24:44 2010 UTC (15 years ago) by amagnan
Content type: text/plain
Branch: MAIN
Changes since 1.15: +99 -1 lines
Log Message:
adding L1 and HLT jet objects to tree

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 amagnan 1.11 #include "CommonTools/UtilAlgos/interface/TFileService.h"
23 amagnan 1.1
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 amagnan 1.5 #include "UserCode/HbbAnalysis/interface/Vertex.hh"
32 amagnan 1.1
33     #include "UserCode/HbbAnalysis/plugins/HbbTreeMaker.hh"
34    
35     using namespace HbbAnalysis;
36    
37     HbbTreeMaker::HbbTreeMaker(const edm::ParameterSet & pset):
38     debug_(pset.getParameter<int>("DEBUG")),
39 amagnan 1.5 processData_(false),
40 amagnan 1.1 flavour_(pset.getParameter<unsigned int>("JetFlavour")),
41     doGen_(pset.getParameter<bool>("DOGEN")),
42     genParticleSrc_(pset.getParameter<edm::InputTag>("GenParticles")),
43     electronSrc_(pset.getParameter<edm::InputTag>("Electrons")),
44     muonSrc_(pset.getParameter<edm::InputTag>("Muons")),
45     caloTauSrc_(pset.getParameter<edm::InputTag>("CaloTaus")),
46     pfTauSrc_(pset.getParameter<edm::InputTag>("PFTaus")),
47     caloJetSrc_(pset.getParameter<edm::InputTag>("CaloJets")),
48     jptJetSrc_(pset.getParameter<edm::InputTag>("JPTJets")),
49     pfJetSrc_(pset.getParameter<edm::InputTag>("PFJets")),
50     caloMetSrc_(pset.getParameter<edm::InputTag>("CaloMET")),
51     tcMetSrc_(pset.getParameter<edm::InputTag>("TCMET")),
52     pfMetSrc_(pset.getParameter<edm::InputTag>("PFMET")),
53     //pairSrc_(pset.getParameter<edm::InputTag>("Pair")),
54     //mmPairSrc_(pset.getParameter<edm::InputTag>("MuMuPair")),
55     //etPairSrc_(pset.getParameter<edm::InputTag>("ETauPair")),
56     //mtPairSrc_(pset.getParameter<edm::InputTag>("MuTauPair")),
57     vertexSrc_(pset.getParameter<edm::InputTag>("Vertex")),
58     triggerSrc_(pset.getParameter<edm::InputTag>("Trigger")),
59     hltPaths_(pset.getParameter<std::vector<std::string> >("HLTPaths")),
60 amagnan 1.16 l1CenJetSrc_(pset.getParameter<edm::InputTag>("L1CenJet")),
61     l1TauJetSrc_(pset.getParameter<edm::InputTag>("L1TauJet")),
62     l1FwdJetSrc_(pset.getParameter<edm::InputTag>("L1FwdJet")),
63     hltSummarySrc_(pset.getParameter<edm::InputTag>("HLTSummary")),
64 amagnan 1.1 event_(0),
65 amagnan 1.16 tree_(0),
66     hltTags_(pset.getParameter<std::vector<edm::InputTag> >("HLTTags"))
67 amagnan 1.1 //processVec_(pset.getParameter<std::vector<std::string> >("ProcessVec"))
68     {//constructor
69    
70    
71     }//constructor
72    
73     HbbTreeMaker::~HbbTreeMaker(){//destructor
74     }//destructor
75    
76    
77    
78 amagnan 1.5 void HbbTreeMaker::beginJob(){//beginJob
79 amagnan 1.1
80    
81     edm::Service<TFileService> lFileService;
82    
83     TFileDirectory lDir = lFileService->mkdir("HbbAnalysis");
84    
85     tree_ = lDir.make<TTree>("Tree","Tree");
86     tree_->Branch("HbbEvent","HbbAnalysis::HbbEvent",&event_);
87     event_ = new HbbEvent();
88    
89     if (debug_) std::cout << "Initialising JetFlavour : " << std::endl;
90    
91     lDir = lFileService->mkdir("JetFlavours");
92 amagnan 1.5 jetFlav_.Initialise(lDir, debug_, flavour_);
93 amagnan 1.1
94 amagnan 1.16
95 amagnan 1.1 }//beginJob
96    
97     void HbbTreeMaker::endJob(){//endJob
98 amagnan 1.4 if (!processData_) jetFlav_.printSummary();
99 amagnan 1.1
100     //tree_->Write();
101     //delete tree_;
102     //delete event_;
103    
104     }//endJob
105    
106     void HbbTreeMaker::analyze(const edm::Event& aEvt, const edm::EventSetup& aEvtSetup){//analyze
107    
108     //dumpContent(aEvt,"","MuTauPAT");
109     if (debug_) std::cout << "Processing event #" << aEvt.id().event() << std::endl;
110    
111    
112     static bool firstEvent = true;
113    
114     event_->Clear();
115     event_->event(aEvt.id().event());
116 amagnan 1.5 processData_ = aEvt.isRealData();
117    
118     event_->run(aEvt.run());
119     event_->lumiBlock(aEvt.luminosityBlock());
120 amagnan 1.9 event_->isRealData(aEvt.isRealData());
121 amagnan 1.1
122     edm::Handle<reco::GenParticleCollection> lGenParticles;
123     try {
124     aEvt.getByLabel(genParticleSrc_,lGenParticles);
125     if (debug_) std::cout << "** ngenParticles = " << lGenParticles->size() << std::endl;
126     } catch(cms::Exception& e) {
127 amagnan 1.4 if (!processData_) std::cout << "AMM: Collection genParticles not available! Exception : " << e.what() << ". " << std::endl;
128 amagnan 1.1 }
129    
130 amagnan 1.4 if (doGen_ && !processData_) HbbParticles(lGenParticles,event_->particles());
131 amagnan 1.1
132 amagnan 1.4 unsigned int lNPartons = 0;
133     if (!processData_) lNPartons = jetFlav_.fillPartons(lGenParticles);
134 amagnan 1.1
135 amagnan 1.4 if (debug_ && !processData_) std::cout << "--- Number of partons = " << lNPartons << "." << std::endl;
136 amagnan 1.1
137    
138     edm::Handle<std::vector<reco::Vertex> > lRecoVertices;
139     try {
140     aEvt.getByLabel(vertexSrc_, lRecoVertices);
141     if (!lRecoVertices.isValid()){
142     edm::LogInfo("ERROR")<< "Error! Can't get vertex by label. ";
143     }
144     if (debug_) std::cout << "** vertexcollection = " << lRecoVertices->size() << " elements." << std::endl;
145     } catch(cms::Exception& e) {
146     std::cout << "AMM: Collection " << vertexSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
147     }
148    
149 amagnan 1.5 HbbVertices(lRecoVertices,event_->vertices());
150    
151 amagnan 1.1 edm::Handle<std::vector<pat::Electron> > lElectronCollection;
152    
153     try {
154     aEvt.getByLabel(electronSrc_,lElectronCollection);
155     if (!lElectronCollection.isValid()){
156     edm::LogInfo("ERROR")<< "Error! Can't get electron by label. ";
157     }
158     if (debug_) std::cout << "** electroncollection = " << lElectronCollection->size() << " elements." << std::endl;
159     } catch(cms::Exception& e) {
160     std::cout << "AMM: Collection " << electronSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
161     }
162    
163     HbbElectrons(lElectronCollection,event_->electrons());
164    
165    
166     edm::Handle<std::vector<pat::Muon> > lMuonCollection;
167    
168     try {
169     aEvt.getByLabel(muonSrc_,lMuonCollection);
170     if (!lMuonCollection.isValid()){
171     edm::LogInfo("ERROR")<< "Error! Can't get muon by label. ";
172     }
173     if (debug_) std::cout << "** muoncollection = " << lMuonCollection->size() << " elements." << std::endl;
174     } catch(cms::Exception& e) {
175     std::cout << "AMM: Collection " << muonSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
176     }
177    
178 amagnan 1.3 HbbMuons(lMuonCollection,lRecoVertices,event_->muons());
179 amagnan 1.1
180    
181 amagnan 1.5 if (!( caloTauSrc_.label()=="" && caloTauSrc_.instance()=="" )) {
182     edm::Handle<std::vector<pat::Tau> > lTauCollection;
183 amagnan 1.1
184 amagnan 1.5 try {
185     aEvt.getByLabel(caloTauSrc_,lTauCollection);
186     if (!lTauCollection.isValid()){
187     edm::LogInfo("ERROR")<< "Error! Can't get caloTau by label. ";
188     }
189     if (debug_) std::cout << "** caloTaucollection = " << lTauCollection->size() << " elements." << std::endl;
190     } catch(cms::Exception& e) {
191     std::cout << "AMM: Collection " << caloTauSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
192     }
193    
194     HbbTaus(lTauCollection,lRecoVertices,event_->caloTaus());
195 amagnan 1.1 }
196    
197     edm::Handle<std::vector<pat::Tau> > lPFTauCollection;
198    
199     try {
200     aEvt.getByLabel(pfTauSrc_,lPFTauCollection);
201     if (!lPFTauCollection.isValid()){
202     edm::LogInfo("ERROR")<< "Error! Can't get pfTau by label. ";
203     }
204     if (debug_) std::cout << "** pfTaucollection = " << lPFTauCollection->size() << " elements." << std::endl;
205     } catch(cms::Exception& e) {
206     std::cout << "AMM: Collection " << pfTauSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
207     }
208    
209     HbbTaus(lPFTauCollection,lRecoVertices,event_->pfTaus());
210    
211     edm::Handle<std::vector<pat::Jet> > lCaloJetCollection;
212    
213     try {
214     aEvt.getByLabel(caloJetSrc_,lCaloJetCollection);
215     if (!lCaloJetCollection.isValid()){
216     edm::LogInfo("ERROR")<< "Error! Can't get caloJets by label. ";
217     }
218     if (debug_) std::cout << "** caloJetcollection = " << lCaloJetCollection->size() << " elements." << std::endl;
219     } catch(cms::Exception& e) {
220     std::cout << "AMM: Collection " << caloJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
221     }
222    
223 amagnan 1.7 //std::cout << "Processing calo jets:" << std::endl;
224 amagnan 1.1 HbbJets(lCaloJetCollection,jetFlav_,lGenParticles,event_->caloJets());
225    
226     edm::Handle<std::vector<pat::Jet> > lJptJetCollection;
227    
228     try {
229     aEvt.getByLabel(jptJetSrc_,lJptJetCollection);
230     if (!lJptJetCollection.isValid()){
231     edm::LogInfo("ERROR")<< "Error! Can't get jptJets by label. ";
232     }
233     if (debug_) std::cout << "** jptJetcollection = " << lJptJetCollection->size() << " elements." << std::endl;
234     } catch(cms::Exception& e) {
235     std::cout << "AMM: Collection " << jptJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
236     }
237    
238 amagnan 1.7 //std::cout << "Processing JPT jets:" << std::endl;
239 amagnan 1.1 HbbJets(lJptJetCollection,jetFlav_,lGenParticles,event_->jptJets());
240    
241     edm::Handle<std::vector<pat::Jet> > lPfJetCollection;
242    
243     try {
244     aEvt.getByLabel(pfJetSrc_,lPfJetCollection);
245     if (!lPfJetCollection.isValid()){
246     edm::LogInfo("ERROR")<< "Error! Can't get pfJets by label. ";
247     }
248     if (debug_) std::cout << "** pfJetcollection = " << lPfJetCollection->size() << " elements." << std::endl;
249     } catch(cms::Exception& e) {
250     std::cout << "AMM: Collection " << pfJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
251     }
252    
253 amagnan 1.7 //std::cout << "Processing PF jets:" << std::endl;
254 amagnan 1.1 HbbJets(lPfJetCollection,jetFlav_,lGenParticles,event_->pfJets());
255    
256     edm::Handle<std::vector<pat::MET> > lCaloMetCol;
257    
258     try {
259     aEvt.getByLabel(caloMetSrc_,lCaloMetCol);
260     if (!lCaloMetCol.isValid()){
261     edm::LogInfo("ERROR")<< "Error! Can't get caloMet by label. ";
262     }
263     if (debug_) std::cout << "** caloMet = " << lCaloMetCol->size() << " elements." << std::endl;
264     } catch(cms::Exception& e) {
265     std::cout << "AMM: Collection " << caloMetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
266     }
267    
268     HbbMet(lCaloMetCol,event_->caloMet());
269    
270     edm::Handle<std::vector<pat::MET> > lTcMetCol;
271    
272     try {
273     aEvt.getByLabel(tcMetSrc_,lTcMetCol);
274     if (!lTcMetCol.isValid()){
275     edm::LogInfo("ERROR")<< "Error! Can't get tcMet by label. ";
276     }
277     if (debug_) std::cout << "** tcMet = " << lTcMetCol->size() << " elements." << std::endl;
278     } catch(cms::Exception& e) {
279     std::cout << "AMM: Collection " << tcMetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
280     }
281    
282     HbbMet(lTcMetCol,event_->tcMet());
283    
284     edm::Handle<std::vector<pat::MET> > lPfMetCol;
285    
286     try {
287     aEvt.getByLabel(pfMetSrc_,lPfMetCol);
288     if (!lPfMetCol.isValid()){
289     edm::LogInfo("ERROR")<< "Error! Can't get pfMet by label. ";
290     }
291     if (debug_) std::cout << "** pfMet = " << lPfMetCol->size() << " elements." << std::endl;
292     } catch(cms::Exception& e) {
293     std::cout << "AMM: Collection " << pfMetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
294     }
295    
296     HbbMet(lPfMetCol,event_->pfMet());
297    
298    
299    
300     //triggers
301     edm::Handle<edm::TriggerResults> lTrigCol;
302     try {
303     aEvt.getByLabel(triggerSrc_,lTrigCol);
304     if (!lTrigCol.isValid()){
305     edm::LogInfo("ERROR")<< "Error! Can't get triggers by label. ";
306     }
307     if (debug_) std::cout << "** triggers = " << lTrigCol->size() << std::endl;
308     } catch(cms::Exception& e) {
309     std::cout << "AMM: Collection " << triggerSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
310     }
311 amagnan 1.13 if (lTrigCol.isValid()) {
312     const edm::TriggerNames & lNames = aEvt.triggerNames(*lTrigCol);
313     HbbTrigger(lTrigCol,lNames,event_->triggers());
314     }
315 amagnan 1.1
316 amagnan 1.16 //L1 jet objects
317    
318     edm::Handle<l1extra::L1JetParticleCollection> lCenJet;
319     edm::Handle<l1extra::L1JetParticleCollection> lFwdJet;
320     edm::Handle<l1extra::L1JetParticleCollection> lTauJet;
321     try {
322     aEvt.getByLabel(l1CenJetSrc_,lCenJet);
323     aEvt.getByLabel(l1TauJetSrc_,lTauJet);
324     aEvt.getByLabel(l1FwdJetSrc_,lFwdJet);
325     } catch(cms::Exception& e) {
326     std::cout << "AMM: L1 Collections " << l1CenJetSrc_ << ", " << l1TauJetSrc_ << ", " << l1FwdJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
327     }
328     if (lCenJet.isValid()) {
329     HbbL1Objects(lCenJet,event_->l1Jets(),1);
330     }
331     if (lTauJet.isValid()) {
332     HbbL1Objects(lTauJet,event_->l1Jets(),2);
333     }
334     if (lFwdJet.isValid()) {
335     HbbL1Objects(lFwdJet,event_->l1Jets(),3);
336     }
337    
338    
339     edm::Handle<trigger::TriggerEvent> lHltSummary;
340     try {
341     aEvt.getByLabel(hltSummarySrc_,lHltSummary);
342     } catch(cms::Exception& e) {
343     std::cout << "AMM: collection " << hltSummarySrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
344     }
345     if (lHltSummary.isValid()) {
346     HbbHLTObjects(lHltSummary,event_->hltJets());
347     }
348    
349    
350    
351 amagnan 1.1 //event_->order();
352     tree_->Fill();
353     firstEvent = false;
354    
355     }//analyze
356    
357    
358     void HbbTreeMaker::HbbElectrons(const edm::Handle<std::vector<pat::Electron> > & aCol,
359 amagnan 1.2 std::vector<HbbAnalysis::Electron> & aVec)
360 amagnan 1.1 {//HbbElectrons
361    
362     if (aCol.isValid()){
363     if (aCol->size() > 0) {
364    
365     unsigned int iEle = 0;
366     for (std::vector<pat::Electron>::const_iterator iter = aCol->begin();
367     iter != aCol->end();
368     iter++)
369     {
370     //if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
371    
372     HbbAnalysis::GenVars lGen;
373 amagnan 1.4 if (!processData_ && (*iter).genLepton()){
374 amagnan 1.1 lGen.valid = true;
375 amagnan 1.2 lGen.E = (*iter).genLepton()->energy();
376 amagnan 1.1 lGen.pT = (*iter).genLepton()->pt();
377     lGen.eta = (*iter).genLepton()->eta();
378 amagnan 1.14 lGen.y = (*iter).genLepton()->y();
379 amagnan 1.1 lGen.phi = (*iter).genLepton()->phi();
380     lGen.charge = (*iter).genLepton()->charge();
381     lGen.pdgId = (*iter).genLepton()->pdgId();
382     lGen.status = (*iter).genLepton()->status();
383     lGen.mass = (*iter).genLepton()->mass();
384     lGen.vx = (*iter).genLepton()->vx();
385     lGen.vy = (*iter).genLepton()->vy();
386     lGen.vz = (*iter).genLepton()->vz();
387     }
388     else {
389     lGen.valid = false;
390 amagnan 1.2 lGen.E = 0;
391 amagnan 1.1 lGen.pT = 0;
392     lGen.eta = 0;
393 amagnan 1.14 lGen.y = 0;
394 amagnan 1.1 lGen.phi = 0;
395     lGen.charge = 0;
396     lGen.pdgId = 0;
397     lGen.status = 0;
398     lGen.mass = 0;
399     lGen.vx = 0;
400     lGen.vy = 0;
401     lGen.vz = 0;
402     }
403    
404     HbbAnalysis::BaseVars lReco;
405 amagnan 1.2 lReco.E = (*iter).energy();
406 amagnan 1.1 lReco.pT = (*iter).pt();
407     lReco.eta = (*iter).eta();
408 amagnan 1.14 lReco.y = (*iter).y();
409 amagnan 1.1 lReco.phi = (*iter).phi();
410     lReco.charge = (*iter).charge();
411     lReco.vx = (*iter).vx();
412     lReco.vy = (*iter).vy();
413     lReco.vz = (*iter).vz();
414    
415     HbbAnalysis::SCVars lSC;
416     lSC.sigmaEtaEta = (*iter).scSigmaEtaEta();
417     lSC.sigmaIEtaIEta = (*iter).scSigmaIEtaIEta();
418     lSC.e1x5 = (*iter).scE1x5();
419     lSC.e2x5Max = (*iter).scE2x5Max();
420     lSC.e5x5 = (*iter).scE5x5();
421     lSC.eOverP = (*iter).eSuperClusterOverP();
422    
423     HbbAnalysis::EleIsoVars lIso;
424     lIso.calo = (*iter).caloIso();
425     lIso.track = (*iter).trackIso();
426     lIso.ecal = (*iter).ecalIso();
427     lIso.hcal = (*iter).hcalIso();
428    
429     HbbAnalysis::EleIDVars lID;
430     lID.electronIDs = (*iter).electronIDs();
431     lID.hOverE = (*iter).hadronicOverEm();
432     lID.deltaPhiIn = (*iter).deltaPhiSuperClusterTrackAtVtx();
433     lID.deltaEtaIn = (*iter).deltaEtaSuperClusterTrackAtVtx();
434 amagnan 1.12 lID.ecalDrivenSeed = (*iter).ecalDrivenSeed();
435     lID.trackerDrivenSeed = (*iter).trackerDrivenSeed();
436 amagnan 1.1
437     HbbAnalysis::Electron lObj(lGen,lReco,lSC,lIso,lID);
438     aVec.push_back(lObj);
439     iEle++;
440     }
441     }
442     }
443    
444     }//HbbElectrons
445    
446    
447     void HbbTreeMaker::HbbMuons(const edm::Handle<std::vector<pat::Muon> > & aCol,
448 amagnan 1.3 const edm::Handle<std::vector<reco::Vertex> > & aRecoVertices,
449     std::vector<HbbAnalysis::Muon> & aVec)
450 amagnan 1.1 {//HbbMuons
451    
452     if (aCol.isValid()){
453     if (aCol->size() > 0) {
454    
455     unsigned int iEle = 0;
456     for (std::vector<pat::Muon>::const_iterator iter = aCol->begin();
457     iter != aCol->end();
458     iter++)
459     {
460     const reco::Muon* recoMuon = dynamic_cast<const reco::Muon*>((*iter).originalObject());
461    
462     HbbAnalysis::GenVars lGen;
463 amagnan 1.4 if (!processData_ && (*iter).genLepton()){
464 amagnan 1.1 lGen.valid = true;
465 amagnan 1.2 lGen.E = (*iter).genLepton()->energy();
466 amagnan 1.1 lGen.pT = (*iter).genLepton()->pt();
467     lGen.eta = (*iter).genLepton()->eta();
468 amagnan 1.14 lGen.y = (*iter).genLepton()->y();
469 amagnan 1.1 lGen.phi = (*iter).genLepton()->phi();
470     lGen.charge = (*iter).genLepton()->charge();
471     lGen.pdgId = (*iter).genLepton()->pdgId();
472     lGen.status = (*iter).genLepton()->status();
473     lGen.mass = (*iter).genLepton()->mass();
474     lGen.vx = (*iter).genLepton()->vx();
475     lGen.vy = (*iter).genLepton()->vy();
476     lGen.vz = (*iter).genLepton()->vz();
477     }
478     else {
479     lGen.valid = false;
480 amagnan 1.2 lGen.E = 0;
481 amagnan 1.1 lGen.pT = 0;
482     lGen.eta = 0;
483 amagnan 1.14 lGen.y = 0;
484 amagnan 1.1 lGen.phi = 0;
485     lGen.charge = 0;
486     lGen.pdgId = 0;
487     lGen.status = 0;
488     lGen.mass = 0;
489     lGen.vx = 0;
490     lGen.vy = 0;
491     lGen.vz = 0;
492     }
493    
494     HbbAnalysis::BaseVars lReco;
495 amagnan 1.2 lReco.E = (*iter).energy();
496 amagnan 1.1 lReco.pT = (*iter).pt();
497     lReco.eta = (*iter).eta();
498 amagnan 1.14 lReco.y = (*iter).y();
499 amagnan 1.1 lReco.phi = (*iter).phi();
500     lReco.charge = (*iter).charge();
501     lReco.vx = (*iter).vx();
502     lReco.vy = (*iter).vy();
503     lReco.vz = (*iter).vz();
504    
505 amagnan 1.3 HbbAnalysis::MuTrkVars lTrk;
506    
507     reco::TrackRef lTrackerTrk = (*iter).innerTrack();
508     if ( lTrackerTrk.isAvailable() && lTrackerTrk.isNonnull() ) {
509     if ( aRecoVertices->size() >= 1 ) {
510     const reco::Vertex& thePrimaryEventVertex = (*aRecoVertices->begin());
511     lTrk.IPd0 = -lTrackerTrk->dxy(thePrimaryEventVertex.position());
512     lTrk.IPdz = lTrackerTrk->dz(thePrimaryEventVertex.position());
513     }
514     else {
515     lTrk.IPd0 = 0;
516     lTrk.IPdz = 0;
517     }
518    
519     lTrk.nHits = lTrackerTrk->numberOfValidHits();
520     }
521     else {
522     lTrk.IPd0 = 0;
523     lTrk.IPdz = 0;
524     lTrk.nHits = 0;
525     }
526    
527 amagnan 1.1 HbbAnalysis::MuIsoVars lIsoR03;
528     lIsoR03.sumPt = recoMuon->isolationR03().sumPt;
529     lIsoR03.emEt = recoMuon->isolationR03().emEt;
530     lIsoR03.hadEt = recoMuon->isolationR03().hadEt;
531     lIsoR03.nTracks = recoMuon->isolationR03().nTracks;
532     lIsoR03.nJets = recoMuon->isolationR03().nJets;
533    
534     HbbAnalysis::MuIsoVars lIsoR05;
535     lIsoR05.sumPt = recoMuon->isolationR05().sumPt;
536     lIsoR05.emEt = recoMuon->isolationR05().emEt;
537     lIsoR05.hadEt = recoMuon->isolationR05().hadEt;
538     lIsoR05.nTracks = recoMuon->isolationR05().nTracks;
539     lIsoR05.nJets = recoMuon->isolationR05().nJets;
540    
541     HbbAnalysis::MuIDVars lID;
542     if (recoMuon->isGlobalMuon()) lID.type = 1;
543     else if (recoMuon->isTrackerMuon()) lID.type = 2;
544     else if (recoMuon->isStandAloneMuon()) lID.type = 3;
545     else if (recoMuon->isCaloMuon()) lID.type = 4;
546     else lID.type = 0;
547    
548 amagnan 1.4 if (muon::isGoodMuon(*recoMuon,muon::AllGlobalMuons)) lID.ids.push_back(1);
549     if (muon::isGoodMuon(*recoMuon,muon::AllStandAloneMuons)) lID.ids.push_back(2);
550     if (muon::isGoodMuon(*recoMuon,muon::AllTrackerMuons)) lID.ids.push_back(3);
551     if (muon::isGoodMuon(*recoMuon,muon::TrackerMuonArbitrated)) lID.ids.push_back(4);
552     if (muon::isGoodMuon(*recoMuon,muon::AllArbitrated)) lID.ids.push_back(5);
553     if (muon::isGoodMuon(*recoMuon,muon::GlobalMuonPromptTight)) lID.ids.push_back(6);
554     if (muon::isGoodMuon(*recoMuon,muon::TMLastStationLoose)) lID.ids.push_back(7);
555     if (muon::isGoodMuon(*recoMuon,muon::TMLastStationTight)) lID.ids.push_back(8);
556     if (muon::isGoodMuon(*recoMuon,muon::TM2DCompatibilityLoose)) lID.ids.push_back(9);
557     if (muon::isGoodMuon(*recoMuon,muon::TM2DCompatibilityTight)) lID.ids.push_back(10);
558     if (muon::isGoodMuon(*recoMuon,muon::TMOneStationLoose)) lID.ids.push_back(11);
559     if (muon::isGoodMuon(*recoMuon,muon::TMOneStationTight)) lID.ids.push_back(12);
560     if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedLowPtLoose)) lID.ids.push_back(13);
561     if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedLowPtTight)) lID.ids.push_back(14);
562     if (muon::isGoodMuon(*recoMuon,muon::GMTkChiCompatibility)) lID.ids.push_back(15);
563     if (muon::isGoodMuon(*recoMuon,muon::GMStaChiCompatibility)) lID.ids.push_back(16);
564     if (muon::isGoodMuon(*recoMuon,muon::GMTkKinkTight)) lID.ids.push_back(17);
565     if (muon::isGoodMuon(*recoMuon,muon::TMLastStationAngLoose)) lID.ids.push_back(18);
566     if (muon::isGoodMuon(*recoMuon,muon::TMLastStationAngTight)) lID.ids.push_back(19);
567     if (muon::isGoodMuon(*recoMuon,muon::TMOneStationAngLoose)) lID.ids.push_back(20);
568     if (muon::isGoodMuon(*recoMuon,muon::TMOneStationAngTight)) lID.ids.push_back(21);
569     if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedBarrelLowPtLoose)) lID.ids.push_back(22);
570     if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedBarrelLowPtTight)) lID.ids.push_back(23);
571 amagnan 1.1
572     lID.caloCompat = recoMuon->caloCompatibility();
573 amagnan 1.4 lID.segCompat = muon::segmentCompatibility(*recoMuon);
574 amagnan 1.1 lID.nChambers = recoMuon->numberOfChambers();
575     lID.nMatchesLoose = recoMuon->numberOfMatches(reco::Muon::NoArbitration);
576     lID.nMatchesMedium = recoMuon->numberOfMatches(reco::Muon::SegmentArbitration);
577     lID.nMatchesTight = recoMuon->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
578    
579 amagnan 1.3 HbbAnalysis::Muon lObj(lGen,lReco,lTrk,lIsoR03,lIsoR05,lID);
580 amagnan 1.1 aVec.push_back(lObj);
581     iEle++;
582     }
583     }
584     }
585    
586     }//HbbMuons
587    
588     void HbbTreeMaker::HbbTaus(const edm::Handle<std::vector<pat::Tau> > & aCol,
589 amagnan 1.3 const edm::Handle<std::vector<reco::Vertex> > & aRecoVertices,
590     std::vector<HbbAnalysis::Tau> & aVec)
591 amagnan 1.1 {//HbbTaus
592    
593     if (aCol.isValid()){
594     if (aCol->size() > 0) {
595    
596     unsigned int iEle = 0;
597     for (std::vector<pat::Tau>::const_iterator iter = aCol->begin();
598     iter != aCol->end();
599     iter++)
600     {
601     //if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
602    
603     HbbAnalysis::GenVars lGen;
604 amagnan 1.4 if (!processData_ && (*iter).genLepton()){
605 amagnan 1.1 lGen.valid = true;
606 amagnan 1.2 lGen.E = (*iter).genLepton()->energy();
607 amagnan 1.1 lGen.pT = (*iter).genLepton()->pt();
608     lGen.eta = (*iter).genLepton()->eta();
609 amagnan 1.14 lGen.y = (*iter).genLepton()->y();
610 amagnan 1.1 lGen.phi = (*iter).genLepton()->phi();
611     lGen.charge = (*iter).genLepton()->charge();
612     lGen.pdgId = (*iter).genLepton()->pdgId();
613     lGen.status = (*iter).genLepton()->status();
614     lGen.mass = (*iter).genLepton()->mass();
615     lGen.vx = (*iter).genLepton()->vx();
616     lGen.vy = (*iter).genLepton()->vy();
617     lGen.vz = (*iter).genLepton()->vz();
618     }
619     else {
620     lGen.valid = false;
621 amagnan 1.2 lGen.E = 0;
622 amagnan 1.1 lGen.pT = 0;
623     lGen.eta = 0;
624 amagnan 1.14 lGen.y = 0;
625 amagnan 1.1 lGen.phi = 0;
626     lGen.charge = 0;
627     lGen.pdgId = 0;
628     lGen.status = 0;
629     lGen.mass = 0;
630     lGen.vx = 0;
631     lGen.vy = 0;
632     lGen.vz = 0;
633     }
634    
635    
636     HbbAnalysis::GenVars lGenJet;
637 amagnan 1.4 if (!processData_ && (*iter).genJet()){
638 amagnan 1.1 lGenJet.valid = true;
639 amagnan 1.4 lGenJet.E = (*iter).genJet()->energy();
640 amagnan 1.1 lGenJet.pT = (*iter).genJet()->pt();
641     lGenJet.eta = (*iter).genJet()->eta();
642 amagnan 1.14 lGenJet.y = (*iter).genJet()->y();
643 amagnan 1.1 lGenJet.phi = (*iter).genJet()->phi();
644     lGenJet.charge = (*iter).genJet()->charge();
645     lGenJet.pdgId = (*iter).genJet()->pdgId();
646     lGenJet.status = (*iter).genJet()->status();
647     lGenJet.mass = (*iter).genJet()->mass();
648     lGenJet.vx = (*iter).genJet()->vx();
649     lGenJet.vy = (*iter).genJet()->vy();
650     lGenJet.vz = (*iter).genJet()->vz();
651     }
652     else {
653     lGenJet.valid = false;
654 amagnan 1.4 lGenJet.E = 0;
655 amagnan 1.1 lGenJet.pT = 0;
656     lGenJet.eta = 0;
657 amagnan 1.14 lGenJet.y = 0;
658 amagnan 1.1 lGenJet.phi = 0;
659     lGenJet.charge = 0;
660     lGenJet.pdgId = 0;
661     lGenJet.status = 0;
662     lGenJet.mass = 0;
663     lGenJet.vx = 0;
664     lGenJet.vy = 0;
665     lGenJet.vz = 0;
666     }
667    
668     HbbAnalysis::BaseVars lReco;
669 amagnan 1.2 lReco.E = (*iter).energy();
670 amagnan 1.1 lReco.pT = (*iter).pt();
671     lReco.eta = (*iter).eta();
672 amagnan 1.14 lReco.y = (*iter).y();
673 amagnan 1.1 lReco.phi = (*iter).phi();
674     lReco.charge = (*iter).charge();
675     lReco.vx = (*iter).vx();
676     lReco.vy = (*iter).vy();
677     lReco.vz = (*iter).vz();
678    
679     bool isCalo = (*iter).isCaloTau();
680     bool isPF = (*iter).isPFTau();
681    
682     assert (isCalo == !isPF);
683    
684 amagnan 1.14 HbbAnalysis::TrkVars lLead;
685 amagnan 1.1 if (isCalo) {
686     lLead.signedSipt = (*iter).leadTracksignedSipt();
687    
688     reco::TrackRef lCaloTrk = (*iter).leadTrack();
689    
690     if ( lCaloTrk.isAvailable() && lCaloTrk.isNonnull() ) {
691     lLead.pT = lCaloTrk->pt();
692     lLead.eta = lCaloTrk->eta();
693     lLead.phi = lCaloTrk->phi();
694    
695     lLead.matchDist = reco::deltaR(lCaloTrk->momentum(), (*iter).p4());
696    
697     if ( aRecoVertices->size() >= 1 ) {
698     const reco::Vertex& thePrimaryEventVertex = (*aRecoVertices->begin());
699     lLead.IPxy = lCaloTrk->dxy(thePrimaryEventVertex.position());
700     lLead.IPz = lCaloTrk->dz(thePrimaryEventVertex.position());
701     }
702     else {
703     lLead.IPxy = 0;
704     lLead.IPz = 0;
705     }
706     }
707     else {
708     lLead.pT = 0;
709     lLead.eta = 0;
710     lLead.phi = 0;
711     lLead.matchDist = 0;
712     lLead.IPxy = 0;
713     lLead.IPz = 0;
714     lLead.signedSipt = 0;
715     }
716     }//calo
717     else {
718     lLead.signedSipt = (*iter).leadPFChargedHadrCandsignedSipt();
719    
720     reco::PFCandidateRef lHadrCand = (*iter).leadPFChargedHadrCand();
721    
722     if ( lHadrCand.isAvailable() && lHadrCand.isNonnull() ) {
723     lLead.pT = lHadrCand->pt();
724     lLead.eta = lHadrCand->eta();
725     lLead.phi = lHadrCand->phi();
726    
727     lLead.matchDist = reco::deltaR(lHadrCand->p4(), (*iter).p4());
728    
729     reco::TrackRef lTrk = lHadrCand->trackRef();
730    
731     if ( aRecoVertices->size() >= 1) {
732     const reco::Vertex& thePrimaryEventVertex = (*aRecoVertices->begin());
733     lLead.IPxy = lTrk->dxy(thePrimaryEventVertex.position());
734     lLead.IPz = lTrk->dz(thePrimaryEventVertex.position());
735     }
736     else {
737     lLead.IPxy = 0;
738     lLead.IPz = 0;
739     }
740     }
741     else {
742     lLead.pT = 0;
743     lLead.eta = 0;
744     lLead.phi = 0;
745     lLead.matchDist = 0;
746     lLead.IPxy = 0;
747     lLead.IPz = 0;
748     lLead.signedSipt = 0;
749     }
750    
751     }//pf
752    
753    
754    
755     const std::vector<std::pair<std::string,float> > & lIDs = (*iter).tauIDs();
756     bool lPrint = false;
757     //a few warning if additional discriminants are found:
758 amagnan 1.5 if ((isPF && lIDs.size() != 16) ||
759 amagnan 1.1 (isCalo && lIDs.size() != 3))
760     lPrint = true;
761    
762     if (lPrint) {
763 amagnan 1.5 std::cout << "!!!!!!! Discriminants changed, please update tree !!!!!!!" << std::endl;
764 amagnan 1.1 std::cout << "--- isCaloTau = " << isCalo << ", isPFTau = " << isPF << std::endl;
765     std::cout << "------ ID names = " << std::endl;
766     }
767    
768    
769 amagnan 1.4 HbbAnalysis::CaloTauIDVars lcaloId;
770     lcaloId.byIsolation = 0;
771     lcaloId.byLeadingTrackFinding = 0;
772     lcaloId.byLeadingTrackPtCut = 0;
773    
774 amagnan 1.1 HbbAnalysis::PFTauIDVars lpfId;
775 amagnan 1.4 lpfId.byLeadingTrackFinding = 0;
776     lpfId.byLeadingTrackPtCut = 0;
777     lpfId.byTrackIsolation = 0;
778     lpfId.byECALIsolation = 0;
779     lpfId.byIsolation = 0;
780     lpfId.againstElectron = 0;
781     lpfId.againstMuon = 0;
782 amagnan 1.5 lpfId.byIsolationUsingLeadingPion = 0;
783     lpfId.byTaNC = 0;
784     lpfId.byTaNCfrHalfPercent = 0;
785     lpfId.byTaNCfrOnePercent = 0;
786     lpfId.byTaNCfrQuarterPercent = 0;
787     lpfId.byTaNCfrTenthPercent = 0;
788     lpfId.ecalIsolationUsingLeadingPion = 0;
789     lpfId.leadingPionPtCut = 0;
790     lpfId.trackIsolationUsingLeadingPion = 0;
791 amagnan 1.4
792    
793 amagnan 1.1
794     for (unsigned int id(0); id<lIDs.size(); id++){
795    
796     std::string lName = lIDs.at(id).first;
797     float lDiscri = lIDs.at(id).second;
798    
799     if (lPrint) std::cout << "--------- " << lName << " = " << lDiscri << std::endl;
800     //pf
801    
802     if (isPF) {
803     if (lName.find("leadingTrackFinding") != lName.npos) lpfId.byLeadingTrackFinding = lDiscri;
804     if (lName.find("leadingTrackPtCut") != lName.npos) lpfId.byLeadingTrackPtCut = lDiscri;
805 amagnan 1.5 if (lName.find("trackIsolationUsingLeadingPion") != lName.npos) lpfId.trackIsolationUsingLeadingPion = lDiscri;
806     if (lName.find("trackIsolation") != lName.npos &&
807     lName.find("trackIsolationUsingLeadingPion") == lName.npos) lpfId.byTrackIsolation = lDiscri;
808     if (lName.find("ecalIsolationUsingLeadingPion") != lName.npos) lpfId.ecalIsolationUsingLeadingPion = lDiscri;
809     if (lName.find("ecalIsolation") != lName.npos &&
810     lName.find("ecalIsolationUsingLeadingPion") == lName.npos) lpfId.byECALIsolation = lDiscri;
811     if (lName.find("byIsolationUsingLeadingPion") != lName.npos) lpfId.byIsolationUsingLeadingPion = lDiscri;
812     if (lName.find("byIsolation") != lName.npos &&
813     lName.find("byIsolationUsingLeadingPion") == lName.npos) lpfId.byIsolation = lDiscri;
814 amagnan 1.1 if (lName.find("againstElectron") != lName.npos) lpfId.againstElectron = lDiscri;
815     if (lName.find("againstMuon") != lName.npos) lpfId.againstMuon = lDiscri;
816 amagnan 1.5 if (lName.find("byTaNCfrHalfPercent") != lName.npos) lpfId.byTaNCfrHalfPercent = lDiscri;
817     if (lName.find("byTaNCfrOnePercent") != lName.npos) lpfId.byTaNCfrOnePercent = lDiscri;
818     if (lName.find("byTaNCfrQuarterPercent") != lName.npos) lpfId.byTaNCfrQuarterPercent = lDiscri;
819     if (lName.find("byTaNCfrTenthPercent") != lName.npos) lpfId.byTaNCfrTenthPercent = lDiscri;
820     if (lName.find("byTaNC") != lName.npos &&
821     lName.find("byTaNCfr") == lName.npos) lpfId.byTaNC = lDiscri;
822     if (lName.find("leadingPionPtCut") != lName.npos) lpfId.leadingPionPtCut = lDiscri;
823 amagnan 1.1 }
824     if (isCalo){
825     if (lName.find("byIsolation") != lName.npos) lcaloId.byIsolation = lDiscri;
826     if (lName.find("leadingTrackFinding") != lName.npos) lcaloId.byLeadingTrackFinding = lDiscri;
827     if (lName.find("leadingTrackPtCut") != lName.npos) lcaloId.byLeadingTrackPtCut = lDiscri;
828     }
829    
830    
831     }
832    
833    
834     if (isCalo){
835    
836     HbbAnalysis::CaloTauIsoVars lcaloIso;
837     lcaloIso.nIsoTracks = (*iter).isolationTracks().size();
838     lcaloIso.nSigTracks = (*iter).signalTracks().size();
839     lcaloIso.leadTrackHCAL3x3hitsEtSum = (*iter).leadTrackHCAL3x3hitsEtSum();
840     lcaloIso.leadTrackHCAL3x3hottesthitDEta = (*iter).leadTrackHCAL3x3hottesthitDEta();
841     lcaloIso.signalTracksInvariantMass = (*iter).signalTracksInvariantMass();
842     lcaloIso.tracksInvariantMass = (*iter).TracksInvariantMass();
843     lcaloIso.isolationTracksPtSum = (*iter).isolationTracksPtSum();
844     lcaloIso.isolationECALhitsEtSum = (*iter).isolationECALhitsEtSum();
845     lcaloIso.maximumHCALhitEt = (*iter).maximumHCALhitEt();
846    
847     HbbAnalysis::Tau lObj(lGen,lGenJet,lReco,lLead,lcaloIso,lcaloId);
848     aVec.push_back(lObj);
849     }
850     else {
851    
852     HbbAnalysis::PFTauIsoVars lpfIso;
853     lpfIso.nSigCands = (*iter).signalPFCands().size();
854     lpfIso.nIsoCands = (*iter).isolationPFCands().size();
855     lpfIso.maximumHCALPFClusterEt = (*iter).maximumHCALPFClusterEt();
856     //lpfIso.emFraction = (*iter).emFraction();
857     lpfIso.hcalTotOverPLead = (*iter).hcalTotOverPLead();
858     lpfIso.hcalMaxOverPLead = (*iter).hcalMaxOverPLead();
859     lpfIso.hcal3x3OverPLead = (*iter).hcal3x3OverPLead();
860     lpfIso.ecalStripSumEOverPLead = (*iter).ecalStripSumEOverPLead();
861     lpfIso.bremsRecoveryEOverPLead = (*iter).bremsRecoveryEOverPLead();
862    
863     HbbAnalysis::PFTauCandVars lHadr;
864     lHadr.nSigCands = (*iter).signalPFChargedHadrCands().size();
865     lHadr.nIsoCands = (*iter).isolationPFChargedHadrCands().size();
866     lHadr.isolationPtSum = (*iter).isolationPFChargedHadrCandsPtSum();
867    
868     HbbAnalysis::PFTauCandVars lNeutr;
869     lNeutr.nSigCands = (*iter).signalPFNeutrHadrCands().size();
870     lNeutr.nIsoCands = (*iter).isolationPFNeutrHadrCands().size();
871 amagnan 1.4 lNeutr.isolationPtSum = (*iter).neutralHadronIso();
872 amagnan 1.1
873     HbbAnalysis::PFTauCandVars lGamma;
874     lGamma.nSigCands = (*iter).signalPFGammaCands().size();
875     lGamma.nIsoCands = (*iter).isolationPFGammaCands().size();
876     lGamma.isolationPtSum = (*iter).isolationPFGammaCandsEtSum();
877    
878     HbbAnalysis::PFTauEleIDVars lEleId;
879     if ( (*iter).electronPreIDTrack().isAvailable() && (*iter).electronPreIDTrack().isNonnull() ) {
880     lEleId.pT = (*iter).electronPreIDTrack()->pt();
881     lEleId.eta = (*iter).electronPreIDTrack()->eta();
882     lEleId.phi = (*iter).electronPreIDTrack()->phi();
883     }
884     else {
885     lEleId.pT = 0;
886     lEleId.eta = 0;
887     lEleId.phi = 0;
888     }
889    
890     lEleId.output = (*iter).electronPreIDOutput();
891     lEleId.decision = (*iter).electronPreIDDecision();
892    
893     HbbAnalysis::PFTauMuIDVars lMuId;
894     lMuId.caloCompat = (*iter).caloComp();
895     lMuId.segCompat = (*iter).segComp();
896     lMuId.decision = (*iter).muonDecision();
897    
898     HbbAnalysis::Tau lObj(lGen,lGenJet,lReco,lLead,lpfIso,lHadr,lNeutr,lGamma,lpfId,lEleId,lMuId);
899     aVec.push_back(lObj);
900     }
901     iEle++;
902     }
903     }
904     }
905    
906     }//HbbTaus
907    
908     void HbbTreeMaker::HbbJets(const edm::Handle<std::vector<pat::Jet> > & aCol,
909     const HbbAnalysis::JetFlavour & aJetFlav,
910     const edm::Handle<reco::GenParticleCollection> & aGenParticles,
911     std::vector<HbbAnalysis::Jet> & aVec)
912     {//HbbJets
913    
914     if (aCol.isValid()){//valid
915     if (aCol->size() > 0) {//non empty
916    
917     unsigned int iEle = 0;
918     for (std::vector<pat::Jet>::const_iterator iter = aCol->begin();
919     iter != aCol->end();
920     iter++)
921     {//loop on element
922     //if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
923    
924     HbbAnalysis::GenVars lGen;
925 amagnan 1.4 if (!processData_ && (*iter).genParton()){
926 amagnan 1.1 lGen.valid = true;
927 amagnan 1.2 lGen.E = (*iter).genParton()->energy();
928 amagnan 1.1 lGen.pT = (*iter).genParton()->pt();
929     lGen.eta = (*iter).genParton()->eta();
930 amagnan 1.14 lGen.y = (*iter).genParton()->y();
931 amagnan 1.1 lGen.phi = (*iter).genParton()->phi();
932     lGen.charge = (*iter).genParton()->charge();
933     lGen.pdgId = (*iter).genParton()->pdgId();
934     lGen.status = (*iter).genParton()->status();
935     lGen.mass = (*iter).genParton()->mass();
936     lGen.vx = (*iter).genParton()->vx();
937     lGen.vy = (*iter).genParton()->vy();
938     lGen.vz = (*iter).genParton()->vz();
939     }
940     else {
941     lGen.valid = false;
942 amagnan 1.2 lGen.E = 0;
943 amagnan 1.1 lGen.pT = 0;
944     lGen.eta = 0;
945 amagnan 1.14 lGen.y = 0;
946 amagnan 1.1 lGen.phi = 0;
947     lGen.charge = 0;
948     lGen.pdgId = 0;
949     lGen.status = 0;
950     lGen.mass = 0;
951     lGen.vx = 0;
952     lGen.vy = 0;
953     lGen.vz = 0;
954     }
955    
956    
957     HbbAnalysis::GenVars lGenJet;
958 amagnan 1.4 if (!processData_ && (*iter).genJet()){
959 amagnan 1.1 lGenJet.valid = true;
960 amagnan 1.4 lGenJet.E = (*iter).genJet()->energy();
961 amagnan 1.1 lGenJet.pT = (*iter).genJet()->pt();
962     lGenJet.eta = (*iter).genJet()->eta();
963 amagnan 1.14 lGenJet.y = (*iter).genJet()->y();
964 amagnan 1.1 lGenJet.phi = (*iter).genJet()->phi();
965     lGenJet.charge = (*iter).genJet()->charge();
966     lGenJet.pdgId = (*iter).genJet()->pdgId();
967     lGenJet.status = (*iter).genJet()->status();
968     lGenJet.mass = (*iter).genJet()->mass();
969     lGenJet.vx = (*iter).genJet()->vx();
970     lGenJet.vy = (*iter).genJet()->vy();
971     lGenJet.vz = (*iter).genJet()->vz();
972     }
973     else {
974     lGenJet.valid = false;
975 amagnan 1.4 lGenJet.E = 0;
976 amagnan 1.1 lGenJet.pT = 0;
977     lGenJet.eta = 0;
978 amagnan 1.14 lGenJet.y = 0;
979 amagnan 1.1 lGenJet.phi = 0;
980     lGenJet.charge = 0;
981     lGenJet.pdgId = 0;
982     lGenJet.status = 0;
983     lGenJet.mass = 0;
984     lGenJet.vx = 0;
985     lGenJet.vy = 0;
986     lGenJet.vz = 0;
987     }
988    
989     HbbAnalysis::BaseVars lReco;
990 amagnan 1.2 lReco.E = (*iter).energy();
991 amagnan 1.1 lReco.pT = (*iter).pt();
992     lReco.eta = (*iter).eta();
993 amagnan 1.14 //lReco.etaDet = (*iter).detectorEta((*iter).vz(),(*iter).eta());
994     lReco.y = (*iter).y();
995 amagnan 1.1 lReco.phi = (*iter).phi();
996     lReco.charge = (*iter).jetCharge();
997     lReco.vx = (*iter).vx();
998     lReco.vy = (*iter).vy();
999     lReco.vz = (*iter).vz();
1000 amagnan 1.14 //lReco.myEtaDet = HbbAnalysis::EtaDetector(lReco);
1001 amagnan 1.1
1002     unsigned int lFlav = 0;
1003 amagnan 1.4 if (!processData_ && aJetFlav.nPartons()) {
1004 amagnan 1.1 lFlav = aJetFlav.partonMatchingGenJet((*iter),aGenParticles,0.4).second;
1005     }
1006    
1007     HbbAnalysis::JetVars lCommon;
1008     lCommon.flavour = lFlav;
1009     lCommon.partonFlavour = (*iter).partonFlavour();
1010     lCommon.nAssociatedTracks = ((*iter).associatedTracks()).size();
1011     lCommon.rawpT = (*iter).pt();
1012 amagnan 1.14 if ((*iter).hasCorrFactors() && (*iter).corrFactor("raw")>0)
1013     lCommon.rawpT = (*iter).pt()/((*iter).corrFactor("raw"));
1014 amagnan 1.10
1015     lCommon.etaMean = (*iter).etaPhiStatistics().etaMean;
1016     lCommon.phiMean = (*iter).etaPhiStatistics().phiMean;
1017     lCommon.etaEtaMoment = (*iter).etaPhiStatistics().etaEtaMoment;
1018     lCommon.phiPhiMoment = (*iter).etaPhiStatistics().phiPhiMoment;
1019     lCommon.etaPhiMoment = (*iter).etaPhiStatistics().etaPhiMoment;
1020    
1021 amagnan 1.14 lCommon.l1Match = false;//TODO
1022     lCommon.hltMatch = false;//TODO
1023    
1024 amagnan 1.1 //lCommon.rawEta = (*iter).;
1025     //lCommon.rawPhi = (*iter).;
1026     // p_hasJetCorrFactors->Fill(aJet.hasJetCorrFactors());
1027    
1028     HbbAnalysis::JetBtagVars lBtag;
1029     lBtag.cSV = (*iter).bDiscriminator("combinedSecondaryVertexBJetTags");
1030     lBtag.cSVMVA = (*iter).bDiscriminator("combinedSecondaryVertexMVABJetTags");
1031     lBtag.iPMVA = (*iter).bDiscriminator("impactParameterMVABJetTags");
1032     lBtag.bProba = (*iter).bDiscriminator("jetBProbabilityBJetTags");
1033     lBtag.probability = (*iter).bDiscriminator("jetProbabilityBJetTags");
1034 amagnan 1.13 lBtag.sSVHP = (*iter).bDiscriminator("simpleSecondaryVertexHighPurBJetTags");
1035     lBtag.sSVHE = (*iter).bDiscriminator("simpleSecondaryVertexHighEffBJetTags");
1036 amagnan 1.7 lBtag.softElectronByPt = ((*iter).bDiscriminator("softElectronByPtBJetTags") < -1000) ? -1000 : (*iter).bDiscriminator("softElectronByPtBJetTags");
1037     lBtag.softElectronByIP3d = ((*iter).bDiscriminator("softElectronByIP3dBJetTags") < -1000) ? -1000 : (*iter).bDiscriminator("softElectronByIP3dBJetTags");
1038     lBtag.softMuon = ((*iter).bDiscriminator("softMuonBJetTags") < -1000) ? -1000 : (*iter).bDiscriminator("softMuonBJetTags");
1039     lBtag.softMuonByPt = ((*iter).bDiscriminator("softMuonByPtBJetTags") < -1000) ? -1000 : (*iter).bDiscriminator("softMuonByPtBJetTags");
1040     lBtag.softMuonByIP3d = ((*iter).bDiscriminator("softMuonByIP3dBJetTags") < -1000) ? -1000 : (*iter).bDiscriminator("softMuonByIP3dBJetTags");
1041    
1042     //std::cout << " -- New values of b-discri for jet : " << iEle << std::endl
1043     // << " ---- softElecs: " << lBtag.softElectronByPt << " " << lBtag.softElectronByIP3d << std::endl
1044     // << " ---- softMus: " << lBtag.softMuon << " " << lBtag.softMuonByPt << " " << lBtag.softMuonByIP3d << std::endl;
1045 amagnan 1.6
1046    
1047 amagnan 1.1 lBtag.tCHE = (*iter).bDiscriminator("trackCountingHighEffBJetTags");
1048     lBtag.tCHP = (*iter).bDiscriminator("trackCountingHighPurBJetTags");
1049 amagnan 1.5
1050    
1051 amagnan 1.1 bool isCalo = (*iter).isCaloJet();
1052     bool isPF = (*iter).isPFJet();
1053 amagnan 1.14 bool isJPT = (*iter).isJPTJet();
1054 amagnan 1.13
1055     //std::cout << " -- isCalo = " << isCalo << ", isPF = " << isPF << std::endl;
1056    
1057     //assert (isCalo == !isPF);
1058 amagnan 1.14 HbbAnalysis::JetIDVars lId;
1059     lId.fHPD = 0;
1060     lId.fRBX = 0;
1061     lId.n90Hits = 0;
1062     lId.hitsInN90 = 0;
1063 amagnan 1.15 lId.restrictedEMF = 0;
1064     lId.nHCALTowers = 0;
1065     lId.nECALTowers = 0;
1066 amagnan 1.14 if (isCalo || isJPT) {
1067 amagnan 1.5 lId.fHPD = (*iter).jetID().fHPD;
1068     lId.fRBX = (*iter).jetID().fRBX;
1069     lId.n90Hits = (*iter).jetID().n90Hits;
1070 amagnan 1.14 lId.hitsInN90 = (*iter).jetID().hitsInN90;
1071 amagnan 1.15 lId.restrictedEMF = (*iter).jetID().restrictedEMF;
1072     lId.nHCALTowers = (*iter).jetID().nHCALTowers;
1073     lId.nECALTowers = (*iter).jetID().nECALTowers;
1074 amagnan 1.14 }
1075     if (isCalo){
1076 amagnan 1.1 HbbAnalysis::CaloJetVars lCalo;
1077     lCalo.maxEInEmTowers = (*iter).maxEInEmTowers();
1078     lCalo.maxEInHadTowers = (*iter).maxEInHadTowers();
1079     lCalo.energyFractionHadronic = (*iter).energyFractionHadronic();
1080     lCalo.emEnergyFraction = (*iter).emEnergyFraction();
1081     lCalo.hadEnergyInHB = (*iter).hadEnergyInHB();
1082     lCalo.hadEnergyInHO = (*iter).hadEnergyInHO();
1083     lCalo.hadEnergyInHE = (*iter).hadEnergyInHE();
1084     lCalo.hadEnergyInHF = (*iter).hadEnergyInHF();
1085     lCalo.emEnergyInEB = (*iter).emEnergyInEB();
1086     lCalo.emEnergyInEE = (*iter).emEnergyInEE();
1087     lCalo.emEnergyInHF = (*iter).emEnergyInHF();
1088     lCalo.towersArea = (*iter).towersArea();
1089     lCalo.n90 = (*iter).n90();
1090     lCalo.n60 = (*iter).n60();
1091    
1092 amagnan 1.5 HbbAnalysis::Jet lObj(lGen,lGenJet,lReco,lCommon,lCalo,lBtag,lId);
1093 amagnan 1.1 aVec.push_back(lObj);
1094     }
1095 amagnan 1.14 HbbAnalysis::JPTPFJetVars lJPTPF;
1096 amagnan 1.15 lJPTPF.chargedHadronEnergy = 0;
1097     lJPTPF.chargedHadronEnergyFraction = 0;
1098     lJPTPF.neutralHadronEnergy = 0;
1099     lJPTPF.neutralHadronEnergyFraction = 0;
1100     lJPTPF.chargedEmEnergy = 0;
1101     lJPTPF.chargedEmEnergyFraction = 0;
1102     lJPTPF.neutralEmEnergy = 0;
1103     lJPTPF.neutralEmEnergyFraction = 0;
1104     lJPTPF.chargedMultiplicity = 0;
1105     lJPTPF.muonMultiplicity = 0;
1106    
1107 amagnan 1.14 if (isPF || isJPT){
1108     lJPTPF.chargedEmEnergy = (*iter).chargedEmEnergy();
1109     lJPTPF.neutralEmEnergy = (*iter).neutralEmEnergy();
1110     lJPTPF.muonMultiplicity = (*iter).muonMultiplicity();
1111     lJPTPF.chargedHadronEnergy = (*iter).chargedHadronEnergy();
1112     lJPTPF.neutralHadronEnergy = (*iter).neutralHadronEnergy();
1113     lJPTPF.chargedMultiplicity = (*iter).chargedMultiplicity();
1114    
1115     lJPTPF.chargedHadronEnergyFraction = (*iter).chargedHadronEnergyFraction();
1116     lJPTPF.neutralHadronEnergyFraction = (*iter).neutralHadronEnergyFraction();
1117     lJPTPF.chargedEmEnergyFraction = (*iter).chargedEmEnergyFraction();
1118     lJPTPF.neutralEmEnergyFraction = (*iter).neutralEmEnergyFraction();
1119     }
1120     if (isJPT) {
1121     HbbAnalysis::JPTJetVars lJPT;
1122     // const reco::TrackRefVector& pionsInVertexInCalo () const{return jptSpecific().pionsInVertexInCalo; }
1123     // const reco::TrackRefVector& pionsInVertexOutCalo() const{return jptSpecific().pionsInVertexOutCalo;}
1124     // const reco::TrackRefVector& pionsOutVertexInCalo() const{return jptSpecific().pionsOutVertexInCalo;}
1125     // const reco::TrackRefVector& muonsInVertexInCalo () const{return jptSpecific().muonsInVertexInCalo; }
1126     // const reco::TrackRefVector& muonsInVertexOutCalo() const{return jptSpecific().muonsInVertexOutCalo;}
1127     // const reco::TrackRefVector& muonsOutVertexInCalo() const{return jptSpecific().muonsOutVertexInCalo;}
1128     // const reco::TrackRefVector& elecsInVertexInCalo () const{return jptSpecific().elecsInVertexInCalo; }
1129     // const reco::TrackRefVector& elecsInVertexOutCalo() const{return jptSpecific().elecsInVertexOutCalo;}
1130     // const reco::TrackRefVector& elecsOutVertexInCalo() const{return jptSpecific().elecsOutVertexInCalo;}
1131     lJPT.zspCorrection = (*iter).zspCorrection();
1132     lJPT.elecMultiplicity = (*iter).elecMultiplicity();
1133    
1134 amagnan 1.15
1135     HbbAnalysis::CaloJetVars lCalo;
1136     const reco::JPTJet * lJetRef = dynamic_cast<const reco::JPTJet *>((*iter).originalObject());
1137     edm::RefToBase<reco::Jet> jptjetRef = lJetRef->getCaloJetRef();
1138    
1139     // Dynamic_cast to CaloJet object
1140     reco::CaloJet const * rawcalojet =
1141     dynamic_cast<reco::CaloJet const *>( &* jptjetRef);
1142    
1143     lCalo.maxEInEmTowers = rawcalojet->maxEInEmTowers();
1144     lCalo.maxEInHadTowers = rawcalojet->maxEInHadTowers();
1145     lCalo.energyFractionHadronic = rawcalojet->energyFractionHadronic();
1146     lCalo.emEnergyFraction = rawcalojet->emEnergyFraction();
1147     lCalo.hadEnergyInHB = rawcalojet->hadEnergyInHB();
1148     lCalo.hadEnergyInHO = rawcalojet->hadEnergyInHO();
1149     lCalo.hadEnergyInHE = rawcalojet->hadEnergyInHE();
1150     lCalo.hadEnergyInHF = rawcalojet->hadEnergyInHF();
1151     lCalo.emEnergyInEB = rawcalojet->emEnergyInEB();
1152     lCalo.emEnergyInEE = rawcalojet->emEnergyInEE();
1153     lCalo.emEnergyInHF = rawcalojet->emEnergyInHF();
1154     lCalo.towersArea = rawcalojet->towersArea();
1155     lCalo.n90 = rawcalojet->n90();
1156     lCalo.n60 = rawcalojet->n60();
1157    
1158     lCommon.etaMean = rawcalojet->etaPhiStatistics().etaMean;
1159     lCommon.phiMean = rawcalojet->etaPhiStatistics().phiMean;
1160     lCommon.etaEtaMoment = rawcalojet->etaPhiStatistics().etaEtaMoment;
1161     lCommon.phiPhiMoment = rawcalojet->etaPhiStatistics().phiPhiMoment;
1162     lCommon.etaPhiMoment = rawcalojet->etaPhiStatistics().etaPhiMoment;
1163    
1164     HbbAnalysis::Jet lObj(lGen,lGenJet,lReco,lCommon,lCalo,lJPT,lJPTPF,lBtag,lId);
1165 amagnan 1.14 aVec.push_back(lObj);
1166     }
1167     if (isPF) {
1168 amagnan 1.1 HbbAnalysis::PFJetVars lPF;
1169     lPF.chargedMuEnergy = (*iter).chargedMuEnergy();
1170     lPF.chargedMuEnergyFraction = (*iter).chargedMuEnergyFraction();
1171     lPF.neutralMultiplicity = (*iter).neutralMultiplicity();
1172    
1173 amagnan 1.14 HbbAnalysis::Jet lObj(lGen,lGenJet,lReco,lCommon,lPF,lJPTPF,lBtag);
1174 amagnan 1.1 aVec.push_back(lObj);
1175     }
1176    
1177     iEle++;
1178     }//loop on element
1179     }//non empty
1180     }//valid
1181    
1182     }//HbbJets
1183    
1184     void HbbTreeMaker::HbbMet(const edm::Handle<std::vector<pat::MET> > & aCol,
1185     HbbAnalysis::Met & aMet)
1186     {//HbbMet
1187     HbbAnalysis::MetVars lGen;
1188     HbbAnalysis::MetVars lReco;
1189    
1190     assert(aCol->size() == 1);
1191     const pat::MET & lMet = *(aCol->begin());
1192    
1193     lReco.mET = lMet.pt();
1194     lReco.mEx = lMet.px();
1195     lReco.mEy = lMet.py();
1196     lReco.sumET = lMet.sumEt();
1197     lReco.phi = lMet.phi();
1198     lReco.mEtSig = lMet.mEtSig();
1199    
1200     const reco::GenMET *lGenMET = lMet.genMET();
1201    
1202 amagnan 1.4 if (!processData_ && lGenMET){
1203 amagnan 1.1 lGen.mET = lGenMET->pt();
1204     lGen.mEx = lGenMET->px();
1205     lGen.mEy = lGenMET->py();
1206     lGen.sumET = lGenMET->sumEt();
1207     lGen.phi = lGenMET->phi();
1208     lGen.mEtSig = lGenMET->mEtSig();
1209     }
1210     else {
1211     lGen.mET = 0;
1212     lGen.mEx = 0;
1213     lGen.mEy = 0;
1214     lGen.sumET = 0;
1215     lGen.phi = 0;
1216     lGen.mEtSig = 0;
1217     }
1218    
1219     aMet.genVars(lGen);
1220     aMet.recoVars(lReco);
1221    
1222     }//HbbMet
1223    
1224     void HbbTreeMaker::HbbTrigger(const edm::Handle<edm::TriggerResults> & aCol,
1225 amagnan 1.13 const edm::TriggerNames & aNames,
1226 amagnan 1.1 std::vector<HbbAnalysis::Trigger> & aVec)
1227     {//HbbTrigger
1228    
1229     if (aCol.isValid()){
1230 amagnan 1.13 //edm::TriggerNames lNames;
1231     //lNames.init(*aCol);
1232 amagnan 1.1
1233     //for (unsigned int j=0; j<hltPaths_.size(); j++) {
1234     //bool valid=false;
1235     for (unsigned int i=0; i<aCol->size(); i++){
1236 amagnan 1.13 std::string trueName = aNames.triggerName(i);//.at(i);
1237 amagnan 1.1
1238     HbbAnalysis::TriggerVars lTrigVars;
1239     lTrigVars.name = trueName;
1240     lTrigVars.index = i;
1241     lTrigVars.accept = aCol->accept(i);
1242    
1243     HbbAnalysis::Trigger lObj(lTrigVars);
1244    
1245     aVec.push_back(lObj);
1246     }
1247    
1248     }
1249    
1250     }
1251    
1252     void HbbTreeMaker::HbbParticles(const edm::Handle<reco::GenParticleCollection> & aCol,
1253     std::vector<HbbAnalysis::GenParticle> & aVec)
1254     {//genparticles
1255    
1256     //add genParticle inside vector
1257     for (unsigned int mccount = 0;mccount<aCol->size();mccount++)
1258     {//loop on particles
1259     const reco::Candidate & p = (*aCol)[mccount];
1260    
1261     HbbAnalysis::MCVars lMC;
1262     lMC.index = mccount;
1263 amagnan 1.2 lMC.E = p.energy();
1264 amagnan 1.1 lMC.pT = p.pt();
1265     lMC.eta = p.eta();
1266 amagnan 1.14 lMC.y = p.y();
1267 amagnan 1.1 lMC.phi = p.phi();
1268     lMC.pdgId = p.pdgId();
1269     lMC.status = p.status();
1270     HbbAnalysis::GenParticle lObj(lMC);
1271     aVec.push_back(lObj);
1272    
1273     }//loop on particles
1274    
1275     //now need to get the list of parents....
1276    
1277     for (unsigned int mccount = 0;mccount<aCol->size();mccount++)
1278     {//loop on particles
1279     const reco::Candidate & p = (*aCol)[mccount];
1280    
1281     unsigned int nD = p.numberOfDaughters();
1282     //std::cout << mccount << " has " << nD << " daughter(s) : " ;
1283     for(unsigned int dau=0;dau<nD;dau++){//loop on daughters
1284     const reco::Candidate * pDau = p.daughter(dau);
1285     //std::cout << pDau << " ("<<std::flush;
1286     for (unsigned int mccount2 = 0;mccount2<aCol->size();mccount2++)
1287     {//loop on particles
1288     const reco::Candidate & p2 = (*aCol)[mccount2];
1289     //std::cout<<"DBG: mccount2 = "<<mccount2<<" gen size = "<<data_->gen().size()<<std::endl;
1290    
1291     HbbAnalysis::GenParticle & part2 = aVec.at(mccount2);
1292     if (pDau == &p2) {
1293     part2.setParent(mccount);
1294     //std::cout << &p2 << ", index = " << mccount2 << "), "<<std::flush;
1295     break;
1296     }
1297     //else std::cout << std::endl << "****no match " << mccount2 << " " << &p2 << std::endl;
1298     //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){
1299     //part2.parent(mccount);
1300     //}
1301     }//loop on particles
1302     }//loop on daughters
1303     //std::cout << std::endl;
1304    
1305     }//loop on particles
1306    
1307     if (debug_){
1308     for (unsigned int imc(0); imc < aVec.size(); imc++){
1309     HbbAnalysis::GenParticle & p = aVec.at(imc);
1310     p.print();
1311     }
1312     }
1313    
1314    
1315     }//genparticles
1316 amagnan 1.5
1317    
1318    
1319     void HbbTreeMaker::HbbVertices(const edm::Handle<std::vector<reco::Vertex> > & aCol,
1320     std::vector<HbbAnalysis::Vertex> & aVec)
1321     {
1322    
1323     for (std::vector<reco::Vertex>::const_iterator iter = aCol->begin();
1324     iter != aCol->end();
1325     iter++)
1326     {
1327    
1328     if (!((*iter).isValid()) || (*iter).isFake()) continue;
1329    
1330     HbbAnalysis::VertexVars lVtx;
1331    
1332     if ((*iter).tracksSize() > 0) {
1333     for (std::vector<reco::TrackBaseRef>::const_iterator lTrk = (*iter).tracks_begin();
1334     lTrk != (*iter).tracks_end();
1335     lTrk++) {
1336     lVtx.trackWeights.push_back((*iter).trackWeight(*lTrk));
1337     }
1338     }
1339    
1340     if (lVtx.trackWeights.size() != (*iter).tracksSize()) {
1341     std::cout<< " -- Problem with tracks, size is not as expected ! "
1342     << std::endl
1343     << " --- Size of recoVertex tracks = " << (*iter).tracksSize()
1344     << std::endl
1345     << " --- Size of trackWeights = " << lVtx.trackWeights.size()
1346     << std::endl;
1347     }
1348    
1349     lVtx.chi2 = (*iter).chi2();
1350     lVtx.ndof = (*iter).ndof();
1351     lVtx.x = (*iter).x();
1352     lVtx.y = (*iter).y();
1353     lVtx.z = (*iter).z();
1354     lVtx.xError = (*iter).xError();
1355     lVtx.yError = (*iter).yError();
1356     lVtx.zError = (*iter).zError();
1357     lVtx.cov01 = (*iter).covariance(0,1);
1358     lVtx.cov02 = (*iter).covariance(0,2);
1359     lVtx.cov12 = (*iter).covariance(1,2);
1360    
1361     HbbAnalysis::Vertex lObj(lVtx);
1362     aVec.push_back(lObj);
1363     }
1364    
1365     }
1366 amagnan 1.8
1367 amagnan 1.16 void HbbTreeMaker::HbbL1Objects(const edm::Handle<l1extra::L1JetParticleCollection> & aCol,
1368     std::vector<HbbAnalysis::L1Object> & aVec,
1369     const unsigned int aType)
1370     {
1371    
1372     for (l1extra::L1JetParticleCollection::const_iterator iter = aCol->begin();
1373     iter != aCol->end();
1374     iter++)
1375     {
1376    
1377     HbbAnalysis::L1Vars lVars;
1378     lVars.pT = (*iter).pt();
1379     lVars.ET = (*iter).et();
1380     lVars.eta = (*iter).eta();
1381     lVars.phi = (*iter).phi();
1382     lVars.bx = (*iter).bx();
1383     lVars.type = aType;
1384    
1385     HbbAnalysis::L1Object lObj(lVars);
1386     aVec.push_back(lObj);
1387    
1388     }
1389    
1390     }
1391     void HbbTreeMaker::HbbHLTObjects(const edm::Handle<trigger::TriggerEvent> & aCol,
1392     std::vector<HbbAnalysis::HLTObject> & aVec)
1393     {
1394    
1395     const trigger::TriggerObjectCollection & toc(aCol->getObjects());
1396    
1397     //cout
1398     //for (unsigned i=0; i<aCol->sizeFilters(); i++){
1399     //const edm::InputTag & lTag = aCol->filterTag(i);
1400     //std::cout << "ele " << i << ": " << lTag << std::endl;
1401     //}
1402    
1403     for (unsigned i(0); i<hltTags_.size(); i++){
1404    
1405     const int index = aCol->filterIndex(hltTags_[i]);
1406    
1407     const trigger::Keys & k = aCol->filterKeys(index);
1408    
1409     for (trigger::Keys::const_iterator ki = k.begin(); ki !=k.end(); ++ki ) {
1410     HbbAnalysis::HLTVars lVars;
1411     lVars.pT = toc[*ki].pt();
1412     lVars.eta = toc[*ki].eta();
1413     lVars.phi = toc[*ki].phi();
1414     lVars.id = toc[*ki].id();
1415     lVars.mass = toc[*ki].mass();
1416     HbbAnalysis::HLTObject lObj(lVars);
1417     aVec.push_back(lObj);
1418     }
1419     }
1420    
1421     }
1422    
1423    
1424 amagnan 1.8 #include "FWCore/Framework/interface/MakerMacros.h"
1425     DEFINE_FWK_MODULE(HbbTreeMaker);
1426    
1427