ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/plugins/HbbTreeMaker.cc
Revision: 1.4
Committed: Tue Feb 9 14:52:23 2010 UTC (15 years, 3 months ago) by amagnan
Content type: text/plain
Branch: MAIN
Changes since 1.3: +62 -33 lines
Log Message:
export code to CMSSW_3_4_X

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