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

# 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 "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 #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
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 if (!processData_) std::cout << "AMM: Collection genParticles not available! Exception : " << e.what() << ". " << std::endl;
121 }
122
123 if (doGen_ && !processData_) HbbParticles(lGenParticles,event_->particles());
124
125 unsigned int lNPartons = 0;
126 if (!processData_) lNPartons = jetFlav_.fillPartons(lGenParticles);
127
128 if (debug_ && !processData_) std::cout << "--- Number of partons = " << lNPartons << "." << std::endl;
129
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 HbbVertices(lRecoVertices,event_->vertices());
143
144 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 HbbMuons(lMuonCollection,lRecoVertices,event_->muons());
172
173
174 if (!( caloTauSrc_.label()=="" && caloTauSrc_.instance()=="" )) {
175 edm::Handle<std::vector<pat::Tau> > lTauCollection;
176
177 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 }
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 std::vector<HbbAnalysis::Electron> & aVec)
313 {//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 if (!processData_ && (*iter).genLepton()){
327 lGen.valid = true;
328 lGen.E = (*iter).genLepton()->energy();
329 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 lGen.E = 0;
343 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 lReco.E = (*iter).energy();
357 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 const edm::Handle<std::vector<reco::Vertex> > & aRecoVertices,
397 std::vector<HbbAnalysis::Muon> & aVec)
398 {//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 if (!processData_ && (*iter).genLepton()){
412 lGen.valid = true;
413 lGen.E = (*iter).genLepton()->energy();
414 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 lGen.E = 0;
428 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 lReco.E = (*iter).energy();
442 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 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 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 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
517 lID.caloCompat = recoMuon->caloCompatibility();
518 lID.segCompat = muon::segmentCompatibility(*recoMuon);
519 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 HbbAnalysis::Muon lObj(lGen,lReco,lTrk,lIsoR03,lIsoR05,lID);
525 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 const edm::Handle<std::vector<reco::Vertex> > & aRecoVertices,
535 std::vector<HbbAnalysis::Tau> & aVec)
536 {//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 if (!processData_ && (*iter).genLepton()){
550 lGen.valid = true;
551 lGen.E = (*iter).genLepton()->energy();
552 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 lGen.E = 0;
566 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 if (!processData_ && (*iter).genJet()){
581 lGenJet.valid = true;
582 lGenJet.E = (*iter).genJet()->energy();
583 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 lGenJet.E = 0;
597 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 lReco.E = (*iter).energy();
611 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 if ((isPF && lIDs.size() != 16) ||
699 (isCalo && lIDs.size() != 3))
700 lPrint = true;
701
702 if (lPrint) {
703 std::cout << "!!!!!!! Discriminants changed, please update tree !!!!!!!" << std::endl;
704 std::cout << "--- isCaloTau = " << isCalo << ", isPFTau = " << isPF << std::endl;
705 std::cout << "------ ID names = " << std::endl;
706 }
707
708
709 HbbAnalysis::CaloTauIDVars lcaloId;
710 lcaloId.byIsolation = 0;
711 lcaloId.byLeadingTrackFinding = 0;
712 lcaloId.byLeadingTrackPtCut = 0;
713
714 HbbAnalysis::PFTauIDVars lpfId;
715 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 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
732
733
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 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 if (lName.find("againstElectron") != lName.npos) lpfId.againstElectron = lDiscri;
755 if (lName.find("againstMuon") != lName.npos) lpfId.againstMuon = lDiscri;
756 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 }
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 lNeutr.isolationPtSum = (*iter).neutralHadronIso();
812
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 if (!processData_ && (*iter).genParton()){
866 lGen.valid = true;
867 lGen.E = (*iter).genParton()->energy();
868 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 lGen.E = 0;
882 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 if (!processData_ && (*iter).genJet()){
897 lGenJet.valid = true;
898 lGenJet.E = (*iter).genJet()->energy();
899 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 lGenJet.E = 0;
913 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 lReco.E = (*iter).energy();
927 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 if (!processData_ && aJetFlav.nPartons()) {
937 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 if ((*iter).hasCorrFactors())
946 lCommon.rawpT = (*iter).pt()/((*iter).corrFactor((*iter).corrStep()));
947 //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 lBtag.softElectronByPt = (*iter).bDiscriminator("softElectronByPtBJetTags");
959 lBtag.softElectronByIP3d = (*iter).bDiscriminator("softElectronByIP3dBJetTags");
960 lBtag.softMuon = (*iter).bDiscriminator("softMuonBJetTags");
961 lBtag.softMuonByPt = (*iter).bDiscriminator("softMuonByPtBJetTags");
962 lBtag.softMuonByIP3d = (*iter).bDiscriminator("softMuonByIP3dBJetTags");
963 lBtag.tCHE = (*iter).bDiscriminator("trackCountingHighEffBJetTags");
964 lBtag.tCHP = (*iter).bDiscriminator("trackCountingHighPurBJetTags");
965
966
967 bool isCalo = (*iter).isCaloJet();
968 bool isPF = (*iter).isPFJet();
969
970 assert (isCalo == !isPF);
971 if (isCalo) {
972 HbbAnalysis::JetIDVars lId;
973 lId.fHPD = (*iter).jetID().fHPD;
974 lId.fRBX = (*iter).jetID().fRBX;
975 lId.n90Hits = (*iter).jetID().n90Hits;
976
977 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 HbbAnalysis::Jet lObj(lGen,lGenJet,lReco,lCommon,lCalo,lBtag,lId);
994 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
1020
1021 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 if (!processData_ && lGenMET){
1047 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 lMC.E = p.energy();
1107 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
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 }