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