ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/plugins/MCTreeMaker.cc
Revision: 1.2
Committed: Wed Jun 6 13:42:42 2012 UTC (12 years, 11 months ago) by amagnan
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +193 -2 lines
Log Message:
add reco jets

File Contents

# Content
1 #include "TLorentzVector.h"
2 #include <limits>
3
4 #include "DataFormats/Common/interface/Handle.h"
5 #include "DataFormats/Common/interface/ValueMap.h"
6
7 #include "DataFormats/Candidate/interface/Candidate.h"
8 #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
9 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
10 #include "DataFormats/JetReco/interface/GenJet.h"
11 #include "DataFormats/JetReco/interface/Jet.h"
12 #include "SimDataFormats/GeneratorProducts/interface/GenRunInfoProduct.h"
13 #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h"
14 #include "SimDataFormats/GeneratorProducts/interface/LHEEventProduct.h"
15 #include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h"
16
17
18 #include "FWCore/ServiceRegistry/interface/Service.h"
19 #include "FWCore/Framework/interface/Run.h"
20 #include "FWCore/Framework/interface/ESHandle.h"
21 #include "CommonTools/UtilAlgos/interface/TFileService.h"
22
23 #include "UserCode/HbbAnalysis/plugins/MCTreeMaker.hh"
24 #include "boost/regex.hpp"
25 #include "boost/lexical_cast.hpp"
26
27 MCTreeMaker::MCTreeMaker(const edm::ParameterSet & pset):
28 debug_(pset.getParameter<int>("DEBUG")),
29 doGen_(pset.getParameter<bool>("DOGEN")),
30 genParticleSrc_(pset.getParameter<edm::InputTag>("GenParticles")),
31 genJetSrc_(pset.getParameter<edm::InputTag>("GenJets")),
32 partonJetSrc_(pset.getParameter<edm::InputTag>("PartonJets")),
33 pfJetSrc_(pset.getParameter<edm::InputTag>("PFJets")),
34 status1ToKeep_(pset.getParameter<std::vector<std::string> >("Status1ToKeep")),
35 status2ToKeep_(pset.getParameter<std::vector<std::string> >("Status2ToKeep")),
36 status3ToKeep_(pset.getParameter<std::vector<std::string> >("Status3ToKeep")),
37 event_(0),
38 tree_(0)
39 //processVec_(pset.getParameter<std::vector<std::string> >("ProcessVec"))
40 {//constructor
41 for (unsigned i = 0; i < status1ToKeep_.size(); ++i){
42 status1ToKeepRegex_.push_back(boost::regex(status1ToKeep_[i]));
43 }
44 for (unsigned i = 0; i < status2ToKeep_.size(); ++i){
45 status2ToKeepRegex_.push_back(boost::regex(status2ToKeep_[i]));
46 }
47 for (unsigned i = 0; i < status3ToKeep_.size(); ++i){
48 status3ToKeepRegex_.push_back(boost::regex(status3ToKeep_[i]));
49 }
50 }//constructor
51
52 MCTreeMaker::~MCTreeMaker()
53 {//destructor
54
55 }//destructor
56
57
58
59 void MCTreeMaker::beginJob(){//beginJob
60
61
62 edm::Service<TFileService> lFileService;
63
64 TFileDirectory lDir = lFileService->mkdir("MCAnalysis");
65
66 tree_ = lDir.make<TTree>("Tree","Tree");
67 tree_->Branch("MCEvent","HbbAnalysis::MCEvent",&event_);
68 event_ = new HbbAnalysis::MCEvent();
69
70 }//beginJob
71
72
73
74 void MCTreeMaker::endJob(){//endJob
75
76 //tree_->Write();
77 //delete tree_;
78 //delete event_;
79
80 }//endJob
81
82 void MCTreeMaker::beginRun(const edm::Run& aRun, const edm::EventSetup& aEvtSetup){//beginRun
83
84 }
85
86 void MCTreeMaker::analyze(const edm::Event& aEvt, const edm::EventSetup& aEvtSetup){//analyze
87
88 if (debug_) std::cout << "Processing event #" << aEvt.id().event() << std::endl;
89
90
91 static bool firstEvent = true;
92
93 event_->Clear();
94 event_->event(aEvt.id().event());
95
96 event_->run(aEvt.run());
97 //used in jet method....
98 edm::Handle<reco::GenParticleCollection> lGenParticles;
99
100 // edm::Handle<edm::HepMCProduct> mcProd;
101 // edm::Handle<GenRunInfoProduct> lRunProd;
102 // edm::Handle<GenEventInfoProduct> genEventInfoHandle;
103
104 // try {
105 // aEvt.getByLabel("generator", mcProd );
106 // } catch(cms::Exception& e) {
107 // std::cout << "AMM: Collection HepMCProduct not available! Exception : " << e.what() << ". " << std::endl;
108 // }
109 // try {
110 // aEvt.getRun().getByLabel("generator",lRunProd);
111 // } catch(cms::Exception& e) {
112 // std::cout << "AMM: Collection GenInfoProduct not available! Exception : " << e.what() << ". " << std::endl;
113 // }
114 // try {
115 // aEvt.getByLabel("generator",genEventInfoHandle);
116 // } catch(cms::Exception& e) {
117 // std::cout << "AMM: Collection GenEventInfoProduct not available! Exception : " << e.what() << ". " << std::endl;
118 // }
119
120 // HbbGenInfo(mcProd,lRunProd,genEventInfoHandle);
121
122 edm::Handle<reco::GenJetCollection> lGenJets;
123 try {
124 aEvt.getByLabel(genJetSrc_,lGenJets);
125 if (debug_) std::cout << "** ngenJets = " << lGenJets->size() << std::endl;
126 } catch(cms::Exception& e) {
127 std::cout << "AMM: Collection GenJets not available! Exception : " << e.what() << ". " << std::endl;
128 }
129
130 //save components
131 if (lGenJets.isValid()) HbbGenJets(lGenJets,event_->genjets(),true);
132
133 edm::Handle<reco::GenJetCollection> lPartonJets;
134 try {
135 aEvt.getByLabel(partonJetSrc_,lPartonJets);
136 if (debug_) std::cout << "** npartonJets = " << lPartonJets->size() << std::endl;
137 } catch(cms::Exception& e) {
138 std::cout << "AMM: Collection PartonJets not available! Exception : " << e.what() << ". " << std::endl;
139 }
140
141 //save components
142 if (lPartonJets.isValid()) HbbGenJets(lPartonJets,event_->partonjets(),true);
143
144 edm::Handle<LHEEventProduct> lLHEEvt;
145 try {
146 aEvt.getByType(lLHEEvt);
147 } catch(cms::Exception& e) {
148 std::cout << "AMM: Collection of LHEEventProduct not available! Exception : " << e.what() << ". " << std::endl;
149 }
150
151 if (lLHEEvt.isValid()){
152 HbbLHEInfo(lLHEEvt,event_->lheParticles());
153 }
154
155 try {
156 aEvt.getByLabel(genParticleSrc_,lGenParticles);
157 if (debug_) std::cout << "** ngenParticles = " << lGenParticles->size() << std::endl;
158 } catch(cms::Exception& e) {
159 std::cout << "AMM: Collection genParticles not available! Exception : " << e.what() << ". " << std::endl;
160 }
161
162 //if (doGen_) HbbParticles(lGenParticles,event_->particles());
163 HbbParticles(lGenParticles,event_->particles(), event_->p4total());
164
165 edm::Handle<std::vector<pat::Jet> > lPfJetCollection;
166
167 try {
168 aEvt.getByLabel(pfJetSrc_,lPfJetCollection);
169 if (!lPfJetCollection.isValid()){
170 edm::LogInfo("ERROR")<< "Error! Can't get pfJets by label. ";
171 }
172 if (debug_) std::cout << "** pfJetcollection = " << lPfJetCollection->size() << " elements." << std::endl;
173 } catch(cms::Exception& e) {
174 std::cout << "AMM: Collection " << pfJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
175 }
176
177 //std::cout << "Processing PF jets:" << std::endl;
178 HbbJets(lPfJetCollection,lGenParticles,event_->pfjets());
179
180
181 tree_->Fill();
182 firstEvent = false;
183
184 }//analyze
185
186
187
188 void MCTreeMaker::HbbParticles(const edm::Handle<reco::GenParticleCollection> & aCol,
189 std::vector<HbbAnalysis::GenParticle> & aVec,
190 HbbAnalysis::P4Total & p4total)
191 {//genparticles
192
193
194 const reco::GenParticle *ptrToFirst = 0;
195 if (aCol->size() > 0) ptrToFirst = &((*aCol)[0]);
196 //add genParticle inside vector
197 p4total.comE = 0.0;
198 p4total.sumPx = 0.0;
199 p4total.sumPy = 0.0;
200 p4total.sumPz = 0.0;
201 p4total.sumE = 0.0;
202 for (unsigned int mccount = 0;mccount<aCol->size();++mccount)
203 {//loop on particles
204 const reco::GenParticle & p = (*aCol)[mccount];
205
206 if (p.status() == 3 && p.pdgId() == 2212){
207 p4total.comE += p.energy();
208 }
209 if (p.status() == 1){
210 p4total.sumPx += p.px();
211 p4total.sumPy += p.py();
212 p4total.sumPz += p.pz();
213 p4total.sumE += p.energy();
214 }
215
216 bool keep = false;
217 if (p.status() == 1){
218 for (unsigned i = 0; i < status1ToKeepRegex_.size(); ++i){
219 //if (boost::regex_match(boost::lexical_cast<std::string>(p.pdgId()),status1ToKeepRegex_[i]) && p.pt() > 5.0) keep = true;
220 if (boost::regex_match(boost::lexical_cast<std::string>(p.pdgId()),status1ToKeepRegex_[i])) keep = true;
221 //if (abs(p.pdgId()) <= 16) keep = true; //Keep all status 1 leptons, regardless of matches passed through config
222 }
223 }
224 if (p.status() == 2){
225 for (unsigned i = 0; i < status2ToKeepRegex_.size(); ++i){
226 if (boost::regex_match(boost::lexical_cast<std::string>(p.pdgId()),status2ToKeepRegex_[i])) keep = true;
227 }
228 }
229 if (p.status() == 3){
230 for (unsigned i = 0; i < status3ToKeepRegex_.size(); ++i){
231 if (boost::regex_match(boost::lexical_cast<std::string>(p.pdgId()),status3ToKeepRegex_[i])) keep = true;
232 }
233 }
234
235 if (keep){
236
237 HbbAnalysis::FourMomentum lGenFourVec;
238 HbbAnalysis::GenVars lGen;
239 lGenFourVec.px = p.px();
240 lGenFourVec.py = p.py();
241 lGenFourVec.pz = p.pz();
242 lGenFourVec.e = p.energy();
243 lGen.charge = p.charge();
244 lGen.pdgId = p.pdgId();
245 lGen.status = p.status();
246 lGen.index = mccount;
247 lGen.vertex.vx = p.vx();
248 lGen.vertex.vy = p.vy();
249 lGen.vertex.vz = p.vz();
250
251 HbbAnalysis::GenParticle lObj(lGenFourVec,lGen);
252
253 for (unsigned i = 0; i < p.numberOfMothers(); ++i){
254 lObj.setParent((reco::GenParticle*)p.mother(i) - ptrToFirst);
255 //std::cout << ((reco::GenParticle*)p.mother(i) - ptrToFirst) << " " << p.mother(i) << "\t";
256 }
257 //std::cout << std::endl;
258 //std::cout << "Daughters: ";
259 for (unsigned i = 0; i < p.numberOfDaughters(); ++i){
260 lObj.setChild((reco::GenParticle*)p.daughter(i) - ptrToFirst);
261 //std::cout << ((reco::GenParticle*)p.daughter(i) - ptrToFirst) << " " << p.daughter(i) << "\t";
262 }
263 aVec.push_back(lObj);
264 //if (mccount < 50) std::cout << "------Particle " << mccount << std::endl;
265 //if (mccount < 50) lObj.Print();
266 //std::cout << std::endl;
267 }
268 /*
269 unsigned int nMum = p.numberOfMothers();
270 //std::cout << mccount << " index = " << const_cast<reco::GenParticle *>(&p)-lBegin << " has " << nMum << " mother(s)." << std::endl;
271
272 if ( (!doGen_ &&
273 (p.status()==3 ||
274 (p.status()==2 && (abs(p.pdgId())==4 || abs(p.pdgId())==5)) ||
275 (p.status()==1 && ( (p.pt()>5 && abs(p.pdgId()) > 16) || abs(p.pdgId()) <= 16) )
276 )) || doGen_){
277 for(unsigned int mum=0;mum<nMum;++mum){//loop on mothers
278 const reco::Candidate * pMother = p.mother(mum);
279 //std::cout << "-- mother index = " << pMother-lBegin << std::endl;
280 for (unsigned int mccount2 = 0;mccount2<mccount;++mccount2)
281 {//loop on particles
282 const reco::Candidate & p2 = (*aCol)[mccount2];
283 if (pMother == &p2) {
284 lObj.setParent(mccount2);
285 break;
286 }
287 }
288 }//loop on mothers
289 */
290 }//loop on particles
291
292
293 if (debug_>2){
294 for (unsigned int imc(0); imc < aVec.size(); ++imc){
295 HbbAnalysis::GenParticle & p = aVec.at(imc);
296 p.Print();
297 }
298 }
299
300
301 }//genparticles
302
303 void MCTreeMaker::HbbGenJets(const edm::Handle<reco::GenJetCollection> & aCol,
304 std::vector<HbbAnalysis::GenJet> & aVec,
305 const bool aSaveConstituants)
306 {
307
308 if (aCol.isValid()){//valid
309 if (aCol->size() > 0) {//non empty
310
311 unsigned int iEle = 0;
312 for (std::vector<reco::GenJet>::const_iterator iter = aCol->begin();
313 iter != aCol->end();
314 ++iter,++iEle)
315 {//loop on element
316 //if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
317
318 HbbAnalysis::FourMomentum lGenJetFourVec;
319 HbbAnalysis::GenJetVars lGenJet;
320 lGenJetFourVec.px = (*iter).px();
321 lGenJetFourVec.py = (*iter).py();
322 lGenJetFourVec.pz = (*iter).pz();
323 lGenJetFourVec.e = (*iter).energy();
324 lGenJet.mass = (*iter).mass();
325 lGenJet.nConstituents = (*iter).getGenConstituents().size();
326 lGenJet.flavour = 0; //Flavour will be set if constituents are added
327
328
329 //only status 1 saved !!!!
330 //get flavour from list of constituants.
331 //std::vector <const reco::GenParticle*> lConst = (*iter).getGenConstituents();
332 //unsigned int nb=0, nc=0;
333 // for (unsigned int iMC(0); iMC<lConst.size(); ++iMC){
334 // const reco::GenParticle* lPart = lConst[iMC];
335 // //std::cout << lPart->pdgId() << " " << fabs(lPart->pdgId()) << " " << abs(lPart->pdgId()) << std::endl;
336 // if (fabs(lPart->pdgId()) == 5){
337 // ++nb;
338 // break;
339 // }
340 // if (fabs(lPart->pdgId()) == 4) ++nc;
341 // }
342 // if (nb > 0) lGenJet.pdgId = 5;
343 // else if (nc > 0) lGenJet.pdgId = 4;
344 // else lGenJet.pdgId = 3;
345
346 HbbAnalysis::GenJet lObj(lGenJetFourVec, lGenJet);
347 if (aSaveConstituants){
348 for (unsigned int iC(0); iC<(*iter).getGenConstituents().size(); ++iC){
349 const reco::GenParticle* p = (*iter).getGenConstituent(iC);
350 HbbAnalysis::FourMomentum lGenFourVec;
351 HbbAnalysis::GenVars lGen;
352 lGenFourVec.px = p->px();
353 lGenFourVec.py = p->py();
354 lGenFourVec.pz = p->pz();
355 lGenFourVec.e = p->energy();
356 lGen.charge = p->charge();
357 lGen.pdgId = p->pdgId();
358 lGen.status = p->status();
359 lGen.index = -1; //We don't know this now
360 lGen.vertex.vx = p->vx();
361 lGen.vertex.vy = p->vy();
362 lGen.vertex.vz = p->vz();
363 lObj.addConstituent(HbbAnalysis::GenParticle(lGenFourVec,lGen));
364 }
365 }
366 //std::cout << "--------------------------------------------" << std::endl;
367 //std::cout << "GenJet: " << std::endl;
368 //std::cout << "--------------------------------------------" << std::endl;
369 //lObj.Print();
370 aVec.push_back(lObj);
371 }
372 }
373 }
374 }
375
376
377
378
379 void MCTreeMaker::HbbLHEInfo(const edm::Handle<LHEEventProduct> & aLHEEvt,
380 std::vector<HbbAnalysis::GenParticle> & aVec) {
381
382 const lhef::HEPEUP lhepeup = aLHEEvt->hepeup();
383
384 //4-momentum (px,py,pz,E)+mass
385 const std::vector<lhef::HEPEUP::FiveVector> lpup = lhepeup.PUP;
386 //pdgid int
387 const std::vector<int> lidup = lhepeup.IDUP;
388 //status int
389 const std::vector<int> listup = lhepeup.ISTUP;
390 //mother: pair<int,int>
391 const std::vector<std::pair<int,int> > lmothup = lhepeup.MOTHUP;
392
393
394 //add genParticle inside vector
395 for (unsigned int imc = 0;imc<lpup.size();++imc)
396 {//loop on particles
397
398 HbbAnalysis::FourMomentum lFourVec;
399 HbbAnalysis::GenVars lMC;
400 lMC.index = imc;
401
402 TLorentzVector lVec((lpup[imc])[0],(lpup[imc])[1],(lpup[imc])[2],(lpup[imc])[3]);
403
404 lFourVec.e = lVec.E();
405 lFourVec.px = lVec.Px();
406 lFourVec.py = lVec.Py();
407 lFourVec.pz = lVec.Pz();
408 /*
409 // Special case if pT = 0 (otherwise ROOT complains)
410 if (fabs(0.0 - lVec.Pt()) < std::numeric_limits<double>::epsilon()){
411 if (lVec.Pz() >= 0) {
412 lMC.eta = 1E10;
413 lMC.y = 1E10;
414 } else {
415 lMC.eta = -1E10;
416 lMC.y = -1E10;
417 }
418 } else {
419 lMC.eta = lVec.Eta();
420 lMC.y = lVec.Rapidity();
421 }
422 lMC.phi = lVec.Phi();
423 */
424 lMC.pdgId = lidup[imc];
425 lMC.status = listup[imc];
426
427 HbbAnalysis::GenParticle lObj(lFourVec,lMC);
428 lObj.setParent(lmothup[imc].first);
429 lObj.setParent(lmothup[imc].second);
430 aVec.push_back(lObj);
431
432 }//loop on particles
433
434 if (debug_>2){
435 for (unsigned int imc(0); imc < aVec.size(); ++imc){
436 //HbbAnalysis::GenParticle & p = aVec.at(imc);
437 //p.print();
438 }
439 }
440 }
441
442
443 void MCTreeMaker::HbbJets(const edm::Handle<std::vector<pat::Jet> > & aCol,
444 const edm::Handle<reco::GenParticleCollection> & aGenParticles,
445 std::vector<HbbAnalysis::Jet> & aVec)
446 {//HbbJets
447
448 if (aCol.isValid()){//valid
449 if (aCol->size() > 0) {//non empty
450
451 unsigned int iEle = 0;
452 for (std::vector<pat::Jet>::const_iterator iter = aCol->begin();
453 iter != aCol->end();
454 ++iter,++iEle)
455 {//loop on element
456 if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
457
458 //----------------------------------------------------------------------
459 HbbAnalysis::FourMomentum lFourVec;
460 //----------------------------------------------------------------------
461 lFourVec.e = (*iter).energy();
462 lFourVec.px = (*iter).px();
463 lFourVec.py = (*iter).py();
464 lFourVec.pz = (*iter).pz();
465 //----------------------------------------------------------------------
466 HbbAnalysis::JetVars lJet;
467 //----------------------------------------------------------------------
468 lJet.partonFlavour = (*iter).partonFlavour();
469 lJet.nAssociatedTracks = ((*iter).associatedTracks()).size();
470 lJet.etaMean = (*iter).etaPhiStatistics().etaMean;
471 lJet.phiMean = (*iter).etaPhiStatistics().phiMean;
472 lJet.etaEtaMoment = (*iter).etaPhiStatistics().etaEtaMoment;
473 lJet.phiPhiMoment = (*iter).etaPhiStatistics().phiPhiMoment;
474 lJet.etaPhiMoment = (*iter).etaPhiStatistics().etaPhiMoment;
475 //Construct a GenParticle if processing MC and a match has been found by PAT
476 if ((*iter).genParton()){
477 HbbAnalysis::FourMomentum lGenFourVec;
478 HbbAnalysis::GenVars lGen;
479 lGenFourVec.px = (*iter).genParton()->px();
480 lGenFourVec.py = (*iter).genParton()->py();
481 lGenFourVec.pz = (*iter).genParton()->pz();
482 lGenFourVec.e = (*iter).genParton()->energy();
483 lGen.charge = (*iter).genParton()->charge();
484 lGen.pdgId = (*iter).genParton()->pdgId();
485 lGen.status = (*iter).genParton()->status();
486 lGen.vertex.vx = (*iter).genParton()->vx();
487 lGen.vertex.vy = (*iter).genParton()->vy();
488 lGen.vertex.vz = (*iter).genParton()->vz();
489 lJet.genMatches.push_back(HbbAnalysis::GenParticle(lGenFourVec, lGen));
490 }
491 //Construct a GenJet if processing MC and a match has been found by PAT
492 if ((*iter).genJet()){
493 HbbAnalysis::FourMomentum lGenJetFourVec;
494 HbbAnalysis::GenJetVars lGenJet;
495 lGenJetFourVec.px = (*iter).genJet()->px();
496 lGenJetFourVec.py = (*iter).genJet()->py();
497 lGenJetFourVec.pz = (*iter).genJet()->pz();
498 lGenJetFourVec.e = (*iter).genJet()->energy();
499 lGenJet.flavour = 0; //Flavour unknown in this context (will be filled for parton jets)
500 lGenJet.mass = (*iter).genJet()->mass();
501 lGenJet.nConstituents = (*iter).genJet()->getGenConstituents().size();
502 lJet.genJetMatches.push_back(HbbAnalysis::GenJet(lGenJetFourVec, lGenJet));
503 }
504
505 HbbAnalysis::JetECorVars lEnergyCorrections;
506 if ((*iter).jecSetsAvailable()){
507 std::vector<std::string> lJECnames = (*iter).availableJECSets();
508 for (unsigned int iSet(0); iSet < lJECnames.size(); ++iSet){
509 if (debug_>1) std::cout << " -- JEC SET " << iSet << " " << lJECnames[iSet] << std::endl;
510 std::vector<std::string> lJEClevels = (*iter).availableJECLevels(iSet);
511 for (unsigned int iLev(0); iLev<lJEClevels.size(); ++iLev){
512 if (debug_>1) std::cout << " ---- JEC level " << iLev << " " << lJEClevels[iLev]
513 << " , factor = " << (*iter).jecFactor(iLev,pat::JetCorrFactors::NONE,iSet)
514 << std::endl;
515 lEnergyCorrections.Levels[(lJEClevels[iLev])] = (*iter).jecFactor(iLev,pat::JetCorrFactors::NONE,iSet);
516 }
517 }
518 }
519
520 HbbAnalysis::JetBtagVars lBtag;
521 if (debug_>1) {
522 const std::vector<std::pair<std::string, float> > & lDiscris = (*iter).getPairDiscri();
523 std::cout << " -- btaggers: " << lDiscris.size() << " elements"
524 << std::endl;
525 for (unsigned int iD(0); iD<lDiscris.size(); ++iD){
526 std::cout << "---- " << iD << " " << lDiscris[iD].first << std::endl;
527 }
528 }
529
530 lBtag.cSV = (*iter).bDiscriminator("combinedSecondaryVertexBJetTags");
531 lBtag.cSVMVA = (*iter).bDiscriminator("combinedSecondaryVertexMVABJetTags");
532 //lBtag.iPMVA = (*iter).bDiscriminator("impactParameterMVABJetTags");
533 lBtag.bProba = (*iter).bDiscriminator("jetBProbabilityBJetTags");
534 lBtag.probability = (*iter).bDiscriminator("jetProbabilityBJetTags");
535 lBtag.sSVHP = (*iter).bDiscriminator("simpleSecondaryVertexHighPurBJetTags");
536 lBtag.sSVHE = (*iter).bDiscriminator("simpleSecondaryVertexHighEffBJetTags");
537 //lBtag.softElectronByPt = ((*iter).bDiscriminator("softElectronByPtBJetTags") < -100) ? -100 : (*iter).bDiscriminator("softElectronByPtBJetTags");
538 //lBtag.softElectronByIP3d = ((*iter).bDiscriminator("softElectronByIP3dBJetTags") < -100) ? -100 : (*iter).bDiscriminator("softElectronByIP3dBJetTags");
539 lBtag.softMuon = ((*iter).bDiscriminator("softMuonBJetTags") < -100) ? -100 : (*iter).bDiscriminator("softMuonBJetTags");
540 lBtag.softMuonByPt = ((*iter).bDiscriminator("softMuonByPtBJetTags") < -100) ? -100 : (*iter).bDiscriminator("softMuonByPtBJetTags");
541 lBtag.softMuonByIP3d = ((*iter).bDiscriminator("softMuonByIP3dBJetTags") < -100) ? -100 : (*iter).bDiscriminator("softMuonByIP3dBJetTags");
542 lBtag.tCHE = (*iter).bDiscriminator("trackCountingHighEffBJetTags");
543 lBtag.tCHP = (*iter).bDiscriminator("trackCountingHighPurBJetTags");
544
545 //std::cout << " -- New values of b-discri for jet : " << iEle << std::endl
546 // << " ---- softElecs: " << lBtag.softElectronByPt << " " << lBtag.softElectronByIP3d << std::endl
547 // << " ---- softMus: " << lBtag.softMuon << " " << lBtag.softMuonByPt << " " << lBtag.softMuonByIP3d << std::endl;
548
549 if (debug_>1) {
550 std::cout << " -- Filling tag info variables : "
551 << (*iter).hasTagInfo("SecondaryVertex")
552 << std::endl;
553 }
554
555 std::vector<HbbAnalysis::JetSecVertexVars> jetSecVertexVars;
556
557 for (unsigned iVtx = 0; iVtx < (*iter).tagInfoSecondaryVertex()->nVertices(); ++iVtx){
558 HbbAnalysis::JetSecVertexVars jetSecVertexVarsTmp;
559 math::XYZTLorentzVectorD vec = (*iter).tagInfoSecondaryVertex()->secondaryVertex(iVtx).p4();
560 jetSecVertexVarsTmp.fourVec.e = vec.E();
561 jetSecVertexVarsTmp.fourVec.px = vec.Px();
562 jetSecVertexVarsTmp.fourVec.py = vec.Py();
563 jetSecVertexVarsTmp.fourVec.pz = vec.Pz();
564 jetSecVertexVarsTmp.vertex.vx = (*iter).tagInfoSecondaryVertex()->secondaryVertex(iVtx).x();
565 jetSecVertexVarsTmp.vertex.vy = (*iter).tagInfoSecondaryVertex()->secondaryVertex(iVtx).y();
566 jetSecVertexVarsTmp.vertex.vz = (*iter).tagInfoSecondaryVertex()->secondaryVertex(iVtx).z();
567 jetSecVertexVars.push_back(jetSecVertexVarsTmp);
568 }
569
570
571 bool isPF = (*iter).isPFJet();
572 if (debug_>1) {
573 std::cout << " -- Filling JPTPF jet variables " << std::endl;
574 }
575
576 HbbAnalysis::JPTPFJetVars lJPTPF;
577 if (isPF){
578 lJPTPF.chargedEmEnergy = (*iter).chargedEmEnergy();
579 lJPTPF.neutralEmEnergy = (*iter).neutralEmEnergy();
580 lJPTPF.muonMultiplicity = (*iter).muonMultiplicity();
581 lJPTPF.chargedHadronEnergy = (*iter).chargedHadronEnergy();
582 lJPTPF.neutralHadronEnergy = (*iter).neutralHadronEnergy();
583 lJPTPF.chargedMultiplicity = (*iter).chargedMultiplicity();
584 lJPTPF.chargedHadronEnergyFraction = (*iter).chargedHadronEnergyFraction();
585 lJPTPF.neutralHadronEnergyFraction = (*iter).neutralHadronEnergyFraction();
586 lJPTPF.chargedEmEnergyFraction = (*iter).chargedEmEnergyFraction();
587 lJPTPF.neutralEmEnergyFraction = (*iter).neutralEmEnergyFraction();
588 }
589 if (debug_>1) {
590 std::cout << " -- Filling PF jet variables " << std::endl;
591 }
592 if (isPF) {
593 HbbAnalysis::PFJetVars lPF;
594 lPF.chargedMuEnergy = (*iter).chargedMuEnergy();
595 lPF.chargedMuEnergyFraction = (*iter).chargedMuEnergyFraction();
596 lPF.neutralMultiplicity = (*iter).neutralMultiplicity();
597 lPF.numberOfDaughters = (*iter).numberOfDaughters();
598 lPF.HFHadronEnergy = (*iter).HFHadronEnergy();
599
600 HbbAnalysis::Jet lObj(lFourVec,lJet,lPF,lJPTPF,lBtag,lEnergyCorrections);
601 lObj.secVertexVars(jetSecVertexVars);
602 aVec.push_back(lObj);
603 }
604
605 if (debug_>1) {
606 std::cout << " -- Element added. " << std::endl;
607 }
608
609 }//loop on element
610 }//non empty
611 }//valid
612
613 }//HbbJets
614
615
616 #include "FWCore/Framework/interface/MakerMacros.h"
617 DEFINE_FWK_MODULE(MCTreeMaker);
618
619