ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/plugins/HbbTreeMaker.cc
Revision: 1.12
Committed: Fri Mar 26 17:52:50 2010 UTC (15 years, 1 month ago) by amagnan
Content type: text/plain
Branch: MAIN
CVS Tags: HbbAnaFor35X, v00-04-02, v00-04-01, v00-04-00
Changes since 1.11: +2 -0 lines
Log Message:
add seed variables to electrons

File Contents

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