ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/plugins/HbbTreeMaker.cc
Revision: 1.11
Committed: Thu Mar 4 15:17:42 2010 UTC (15 years, 2 months ago) by amagnan
Content type: text/plain
Branch: MAIN
Changes since 1.10: +1 -1 lines
Log Message:
update beginJob and TFileService from CommonTools

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
389 HbbAnalysis::Electron lObj(lGen,lReco,lSC,lIso,lID);
390 aVec.push_back(lObj);
391 iEle++;
392 }
393 }
394 }
395
396 }//HbbElectrons
397
398
399 void HbbTreeMaker::HbbMuons(const edm::Handle<std::vector<pat::Muon> > & aCol,
400 const edm::Handle<std::vector<reco::Vertex> > & aRecoVertices,
401 std::vector<HbbAnalysis::Muon> & aVec)
402 {//HbbMuons
403
404 if (aCol.isValid()){
405 if (aCol->size() > 0) {
406
407 unsigned int iEle = 0;
408 for (std::vector<pat::Muon>::const_iterator iter = aCol->begin();
409 iter != aCol->end();
410 iter++)
411 {
412 const reco::Muon* recoMuon = dynamic_cast<const reco::Muon*>((*iter).originalObject());
413
414 HbbAnalysis::GenVars lGen;
415 if (!processData_ && (*iter).genLepton()){
416 lGen.valid = true;
417 lGen.E = (*iter).genLepton()->energy();
418 lGen.pT = (*iter).genLepton()->pt();
419 lGen.eta = (*iter).genLepton()->eta();
420 lGen.phi = (*iter).genLepton()->phi();
421 lGen.charge = (*iter).genLepton()->charge();
422 lGen.pdgId = (*iter).genLepton()->pdgId();
423 lGen.status = (*iter).genLepton()->status();
424 lGen.mass = (*iter).genLepton()->mass();
425 lGen.vx = (*iter).genLepton()->vx();
426 lGen.vy = (*iter).genLepton()->vy();
427 lGen.vz = (*iter).genLepton()->vz();
428 }
429 else {
430 lGen.valid = false;
431 lGen.E = 0;
432 lGen.pT = 0;
433 lGen.eta = 0;
434 lGen.phi = 0;
435 lGen.charge = 0;
436 lGen.pdgId = 0;
437 lGen.status = 0;
438 lGen.mass = 0;
439 lGen.vx = 0;
440 lGen.vy = 0;
441 lGen.vz = 0;
442 }
443
444 HbbAnalysis::BaseVars lReco;
445 lReco.E = (*iter).energy();
446 lReco.pT = (*iter).pt();
447 lReco.eta = (*iter).eta();
448 lReco.phi = (*iter).phi();
449 lReco.charge = (*iter).charge();
450 lReco.vx = (*iter).vx();
451 lReco.vy = (*iter).vy();
452 lReco.vz = (*iter).vz();
453
454 HbbAnalysis::MuTrkVars lTrk;
455
456 reco::TrackRef lTrackerTrk = (*iter).innerTrack();
457 if ( lTrackerTrk.isAvailable() && lTrackerTrk.isNonnull() ) {
458 if ( aRecoVertices->size() >= 1 ) {
459 const reco::Vertex& thePrimaryEventVertex = (*aRecoVertices->begin());
460 lTrk.IPd0 = -lTrackerTrk->dxy(thePrimaryEventVertex.position());
461 lTrk.IPdz = lTrackerTrk->dz(thePrimaryEventVertex.position());
462 }
463 else {
464 lTrk.IPd0 = 0;
465 lTrk.IPdz = 0;
466 }
467
468 lTrk.nHits = lTrackerTrk->numberOfValidHits();
469 }
470 else {
471 lTrk.IPd0 = 0;
472 lTrk.IPdz = 0;
473 lTrk.nHits = 0;
474 }
475
476 HbbAnalysis::MuIsoVars lIsoR03;
477 lIsoR03.sumPt = recoMuon->isolationR03().sumPt;
478 lIsoR03.emEt = recoMuon->isolationR03().emEt;
479 lIsoR03.hadEt = recoMuon->isolationR03().hadEt;
480 lIsoR03.nTracks = recoMuon->isolationR03().nTracks;
481 lIsoR03.nJets = recoMuon->isolationR03().nJets;
482
483 HbbAnalysis::MuIsoVars lIsoR05;
484 lIsoR05.sumPt = recoMuon->isolationR05().sumPt;
485 lIsoR05.emEt = recoMuon->isolationR05().emEt;
486 lIsoR05.hadEt = recoMuon->isolationR05().hadEt;
487 lIsoR05.nTracks = recoMuon->isolationR05().nTracks;
488 lIsoR05.nJets = recoMuon->isolationR05().nJets;
489
490 HbbAnalysis::MuIDVars lID;
491 if (recoMuon->isGlobalMuon()) lID.type = 1;
492 else if (recoMuon->isTrackerMuon()) lID.type = 2;
493 else if (recoMuon->isStandAloneMuon()) lID.type = 3;
494 else if (recoMuon->isCaloMuon()) lID.type = 4;
495 else lID.type = 0;
496
497 if (muon::isGoodMuon(*recoMuon,muon::AllGlobalMuons)) lID.ids.push_back(1);
498 if (muon::isGoodMuon(*recoMuon,muon::AllStandAloneMuons)) lID.ids.push_back(2);
499 if (muon::isGoodMuon(*recoMuon,muon::AllTrackerMuons)) lID.ids.push_back(3);
500 if (muon::isGoodMuon(*recoMuon,muon::TrackerMuonArbitrated)) lID.ids.push_back(4);
501 if (muon::isGoodMuon(*recoMuon,muon::AllArbitrated)) lID.ids.push_back(5);
502 if (muon::isGoodMuon(*recoMuon,muon::GlobalMuonPromptTight)) lID.ids.push_back(6);
503 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationLoose)) lID.ids.push_back(7);
504 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationTight)) lID.ids.push_back(8);
505 if (muon::isGoodMuon(*recoMuon,muon::TM2DCompatibilityLoose)) lID.ids.push_back(9);
506 if (muon::isGoodMuon(*recoMuon,muon::TM2DCompatibilityTight)) lID.ids.push_back(10);
507 if (muon::isGoodMuon(*recoMuon,muon::TMOneStationLoose)) lID.ids.push_back(11);
508 if (muon::isGoodMuon(*recoMuon,muon::TMOneStationTight)) lID.ids.push_back(12);
509 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedLowPtLoose)) lID.ids.push_back(13);
510 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedLowPtTight)) lID.ids.push_back(14);
511 if (muon::isGoodMuon(*recoMuon,muon::GMTkChiCompatibility)) lID.ids.push_back(15);
512 if (muon::isGoodMuon(*recoMuon,muon::GMStaChiCompatibility)) lID.ids.push_back(16);
513 if (muon::isGoodMuon(*recoMuon,muon::GMTkKinkTight)) lID.ids.push_back(17);
514 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationAngLoose)) lID.ids.push_back(18);
515 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationAngTight)) lID.ids.push_back(19);
516 if (muon::isGoodMuon(*recoMuon,muon::TMOneStationAngLoose)) lID.ids.push_back(20);
517 if (muon::isGoodMuon(*recoMuon,muon::TMOneStationAngTight)) lID.ids.push_back(21);
518 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedBarrelLowPtLoose)) lID.ids.push_back(22);
519 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedBarrelLowPtTight)) lID.ids.push_back(23);
520
521 lID.caloCompat = recoMuon->caloCompatibility();
522 lID.segCompat = muon::segmentCompatibility(*recoMuon);
523 lID.nChambers = recoMuon->numberOfChambers();
524 lID.nMatchesLoose = recoMuon->numberOfMatches(reco::Muon::NoArbitration);
525 lID.nMatchesMedium = recoMuon->numberOfMatches(reco::Muon::SegmentArbitration);
526 lID.nMatchesTight = recoMuon->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
527
528 HbbAnalysis::Muon lObj(lGen,lReco,lTrk,lIsoR03,lIsoR05,lID);
529 aVec.push_back(lObj);
530 iEle++;
531 }
532 }
533 }
534
535 }//HbbMuons
536
537 void HbbTreeMaker::HbbTaus(const edm::Handle<std::vector<pat::Tau> > & aCol,
538 const edm::Handle<std::vector<reco::Vertex> > & aRecoVertices,
539 std::vector<HbbAnalysis::Tau> & aVec)
540 {//HbbTaus
541
542 if (aCol.isValid()){
543 if (aCol->size() > 0) {
544
545 unsigned int iEle = 0;
546 for (std::vector<pat::Tau>::const_iterator iter = aCol->begin();
547 iter != aCol->end();
548 iter++)
549 {
550 //if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
551
552 HbbAnalysis::GenVars lGen;
553 if (!processData_ && (*iter).genLepton()){
554 lGen.valid = true;
555 lGen.E = (*iter).genLepton()->energy();
556 lGen.pT = (*iter).genLepton()->pt();
557 lGen.eta = (*iter).genLepton()->eta();
558 lGen.phi = (*iter).genLepton()->phi();
559 lGen.charge = (*iter).genLepton()->charge();
560 lGen.pdgId = (*iter).genLepton()->pdgId();
561 lGen.status = (*iter).genLepton()->status();
562 lGen.mass = (*iter).genLepton()->mass();
563 lGen.vx = (*iter).genLepton()->vx();
564 lGen.vy = (*iter).genLepton()->vy();
565 lGen.vz = (*iter).genLepton()->vz();
566 }
567 else {
568 lGen.valid = false;
569 lGen.E = 0;
570 lGen.pT = 0;
571 lGen.eta = 0;
572 lGen.phi = 0;
573 lGen.charge = 0;
574 lGen.pdgId = 0;
575 lGen.status = 0;
576 lGen.mass = 0;
577 lGen.vx = 0;
578 lGen.vy = 0;
579 lGen.vz = 0;
580 }
581
582
583 HbbAnalysis::GenVars lGenJet;
584 if (!processData_ && (*iter).genJet()){
585 lGenJet.valid = true;
586 lGenJet.E = (*iter).genJet()->energy();
587 lGenJet.pT = (*iter).genJet()->pt();
588 lGenJet.eta = (*iter).genJet()->eta();
589 lGenJet.phi = (*iter).genJet()->phi();
590 lGenJet.charge = (*iter).genJet()->charge();
591 lGenJet.pdgId = (*iter).genJet()->pdgId();
592 lGenJet.status = (*iter).genJet()->status();
593 lGenJet.mass = (*iter).genJet()->mass();
594 lGenJet.vx = (*iter).genJet()->vx();
595 lGenJet.vy = (*iter).genJet()->vy();
596 lGenJet.vz = (*iter).genJet()->vz();
597 }
598 else {
599 lGenJet.valid = false;
600 lGenJet.E = 0;
601 lGenJet.pT = 0;
602 lGenJet.eta = 0;
603 lGenJet.phi = 0;
604 lGenJet.charge = 0;
605 lGenJet.pdgId = 0;
606 lGenJet.status = 0;
607 lGenJet.mass = 0;
608 lGenJet.vx = 0;
609 lGenJet.vy = 0;
610 lGenJet.vz = 0;
611 }
612
613 HbbAnalysis::BaseVars lReco;
614 lReco.E = (*iter).energy();
615 lReco.pT = (*iter).pt();
616 lReco.eta = (*iter).eta();
617 lReco.phi = (*iter).phi();
618 lReco.charge = (*iter).charge();
619 lReco.vx = (*iter).vx();
620 lReco.vy = (*iter).vy();
621 lReco.vz = (*iter).vz();
622
623 bool isCalo = (*iter).isCaloTau();
624 bool isPF = (*iter).isPFTau();
625
626 assert (isCalo == !isPF);
627
628 HbbAnalysis::TauLeadTrkVars lLead;
629 if (isCalo) {
630 lLead.signedSipt = (*iter).leadTracksignedSipt();
631
632 reco::TrackRef lCaloTrk = (*iter).leadTrack();
633
634 if ( lCaloTrk.isAvailable() && lCaloTrk.isNonnull() ) {
635 lLead.pT = lCaloTrk->pt();
636 lLead.eta = lCaloTrk->eta();
637 lLead.phi = lCaloTrk->phi();
638
639 lLead.matchDist = reco::deltaR(lCaloTrk->momentum(), (*iter).p4());
640
641 if ( aRecoVertices->size() >= 1 ) {
642 const reco::Vertex& thePrimaryEventVertex = (*aRecoVertices->begin());
643 lLead.IPxy = lCaloTrk->dxy(thePrimaryEventVertex.position());
644 lLead.IPz = lCaloTrk->dz(thePrimaryEventVertex.position());
645 }
646 else {
647 lLead.IPxy = 0;
648 lLead.IPz = 0;
649 }
650 }
651 else {
652 lLead.pT = 0;
653 lLead.eta = 0;
654 lLead.phi = 0;
655 lLead.matchDist = 0;
656 lLead.IPxy = 0;
657 lLead.IPz = 0;
658 lLead.signedSipt = 0;
659 }
660 }//calo
661 else {
662 lLead.signedSipt = (*iter).leadPFChargedHadrCandsignedSipt();
663
664 reco::PFCandidateRef lHadrCand = (*iter).leadPFChargedHadrCand();
665
666 if ( lHadrCand.isAvailable() && lHadrCand.isNonnull() ) {
667 lLead.pT = lHadrCand->pt();
668 lLead.eta = lHadrCand->eta();
669 lLead.phi = lHadrCand->phi();
670
671 lLead.matchDist = reco::deltaR(lHadrCand->p4(), (*iter).p4());
672
673 reco::TrackRef lTrk = lHadrCand->trackRef();
674
675 if ( aRecoVertices->size() >= 1) {
676 const reco::Vertex& thePrimaryEventVertex = (*aRecoVertices->begin());
677 lLead.IPxy = lTrk->dxy(thePrimaryEventVertex.position());
678 lLead.IPz = lTrk->dz(thePrimaryEventVertex.position());
679 }
680 else {
681 lLead.IPxy = 0;
682 lLead.IPz = 0;
683 }
684 }
685 else {
686 lLead.pT = 0;
687 lLead.eta = 0;
688 lLead.phi = 0;
689 lLead.matchDist = 0;
690 lLead.IPxy = 0;
691 lLead.IPz = 0;
692 lLead.signedSipt = 0;
693 }
694
695 }//pf
696
697
698
699 const std::vector<std::pair<std::string,float> > & lIDs = (*iter).tauIDs();
700 bool lPrint = false;
701 //a few warning if additional discriminants are found:
702 if ((isPF && lIDs.size() != 16) ||
703 (isCalo && lIDs.size() != 3))
704 lPrint = true;
705
706 if (lPrint) {
707 std::cout << "!!!!!!! Discriminants changed, please update tree !!!!!!!" << std::endl;
708 std::cout << "--- isCaloTau = " << isCalo << ", isPFTau = " << isPF << std::endl;
709 std::cout << "------ ID names = " << std::endl;
710 }
711
712
713 HbbAnalysis::CaloTauIDVars lcaloId;
714 lcaloId.byIsolation = 0;
715 lcaloId.byLeadingTrackFinding = 0;
716 lcaloId.byLeadingTrackPtCut = 0;
717
718 HbbAnalysis::PFTauIDVars lpfId;
719 lpfId.byLeadingTrackFinding = 0;
720 lpfId.byLeadingTrackPtCut = 0;
721 lpfId.byTrackIsolation = 0;
722 lpfId.byECALIsolation = 0;
723 lpfId.byIsolation = 0;
724 lpfId.againstElectron = 0;
725 lpfId.againstMuon = 0;
726 lpfId.byIsolationUsingLeadingPion = 0;
727 lpfId.byTaNC = 0;
728 lpfId.byTaNCfrHalfPercent = 0;
729 lpfId.byTaNCfrOnePercent = 0;
730 lpfId.byTaNCfrQuarterPercent = 0;
731 lpfId.byTaNCfrTenthPercent = 0;
732 lpfId.ecalIsolationUsingLeadingPion = 0;
733 lpfId.leadingPionPtCut = 0;
734 lpfId.trackIsolationUsingLeadingPion = 0;
735
736
737
738 for (unsigned int id(0); id<lIDs.size(); id++){
739
740 std::string lName = lIDs.at(id).first;
741 float lDiscri = lIDs.at(id).second;
742
743 if (lPrint) std::cout << "--------- " << lName << " = " << lDiscri << std::endl;
744 //pf
745
746 if (isPF) {
747 if (lName.find("leadingTrackFinding") != lName.npos) lpfId.byLeadingTrackFinding = lDiscri;
748 if (lName.find("leadingTrackPtCut") != lName.npos) lpfId.byLeadingTrackPtCut = lDiscri;
749 if (lName.find("trackIsolationUsingLeadingPion") != lName.npos) lpfId.trackIsolationUsingLeadingPion = lDiscri;
750 if (lName.find("trackIsolation") != lName.npos &&
751 lName.find("trackIsolationUsingLeadingPion") == lName.npos) lpfId.byTrackIsolation = lDiscri;
752 if (lName.find("ecalIsolationUsingLeadingPion") != lName.npos) lpfId.ecalIsolationUsingLeadingPion = lDiscri;
753 if (lName.find("ecalIsolation") != lName.npos &&
754 lName.find("ecalIsolationUsingLeadingPion") == lName.npos) lpfId.byECALIsolation = lDiscri;
755 if (lName.find("byIsolationUsingLeadingPion") != lName.npos) lpfId.byIsolationUsingLeadingPion = lDiscri;
756 if (lName.find("byIsolation") != lName.npos &&
757 lName.find("byIsolationUsingLeadingPion") == lName.npos) lpfId.byIsolation = lDiscri;
758 if (lName.find("againstElectron") != lName.npos) lpfId.againstElectron = lDiscri;
759 if (lName.find("againstMuon") != lName.npos) lpfId.againstMuon = lDiscri;
760 if (lName.find("byTaNCfrHalfPercent") != lName.npos) lpfId.byTaNCfrHalfPercent = lDiscri;
761 if (lName.find("byTaNCfrOnePercent") != lName.npos) lpfId.byTaNCfrOnePercent = lDiscri;
762 if (lName.find("byTaNCfrQuarterPercent") != lName.npos) lpfId.byTaNCfrQuarterPercent = lDiscri;
763 if (lName.find("byTaNCfrTenthPercent") != lName.npos) lpfId.byTaNCfrTenthPercent = lDiscri;
764 if (lName.find("byTaNC") != lName.npos &&
765 lName.find("byTaNCfr") == lName.npos) lpfId.byTaNC = lDiscri;
766 if (lName.find("leadingPionPtCut") != lName.npos) lpfId.leadingPionPtCut = lDiscri;
767 }
768 if (isCalo){
769 if (lName.find("byIsolation") != lName.npos) lcaloId.byIsolation = lDiscri;
770 if (lName.find("leadingTrackFinding") != lName.npos) lcaloId.byLeadingTrackFinding = lDiscri;
771 if (lName.find("leadingTrackPtCut") != lName.npos) lcaloId.byLeadingTrackPtCut = lDiscri;
772 }
773
774
775 }
776
777
778 if (isCalo){
779
780 HbbAnalysis::CaloTauIsoVars lcaloIso;
781 lcaloIso.nIsoTracks = (*iter).isolationTracks().size();
782 lcaloIso.nSigTracks = (*iter).signalTracks().size();
783 lcaloIso.leadTrackHCAL3x3hitsEtSum = (*iter).leadTrackHCAL3x3hitsEtSum();
784 lcaloIso.leadTrackHCAL3x3hottesthitDEta = (*iter).leadTrackHCAL3x3hottesthitDEta();
785 lcaloIso.signalTracksInvariantMass = (*iter).signalTracksInvariantMass();
786 lcaloIso.tracksInvariantMass = (*iter).TracksInvariantMass();
787 lcaloIso.isolationTracksPtSum = (*iter).isolationTracksPtSum();
788 lcaloIso.isolationECALhitsEtSum = (*iter).isolationECALhitsEtSum();
789 lcaloIso.maximumHCALhitEt = (*iter).maximumHCALhitEt();
790
791 HbbAnalysis::Tau lObj(lGen,lGenJet,lReco,lLead,lcaloIso,lcaloId);
792 aVec.push_back(lObj);
793 }
794 else {
795
796 HbbAnalysis::PFTauIsoVars lpfIso;
797 lpfIso.nSigCands = (*iter).signalPFCands().size();
798 lpfIso.nIsoCands = (*iter).isolationPFCands().size();
799 lpfIso.maximumHCALPFClusterEt = (*iter).maximumHCALPFClusterEt();
800 //lpfIso.emFraction = (*iter).emFraction();
801 lpfIso.hcalTotOverPLead = (*iter).hcalTotOverPLead();
802 lpfIso.hcalMaxOverPLead = (*iter).hcalMaxOverPLead();
803 lpfIso.hcal3x3OverPLead = (*iter).hcal3x3OverPLead();
804 lpfIso.ecalStripSumEOverPLead = (*iter).ecalStripSumEOverPLead();
805 lpfIso.bremsRecoveryEOverPLead = (*iter).bremsRecoveryEOverPLead();
806
807 HbbAnalysis::PFTauCandVars lHadr;
808 lHadr.nSigCands = (*iter).signalPFChargedHadrCands().size();
809 lHadr.nIsoCands = (*iter).isolationPFChargedHadrCands().size();
810 lHadr.isolationPtSum = (*iter).isolationPFChargedHadrCandsPtSum();
811
812 HbbAnalysis::PFTauCandVars lNeutr;
813 lNeutr.nSigCands = (*iter).signalPFNeutrHadrCands().size();
814 lNeutr.nIsoCands = (*iter).isolationPFNeutrHadrCands().size();
815 lNeutr.isolationPtSum = (*iter).neutralHadronIso();
816
817 HbbAnalysis::PFTauCandVars lGamma;
818 lGamma.nSigCands = (*iter).signalPFGammaCands().size();
819 lGamma.nIsoCands = (*iter).isolationPFGammaCands().size();
820 lGamma.isolationPtSum = (*iter).isolationPFGammaCandsEtSum();
821
822 HbbAnalysis::PFTauEleIDVars lEleId;
823 if ( (*iter).electronPreIDTrack().isAvailable() && (*iter).electronPreIDTrack().isNonnull() ) {
824 lEleId.pT = (*iter).electronPreIDTrack()->pt();
825 lEleId.eta = (*iter).electronPreIDTrack()->eta();
826 lEleId.phi = (*iter).electronPreIDTrack()->phi();
827 }
828 else {
829 lEleId.pT = 0;
830 lEleId.eta = 0;
831 lEleId.phi = 0;
832 }
833
834 lEleId.output = (*iter).electronPreIDOutput();
835 lEleId.decision = (*iter).electronPreIDDecision();
836
837 HbbAnalysis::PFTauMuIDVars lMuId;
838 lMuId.caloCompat = (*iter).caloComp();
839 lMuId.segCompat = (*iter).segComp();
840 lMuId.decision = (*iter).muonDecision();
841
842 HbbAnalysis::Tau lObj(lGen,lGenJet,lReco,lLead,lpfIso,lHadr,lNeutr,lGamma,lpfId,lEleId,lMuId);
843 aVec.push_back(lObj);
844 }
845 iEle++;
846 }
847 }
848 }
849
850 }//HbbTaus
851
852 void HbbTreeMaker::HbbJets(const edm::Handle<std::vector<pat::Jet> > & aCol,
853 const HbbAnalysis::JetFlavour & aJetFlav,
854 const edm::Handle<reco::GenParticleCollection> & aGenParticles,
855 std::vector<HbbAnalysis::Jet> & aVec)
856 {//HbbJets
857
858 if (aCol.isValid()){//valid
859 if (aCol->size() > 0) {//non empty
860
861 unsigned int iEle = 0;
862 for (std::vector<pat::Jet>::const_iterator iter = aCol->begin();
863 iter != aCol->end();
864 iter++)
865 {//loop on element
866 //if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
867
868 HbbAnalysis::GenVars lGen;
869 if (!processData_ && (*iter).genParton()){
870 lGen.valid = true;
871 lGen.E = (*iter).genParton()->energy();
872 lGen.pT = (*iter).genParton()->pt();
873 lGen.eta = (*iter).genParton()->eta();
874 lGen.phi = (*iter).genParton()->phi();
875 lGen.charge = (*iter).genParton()->charge();
876 lGen.pdgId = (*iter).genParton()->pdgId();
877 lGen.status = (*iter).genParton()->status();
878 lGen.mass = (*iter).genParton()->mass();
879 lGen.vx = (*iter).genParton()->vx();
880 lGen.vy = (*iter).genParton()->vy();
881 lGen.vz = (*iter).genParton()->vz();
882 }
883 else {
884 lGen.valid = false;
885 lGen.E = 0;
886 lGen.pT = 0;
887 lGen.eta = 0;
888 lGen.phi = 0;
889 lGen.charge = 0;
890 lGen.pdgId = 0;
891 lGen.status = 0;
892 lGen.mass = 0;
893 lGen.vx = 0;
894 lGen.vy = 0;
895 lGen.vz = 0;
896 }
897
898
899 HbbAnalysis::GenVars lGenJet;
900 if (!processData_ && (*iter).genJet()){
901 lGenJet.valid = true;
902 lGenJet.E = (*iter).genJet()->energy();
903 lGenJet.pT = (*iter).genJet()->pt();
904 lGenJet.eta = (*iter).genJet()->eta();
905 lGenJet.phi = (*iter).genJet()->phi();
906 lGenJet.charge = (*iter).genJet()->charge();
907 lGenJet.pdgId = (*iter).genJet()->pdgId();
908 lGenJet.status = (*iter).genJet()->status();
909 lGenJet.mass = (*iter).genJet()->mass();
910 lGenJet.vx = (*iter).genJet()->vx();
911 lGenJet.vy = (*iter).genJet()->vy();
912 lGenJet.vz = (*iter).genJet()->vz();
913 }
914 else {
915 lGenJet.valid = false;
916 lGenJet.E = 0;
917 lGenJet.pT = 0;
918 lGenJet.eta = 0;
919 lGenJet.phi = 0;
920 lGenJet.charge = 0;
921 lGenJet.pdgId = 0;
922 lGenJet.status = 0;
923 lGenJet.mass = 0;
924 lGenJet.vx = 0;
925 lGenJet.vy = 0;
926 lGenJet.vz = 0;
927 }
928
929 HbbAnalysis::BaseVars lReco;
930 lReco.E = (*iter).energy();
931 lReco.pT = (*iter).pt();
932 lReco.eta = (*iter).eta();
933 lReco.phi = (*iter).phi();
934 lReco.charge = (*iter).jetCharge();
935 lReco.vx = (*iter).vx();
936 lReco.vy = (*iter).vy();
937 lReco.vz = (*iter).vz();
938
939 unsigned int lFlav = 0;
940 if (!processData_ && aJetFlav.nPartons()) {
941 lFlav = aJetFlav.partonMatchingGenJet((*iter),aGenParticles,0.4).second;
942 }
943
944 HbbAnalysis::JetVars lCommon;
945 lCommon.flavour = lFlav;
946 lCommon.partonFlavour = (*iter).partonFlavour();
947 lCommon.nAssociatedTracks = ((*iter).associatedTracks()).size();
948 lCommon.rawpT = (*iter).pt();
949 if ((*iter).hasCorrFactors())
950 lCommon.rawpT = (*iter).pt()/((*iter).corrFactor((*iter).corrStep()));
951
952 lCommon.etaMean = (*iter).etaPhiStatistics().etaMean;
953 lCommon.phiMean = (*iter).etaPhiStatistics().phiMean;
954 lCommon.etaEtaMoment = (*iter).etaPhiStatistics().etaEtaMoment;
955 lCommon.phiPhiMoment = (*iter).etaPhiStatistics().phiPhiMoment;
956 lCommon.etaPhiMoment = (*iter).etaPhiStatistics().etaPhiMoment;
957
958 //lCommon.rawEta = (*iter).;
959 //lCommon.rawPhi = (*iter).;
960 // p_hasJetCorrFactors->Fill(aJet.hasJetCorrFactors());
961
962 HbbAnalysis::JetBtagVars lBtag;
963 lBtag.cSV = (*iter).bDiscriminator("combinedSecondaryVertexBJetTags");
964 lBtag.cSVMVA = (*iter).bDiscriminator("combinedSecondaryVertexMVABJetTags");
965 lBtag.iPMVA = (*iter).bDiscriminator("impactParameterMVABJetTags");
966 lBtag.bProba = (*iter).bDiscriminator("jetBProbabilityBJetTags");
967 lBtag.probability = (*iter).bDiscriminator("jetProbabilityBJetTags");
968 lBtag.sSV = (*iter).bDiscriminator("simpleSecondaryVertexBJetTags");
969 lBtag.softElectronByPt = ((*iter).bDiscriminator("softElectronByPtBJetTags") < -1000) ? -1000 : (*iter).bDiscriminator("softElectronByPtBJetTags");
970 lBtag.softElectronByIP3d = ((*iter).bDiscriminator("softElectronByIP3dBJetTags") < -1000) ? -1000 : (*iter).bDiscriminator("softElectronByIP3dBJetTags");
971 lBtag.softMuon = ((*iter).bDiscriminator("softMuonBJetTags") < -1000) ? -1000 : (*iter).bDiscriminator("softMuonBJetTags");
972 lBtag.softMuonByPt = ((*iter).bDiscriminator("softMuonByPtBJetTags") < -1000) ? -1000 : (*iter).bDiscriminator("softMuonByPtBJetTags");
973 lBtag.softMuonByIP3d = ((*iter).bDiscriminator("softMuonByIP3dBJetTags") < -1000) ? -1000 : (*iter).bDiscriminator("softMuonByIP3dBJetTags");
974
975 //std::cout << " -- New values of b-discri for jet : " << iEle << std::endl
976 // << " ---- softElecs: " << lBtag.softElectronByPt << " " << lBtag.softElectronByIP3d << std::endl
977 // << " ---- softMus: " << lBtag.softMuon << " " << lBtag.softMuonByPt << " " << lBtag.softMuonByIP3d << std::endl;
978
979
980 lBtag.tCHE = (*iter).bDiscriminator("trackCountingHighEffBJetTags");
981 lBtag.tCHP = (*iter).bDiscriminator("trackCountingHighPurBJetTags");
982
983
984 bool isCalo = (*iter).isCaloJet();
985 bool isPF = (*iter).isPFJet();
986
987 assert (isCalo == !isPF);
988 if (isCalo) {
989 HbbAnalysis::JetIDVars lId;
990 lId.fHPD = (*iter).jetID().fHPD;
991 lId.fRBX = (*iter).jetID().fRBX;
992 lId.n90Hits = (*iter).jetID().n90Hits;
993
994 HbbAnalysis::CaloJetVars lCalo;
995 lCalo.maxEInEmTowers = (*iter).maxEInEmTowers();
996 lCalo.maxEInHadTowers = (*iter).maxEInHadTowers();
997 lCalo.energyFractionHadronic = (*iter).energyFractionHadronic();
998 lCalo.emEnergyFraction = (*iter).emEnergyFraction();
999 lCalo.hadEnergyInHB = (*iter).hadEnergyInHB();
1000 lCalo.hadEnergyInHO = (*iter).hadEnergyInHO();
1001 lCalo.hadEnergyInHE = (*iter).hadEnergyInHE();
1002 lCalo.hadEnergyInHF = (*iter).hadEnergyInHF();
1003 lCalo.emEnergyInEB = (*iter).emEnergyInEB();
1004 lCalo.emEnergyInEE = (*iter).emEnergyInEE();
1005 lCalo.emEnergyInHF = (*iter).emEnergyInHF();
1006 lCalo.towersArea = (*iter).towersArea();
1007 lCalo.n90 = (*iter).n90();
1008 lCalo.n60 = (*iter).n60();
1009
1010 HbbAnalysis::Jet lObj(lGen,lGenJet,lReco,lCommon,lCalo,lBtag,lId);
1011 aVec.push_back(lObj);
1012
1013 }
1014
1015 if (isPF){
1016 HbbAnalysis::PFJetVars lPF;
1017 lPF.chargedHadronEnergy = (*iter).chargedHadronEnergy();
1018 lPF.chargedHadronEnergyFraction = (*iter).chargedHadronEnergyFraction();
1019 lPF.neutralHadronEnergy = (*iter).neutralHadronEnergy();
1020 lPF.neutralHadronEnergyFraction = (*iter).neutralHadronEnergyFraction();
1021 lPF.chargedEmEnergy = (*iter).chargedEmEnergy();
1022 lPF.chargedEmEnergyFraction = (*iter).chargedEmEnergyFraction();
1023 lPF.chargedMuEnergy = (*iter).chargedMuEnergy();
1024 lPF.chargedMuEnergyFraction = (*iter).chargedMuEnergyFraction();
1025 lPF.neutralEmEnergy = (*iter).neutralEmEnergy();
1026 lPF.neutralEmEnergyFraction = (*iter).neutralEmEnergyFraction();
1027 lPF.chargedMultiplicity = (*iter).chargedMultiplicity();
1028 lPF.neutralMultiplicity = (*iter).neutralMultiplicity();
1029 lPF.muonMultiplicity = (*iter).muonMultiplicity();
1030
1031 HbbAnalysis::Jet lObj(lGen,lGenJet,lReco,lCommon,lPF,lBtag);
1032 aVec.push_back(lObj);
1033
1034 }
1035
1036
1037
1038 iEle++;
1039 }//loop on element
1040 }//non empty
1041 }//valid
1042
1043 }//HbbJets
1044
1045 void HbbTreeMaker::HbbMet(const edm::Handle<std::vector<pat::MET> > & aCol,
1046 HbbAnalysis::Met & aMet)
1047 {//HbbMet
1048 HbbAnalysis::MetVars lGen;
1049 HbbAnalysis::MetVars lReco;
1050
1051 assert(aCol->size() == 1);
1052 const pat::MET & lMet = *(aCol->begin());
1053
1054 lReco.mET = lMet.pt();
1055 lReco.mEx = lMet.px();
1056 lReco.mEy = lMet.py();
1057 lReco.sumET = lMet.sumEt();
1058 lReco.phi = lMet.phi();
1059 lReco.mEtSig = lMet.mEtSig();
1060
1061 const reco::GenMET *lGenMET = lMet.genMET();
1062
1063 if (!processData_ && lGenMET){
1064 lGen.mET = lGenMET->pt();
1065 lGen.mEx = lGenMET->px();
1066 lGen.mEy = lGenMET->py();
1067 lGen.sumET = lGenMET->sumEt();
1068 lGen.phi = lGenMET->phi();
1069 lGen.mEtSig = lGenMET->mEtSig();
1070 }
1071 else {
1072 lGen.mET = 0;
1073 lGen.mEx = 0;
1074 lGen.mEy = 0;
1075 lGen.sumET = 0;
1076 lGen.phi = 0;
1077 lGen.mEtSig = 0;
1078 }
1079
1080 aMet.genVars(lGen);
1081 aMet.recoVars(lReco);
1082
1083 }//HbbMet
1084
1085 void HbbTreeMaker::HbbTrigger(const edm::Handle<edm::TriggerResults> & aCol,
1086 std::vector<HbbAnalysis::Trigger> & aVec)
1087 {//HbbTrigger
1088
1089 if (aCol.isValid()){
1090 edm::TriggerNames lNames;
1091 lNames.init(*aCol);
1092
1093 //for (unsigned int j=0; j<hltPaths_.size(); j++) {
1094 //bool valid=false;
1095 for (unsigned int i=0; i<aCol->size(); i++){
1096 std::string trueName = lNames.triggerNames().at(i);
1097
1098 HbbAnalysis::TriggerVars lTrigVars;
1099 lTrigVars.name = trueName;
1100 lTrigVars.index = i;
1101 lTrigVars.accept = aCol->accept(i);
1102
1103 HbbAnalysis::Trigger lObj(lTrigVars);
1104
1105 aVec.push_back(lObj);
1106 }
1107
1108 }
1109
1110 }
1111
1112 void HbbTreeMaker::HbbParticles(const edm::Handle<reco::GenParticleCollection> & aCol,
1113 std::vector<HbbAnalysis::GenParticle> & aVec)
1114 {//genparticles
1115
1116 //add genParticle inside vector
1117 for (unsigned int mccount = 0;mccount<aCol->size();mccount++)
1118 {//loop on particles
1119 const reco::Candidate & p = (*aCol)[mccount];
1120
1121 HbbAnalysis::MCVars lMC;
1122 lMC.index = mccount;
1123 lMC.E = p.energy();
1124 lMC.pT = p.pt();
1125 lMC.eta = p.eta();
1126 lMC.phi = p.phi();
1127 lMC.pdgId = p.pdgId();
1128 lMC.status = p.status();
1129 HbbAnalysis::GenParticle lObj(lMC);
1130 aVec.push_back(lObj);
1131
1132 }//loop on particles
1133
1134 //now need to get the list of parents....
1135
1136 for (unsigned int mccount = 0;mccount<aCol->size();mccount++)
1137 {//loop on particles
1138 const reco::Candidate & p = (*aCol)[mccount];
1139
1140 unsigned int nD = p.numberOfDaughters();
1141 //std::cout << mccount << " has " << nD << " daughter(s) : " ;
1142 for(unsigned int dau=0;dau<nD;dau++){//loop on daughters
1143 const reco::Candidate * pDau = p.daughter(dau);
1144 //std::cout << pDau << " ("<<std::flush;
1145 for (unsigned int mccount2 = 0;mccount2<aCol->size();mccount2++)
1146 {//loop on particles
1147 const reco::Candidate & p2 = (*aCol)[mccount2];
1148 //std::cout<<"DBG: mccount2 = "<<mccount2<<" gen size = "<<data_->gen().size()<<std::endl;
1149
1150 HbbAnalysis::GenParticle & part2 = aVec.at(mccount2);
1151 if (pDau == &p2) {
1152 part2.setParent(mccount);
1153 //std::cout << &p2 << ", index = " << mccount2 << "), "<<std::flush;
1154 break;
1155 }
1156 //else std::cout << std::endl << "****no match " << mccount2 << " " << &p2 << std::endl;
1157 //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){
1158 //part2.parent(mccount);
1159 //}
1160 }//loop on particles
1161 }//loop on daughters
1162 //std::cout << std::endl;
1163
1164 }//loop on particles
1165
1166 if (debug_){
1167 for (unsigned int imc(0); imc < aVec.size(); imc++){
1168 HbbAnalysis::GenParticle & p = aVec.at(imc);
1169 p.print();
1170 }
1171 }
1172
1173
1174 }//genparticles
1175
1176
1177
1178 void HbbTreeMaker::HbbVertices(const edm::Handle<std::vector<reco::Vertex> > & aCol,
1179 std::vector<HbbAnalysis::Vertex> & aVec)
1180 {
1181
1182 for (std::vector<reco::Vertex>::const_iterator iter = aCol->begin();
1183 iter != aCol->end();
1184 iter++)
1185 {
1186
1187 if (!((*iter).isValid()) || (*iter).isFake()) continue;
1188
1189 HbbAnalysis::VertexVars lVtx;
1190
1191 if ((*iter).tracksSize() > 0) {
1192 for (std::vector<reco::TrackBaseRef>::const_iterator lTrk = (*iter).tracks_begin();
1193 lTrk != (*iter).tracks_end();
1194 lTrk++) {
1195 lVtx.trackWeights.push_back((*iter).trackWeight(*lTrk));
1196 }
1197 }
1198
1199 if (lVtx.trackWeights.size() != (*iter).tracksSize()) {
1200 std::cout<< " -- Problem with tracks, size is not as expected ! "
1201 << std::endl
1202 << " --- Size of recoVertex tracks = " << (*iter).tracksSize()
1203 << std::endl
1204 << " --- Size of trackWeights = " << lVtx.trackWeights.size()
1205 << std::endl;
1206 }
1207
1208 lVtx.chi2 = (*iter).chi2();
1209 lVtx.ndof = (*iter).ndof();
1210 lVtx.x = (*iter).x();
1211 lVtx.y = (*iter).y();
1212 lVtx.z = (*iter).z();
1213 lVtx.xError = (*iter).xError();
1214 lVtx.yError = (*iter).yError();
1215 lVtx.zError = (*iter).zError();
1216 lVtx.cov01 = (*iter).covariance(0,1);
1217 lVtx.cov02 = (*iter).covariance(0,2);
1218 lVtx.cov12 = (*iter).covariance(1,2);
1219
1220 HbbAnalysis::Vertex lObj(lVtx);
1221 aVec.push_back(lObj);
1222 }
1223
1224 }
1225
1226 #include "FWCore/Framework/interface/MakerMacros.h"
1227 DEFINE_FWK_MODULE(HbbTreeMaker);
1228
1229