ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/plugins/HbbTreeMaker.cc
Revision: 1.5
Committed: Wed Feb 10 13:50:17 2010 UTC (15 years, 3 months ago) by amagnan
Content type: text/plain
Branch: MAIN
Changes since 1.4: +116 -24 lines
Log Message:
add vertices and crab config

File Contents

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