ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/plugins/HbbTreeMaker.cc
Revision: 1.36
Committed: Thu Jun 23 08:39:31 2011 UTC (13 years, 10 months ago) by agilbert
Content type: text/plain
Branch: MAIN
Changes since 1.35: +3 -2 lines
Log Message:
Only fill LHE info if collection is valid

File Contents

# Content
1 #include "TLorentzVector.h"
2 #include <limits>
3
4 #include "DataFormats/Common/interface/Handle.h"
5 #include "DataFormats/Common/interface/TriggerResults.h"
6 #include "DataFormats/Common/interface/HLTenums.h"
7 #include "DataFormats/Common/interface/ValueMap.h"
8
9 #include "DataFormats/Candidate/interface/Candidate.h"
10 #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
11 #include "DataFormats/Scalers/interface/DcsStatus.h"
12 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
13 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
14
15 #include "DataFormats/MuonReco/interface/Muon.h"
16 #include "DataFormats/MuonReco/interface/MuonFwd.h"
17 #include "DataFormats/MuonReco/interface/MuonSelectors.h"
18 #include "DataFormats/MuonReco/interface/MuonChamberMatch.h"
19 #include "DataFormats/MuonReco/interface/MuonIsolation.h"
20 #include "DataFormats/MuonReco/interface/MuonEnergy.h"
21 #include "DataFormats/MuonReco/interface/MuonTime.h"
22 #include "DataFormats/MuonReco/interface/MuonQuality.h"
23
24 #include "DataFormats/RecoCandidate/interface/RecoCandidate.h"
25 #include "DataFormats/RecoCandidate/interface/IsoDeposit.h"
26 #include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h"
27
28
29 #include "DataFormats/VertexReco/interface/Vertex.h"
30 #include "DataFormats/HLTReco/interface/TriggerEvent.h"
31 #include "DataFormats/TrackReco/interface/Track.h"
32 #include "DataFormats/TrackReco/interface/TrackFwd.h"
33
34 #include "DataFormats/PatCandidates/interface/Lepton.h"
35 #include "DataFormats/PatCandidates/interface/Muon.h"
36 #include "DataFormats/PatCandidates/interface/Electron.h"
37 #include "DataFormats/PatCandidates/interface/Tau.h"
38 #include "DataFormats/PatCandidates/interface/Jet.h"
39 #include "DataFormats/PatCandidates/interface/JetCorrFactors.h"
40 #include "DataFormats/PatCandidates/interface/MET.h"
41
42 #include "SimDataFormats/GeneratorProducts/interface/GenRunInfoProduct.h"
43 #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h"
44 #include "SimDataFormats/GeneratorProducts/interface/LHEEventProduct.h"
45
46 #include "FWCore/ServiceRegistry/interface/Service.h"
47 #include "FWCore/Framework/interface/Run.h"
48 #include "FWCore/Framework/interface/ESHandle.h"
49 #include "CommonTools/UtilAlgos/interface/TFileService.h"
50
51 #include "PhysicsTools/SelectorUtils/interface/SimpleCutBasedElectronIDSelectionFunctor.h"
52 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
53 #include "MagneticField/Engine/interface/MagneticField.h"
54
55 #include "UserCode/HbbAnalysis/interface/Electron.hh"
56 #include "UserCode/HbbAnalysis/interface/Muon.hh"
57 #include "UserCode/HbbAnalysis/interface/Tau.hh"
58 #include "UserCode/HbbAnalysis/interface/Jet.hh"
59 #include "UserCode/HbbAnalysis/interface/Met.hh"
60 #include "UserCode/HbbAnalysis/interface/Trigger.hh"
61 #include "UserCode/HbbAnalysis/interface/Vertex.hh"
62 #include "UserCode/HbbAnalysis/interface/L1Object.hh"
63 #include "UserCode/HbbAnalysis/interface/HLTObject.hh"
64
65 //AJG
66 #include "DataFormats/JetReco/interface/JPTJetCollection.h"
67 #include "DataFormats/JetReco/interface/JPTJet.h"
68 #include "SimDataFormats/Vertex/interface/SimVertexContainer.h"
69 #include "SimDataFormats/Vertex/interface/SimVertex.h"
70
71 #include "CondFormats/JetMETObjects/interface/JetCorrectionUncertainty.h"
72
73 #include "UserCode/HbbAnalysis/plugins/HbbTreeMaker.hh"
74
75 using namespace HbbAnalysis;
76
77 HbbTreeMaker::HbbTreeMaker(const edm::ParameterSet & pset):
78 debug_(pset.getParameter<int>("DEBUG")),
79 processData_(false),
80 flavour_(pset.getParameter<unsigned int>("JetFlavour")),
81 doGen_(pset.getParameter<bool>("DOGEN")),
82 genParticleSrc_(pset.getParameter<edm::InputTag>("GenParticles")),
83 trackSrc_(pset.getParameter<edm::InputTag>("Tracks")),
84 dcsSrc_(pset.getParameter<edm::InputTag>("DCSInfo")),
85 electronSrc_(pset.getParameter<edm::InputTag>("Electrons")),
86 muonSrc_(pset.getParameter<edm::InputTag>("Muons")),
87 caloTauSrc_(pset.getParameter<edm::InputTag>("CaloTaus")),
88 pfTauSrc_(pset.getParameter<edm::InputTag>("PFTaus")),
89 caloJetSrc_(pset.getParameter<edm::InputTag>("CaloJets")),
90 jptJetSrc_(pset.getParameter<edm::InputTag>("JPTJets")),
91 ak7JetSrc_(pset.getParameter<edm::InputTag>("AK7Jets")),
92 pfJetSrc_(pset.getParameter<edm::InputTag>("PFJets")),
93 caloMetSrc_(pset.getParameter<edm::InputTag>("CaloMET")),
94 tcMetSrc_(pset.getParameter<edm::InputTag>("TCMET")),
95 pfMetSrc_(pset.getParameter<edm::InputTag>("PFMET")),
96 //pairSrc_(pset.getParameter<edm::InputTag>("Pair")),
97 //mmPairSrc_(pset.getParameter<edm::InputTag>("MuMuPair")),
98 //etPairSrc_(pset.getParameter<edm::InputTag>("ETauPair")),
99 //mtPairSrc_(pset.getParameter<edm::InputTag>("MuTauPair")),
100 vertexSrc_(pset.getParameter<edm::InputTag>("Vertex")),
101 triggerSrc_(pset.getParameter<edm::InputTag>("Trigger")),
102 hltPaths_(pset.getParameter<std::vector<std::string> >("HLTPaths")),
103 l1CenJetSrc_(pset.getParameter<edm::InputTag>("L1CenJet")),
104 l1TauJetSrc_(pset.getParameter<edm::InputTag>("L1TauJet")),
105 l1FwdJetSrc_(pset.getParameter<edm::InputTag>("L1FwdJet")),
106 hltSummarySrc_(pset.getParameter<edm::InputTag>("HLTSummary")),
107 event_(0),
108 tree_(0)
109 //processVec_(pset.getParameter<std::vector<std::string> >("ProcessVec"))
110 {//constructor
111
112 std::string JEC_PATH("CondFormats/JetMETObjects/data/");
113 try {
114 edm::FileInPath fipCalo(JEC_PATH+"Jec10V3_Uncertainty_AK5Calo.txt");
115 edm::FileInPath fipPF(JEC_PATH+"Jec10V3_Uncertainty_AK5PF.txt");
116 edm::FileInPath fipJPT(JEC_PATH+"Jec10V3_Uncertainty_AK5JPT.txt");
117 jecUncCalo = new JetCorrectionUncertainty(fipCalo.fullPath());
118 jecUncPF = new JetCorrectionUncertainty(fipPF.fullPath());
119 jecUncJPT = new JetCorrectionUncertainty(fipJPT.fullPath());
120 } catch(edm::Exception& e) {
121 std::cout << "JEC Uncertainty files unavailable! Exception : " << e.what() << ". " << std::endl;
122 jecUncCalo = 0;
123 jecUncPF = 0;
124 jecUncJPT = 0;
125 }
126
127 }//constructor
128
129 HbbTreeMaker::~HbbTreeMaker()
130 {//destructor
131 delete jecUncCalo;
132 delete jecUncPF;
133 delete jecUncJPT;
134
135 }//destructor
136
137
138
139 void HbbTreeMaker::beginJob(){//beginJob
140
141
142 edm::Service<TFileService> lFileService;
143
144 TFileDirectory lDir = lFileService->mkdir("HbbAnalysis");
145
146 tree_ = lDir.make<TTree>("Tree","Tree");
147 tree_->Branch("HbbEvent","HbbAnalysis::HbbEvent",&event_);
148 event_ = new HbbEvent();
149
150 if (debug_) std::cout << "Initialising JetFlavour : " << std::endl;
151
152 lDir = lFileService->mkdir("JetFlavours");
153 jetFlav_.Initialise(lDir, debug_, flavour_);
154
155
156 }//beginJob
157
158 void HbbTreeMaker::endJob(){//endJob
159 if (!processData_) jetFlav_.printSummary();
160
161 //tree_->Write();
162 //delete tree_;
163 //delete event_;
164
165 }//endJob
166
167 void HbbTreeMaker::analyze(const edm::Event& aEvt, const edm::EventSetup& aEvtSetup){//analyze
168
169 //dumpContent(aEvt,"","MuTauPAT");
170 if (debug_) std::cout << "Processing event #" << aEvt.id().event() << std::endl;
171
172
173 static bool firstEvent = true;
174
175 event_->Clear();
176 event_->event(aEvt.id().event());
177 processData_ = aEvt.isRealData();
178
179 event_->run(aEvt.run());
180 event_->lumiBlock(aEvt.luminosityBlock());
181 event_->isRealData(aEvt.isRealData());
182 event_->bx(aEvt.bunchCrossing());
183
184 edm::Handle<reco::BeamSpot> lBeamSpot;
185 try {
186 aEvt.getByLabel(edm::InputTag("offlineBeamSpot"), lBeamSpot);
187 } catch(cms::Exception& e) {
188 std::cout<< "AMM: No beam spot found. Exception : " << e.what() << "." << std::endl;
189 }
190 HbbBeamSpot(lBeamSpot,event_->beamSpot());
191
192 //AJG - This will only work on RECO sample
193 /*
194 std::cout << "Beamspot = (" << lBeamSpot->x0() << "," << lBeamSpot->y0() << "," << lBeamSpot->z0() << ")" << std::endl;
195
196 edm::Handle<edm::SimVertexContainer> simVertexCollection;
197 aEvt.getByLabel("g4SimHits", simVertexCollection);
198 const edm::SimVertexContainer simVC = *(simVertexCollection.product());
199 std::cout << "SimVertexContainer size = " << simVC.size() << std::endl;
200 std::cout << "SimVertex[0] = (" << simVC.at(0).position().x() << ","
201 << simVC.at(0).position().y() << ","
202 << simVC.at(0).position().z() << ")" << std::endl;
203 */
204
205 //used in jet method....
206 edm::Handle<reco::GenParticleCollection> lGenParticles;
207
208 if (!processData_) {
209 edm::Handle<edm::HepMCProduct> mcProd;
210 edm::Handle<GenRunInfoProduct> lRunProd;
211 try {
212 aEvt.getByLabel("generator", mcProd );
213 } catch(cms::Exception& e) {
214 std::cout << "AMM: Collection HepMCProduct not available! Exception : " << e.what() << ". " << std::endl;
215 }
216 try {
217 aEvt.getRun().getByLabel("generator",lRunProd);
218 } catch(cms::Exception& e) {
219 std::cout << "AMM: Collection GenInfoProduct not available! Exception : " << e.what() << ". " << std::endl;
220 }
221
222 if (mcProd.isValid() && lRunProd.isValid()){
223 HbbGenInfo(mcProd,lRunProd);
224 }
225
226 edm::Handle<LHEEventProduct> lLHEEvt;
227 try {
228 aEvt.getByType(lLHEEvt);
229 } catch(cms::Exception& e) {
230 std::cout << "AMM: Collection of LHEEventProduct not available! Exception : " << e.what() << ". " << std::endl;
231 }
232
233 if (lLHEEvt.isValid()){
234 HbbLHEInfo(lLHEEvt,event_->lheParticles());
235 }
236 try {
237 aEvt.getByLabel(genParticleSrc_,lGenParticles);
238 if (debug_) std::cout << "** ngenParticles = " << lGenParticles->size() << std::endl;
239 } catch(cms::Exception& e) {
240 std::cout << "AMM: Collection genParticles not available! Exception : " << e.what() << ". " << std::endl;
241 }
242
243 if (doGen_) HbbParticles(lGenParticles,event_->particles());
244
245 unsigned int lNPartons = 0;
246 lNPartons = jetFlav_.fillPartons(lGenParticles);
247
248 if (debug_) std::cout << "--- Number of partons = " << lNPartons << "." << std::endl;
249 }
250
251 edm::Handle<std::vector<reco::Vertex> > lRecoVertices;
252 try {
253 aEvt.getByLabel(vertexSrc_, lRecoVertices);
254 if (!lRecoVertices.isValid()){
255 edm::LogInfo("ERROR")<< "Error! Can't get vertex by label. ";
256 }
257 if (debug_) std::cout << "** vertexcollection = " << lRecoVertices->size() << " elements." << std::endl;
258 } catch(cms::Exception& e) {
259 std::cout << "AMM: Collection " << vertexSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
260 }
261
262 HbbVertices(lRecoVertices,event_->vertices());
263
264 edm::Handle<std::vector<pat::Electron> > lElectronCollection;
265
266 try {
267 aEvt.getByLabel(electronSrc_,lElectronCollection);
268 if (!lElectronCollection.isValid()){
269 edm::LogInfo("ERROR")<< "Error! Can't get electron by label. ";
270 }
271 if (debug_) std::cout << "** electroncollection = " << lElectronCollection->size() << " elements." << std::endl;
272 } catch(cms::Exception& e) {
273 std::cout << "AMM: Collection " << electronSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
274 }
275
276 HbbElectrons(lElectronCollection,event_->electrons());
277
278 edm::Handle<std::vector<pat::Muon> > lMuonCollection;
279
280 try {
281 aEvt.getByLabel(muonSrc_,lMuonCollection);
282 if (!lMuonCollection.isValid()){
283 edm::LogInfo("ERROR")<< "Error! Can't get muon by label. ";
284 }
285 if (debug_) std::cout << "** muoncollection = " << lMuonCollection->size() << " elements." << std::endl;
286 } catch(cms::Exception& e) {
287 std::cout << "AMM: Collection " << muonSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
288 }
289
290 HbbMuons(lMuonCollection,lRecoVertices,lBeamSpot,event_->muons());
291
292
293 if (!( caloTauSrc_.label()=="" && caloTauSrc_.instance()=="" )) {
294 edm::Handle<std::vector<pat::Tau> > lTauCollection;
295
296 try {
297 aEvt.getByLabel(caloTauSrc_,lTauCollection);
298 if (!lTauCollection.isValid()){
299 edm::LogInfo("ERROR")<< "Error! Can't get caloTau by label. ";
300 }
301 if (debug_) std::cout << "** caloTaucollection = " << lTauCollection->size() << " elements." << std::endl;
302 } catch(cms::Exception& e) {
303 std::cout << "AMM: Collection " << caloTauSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
304 }
305
306 HbbTaus(lTauCollection,lRecoVertices,event_->caloTaus());
307 }
308
309 edm::Handle<std::vector<pat::Tau> > lPFTauCollection;
310
311 try {
312 aEvt.getByLabel(pfTauSrc_,lPFTauCollection);
313 if (!lPFTauCollection.isValid()){
314 edm::LogInfo("ERROR")<< "Error! Can't get pfTau by label. ";
315 }
316 if (debug_) std::cout << "** pfTaucollection = " << lPFTauCollection->size() << " elements." << std::endl;
317 } catch(cms::Exception& e) {
318 std::cout << "AMM: Collection " << pfTauSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
319 }
320
321 HbbTaus(lPFTauCollection,lRecoVertices,event_->pfTaus());
322
323 edm::Handle<std::vector<pat::Jet> > lCaloJetCollection;
324
325 try {
326 aEvt.getByLabel(caloJetSrc_,lCaloJetCollection);
327 if (!lCaloJetCollection.isValid()){
328 edm::LogInfo("ERROR")<< "Error! Can't get caloJets by label. ";
329 }
330 if (debug_) std::cout << "** caloJetcollection = " << lCaloJetCollection->size() << " elements." << std::endl;
331 } catch(cms::Exception& e) {
332 std::cout << "AMM: Collection " << caloJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
333 }
334
335 HbbJets(lCaloJetCollection,jetFlav_,lGenParticles,event_->caloJets());
336
337 //AJG - Process reco JPT Jet Corrections:
338 //This section should be uncommented for testing purposes
339
340 /*
341 edm::Handle<reco::JPTJetCollection > lJptRL2L3RESJetCollection;
342 edm::Handle<reco::JPTJetCollection > lJptRL1L2L3RESJetCollection;
343
344 edm::Handle<reco::JPTJetCollection > lJptRRAWJetCollection;
345 try {
346 aEvt.getByLabel("JetPlusTrackZSPCorJetAntiKt5",lJptRRAWJetCollection);
347 if (!lJptRRAWJetCollection.isValid()){
348 edm::LogInfo("ERROR")<< "Error! Can't get JetPlusZSPCorJetAntiKt5 by label. ";
349 }
350 if (debug_) std::cout << "** jetPlusTrackZSPCorJetAntiKt5 = " << lJptRRAWJetCollection->size() << " elements." << std::endl;
351 } catch(cms::Exception& e) {
352 std::cout << "AJG: Collection not available! Exception : " << e.what() << ". " << std::endl;
353 }
354
355 try {
356 aEvt.getByLabel("ak5JPTJetsL2L3Residual",lJptRL2L3RESJetCollection);
357 aEvt.getByLabel("JetPlusTrackZSPCorJetAntiKt5",lJptRRAWJetCollection);
358 aEvt.getByLabel("ak5JPTJetsL1L2L3Residual",lJptRL1L2L3RESJetCollection);
359 if (!lJptRRAWJetCollection.isValid()){
360 edm::LogInfo("ERROR")<< "Error! Can't get jptRecoJets by label. ";
361 }
362 if (debug_) std::cout << "** jptRecoJetcollection = " << lJptRRAWJetCollection->size() << " elements." << std::endl;
363 } catch(cms::Exception& e) {
364 std::cout << "AJG: Collection " << jptJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
365 }
366
367
368 for(reco::JPTJetCollection::const_iterator jptjet = lJptRRAWJetCollection->begin(); jptjet != lJptRRAWJetCollection->end(); ++jptjet ) {
369
370 std::cout << "pT = " << jptjet->pt() << std::endl;
371
372 reco::TrackRefVector tpionsInVInC = jptjet->getPionsInVertexInCalo();
373 std::cout << "Pion Track Count (reco) = " << tpionsInVInC.size() << std::endl;
374 }
375
376 reco::JPTJetCollection::const_iterator jptRAWjet = lJptRRAWJetCollection->begin();
377 reco::JPTJetCollection::const_iterator jptL2L3RESjet = lJptRL2L3RESJetCollection->begin();
378 reco::JPTJetCollection::const_iterator jptL1L2L3RESjet = lJptRL1L2L3RESJetCollection->begin();
379 std::cout << "pT RAW = " << jptRAWjet->pt() << std::endl;
380 std::cout << "pT L2L3RES = " << jptL2L3RESjet->pt() << std::endl;
381 std::cout << "pT L1L2L3RES = " << jptL1L2L3RESjet->pt() << std::endl;
382 */
383
384
385
386 edm::Handle<std::vector<pat::Jet> > lJptJetCollection;
387
388 try {
389 aEvt.getByLabel(jptJetSrc_,lJptJetCollection);
390 if (!lJptJetCollection.isValid()){
391 edm::LogInfo("ERROR")<< "Error! Can't get jptJets by label. ";
392 }
393 if (debug_) std::cout << "** jptJetcollection = " << lJptJetCollection->size() << " elements." << std::endl;
394 } catch(cms::Exception& e) {
395 std::cout << "AMM: Collection " << jptJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
396 }
397
398 //std::cout << "Processing JPT jets:" << std::endl;
399 HbbJets(lJptJetCollection,jetFlav_,lGenParticles,event_->jptJets());
400
401 edm::Handle<std::vector<pat::Jet> > lAk7JetCollection;
402
403 try {
404 aEvt.getByLabel(ak7JetSrc_,lAk7JetCollection);
405 if (!lAk7JetCollection.isValid()){
406 edm::LogInfo("ERROR")<< "Error! Can't get ak7Jets by label. ";
407 }
408 if (debug_) std::cout << "** ak7Jetcollection = " << lAk7JetCollection->size() << " elements." << std::endl;
409 } catch(cms::Exception& e) {
410 std::cout << "AMM: Collection " << ak7JetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
411 }
412
413 //std::cout << "Processing JPT jets:" << std::endl;
414 HbbJets(lAk7JetCollection,jetFlav_,lGenParticles,event_->ak7Jets());
415
416 edm::Handle<std::vector<pat::Jet> > lPfJetCollection;
417
418 try {
419 aEvt.getByLabel(pfJetSrc_,lPfJetCollection);
420 if (!lPfJetCollection.isValid()){
421 edm::LogInfo("ERROR")<< "Error! Can't get pfJets by label. ";
422 }
423 if (debug_) std::cout << "** pfJetcollection = " << lPfJetCollection->size() << " elements." << std::endl;
424 } catch(cms::Exception& e) {
425 std::cout << "AMM: Collection " << pfJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
426 }
427
428 //std::cout << "Processing PF jets:" << std::endl;
429 HbbJets(lPfJetCollection,jetFlav_,lGenParticles,event_->pfJets());
430
431 edm::Handle<std::vector<pat::MET> > lCaloMetCol;
432
433 try {
434 aEvt.getByLabel(caloMetSrc_,lCaloMetCol);
435 if (!lCaloMetCol.isValid()){
436 edm::LogInfo("ERROR")<< "Error! Can't get caloMet by label. ";
437 }
438 if (debug_) std::cout << "** caloMet = " << lCaloMetCol->size() << " elements." << std::endl;
439 } catch(cms::Exception& e) {
440 std::cout << "AMM: Collection " << caloMetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
441 }
442
443 HbbMet(lCaloMetCol,event_->caloMet());
444
445 edm::Handle<std::vector<pat::MET> > lTcMetCol;
446
447 try {
448 aEvt.getByLabel(tcMetSrc_,lTcMetCol);
449 if (!lTcMetCol.isValid()){
450 edm::LogInfo("ERROR")<< "Error! Can't get tcMet by label. ";
451 }
452 if (debug_) std::cout << "** tcMet = " << lTcMetCol->size() << " elements." << std::endl;
453 } catch(cms::Exception& e) {
454 std::cout << "AMM: Collection " << tcMetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
455 }
456
457 HbbMet(lTcMetCol,event_->tcMet());
458
459 edm::Handle<std::vector<pat::MET> > lPfMetCol;
460
461 try {
462 aEvt.getByLabel(pfMetSrc_,lPfMetCol);
463 if (!lPfMetCol.isValid()){
464 edm::LogInfo("ERROR")<< "Error! Can't get pfMet by label. ";
465 }
466 if (debug_) std::cout << "** pfMet = " << lPfMetCol->size() << " elements." << std::endl;
467 } catch(cms::Exception& e) {
468 std::cout << "AMM: Collection " << pfMetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
469 }
470
471 HbbMet(lPfMetCol,event_->pfMet());
472
473
474
475 //triggers
476 edm::Handle<edm::TriggerResults> lTrigCol;
477 try {
478 aEvt.getByLabel(triggerSrc_,lTrigCol);
479 if (!lTrigCol.isValid()){
480 edm::LogInfo("ERROR")<< "Error! Can't get triggers by label. ";
481 }
482 if (debug_) std::cout << "** triggers = " << lTrigCol->size() << std::endl;
483 } catch(cms::Exception& e) {
484 std::cout << "AMM: Collection " << triggerSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
485 }
486 if (lTrigCol.isValid()) {
487 const edm::TriggerNames & lNames = aEvt.triggerNames(*lTrigCol);
488 HbbTrigger(lTrigCol,lNames,event_->triggers());
489 }
490
491 //L1 jet objects
492
493 edm::Handle<l1extra::L1JetParticleCollection> lCenJet;
494 edm::Handle<l1extra::L1JetParticleCollection> lFwdJet;
495 edm::Handle<l1extra::L1JetParticleCollection> lTauJet;
496 try {
497 aEvt.getByLabel(l1CenJetSrc_,lCenJet);
498 aEvt.getByLabel(l1TauJetSrc_,lTauJet);
499 aEvt.getByLabel(l1FwdJetSrc_,lFwdJet);
500 } catch(cms::Exception& e) {
501 std::cout << "AMM: L1 Collections " << l1CenJetSrc_ << ", " << l1TauJetSrc_ << ", " << l1FwdJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
502 }
503 if (lCenJet.isValid()) {
504 HbbL1Objects(lCenJet,event_->l1Jets(),1);
505 }
506 if (lTauJet.isValid()) {
507 HbbL1Objects(lTauJet,event_->l1Jets(),2);
508 }
509 if (lFwdJet.isValid()) {
510 HbbL1Objects(lFwdJet,event_->l1Jets(),3);
511 }
512
513
514 edm::Handle<trigger::TriggerEvent> lHltSummary;
515 try {
516 aEvt.getByLabel(hltSummarySrc_,lHltSummary);
517 } catch(cms::Exception& e) {
518 std::cout << "AMM: collection " << hltSummarySrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
519 }
520 if (lHltSummary.isValid()) {
521 HbbHLTObjects(lHltSummary,event_->hltObjects());
522 }
523
524
525
526 //event_->order();
527 tree_->Fill();
528 firstEvent = false;
529
530 }//analyze
531
532
533 void HbbTreeMaker::HbbBeamSpot(const edm::Handle<reco::BeamSpot> & aBeamSpot,
534 HbbAnalysis::BeamSpot & aBS)
535 {
536
537 if (aBeamSpot.isValid()) {
538 HbbAnalysis::BeamSpotVars lbs;
539 lbs.x0 = aBeamSpot->x0();
540 lbs.y0 = aBeamSpot->y0();
541 lbs.z0 = aBeamSpot->z0();
542 lbs.sigmaZ = aBeamSpot->sigmaZ();
543 lbs.BeamWidthX = aBeamSpot->BeamWidthX();
544 lbs.BeamWidthY = aBeamSpot->BeamWidthY();
545 lbs.x0Error = aBeamSpot->x0Error();
546 lbs.y0Error = aBeamSpot->y0Error();
547 lbs.z0Error = aBeamSpot->z0Error();
548 lbs.sigmaZ0Error = aBeamSpot->sigmaZ0Error();
549 lbs.BeamWidthXError = aBeamSpot->BeamWidthXError();
550 lbs.BeamWidthYError = aBeamSpot->BeamWidthYError();
551
552 aBS.bsVars(lbs);
553 }
554
555 }
556
557
558 void HbbTreeMaker::HbbElectrons(const edm::Handle<std::vector<pat::Electron> > & aCol,
559 std::vector<HbbAnalysis::Electron> & aVec)
560 {//HbbElectrons
561
562 if (aCol.isValid()){
563 if (aCol->size() > 0) {
564
565 unsigned int iEle = 0;
566 for (std::vector<pat::Electron>::const_iterator iter = aCol->begin();
567 iter != aCol->end();
568 ++iter,++iEle)
569 {
570 //if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
571 // get the track collection
572
573
574
575 // define your function for WPXX using relative or absolute isolations
576 SimpleCutBasedElectronIDSelectionFunctor patSeleR95(SimpleCutBasedElectronIDSelectionFunctor::relIso95);
577 SimpleCutBasedElectronIDSelectionFunctor patSeleR90(SimpleCutBasedElectronIDSelectionFunctor::relIso90);
578 SimpleCutBasedElectronIDSelectionFunctor patSeleR85(SimpleCutBasedElectronIDSelectionFunctor::relIso85);
579 SimpleCutBasedElectronIDSelectionFunctor patSeleR80(SimpleCutBasedElectronIDSelectionFunctor::relIso80);
580 SimpleCutBasedElectronIDSelectionFunctor patSeleR70(SimpleCutBasedElectronIDSelectionFunctor::relIso70);
581 SimpleCutBasedElectronIDSelectionFunctor patSeleR60(SimpleCutBasedElectronIDSelectionFunctor::relIso60);
582 SimpleCutBasedElectronIDSelectionFunctor patSeleC95(SimpleCutBasedElectronIDSelectionFunctor::cIso95);
583 SimpleCutBasedElectronIDSelectionFunctor patSeleC90(SimpleCutBasedElectronIDSelectionFunctor::cIso90);
584 SimpleCutBasedElectronIDSelectionFunctor patSeleC85(SimpleCutBasedElectronIDSelectionFunctor::cIso85);
585 SimpleCutBasedElectronIDSelectionFunctor patSeleC80(SimpleCutBasedElectronIDSelectionFunctor::cIso80);
586 SimpleCutBasedElectronIDSelectionFunctor patSeleC70(SimpleCutBasedElectronIDSelectionFunctor::cIso70);
587 SimpleCutBasedElectronIDSelectionFunctor patSeleC60(SimpleCutBasedElectronIDSelectionFunctor::cIso60);
588
589
590 HbbAnalysis::GenVars lGen;
591 if (!processData_ && (*iter).genLepton()){
592 lGen.valid = true;
593 lGen.E = (*iter).genLepton()->energy();
594 lGen.pT = (*iter).genLepton()->pt();
595 lGen.eta = (*iter).genLepton()->eta();
596 lGen.y = (*iter).genLepton()->y();
597 lGen.phi = (*iter).genLepton()->phi();
598 lGen.charge = (*iter).genLepton()->charge();
599 lGen.pdgId = (*iter).genLepton()->pdgId();
600 lGen.status = (*iter).genLepton()->status();
601 lGen.mass = (*iter).genLepton()->mass();
602 lGen.vx = (*iter).genLepton()->vx();
603 lGen.vy = (*iter).genLepton()->vy();
604 lGen.vz = (*iter).genLepton()->vz();
605 }
606 else {
607 lGen.valid = false;
608 lGen.E = 0;
609 lGen.pT = 0;
610 lGen.eta = 0;
611 lGen.y = 0;
612 lGen.phi = 0;
613 lGen.charge = 0;
614 lGen.pdgId = 0;
615 lGen.status = 0;
616 lGen.mass = 0;
617 lGen.vx = 0;
618 lGen.vy = 0;
619 lGen.vz = 0;
620 }
621
622 HbbAnalysis::BaseVars lReco;
623 lReco.E = (*iter).energy();
624 lReco.pT = (*iter).pt();
625 lReco.eta = (*iter).eta();
626 lReco.y = (*iter).y();
627 lReco.phi = (*iter).phi();
628 lReco.charge = (*iter).charge();
629 lReco.vx = (*iter).vx();
630 lReco.vy = (*iter).vy();
631 lReco.vz = (*iter).vz();
632 lReco.hltMatch = (*iter).triggerObjectMatches().size();
633
634 HbbAnalysis::SCVars lSC;
635 lSC.sigmaEtaEta = (*iter).scSigmaEtaEta();
636 lSC.sigmaIEtaIEta = (*iter).scSigmaIEtaIEta();
637 lSC.e1x5 = (*iter).scE1x5();
638 lSC.e2x5Max = (*iter).scE2x5Max();
639 lSC.e5x5 = (*iter).scE5x5();
640 lSC.eOverP = (*iter).eSuperClusterOverP();
641
642 HbbAnalysis::EleIsoVars lIso;
643 lIso.calo = (*iter).caloIso();
644 lIso.track = (*iter).trackIso();
645 lIso.ecal = (*iter).ecalIso();
646 lIso.hcal = (*iter).hcalIso();
647
648 HbbAnalysis::EleIDVars lID;
649 lID.idAndIso =
650 (patSeleR95(*iter)<<11) | (patSeleR90(*iter)<<10) |
651 (patSeleR85(*iter)<<9) | (patSeleR80(*iter)<<8) |
652 (patSeleR70(*iter)<<7) | (patSeleR60(*iter)<<6) |
653 (patSeleC95(*iter)<<5) | (patSeleC90(*iter)<<4) |
654 (patSeleC85(*iter)<<3) | (patSeleC80(*iter)<<2) |
655 (patSeleC70(*iter)<<1) | (patSeleC60(*iter));
656 lID.electronIDs = (*iter).electronIDs();
657 lID.hOverE = (*iter).hadronicOverEm();
658 lID.deltaPhiIn = (*iter).deltaPhiSuperClusterTrackAtVtx();
659 lID.deltaEtaIn = (*iter).deltaEtaSuperClusterTrackAtVtx();
660 lID.ecalDrivenSeed = (*iter).ecalDrivenSeed();
661 lID.trackerDrivenSeed = (*iter).trackerDrivenSeed();
662 lID.dB = (*iter).dB();
663
664 HbbAnalysis::Electron lObj(lGen,lReco,lSC,lIso,lID);
665 aVec.push_back(lObj);
666 }
667 }
668 }
669
670 }//HbbElectrons
671
672
673 void HbbTreeMaker::HbbMuons(const edm::Handle<std::vector<pat::Muon> > & aCol,
674 const edm::Handle<std::vector<reco::Vertex> > & aRecoVertices,
675 const edm::Handle<reco::BeamSpot> & aBeamSpot,
676 std::vector<HbbAnalysis::Muon> & aVec)
677 {//HbbMuons
678
679 if (aCol.isValid()){
680 if (aCol->size() > 0) {
681
682 unsigned int iEle = 0;
683 for (std::vector<pat::Muon>::const_iterator iter = aCol->begin();
684 iter != aCol->end();
685 ++iter,++iEle)
686 {
687 const reco::Muon* recoMuon = dynamic_cast<const reco::Muon*>((*iter).originalObject());
688
689 //select only global and tracker muons
690 if (!recoMuon->isGlobalMuon() || !recoMuon->isTrackerMuon()) continue;
691
692 HbbAnalysis::GenVars lGen;
693 if (!processData_ && (*iter).genLepton()){
694 lGen.valid = true;
695 lGen.E = (*iter).genLepton()->energy();
696 lGen.pT = (*iter).genLepton()->pt();
697 lGen.eta = (*iter).genLepton()->eta();
698 lGen.y = (*iter).genLepton()->y();
699 lGen.phi = (*iter).genLepton()->phi();
700 lGen.charge = (*iter).genLepton()->charge();
701 lGen.pdgId = (*iter).genLepton()->pdgId();
702 lGen.status = (*iter).genLepton()->status();
703 lGen.mass = (*iter).genLepton()->mass();
704 lGen.vx = (*iter).genLepton()->vx();
705 lGen.vy = (*iter).genLepton()->vy();
706 lGen.vz = (*iter).genLepton()->vz();
707 }
708 else {
709 lGen.valid = false;
710 lGen.E = 0;
711 lGen.pT = 0;
712 lGen.eta = 0;
713 lGen.y = 0;
714 lGen.phi = 0;
715 lGen.charge = 0;
716 lGen.pdgId = 0;
717 lGen.status = 0;
718 lGen.mass = 0;
719 lGen.vx = 0;
720 lGen.vy = 0;
721 lGen.vz = 0;
722 }
723
724 HbbAnalysis::BaseVars lReco;
725 lReco.E = (*iter).energy();
726 lReco.pT = (*iter).pt();
727 lReco.eta = (*iter).eta();
728 lReco.y = (*iter).y();
729 lReco.phi = (*iter).phi();
730 lReco.charge = (*iter).charge();
731 lReco.vx = (*iter).vx();
732 lReco.vy = (*iter).vy();
733 lReco.vz = (*iter).vz();
734 lReco.hltMatch = (*iter).triggerObjectMatches().size();
735
736 HbbAnalysis::MuTrkVars lTrk;
737 reco::TrackRef glmuon = recoMuon->globalTrack();
738 reco::TrackRef tkmuon = recoMuon->innerTrack();
739
740 if ( glmuon.isAvailable() && glmuon.isNonnull() ) {
741 if (aBeamSpot.isValid()) {
742 lTrk.dxy = glmuon->dxy(aBeamSpot->position());
743 lTrk.dz = glmuon->dz(aBeamSpot->position());
744 }
745 else {
746 lTrk.dxy = 0;
747 lTrk.dz = 0;
748 }
749 lTrk.normalizedChi2 = glmuon->normalizedChi2();
750 lTrk.muonHits = glmuon->hitPattern().numberOfValidMuonHits();
751 lTrk.charge = glmuon->charge();
752 }
753 else {
754 lTrk.dxy = 0;
755 lTrk.dz = 0;
756 lTrk.normalizedChi2 = 0;
757 lTrk.muonHits = 0;
758 lTrk.charge = 0;
759 }
760 if ( tkmuon.isAvailable() && tkmuon.isNonnull() ) {
761 lTrk.trackerHits = tkmuon->hitPattern().numberOfValidTrackerHits();
762 lTrk.pixelHits = tkmuon->hitPattern().numberOfValidPixelHits();
763 }
764 else {
765 lTrk.trackerHits = 0;
766 lTrk.pixelHits = 0;
767 }
768
769 HbbAnalysis::MuIsoVars lIsoR03;
770 lIsoR03.sumPt = recoMuon->isolationR03().sumPt;
771 lIsoR03.emEt = recoMuon->isolationR03().emEt;
772 lIsoR03.hadEt = recoMuon->isolationR03().hadEt;
773 lIsoR03.nTracks = recoMuon->isolationR03().nTracks;
774 lIsoR03.nJets = recoMuon->isolationR03().nJets;
775
776 HbbAnalysis::MuIsoVars lIsoR05;
777 lIsoR05.sumPt = recoMuon->isolationR05().sumPt;
778 lIsoR05.emEt = recoMuon->isolationR05().emEt;
779 lIsoR05.hadEt = recoMuon->isolationR05().hadEt;
780 lIsoR05.nTracks = recoMuon->isolationR05().nTracks;
781 lIsoR05.nJets = recoMuon->isolationR05().nJets;
782
783 HbbAnalysis::MuIDVars lID;
784 //if (recoMuon->isGlobalMuon()) lID.type = 1;
785 //else if (recoMuon->isTrackerMuon()) lID.type = 2;
786 //else if (recoMuon->isStandAloneMuon()) lID.type = 3;
787 //else if (recoMuon->isCaloMuon()) lID.type = 4;
788 //else lID.type = 0;
789 lID.type = (recoMuon->isCaloMuon()<<3) | (recoMuon->isStandAloneMuon()<<2) | (recoMuon->isTrackerMuon()<<1) | recoMuon->isGlobalMuon();
790
791 if (muon::isGoodMuon(*recoMuon,muon::AllGlobalMuons)) lID.ids.push_back(1);
792 if (muon::isGoodMuon(*recoMuon,muon::AllStandAloneMuons)) lID.ids.push_back(2);
793 if (muon::isGoodMuon(*recoMuon,muon::AllTrackerMuons)) lID.ids.push_back(3);
794 if (muon::isGoodMuon(*recoMuon,muon::TrackerMuonArbitrated)) lID.ids.push_back(4);
795 if (muon::isGoodMuon(*recoMuon,muon::AllArbitrated)) lID.ids.push_back(5);
796 if (muon::isGoodMuon(*recoMuon,muon::GlobalMuonPromptTight)) lID.ids.push_back(6);
797 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationLoose)) lID.ids.push_back(7);
798 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationTight)) lID.ids.push_back(8);
799 if (muon::isGoodMuon(*recoMuon,muon::TM2DCompatibilityLoose)) lID.ids.push_back(9);
800 if (muon::isGoodMuon(*recoMuon,muon::TM2DCompatibilityTight)) lID.ids.push_back(10);
801 if (muon::isGoodMuon(*recoMuon,muon::TMOneStationLoose)) lID.ids.push_back(11);
802 if (muon::isGoodMuon(*recoMuon,muon::TMOneStationTight)) lID.ids.push_back(12);
803 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedLowPtLoose)) lID.ids.push_back(13);
804 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedLowPtTight)) lID.ids.push_back(14);
805 if (muon::isGoodMuon(*recoMuon,muon::GMTkChiCompatibility)) lID.ids.push_back(15);
806 if (muon::isGoodMuon(*recoMuon,muon::GMStaChiCompatibility)) lID.ids.push_back(16);
807 if (muon::isGoodMuon(*recoMuon,muon::GMTkKinkTight)) lID.ids.push_back(17);
808 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationAngLoose)) lID.ids.push_back(18);
809 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationAngTight)) lID.ids.push_back(19);
810 if (muon::isGoodMuon(*recoMuon,muon::TMOneStationAngLoose)) lID.ids.push_back(20);
811 if (muon::isGoodMuon(*recoMuon,muon::TMOneStationAngTight)) lID.ids.push_back(21);
812 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedBarrelLowPtLoose)) lID.ids.push_back(22);
813 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedBarrelLowPtTight)) lID.ids.push_back(23);
814
815 lID.caloCompat = recoMuon->caloCompatibility();
816 lID.segCompat = muon::segmentCompatibility(*recoMuon);
817 lID.nChambers = recoMuon->numberOfChambers();
818 lID.nMatchesLoose = recoMuon->numberOfMatches(reco::Muon::NoArbitration);
819 lID.nMatchesMedium = recoMuon->numberOfMatches(reco::Muon::SegmentArbitration);
820 lID.nMatchesTight = recoMuon->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
821 lID.dB = (*iter).dB();
822
823 HbbAnalysis::Muon lObj(lGen,lReco,lTrk,lIsoR03,lIsoR05,lID);
824 aVec.push_back(lObj);
825 }
826 }
827 }
828
829 }//HbbMuons
830
831 void HbbTreeMaker::HbbTaus(const edm::Handle<std::vector<pat::Tau> > & aCol,
832 const edm::Handle<std::vector<reco::Vertex> > & aRecoVertices,
833 std::vector<HbbAnalysis::Tau> & aVec)
834 {//HbbTaus
835
836 if (aCol.isValid()){
837 if (aCol->size() > 0) {
838
839 unsigned int iEle = 0;
840 for (std::vector<pat::Tau>::const_iterator iter = aCol->begin();
841 iter != aCol->end();
842 ++iter,++iEle)
843 {
844 //if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
845
846 HbbAnalysis::GenVars lGen;
847 if (!processData_ && (*iter).genLepton()){
848 lGen.valid = true;
849 lGen.E = (*iter).genLepton()->energy();
850 lGen.pT = (*iter).genLepton()->pt();
851 lGen.eta = (*iter).genLepton()->eta();
852 lGen.y = (*iter).genLepton()->y();
853 lGen.phi = (*iter).genLepton()->phi();
854 lGen.charge = (*iter).genLepton()->charge();
855 lGen.pdgId = (*iter).genLepton()->pdgId();
856 lGen.status = (*iter).genLepton()->status();
857 lGen.mass = (*iter).genLepton()->mass();
858 lGen.vx = (*iter).genLepton()->vx();
859 lGen.vy = (*iter).genLepton()->vy();
860 lGen.vz = (*iter).genLepton()->vz();
861 }
862 else {
863 lGen.valid = false;
864 lGen.E = 0;
865 lGen.pT = 0;
866 lGen.eta = 0;
867 lGen.y = 0;
868 lGen.phi = 0;
869 lGen.charge = 0;
870 lGen.pdgId = 0;
871 lGen.status = 0;
872 lGen.mass = 0;
873 lGen.vx = 0;
874 lGen.vy = 0;
875 lGen.vz = 0;
876 }
877
878
879 HbbAnalysis::GenVars lGenJet;
880 if (!processData_ && (*iter).genJet()){
881 lGenJet.valid = true;
882 lGenJet.E = (*iter).genJet()->energy();
883 lGenJet.pT = (*iter).genJet()->pt();
884 lGenJet.eta = (*iter).genJet()->eta();
885 lGenJet.y = (*iter).genJet()->y();
886 lGenJet.phi = (*iter).genJet()->phi();
887 lGenJet.charge = (*iter).genJet()->charge();
888 lGenJet.pdgId = (*iter).genJet()->pdgId();
889 lGenJet.status = (*iter).genJet()->status();
890 lGenJet.mass = (*iter).genJet()->mass();
891 lGenJet.vx = (*iter).genJet()->vx();
892 lGenJet.vy = (*iter).genJet()->vy();
893 lGenJet.vz = (*iter).genJet()->vz();
894 }
895 else {
896 lGenJet.valid = false;
897 lGenJet.E = 0;
898 lGenJet.pT = 0;
899 lGenJet.eta = 0;
900 lGenJet.y = 0;
901 lGenJet.phi = 0;
902 lGenJet.charge = 0;
903 lGenJet.pdgId = 0;
904 lGenJet.status = 0;
905 lGenJet.mass = 0;
906 lGenJet.vx = 0;
907 lGenJet.vy = 0;
908 lGenJet.vz = 0;
909 }
910
911 HbbAnalysis::BaseVars lReco;
912 lReco.E = (*iter).energy();
913 lReco.pT = (*iter).pt();
914 lReco.eta = (*iter).eta();
915 lReco.y = (*iter).y();
916 lReco.phi = (*iter).phi();
917 lReco.charge = (*iter).charge();
918 lReco.vx = (*iter).vx();
919 lReco.vy = (*iter).vy();
920 lReco.vz = (*iter).vz();
921
922 bool isCalo = (*iter).isCaloTau();
923 bool isPF = (*iter).isPFTau();
924
925 assert (isCalo == !isPF);
926
927 HbbAnalysis::TrkVars lLead;
928 if (isCalo) {
929 lLead.signedSipt = (*iter).leadTracksignedSipt();
930
931 reco::TrackRef lCaloTrk = (*iter).leadTrack();
932
933 if ( lCaloTrk.isAvailable() && lCaloTrk.isNonnull() ) {
934 lLead.pT = lCaloTrk->pt();
935 lLead.eta = lCaloTrk->eta();
936 lLead.phi = lCaloTrk->phi();
937
938 lLead.matchDist = reco::deltaR(lCaloTrk->momentum(), (*iter).p4());
939
940 if ( aRecoVertices->size() >= 1 ) {
941 const reco::Vertex& thePrimaryEventVertex = (*aRecoVertices->begin());
942 lLead.IPxy = lCaloTrk->dxy(thePrimaryEventVertex.position());
943 lLead.IPz = lCaloTrk->dz(thePrimaryEventVertex.position());
944 }
945 else {
946 lLead.IPxy = 0;
947 lLead.IPz = 0;
948 }
949 }
950 else {
951 lLead.pT = 0;
952 lLead.eta = 0;
953 lLead.phi = 0;
954 lLead.matchDist = 0;
955 lLead.IPxy = 0;
956 lLead.IPz = 0;
957 lLead.signedSipt = 0;
958 }
959 }//calo
960 else {
961 lLead.signedSipt = (*iter).leadPFChargedHadrCandsignedSipt();
962
963 reco::PFCandidateRef lHadrCand = (*iter).leadPFChargedHadrCand();
964
965 if ( lHadrCand.isAvailable() && lHadrCand.isNonnull() ) {
966 lLead.pT = lHadrCand->pt();
967 lLead.eta = lHadrCand->eta();
968 lLead.phi = lHadrCand->phi();
969
970 lLead.matchDist = reco::deltaR(lHadrCand->p4(), (*iter).p4());
971
972 reco::TrackRef lTrk = lHadrCand->trackRef();
973
974 if ( aRecoVertices->size() >= 1) {
975 const reco::Vertex& thePrimaryEventVertex = (*aRecoVertices->begin());
976 lLead.IPxy = lTrk->dxy(thePrimaryEventVertex.position());
977 lLead.IPz = lTrk->dz(thePrimaryEventVertex.position());
978 }
979 else {
980 lLead.IPxy = 0;
981 lLead.IPz = 0;
982 }
983 }
984 else {
985 lLead.pT = 0;
986 lLead.eta = 0;
987 lLead.phi = 0;
988 lLead.matchDist = 0;
989 lLead.IPxy = 0;
990 lLead.IPz = 0;
991 lLead.signedSipt = 0;
992 }
993
994 }//pf
995
996
997
998 const std::vector<std::pair<std::string,float> > & lIDs = (*iter).tauIDs();
999 bool lPrint = false;
1000 //a few warning if additional discriminants are found:
1001 if ((isPF && lIDs.size() != 16) ||
1002 (isCalo && lIDs.size() != 3))
1003 lPrint = true;
1004
1005 if (lPrint) {
1006 std::cout << "!!!!!!! Discriminants changed, please update tree !!!!!!!" << std::endl;
1007 std::cout << "--- isCaloTau = " << isCalo << ", isPFTau = " << isPF << std::endl;
1008 std::cout << "------ ID names = " << std::endl;
1009 }
1010
1011
1012 HbbAnalysis::CaloTauIDVars lcaloId;
1013 lcaloId.byIsolation = 0;
1014 lcaloId.byLeadingTrackFinding = 0;
1015 lcaloId.byLeadingTrackPtCut = 0;
1016
1017 HbbAnalysis::PFTauIDVars lpfId;
1018 lpfId.byLeadingTrackFinding = 0;
1019 lpfId.byLeadingTrackPtCut = 0;
1020 lpfId.byTrackIsolation = 0;
1021 lpfId.byECALIsolation = 0;
1022 lpfId.byIsolation = 0;
1023 lpfId.againstElectron = 0;
1024 lpfId.againstMuon = 0;
1025 lpfId.byIsolationUsingLeadingPion = 0;
1026 lpfId.byTaNC = 0;
1027 lpfId.byTaNCfrHalfPercent = 0;
1028 lpfId.byTaNCfrOnePercent = 0;
1029 lpfId.byTaNCfrQuarterPercent = 0;
1030 lpfId.byTaNCfrTenthPercent = 0;
1031 lpfId.ecalIsolationUsingLeadingPion = 0;
1032 lpfId.leadingPionPtCut = 0;
1033 lpfId.trackIsolationUsingLeadingPion = 0;
1034
1035
1036
1037 for (unsigned int id(0); id<lIDs.size(); ++id){
1038
1039 std::string lName = lIDs.at(id).first;
1040 float lDiscri = lIDs.at(id).second;
1041
1042 if (lPrint) std::cout << "--------- " << lName << " = " << lDiscri << std::endl;
1043 //pf
1044
1045 if (isPF) {
1046 if (lName.find("leadingTrackFinding") != lName.npos) lpfId.byLeadingTrackFinding = lDiscri;
1047 if (lName.find("leadingTrackPtCut") != lName.npos) lpfId.byLeadingTrackPtCut = lDiscri;
1048 if (lName.find("trackIsolationUsingLeadingPion") != lName.npos) lpfId.trackIsolationUsingLeadingPion = lDiscri;
1049 if (lName.find("trackIsolation") != lName.npos &&
1050 lName.find("trackIsolationUsingLeadingPion") == lName.npos) lpfId.byTrackIsolation = lDiscri;
1051 if (lName.find("ecalIsolationUsingLeadingPion") != lName.npos) lpfId.ecalIsolationUsingLeadingPion = lDiscri;
1052 if (lName.find("ecalIsolation") != lName.npos &&
1053 lName.find("ecalIsolationUsingLeadingPion") == lName.npos) lpfId.byECALIsolation = lDiscri;
1054 if (lName.find("byIsolationUsingLeadingPion") != lName.npos) lpfId.byIsolationUsingLeadingPion = lDiscri;
1055 if (lName.find("byIsolation") != lName.npos &&
1056 lName.find("byIsolationUsingLeadingPion") == lName.npos) lpfId.byIsolation = lDiscri;
1057 if (lName.find("againstElectron") != lName.npos) lpfId.againstElectron = lDiscri;
1058 if (lName.find("againstMuon") != lName.npos) lpfId.againstMuon = lDiscri;
1059 if (lName.find("byTaNCfrHalfPercent") != lName.npos) lpfId.byTaNCfrHalfPercent = lDiscri;
1060 if (lName.find("byTaNCfrOnePercent") != lName.npos) lpfId.byTaNCfrOnePercent = lDiscri;
1061 if (lName.find("byTaNCfrQuarterPercent") != lName.npos) lpfId.byTaNCfrQuarterPercent = lDiscri;
1062 if (lName.find("byTaNCfrTenthPercent") != lName.npos) lpfId.byTaNCfrTenthPercent = lDiscri;
1063 if (lName.find("byTaNC") != lName.npos &&
1064 lName.find("byTaNCfr") == lName.npos) lpfId.byTaNC = lDiscri;
1065 if (lName.find("leadingPionPtCut") != lName.npos) lpfId.leadingPionPtCut = lDiscri;
1066 }
1067 if (isCalo){
1068 if (lName.find("byIsolation") != lName.npos) lcaloId.byIsolation = lDiscri;
1069 if (lName.find("leadingTrackFinding") != lName.npos) lcaloId.byLeadingTrackFinding = lDiscri;
1070 if (lName.find("leadingTrackPtCut") != lName.npos) lcaloId.byLeadingTrackPtCut = lDiscri;
1071 }
1072
1073
1074 }
1075
1076
1077 if (isCalo){
1078
1079 HbbAnalysis::CaloTauIsoVars lcaloIso;
1080 lcaloIso.nIsoTracks = (*iter).isolationTracks().size();
1081 lcaloIso.nSigTracks = (*iter).signalTracks().size();
1082 lcaloIso.leadTrackHCAL3x3hitsEtSum = (*iter).leadTrackHCAL3x3hitsEtSum();
1083 lcaloIso.leadTrackHCAL3x3hottesthitDEta = (*iter).leadTrackHCAL3x3hottesthitDEta();
1084 lcaloIso.signalTracksInvariantMass = (*iter).signalTracksInvariantMass();
1085 lcaloIso.tracksInvariantMass = (*iter).TracksInvariantMass();
1086 lcaloIso.isolationTracksPtSum = (*iter).isolationTracksPtSum();
1087 lcaloIso.isolationECALhitsEtSum = (*iter).isolationECALhitsEtSum();
1088 lcaloIso.maximumHCALhitEt = (*iter).maximumHCALhitEt();
1089
1090 HbbAnalysis::Tau lObj(lGen,lGenJet,lReco,lLead,lcaloIso,lcaloId);
1091 aVec.push_back(lObj);
1092 }
1093 else {
1094
1095 HbbAnalysis::PFTauIsoVars lpfIso;
1096 lpfIso.nSigCands = (*iter).signalPFCands().size();
1097 lpfIso.nIsoCands = (*iter).isolationPFCands().size();
1098 lpfIso.maximumHCALPFClusterEt = (*iter).maximumHCALPFClusterEt();
1099 //lpfIso.emFraction = (*iter).emFraction();
1100 lpfIso.hcalTotOverPLead = (*iter).hcalTotOverPLead();
1101 lpfIso.hcalMaxOverPLead = (*iter).hcalMaxOverPLead();
1102 lpfIso.hcal3x3OverPLead = (*iter).hcal3x3OverPLead();
1103 lpfIso.ecalStripSumEOverPLead = (*iter).ecalStripSumEOverPLead();
1104 lpfIso.bremsRecoveryEOverPLead = (*iter).bremsRecoveryEOverPLead();
1105
1106 HbbAnalysis::PFTauCandVars lHadr;
1107 lHadr.nSigCands = (*iter).signalPFChargedHadrCands().size();
1108 lHadr.nIsoCands = (*iter).isolationPFChargedHadrCands().size();
1109 lHadr.isolationPtSum = (*iter).isolationPFChargedHadrCandsPtSum();
1110
1111 HbbAnalysis::PFTauCandVars lNeutr;
1112 lNeutr.nSigCands = (*iter).signalPFNeutrHadrCands().size();
1113 lNeutr.nIsoCands = (*iter).isolationPFNeutrHadrCands().size();
1114 lNeutr.isolationPtSum = (*iter).neutralHadronIso();
1115
1116 HbbAnalysis::PFTauCandVars lGamma;
1117 lGamma.nSigCands = (*iter).signalPFGammaCands().size();
1118 lGamma.nIsoCands = (*iter).isolationPFGammaCands().size();
1119 lGamma.isolationPtSum = (*iter).isolationPFGammaCandsEtSum();
1120
1121 HbbAnalysis::PFTauEleIDVars lEleId;
1122 if ( (*iter).electronPreIDTrack().isAvailable() && (*iter).electronPreIDTrack().isNonnull() ) {
1123 lEleId.pT = (*iter).electronPreIDTrack()->pt();
1124 lEleId.eta = (*iter).electronPreIDTrack()->eta();
1125 lEleId.phi = (*iter).electronPreIDTrack()->phi();
1126 }
1127 else {
1128 lEleId.pT = 0;
1129 lEleId.eta = 0;
1130 lEleId.phi = 0;
1131 }
1132
1133 lEleId.output = (*iter).electronPreIDOutput();
1134 lEleId.decision = (*iter).electronPreIDDecision();
1135
1136 HbbAnalysis::PFTauMuIDVars lMuId;
1137 lMuId.caloCompat = (*iter).caloComp();
1138 lMuId.segCompat = (*iter).segComp();
1139 lMuId.decision = (*iter).muonDecision();
1140
1141 HbbAnalysis::Tau lObj(lGen,lGenJet,lReco,lLead,lpfIso,lHadr,lNeutr,lGamma,lpfId,lEleId,lMuId);
1142 aVec.push_back(lObj);
1143 }
1144 }
1145 }
1146 }
1147
1148 }//HbbTaus
1149
1150 void HbbTreeMaker::HbbJets(const edm::Handle<std::vector<pat::Jet> > & aCol,
1151 const HbbAnalysis::JetFlavour & aJetFlav,
1152 const edm::Handle<reco::GenParticleCollection> & aGenParticles,
1153 std::vector<HbbAnalysis::Jet> & aVec)
1154 {//HbbJets
1155
1156 if (aCol.isValid()){//valid
1157 if (aCol->size() > 0) {//non empty
1158
1159 unsigned int iEle = 0;
1160 for (std::vector<pat::Jet>::const_iterator iter = aCol->begin();
1161 iter != aCol->end();
1162 ++iter,++iEle)
1163 {//loop on element
1164 //if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
1165
1166 HbbAnalysis::GenVars lGen;
1167 if (!processData_ && (*iter).genParton()){
1168 lGen.valid = true;
1169 lGen.E = (*iter).genParton()->energy();
1170 lGen.pT = (*iter).genParton()->pt();
1171 lGen.eta = (*iter).genParton()->eta();
1172 lGen.y = (*iter).genParton()->y();
1173 lGen.phi = (*iter).genParton()->phi();
1174 lGen.charge = (*iter).genParton()->charge();
1175 lGen.pdgId = (*iter).genParton()->pdgId();
1176 lGen.status = (*iter).genParton()->status();
1177 lGen.mass = (*iter).genParton()->mass();
1178 lGen.vx = (*iter).genParton()->vx();
1179 lGen.vy = (*iter).genParton()->vy();
1180 lGen.vz = (*iter).genParton()->vz();
1181 }
1182 else {
1183 lGen.valid = false;
1184 lGen.E = 0;
1185 lGen.pT = 0;
1186 lGen.eta = 0;
1187 lGen.y = 0;
1188 lGen.phi = 0;
1189 lGen.charge = 0;
1190 lGen.pdgId = 0;
1191 lGen.status = 0;
1192 lGen.mass = 0;
1193 lGen.vx = 0;
1194 lGen.vy = 0;
1195 lGen.vz = 0;
1196 }
1197
1198
1199 HbbAnalysis::GenVars lGenJet;
1200 if (!processData_ && (*iter).genJet()){
1201 lGenJet.valid = true;
1202 lGenJet.E = (*iter).genJet()->energy();
1203 lGenJet.pT = (*iter).genJet()->pt();
1204 lGenJet.eta = (*iter).genJet()->eta();
1205 lGenJet.y = (*iter).genJet()->y();
1206 lGenJet.phi = (*iter).genJet()->phi();
1207 lGenJet.charge = (*iter).genJet()->charge();
1208 lGenJet.pdgId = (*iter).genJet()->pdgId();
1209 lGenJet.status = (*iter).genJet()->status();
1210 lGenJet.mass = (*iter).genJet()->mass();
1211 lGenJet.vx = (*iter).genJet()->vx();
1212 lGenJet.vy = (*iter).genJet()->vy();
1213 lGenJet.vz = (*iter).genJet()->vz();
1214 }
1215 else {
1216 lGenJet.valid = false;
1217 lGenJet.E = 0;
1218 lGenJet.pT = 0;
1219 lGenJet.eta = 0;
1220 lGenJet.y = 0;
1221 lGenJet.phi = 0;
1222 lGenJet.charge = 0;
1223 lGenJet.pdgId = 0;
1224 lGenJet.status = 0;
1225 lGenJet.mass = 0;
1226 lGenJet.vx = 0;
1227 lGenJet.vy = 0;
1228 lGenJet.vz = 0;
1229 }
1230
1231 HbbAnalysis::BaseVars lReco;
1232 lReco.E = (*iter).energy();
1233 lReco.pT = (*iter).pt();
1234 lReco.eta = (*iter).eta();
1235 //lReco.etaDet = (*iter).detectorEta((*iter).vz(),(*iter).eta());
1236 lReco.y = (*iter).y();
1237 lReco.phi = (*iter).phi();
1238 lReco.charge = (*iter).jetCharge();
1239 lReco.vx = (*iter).vx();
1240 lReco.vy = (*iter).vy();
1241 lReco.vz = (*iter).vz();
1242 lReco.hltMatch = (*iter).triggerObjectMatches().size();
1243 //lReco.myEtaDet = HbbAnalysis::EtaDetector(lReco);
1244
1245 unsigned int lFlav = 0;
1246 if (!processData_ && aJetFlav.nPartons()) {
1247 lFlav = aJetFlav.partonMatchingGenJet((*iter),aGenParticles,0.4).second;
1248 }
1249
1250 HbbAnalysis::JetVars lCommon;
1251 lCommon.flavour = lFlav;
1252 lCommon.partonFlavour = (*iter).partonFlavour();
1253 lCommon.nAssociatedTracks = ((*iter).associatedTracks()).size();
1254 lCommon.rawpT = (*iter).pt();
1255 //if ((*iter).hasCorrFactors() && (*iter).corrFactor("raw")>0)
1256 //lCommon.rawpT = (*iter).pt()/((*iter).corrFactor("raw"));
1257
1258
1259 // std::cout << " -- Current JEC SET " << (*iter).currentJECSet()
1260 // << " Level " << (*iter).currentJECLevel()
1261 // << std::endl;
1262
1263 HbbAnalysis::JetECorVars lEnergyCorrections;
1264 if ((*iter).jecSetsAvailable()){
1265 float lJecFactor = (*iter).jecFactor("Uncorrected","NONE",(*iter).currentJECSet());
1266 if (lJecFactor > 0) lCommon.rawpT = (*iter).pt()*lJecFactor;
1267 if (debug_){
1268 std::cout << " ---------------------------------------------- " << std::endl
1269 << " - Raw to Cor Jet # " << iEle << " = " << std::endl
1270 << " -- Raw pT = " << lCommon.rawpT << " eta " << lReco.eta << " phi " << lReco.phi << std::endl;
1271 }
1272
1273 std::vector<std::string> lJECnames = (*iter).availableJECSets();
1274 for (unsigned int iSet(0); iSet < lJECnames.size(); ++iSet){
1275 if (debug_) std::cout << " -- JEC SET " << iSet << " " << lJECnames[iSet] << std::endl;
1276 std::vector<std::string> lJEClevels = (*iter).availableJECLevels(iSet);
1277 for (unsigned int iLev(0); iLev<lJEClevels.size(); ++iLev){
1278 if (debug_) std::cout << " ---- JEC level " << iLev << " " << lJEClevels[iLev]
1279 << " , factor = " << (*iter).jecFactor(iLev,pat::JetCorrFactors::NONE,iSet)
1280 << std::endl;
1281 lEnergyCorrections.Levels.push_back(std::pair<std::string,double>(lJEClevels[iLev],(*iter).jecFactor(iLev,pat::JetCorrFactors::NONE,iSet)));
1282 }
1283 }
1284 if (debug_) std::cout << " -- Reco pT = " << lReco.pT
1285 << std::endl;
1286 }
1287
1288 if(jecUncCalo && jecUncPF && jecUncJPT){
1289 if ((*iter).isCaloJet()) {
1290 jecUncCalo->setJetEta((*iter).eta());
1291 jecUncCalo->setJetPt((*iter).pt());
1292 lEnergyCorrections.Levels.push_back(std::pair<std::string,double>("Uncertainty",jecUncCalo->getUncertainty(true)));
1293 } else if ((*iter).isPFJet()) {
1294 jecUncPF->setJetEta((*iter).eta());
1295 jecUncPF->setJetPt((*iter).pt());
1296 lEnergyCorrections.Levels.push_back(std::pair<std::string,double>("Uncertainty",jecUncPF->getUncertainty(true)));
1297 } else if ((*iter).isJPTJet()) {
1298 jecUncJPT->setJetEta((*iter).eta());
1299 jecUncJPT->setJetPt((*iter).pt());
1300 lEnergyCorrections.Levels.push_back(std::pair<std::string,double>("Uncertainty",jecUncJPT->getUncertainty(true)));
1301 }
1302 }
1303
1304 //lEnergyCorrections.L1 = (*iter).jecFactor("L1Offset","NONE",(*iter).currentJECSet());
1305 //lEnergyCorrections.L1JPT = (*iter).jecFactor("L1JPTOffset","NONE",(*iter).currentJECSet());
1306 //lEnergyCorrections.L2 = (*iter).jecFactor("L2Relative","NONE",(*iter).currentJECSet());
1307 //lEnergyCorrections.L3 = (*iter).jecFactor("L3Absolute","NONE",(*iter).currentJECSet());
1308 //if (processData_) lEnergyCorrections.L2L3Residual = (*iter).jecFactor("L2L3Residual","NONE",(*iter).currentJECSet());
1309
1310 lCommon.etaMean = (*iter).etaPhiStatistics().etaMean;
1311 lCommon.phiMean = (*iter).etaPhiStatistics().phiMean;
1312 lCommon.etaEtaMoment = (*iter).etaPhiStatistics().etaEtaMoment;
1313 lCommon.phiPhiMoment = (*iter).etaPhiStatistics().phiPhiMoment;
1314 lCommon.etaPhiMoment = (*iter).etaPhiStatistics().etaPhiMoment;
1315
1316
1317 //lCommon.rawEta = (*iter).;
1318 //lCommon.rawPhi = (*iter).;
1319 // p_hasJetCorrFactors->Fill(aJet.hasJetCorrFactors());
1320
1321 HbbAnalysis::JetBtagVars lBtag;
1322 lBtag.cSV = (*iter).bDiscriminator("combinedSecondaryVertexBJetTags");
1323 lBtag.cSVMVA = (*iter).bDiscriminator("combinedSecondaryVertexMVABJetTags");
1324 lBtag.iPMVA = (*iter).bDiscriminator("impactParameterMVABJetTags");
1325 lBtag.bProba = (*iter).bDiscriminator("jetBProbabilityBJetTags");
1326 lBtag.probability = (*iter).bDiscriminator("jetProbabilityBJetTags");
1327 lBtag.sSVHP = (*iter).bDiscriminator("simpleSecondaryVertexHighPurBJetTags");
1328 lBtag.sSVHE = (*iter).bDiscriminator("simpleSecondaryVertexHighEffBJetTags");
1329 lBtag.softElectronByPt = ((*iter).bDiscriminator("softElectronByPtBJetTags") < -100) ? -100 : (*iter).bDiscriminator("softElectronByPtBJetTags");
1330 lBtag.softElectronByIP3d = ((*iter).bDiscriminator("softElectronByIP3dBJetTags") < -100) ? -100 : (*iter).bDiscriminator("softElectronByIP3dBJetTags");
1331 lBtag.softMuon = ((*iter).bDiscriminator("softMuonBJetTags") < -100) ? -100 : (*iter).bDiscriminator("softMuonBJetTags");
1332 lBtag.softMuonByPt = ((*iter).bDiscriminator("softMuonByPtBJetTags") < -100) ? -100 : (*iter).bDiscriminator("softMuonByPtBJetTags");
1333 lBtag.softMuonByIP3d = ((*iter).bDiscriminator("softMuonByIP3dBJetTags") < -100) ? -100 : (*iter).bDiscriminator("softMuonByIP3dBJetTags");
1334
1335 //std::cout << " -- New values of b-discri for jet : " << iEle << std::endl
1336 // << " ---- softElecs: " << lBtag.softElectronByPt << " " << lBtag.softElectronByIP3d << std::endl
1337 // << " ---- softMus: " << lBtag.softMuon << " " << lBtag.softMuonByPt << " " << lBtag.softMuonByIP3d << std::endl;
1338
1339
1340 lBtag.tCHE = (*iter).bDiscriminator("trackCountingHighEffBJetTags");
1341 lBtag.tCHP = (*iter).bDiscriminator("trackCountingHighPurBJetTags");
1342
1343
1344 bool isCalo = (*iter).isCaloJet();
1345 bool isPF = (*iter).isPFJet();
1346 bool isJPT = (*iter).isJPTJet();
1347
1348 //std::cout << " -- isCalo = " << isCalo << ", isPF = " << isPF << std::endl;
1349
1350 //assert (isCalo == !isPF);
1351 HbbAnalysis::JetIDVars lId;
1352 lId.fHPD = 0;
1353 lId.fRBX = 0;
1354 lId.n90Hits = 0;
1355 lId.hitsInN90 = 0;
1356 lId.restrictedEMF = 0;
1357 lId.nHCALTowers = 0;
1358 lId.nECALTowers = 0;
1359 if (isCalo || isJPT) {
1360 lId.fHPD = (*iter).jetID().fHPD;
1361 lId.fRBX = (*iter).jetID().fRBX;
1362 lId.n90Hits = (*iter).jetID().n90Hits;
1363 lId.hitsInN90 = (*iter).jetID().hitsInN90;
1364 lId.restrictedEMF = (*iter).jetID().restrictedEMF;
1365 lId.nHCALTowers = (*iter).jetID().nHCALTowers;
1366 lId.nECALTowers = (*iter).jetID().nECALTowers;
1367 }
1368 if (isCalo){
1369 HbbAnalysis::CaloJetVars lCalo;
1370 lCalo.maxEInEmTowers = (*iter).maxEInEmTowers();
1371 lCalo.maxEInHadTowers = (*iter).maxEInHadTowers();
1372 lCalo.energyFractionHadronic = (*iter).energyFractionHadronic();
1373 lCalo.emEnergyFraction = (*iter).emEnergyFraction();
1374 lCalo.hadEnergyInHB = (*iter).hadEnergyInHB();
1375 lCalo.hadEnergyInHO = (*iter).hadEnergyInHO();
1376 lCalo.hadEnergyInHE = (*iter).hadEnergyInHE();
1377 lCalo.hadEnergyInHF = (*iter).hadEnergyInHF();
1378 lCalo.emEnergyInEB = (*iter).emEnergyInEB();
1379 lCalo.emEnergyInEE = (*iter).emEnergyInEE();
1380 lCalo.emEnergyInHF = (*iter).emEnergyInHF();
1381 lCalo.towersArea = (*iter).towersArea();
1382 lCalo.n90 = (*iter).n90();
1383 lCalo.n60 = (*iter).n60();
1384
1385 HbbAnalysis::Jet lObj(lGen,lGenJet,lReco,lCommon,lCalo,lBtag,lId,lEnergyCorrections);
1386 aVec.push_back(lObj);
1387 }
1388 HbbAnalysis::JPTPFJetVars lJPTPF;
1389 lJPTPF.chargedHadronEnergy = 0;
1390 lJPTPF.chargedHadronEnergyFraction = 0;
1391 lJPTPF.neutralHadronEnergy = 0;
1392 lJPTPF.neutralHadronEnergyFraction = 0;
1393 lJPTPF.chargedEmEnergy = 0;
1394 lJPTPF.chargedEmEnergyFraction = 0;
1395 lJPTPF.neutralEmEnergy = 0;
1396 lJPTPF.neutralEmEnergyFraction = 0;
1397 lJPTPF.chargedMultiplicity = 0;
1398 lJPTPF.muonMultiplicity = 0;
1399
1400 if (isPF || isJPT){
1401 lJPTPF.chargedEmEnergy = (*iter).chargedEmEnergy();
1402 lJPTPF.neutralEmEnergy = (*iter).neutralEmEnergy();
1403 lJPTPF.muonMultiplicity = (*iter).muonMultiplicity();
1404 lJPTPF.chargedHadronEnergy = (*iter).chargedHadronEnergy();
1405 lJPTPF.neutralHadronEnergy = (*iter).neutralHadronEnergy();
1406 lJPTPF.chargedMultiplicity = (*iter).chargedMultiplicity();
1407
1408 lJPTPF.chargedHadronEnergyFraction = (*iter).chargedHadronEnergyFraction();
1409 lJPTPF.neutralHadronEnergyFraction = (*iter).neutralHadronEnergyFraction();
1410 lJPTPF.chargedEmEnergyFraction = (*iter).chargedEmEnergyFraction();
1411 lJPTPF.neutralEmEnergyFraction = (*iter).neutralEmEnergyFraction();
1412 }
1413 if (isJPT) {
1414 HbbAnalysis::JPTJetVars lJPT;
1415 reco::TrackRefVector pionsInVInC = (*iter).pionsInVertexInCalo();
1416 reco::TrackRefVector pionsInVOuC = (*iter).pionsInVertexOutCalo();
1417 reco::TrackRefVector pionsOuVInC = (*iter).pionsOutVertexInCalo();
1418
1419 reco::TrackRefVector muonsInVInC = (*iter).muonsInVertexInCalo();
1420 reco::TrackRefVector muonsInVOuC = (*iter).muonsInVertexOutCalo();
1421 reco::TrackRefVector muonsOuVInC = (*iter).muonsOutVertexInCalo();
1422
1423 reco::TrackRefVector elecsInVInC = (*iter).elecsInVertexInCalo();
1424 reco::TrackRefVector elecsInVOuC = (*iter).elecsInVertexOutCalo();
1425 reco::TrackRefVector elecsOuVInC = (*iter).elecsOutVertexInCalo();
1426
1427 /*
1428 unsigned test_track_count = pionsInVInC.size() + pionsInVOuC.size() + pionsOuVInC.size();
1429 std::cout << "Total Pion Track Count = " << test_track_count << std::endl;
1430 */
1431
1432 for (reco::TrackRefVector::const_iterator trk_iter = pionsInVInC.begin();
1433 trk_iter != pionsInVInC.end();
1434 ++trk_iter) {
1435 lJPT.particleStatusPt.push_back(std::pair<unsigned int,double>(1,(*trk_iter)->pt()));
1436 }
1437 for (reco::TrackRefVector::const_iterator trk_iter = pionsInVOuC.begin();
1438 trk_iter != pionsInVOuC.end();
1439 ++trk_iter) {
1440 lJPT.particleStatusPt.push_back(std::pair<unsigned int,double>(2,(*trk_iter)->pt()));
1441 }
1442 for (reco::TrackRefVector::const_iterator trk_iter = pionsOuVInC.begin();
1443 trk_iter != pionsOuVInC.end();
1444 ++trk_iter) {
1445 lJPT.particleStatusPt.push_back(std::pair<unsigned int,double>(3,(*trk_iter)->pt()));
1446 }
1447
1448 for (reco::TrackRefVector::const_iterator trk_iter = muonsInVInC.begin();
1449 trk_iter != muonsInVInC.end();
1450 ++trk_iter) {
1451 lJPT.particleStatusPt.push_back(std::pair<unsigned int,double>(4,(*trk_iter)->pt()));
1452 }
1453 for (reco::TrackRefVector::const_iterator trk_iter = muonsInVOuC.begin();
1454 trk_iter != muonsInVOuC.end();
1455 ++trk_iter) {
1456 lJPT.particleStatusPt.push_back(std::pair<unsigned int,double>(5,(*trk_iter)->pt()));
1457 }
1458 for (reco::TrackRefVector::const_iterator trk_iter = muonsOuVInC.begin();
1459 trk_iter != muonsOuVInC.end();
1460 ++trk_iter) {
1461 lJPT.particleStatusPt.push_back(std::pair<unsigned int,double>(6,(*trk_iter)->pt()));
1462 }
1463
1464 for (reco::TrackRefVector::const_iterator trk_iter = elecsInVInC.begin();
1465 trk_iter != elecsInVInC.end();
1466 ++trk_iter) {
1467 lJPT.particleStatusPt.push_back(std::pair<unsigned int,double>(7,(*trk_iter)->pt()));
1468 }
1469 for (reco::TrackRefVector::const_iterator trk_iter = elecsInVOuC.begin();
1470 trk_iter != elecsInVOuC.end();
1471 ++trk_iter) {
1472 lJPT.particleStatusPt.push_back(std::pair<unsigned int,double>(8,(*trk_iter)->pt()));
1473 }
1474 for (reco::TrackRefVector::const_iterator trk_iter = elecsOuVInC.begin();
1475 trk_iter != elecsOuVInC.end();
1476 ++trk_iter) {
1477 lJPT.particleStatusPt.push_back(std::pair<unsigned int,double>(9,(*trk_iter)->pt()));
1478 }
1479
1480 // const reco::TrackRefVector& pionsInVertexInCalo () const{return jptSpecific().pionsInVertexInCalo; }
1481 // const reco::TrackRefVector& pionsInVertexOutCalo() const{return jptSpecific().pionsInVertexOutCalo;}
1482 // const reco::TrackRefVector& pionsOutVertexInCalo() const{return jptSpecific().pionsOutVertexInCalo;}
1483 // const reco::TrackRefVector& muonsInVertexInCalo () const{return jptSpecific().muonsInVertexInCalo; }
1484 // const reco::TrackRefVector& muonsInVertexOutCalo() const{return jptSpecific().muonsInVertexOutCalo;}
1485 // const reco::TrackRefVector& muonsOutVertexInCalo() const{return jptSpecific().muonsOutVertexInCalo;}
1486 // const reco::TrackRefVector& elecsInVertexInCalo () const{return jptSpecific().elecsInVertexInCalo; }
1487 // const reco::TrackRefVector& elecsInVertexOutCalo() const{return jptSpecific().elecsInVertexOutCalo;}
1488 // const reco::TrackRefVector& elecsOutVertexInCalo() const{return jptSpecific().elecsOutVertexInCalo;}
1489 lJPT.zspCorrection = (*iter).zspCorrection();
1490 lJPT.elecMultiplicity = (*iter).elecMultiplicity();
1491
1492 HbbAnalysis::CaloJetVars lCalo;
1493 const reco::JPTJet * lJetRef = dynamic_cast<const reco::JPTJet *>((*iter).originalObject());
1494 edm::RefToBase<reco::Jet> jptjetRef = lJetRef->getCaloJetRef();
1495
1496 // Dynamic_cast to CaloJet object
1497 reco::CaloJet const * rawcalojet =
1498 dynamic_cast<reco::CaloJet const *>( &* jptjetRef);
1499 lJPT.calopT = rawcalojet->pt();
1500 lJPT.caloEta = rawcalojet->eta();
1501 if (debug_) {
1502 std::cout << " -- Raw CaloJet pT = " << rawcalojet->pt() << std::endl;
1503 std::cout << " -- Raw CaloJet Eta = " << rawcalojet->eta() << std::endl;
1504 }
1505 lCalo.maxEInEmTowers = rawcalojet->maxEInEmTowers();
1506 lCalo.maxEInHadTowers = rawcalojet->maxEInHadTowers();
1507 lCalo.energyFractionHadronic = rawcalojet->energyFractionHadronic();
1508 lCalo.emEnergyFraction = rawcalojet->emEnergyFraction();
1509 lCalo.hadEnergyInHB = rawcalojet->hadEnergyInHB();
1510 lCalo.hadEnergyInHO = rawcalojet->hadEnergyInHO();
1511 lCalo.hadEnergyInHE = rawcalojet->hadEnergyInHE();
1512 lCalo.hadEnergyInHF = rawcalojet->hadEnergyInHF();
1513 lCalo.emEnergyInEB = rawcalojet->emEnergyInEB();
1514 lCalo.emEnergyInEE = rawcalojet->emEnergyInEE();
1515 lCalo.emEnergyInHF = rawcalojet->emEnergyInHF();
1516 lCalo.towersArea = rawcalojet->towersArea();
1517 lCalo.n90 = rawcalojet->n90();
1518 lCalo.n60 = rawcalojet->n60();
1519
1520 lCommon.etaMean = rawcalojet->etaPhiStatistics().etaMean;
1521 lCommon.phiMean = rawcalojet->etaPhiStatistics().phiMean;
1522 lCommon.etaEtaMoment = rawcalojet->etaPhiStatistics().etaEtaMoment;
1523 lCommon.phiPhiMoment = rawcalojet->etaPhiStatistics().phiPhiMoment;
1524 lCommon.etaPhiMoment = rawcalojet->etaPhiStatistics().etaPhiMoment;
1525
1526 HbbAnalysis::Jet lObj(lGen,lGenJet,lReco,lCommon,lCalo,lJPT,lJPTPF,lBtag,lId,lEnergyCorrections);
1527 aVec.push_back(lObj);
1528 }
1529 if (isPF) {
1530 HbbAnalysis::PFJetVars lPF;
1531 lPF.chargedMuEnergy = (*iter).chargedMuEnergy();
1532 lPF.chargedMuEnergyFraction = (*iter).chargedMuEnergyFraction();
1533 lPF.neutralMultiplicity = (*iter).neutralMultiplicity();
1534 lPF.numberOfDaughters = (*iter).numberOfDaughters();
1535 lPF.HFHadronEnergy = (*iter).HFHadronEnergy();
1536
1537 HbbAnalysis::Jet lObj(lGen,lGenJet,lReco,lCommon,lPF,lJPTPF,lBtag,lEnergyCorrections);
1538 aVec.push_back(lObj);
1539 }
1540
1541 }//loop on element
1542 }//non empty
1543 }//valid
1544
1545 }//HbbJets
1546
1547 void HbbTreeMaker::HbbMet(const edm::Handle<std::vector<pat::MET> > & aCol,
1548 HbbAnalysis::Met & aMet)
1549 {//HbbMet
1550 if (aCol.isValid()) {
1551 HbbAnalysis::MetVars lGen;
1552 HbbAnalysis::MetVars lReco;
1553
1554 assert(aCol->size() == 1);
1555 const pat::MET & lMet = *(aCol->begin());
1556
1557 lReco.mET = lMet.pt();
1558 lReco.mEx = lMet.px();
1559 lReco.mEy = lMet.py();
1560 lReco.sumET = lMet.sumEt();
1561 lReco.phi = lMet.phi();
1562 lReco.mEtSig = lMet.mEtSig();
1563
1564 const reco::GenMET *lGenMET = lMet.genMET();
1565
1566 if (!processData_ && lGenMET){
1567 lGen.mET = lGenMET->pt();
1568 lGen.mEx = lGenMET->px();
1569 lGen.mEy = lGenMET->py();
1570 lGen.sumET = lGenMET->sumEt();
1571 lGen.phi = lGenMET->phi();
1572 lGen.mEtSig = lGenMET->mEtSig();
1573 }
1574 else {
1575 lGen.mET = 0;
1576 lGen.mEx = 0;
1577 lGen.mEy = 0;
1578 lGen.sumET = 0;
1579 lGen.phi = 0;
1580 lGen.mEtSig = 0;
1581 }
1582
1583 aMet.genVars(lGen);
1584 aMet.recoVars(lReco);
1585 }
1586 }//HbbMet
1587
1588 void HbbTreeMaker::HbbTrigger(const edm::Handle<edm::TriggerResults> & aCol,
1589 const edm::TriggerNames & aNames,
1590 std::vector<HbbAnalysis::Trigger> & aVec)
1591 {//HbbTrigger
1592
1593 if (aCol.isValid()){
1594 //edm::TriggerNames lNames;
1595 //lNames.init(*aCol);
1596
1597 //for (unsigned int j=0; j<hltPaths_.size(); j++) {
1598 //bool valid=false;
1599 for (unsigned int i=0; i<aCol->size(); ++i){
1600 std::string trueName = aNames.triggerName(i);//.at(i);
1601
1602 HbbAnalysis::TriggerVars lTrigVars;
1603 lTrigVars.name = trueName;
1604 lTrigVars.index = i;
1605 lTrigVars.accept = aCol->accept(i);
1606
1607 HbbAnalysis::Trigger lObj(lTrigVars);
1608
1609 aVec.push_back(lObj);
1610 }
1611
1612 }
1613
1614 }
1615
1616 void HbbTreeMaker::HbbParticles(const edm::Handle<reco::GenParticleCollection> & aCol,
1617 std::vector<HbbAnalysis::GenParticle> & aVec)
1618 {//genparticles
1619
1620 //add genParticle inside vector
1621 for (unsigned int mccount = 0;mccount<aCol->size();++mccount)
1622 {//loop on particles
1623 const reco::Candidate & p = (*aCol)[mccount];
1624
1625 HbbAnalysis::MCVars lMC;
1626 lMC.index = mccount;
1627 lMC.E = p.energy();
1628 lMC.pT = p.pt();
1629 lMC.eta = p.eta();
1630 lMC.y = p.y();
1631 lMC.phi = p.phi();
1632 lMC.pdgId = p.pdgId();
1633 lMC.status = p.status();
1634 if (p.status()==3 || (p.status()==2 && (abs(p.pdgId())==4 || abs(p.pdgId())==5)) || (p.status()==1 && p.pt()>5)){
1635 HbbAnalysis::GenParticle lObj(lMC);
1636 aVec.push_back(lObj);
1637 }
1638 }//loop on particles
1639
1640 //now need to get the list of parents....
1641
1642 for (unsigned int mccount = 0;mccount<aCol->size();++mccount)
1643 {//loop on particles
1644 const reco::Candidate & p = (*aCol)[mccount];
1645
1646 unsigned int nD = p.numberOfDaughters();
1647 //std::cout << mccount << " has " << nD << " daughter(s) : " ;
1648 for(unsigned int dau=0;dau<nD;++dau){//loop on daughters
1649 const reco::Candidate * pDau = p.daughter(dau);
1650 //std::cout << pDau << " ("<<std::flush;
1651 for (unsigned int mccount2 = 0;mccount2<aCol->size();++mccount2)
1652 {//loop on particles
1653 const reco::Candidate & p2 = (*aCol)[mccount2];
1654 //std::cout<<"DBG: mccount2 = "<<mccount2<<" gen size = "<<data_->gen().size()<<std::endl;
1655 HbbAnalysis::GenParticle & part2 = aVec.at(0);
1656 for (unsigned int imc(0); imc < aVec.size(); ++imc){
1657 part2 = aVec.at(imc);
1658 if (part2.partVars().index == mccount2) break;
1659 }
1660 if (pDau == &p2) {
1661 part2.setParent(mccount);
1662 //std::cout << &p2 << ", index = " << mccount2 << "), "<<std::flush;
1663 break;
1664 }
1665
1666 //else std::cout << std::endl << "****no match " << mccount2 << " " << &p2 << std::endl;
1667 //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){
1668 //part2.parent(mccount);
1669 //}
1670 }//loop on particles
1671 }//loop on daughters
1672 //std::cout << std::endl;
1673
1674 }//loop on particles
1675
1676 if (debug_>1){
1677 for (unsigned int imc(0); imc < aVec.size(); ++imc){
1678 HbbAnalysis::GenParticle & p = aVec.at(imc);
1679 p.print();
1680 }
1681 }
1682
1683
1684 }//genparticles
1685
1686
1687
1688 void HbbTreeMaker::HbbVertices(const edm::Handle<std::vector<reco::Vertex> > & aCol,
1689 std::vector<HbbAnalysis::Vertex> & aVec)
1690 {
1691
1692 if (aCol.isValid()) {
1693 for (std::vector<reco::Vertex>::const_iterator iter = aCol->begin();
1694 iter != aCol->end();
1695 ++iter)
1696 {
1697
1698 if (!((*iter).isValid()) || (*iter).isFake()) continue;
1699
1700 HbbAnalysis::VertexVars lVtx;
1701
1702 if ((*iter).tracksSize() > 0) {
1703 for (std::vector<reco::TrackBaseRef>::const_iterator lTrk = (*iter).tracks_begin();
1704 lTrk != (*iter).tracks_end();
1705 ++lTrk) {
1706 lVtx.trackWeights.push_back((*iter).trackWeight(*lTrk));
1707 lVtx.trackpT.push_back((*(*lTrk)).pt());
1708 }
1709 }
1710
1711 if (lVtx.trackWeights.size() != (*iter).tracksSize()) {
1712 std::cout<< " -- Problem with tracks, size is not as expected ! "
1713 << std::endl
1714 << " --- Size of recoVertex tracks = " << (*iter).tracksSize()
1715 << std::endl
1716 << " --- Size of trackWeights = " << lVtx.trackWeights.size()
1717 << std::endl;
1718 }
1719 if (lVtx.trackpT.size() != (*iter).tracksSize()) {
1720 std::cout<< " -- Problem with tracks, size is not as expected ! "
1721 << std::endl
1722 << " --- Size of recoVertex tracks = " << (*iter).tracksSize()
1723 << std::endl
1724 << " --- Size of trackpT = " << lVtx.trackpT.size()
1725 << std::endl;
1726 }
1727
1728 lVtx.chi2 = (*iter).chi2();
1729 lVtx.ndof = (*iter).ndof();
1730 lVtx.x = (*iter).x();
1731 lVtx.y = (*iter).y();
1732 lVtx.z = (*iter).z();
1733 lVtx.rho = (*iter).position().Rho();
1734 lVtx.xError = (*iter).xError();
1735 lVtx.yError = (*iter).yError();
1736 lVtx.zError = (*iter).zError();
1737 lVtx.cov01 = (*iter).covariance(0,1);
1738 lVtx.cov02 = (*iter).covariance(0,2);
1739 lVtx.cov12 = (*iter).covariance(1,2);
1740
1741 //AJG
1742 /*
1743 std::cout << "Vertex (" << (*iter).x() << ","
1744 << (*iter).y() << ","
1745 << (*iter).z() << ")" << std::endl;
1746 */
1747
1748 HbbAnalysis::Vertex lObj(lVtx);
1749 aVec.push_back(lObj);
1750 }
1751 }
1752
1753 }
1754
1755 void HbbTreeMaker::HbbL1Objects(const edm::Handle<l1extra::L1JetParticleCollection> & aCol,
1756 std::vector<HbbAnalysis::L1Object> & aVec,
1757 const unsigned int aType)
1758 {
1759
1760 for (l1extra::L1JetParticleCollection::const_iterator iter = aCol->begin();
1761 iter != aCol->end();
1762 ++iter)
1763 {
1764
1765 HbbAnalysis::L1Vars lVars;
1766 lVars.pT = (*iter).pt();
1767 lVars.ET = (*iter).et();
1768 lVars.eta = (*iter).eta();
1769 lVars.phi = (*iter).phi();
1770 lVars.bx = (*iter).bx();
1771 lVars.type = aType;
1772
1773 HbbAnalysis::L1Object lObj(lVars);
1774 aVec.push_back(lObj);
1775
1776 }
1777
1778 }
1779
1780
1781 void HbbTreeMaker::HbbHLTObjects(const edm::Handle<trigger::TriggerEvent> & aCol,
1782 std::vector<HbbAnalysis::HLTObject> & aVec)
1783 {
1784
1785
1786 //cout
1787 //const trigger::TriggerObjectCollection & toc(aCol->getObjects());
1788 //for (unsigned i=0; i<aCol->sizeFilters(); i++){
1789 //const edm::InputTag & lTag = aCol->filterTag(i);
1790 //std::cout << " -- ele " << i << ": " << lTag << ", key ids = " ;
1791 ////const int index = aCol->filterIndex(lTag);
1792 ////if (index >= aCol->sizeFilters()) {
1793 ////std::cout << " -- Filter " << aTag << " not found !" << std::endl;
1794 ////continue;
1795 ////}
1796 //const trigger::Keys & k = aCol->filterKeys(i);
1797 //for (trigger::Keys::const_iterator ki = k.begin(); ki !=k.end(); ++ki ) {
1798 //std::cout << toc[*ki].id() << ", " ;
1799 //}
1800 //std::cout << std::endl;
1801 //}
1802
1803 }
1804
1805 void HbbTreeMaker::fillHLTVector(const edm::InputTag & aTag,
1806 const edm::Handle<trigger::TriggerEvent> & aCol,
1807 std::vector<HbbAnalysis::HLTObject> & aVec,
1808 const unsigned int aType){
1809
1810 const trigger::TriggerObjectCollection & toc(aCol->getObjects());
1811 const int index = aCol->filterIndex(aTag);
1812 if (index >= aCol->sizeFilters()) {
1813 //std::cout << " -- Filter " << aTag << " not found !" << std::endl;
1814 return;
1815 }
1816
1817 const trigger::Keys & k = aCol->filterKeys(index);
1818
1819 for (trigger::Keys::const_iterator ki = k.begin(); ki !=k.end(); ++ki ) {
1820 HbbAnalysis::HLTVars lVars;
1821 lVars.pT = toc[*ki].pt();
1822 lVars.eta = toc[*ki].eta();
1823 lVars.phi = toc[*ki].phi();
1824 lVars.id = toc[*ki].id();
1825 lVars.mass = toc[*ki].mass();
1826 lVars.type = aType;
1827 HbbAnalysis::HLTObject lObj(lVars);
1828 aVec.push_back(lObj);
1829 }
1830 }
1831
1832 void HbbTreeMaker::HbbGenInfo(const edm::Handle<edm::HepMCProduct> & amcProd,
1833 const edm::Handle<GenRunInfoProduct> & aRunProd)
1834 {
1835 const HepMC::GenEvent * genEvt = amcProd->GetEvent();
1836 HbbAnalysis::GenInfo lInfo;
1837
1838 lInfo.processID(genEvt->signal_process_id());
1839 lInfo.ptHat(genEvt->event_scale());
1840
1841 lInfo.internalXS(aRunProd->internalXSec().value(),
1842 aRunProd->internalXSec().error());
1843
1844 lInfo.externalXSLO(aRunProd->externalXSecLO().value(),
1845 aRunProd->externalXSecLO().error());
1846
1847 lInfo.externalXSNLO(aRunProd->externalXSecNLO().value(),
1848 aRunProd->externalXSecNLO().error());
1849
1850 lInfo.filterEff(aRunProd->filterEfficiency());
1851
1852 event_->generatorInfo(lInfo);
1853
1854 }
1855
1856 void HbbTreeMaker::HbbLHEInfo(const edm::Handle<LHEEventProduct> & aLHEEvt,
1857 std::vector<HbbAnalysis::GenParticle> & aVec) {
1858
1859 const lhef::HEPEUP lhepeup = aLHEEvt->hepeup();
1860
1861 //4-momentum (px,py,pz,E)+mass
1862 const std::vector<lhef::HEPEUP::FiveVector> lpup = lhepeup.PUP;
1863 //pdgid int
1864 const std::vector<int> lidup = lhepeup.IDUP;
1865 //status int
1866 const std::vector<int> listup = lhepeup.ISTUP;
1867 //mother: pair<int,int>
1868 const std::vector<std::pair<int,int> > lmothup = lhepeup.MOTHUP;
1869
1870
1871 //add genParticle inside vector
1872 for (unsigned int imc = 0;imc<lpup.size();++imc)
1873 {//loop on particles
1874
1875 HbbAnalysis::MCVars lMC;
1876 lMC.index = imc;
1877 lMC.E = (lpup[imc])[3];
1878
1879 TLorentzVector lVec((lpup[imc])[0],(lpup[imc])[1],(lpup[imc])[2],(lpup[imc])[3]);
1880
1881 lMC.pT = lVec.Pt();
1882 // Special case if pT = 0 (otherwise ROOT complains)
1883 if (fabs(0.0 - lVec.Pt()) < std::numeric_limits<double>::epsilon()){
1884 if (lVec.Pz() >= 0) {
1885 lMC.eta = 1E10;
1886 lMC.y = 1E10;
1887 } else {
1888 lMC.eta = -1E10;
1889 lMC.y = -1E10;
1890 }
1891 } else {
1892 lMC.eta = lVec.Eta();
1893 lMC.y = lVec.Rapidity();
1894 }
1895 lMC.phi = lVec.Phi();
1896 lMC.pdgId = lidup[imc];
1897 lMC.status = listup[imc];
1898
1899 HbbAnalysis::GenParticle lObj(lMC);
1900 lObj.setParent(lmothup[imc].first);
1901 lObj.setParent(lmothup[imc].second);
1902 aVec.push_back(lObj);
1903
1904 }//loop on particles
1905
1906 if (debug_>1){
1907 for (unsigned int imc(0); imc < aVec.size(); ++imc){
1908 HbbAnalysis::GenParticle & p = aVec.at(imc);
1909 p.print();
1910 }
1911 }
1912 }
1913
1914 #include "FWCore/Framework/interface/MakerMacros.h"
1915 DEFINE_FWK_MODULE(HbbTreeMaker);
1916
1917