12 #include "FWCore/Framework/interface/Frameworkfwd.h" 13 #include "FWCore/Framework/interface/EDAnalyzer.h" 14 #include "FWCore/Framework/interface/Event.h" 15 #include "FWCore/Framework/interface/MakerMacros.h" 16 #include "FWCore/ParameterSet/interface/ParameterSet.h" 19 #include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" 20 #include "DataFormats/HepMCCandidate/interface/GenParticle.h" 37 isData = iEvent.isRealData();
41 baby.run() = iEvent.id().run();
42 baby.event() = iEvent.id().event();
43 baby.lumiblock() = iEvent.luminosityBlock();
45 if (debug) cout<<
"INFO: Checking JSON..."<<endl;
47 bool nonblind(eventTool->isInJSON(
"nonblind", baby.run(), baby.lumiblock()));
49 baby.nonblind() = nonblind;
50 }
else baby.nonblind() =
true;
53 if (debug) cout<<
"INFO: Processing trigger info..."<<endl;
55 edm::Handle<edm::TriggerResults> triggerBits;
56 iEvent.getByToken(tok_trigResults_hlt_,triggerBits);
57 edm::Handle<pat::PackedTriggerPrescales> triggerPrescales;
58 iEvent.getByToken(tok_patTrig_,triggerPrescales);
60 if(triggerBits.isValid() && triggerPrescales.isValid()){
61 const edm::TriggerNames &names = iEvent.triggerNames(*triggerBits);
63 triggerFired = writeTriggers(names, triggerBits, triggerPrescales);
67 if(!triggerFired &&
isData) {
73 if (debug) cout<<
"INFO: Writing vertices..."<<endl;
74 edm::Handle<reco::VertexCollection> vtx;
75 iEvent.getByToken(tok_primVertex_, vtx);
76 edm::Handle<std::vector< PileupSummaryInfo > > pu_info;
78 iEvent.getByToken(tok_addPileup_, pu_info);
79 if(!pu_info.isValid()) iEvent.getByToken(tok_slimAddPileup_, pu_info);
81 writeVertices(vtx, pu_info);
84 if (debug) cout<<
"INFO: Writing leptons..."<<endl;
86 edm::Handle<pat::PackedCandidateCollection> pfcands;
87 iEvent.getByToken(tok_packPFCands_, pfcands);
90 edm::Handle<double> rhoEventCentral_h;
91 iEvent.getByToken(tok_rhoFastJet_centralNeutral_, rhoEventCentral_h);
92 double rhoEventCentral =
static_cast<double>(*rhoEventCentral_h);
94 vCands sig_leps, veto_leps, sig_mus, veto_mus, sig_els, veto_els;
96 edm::Handle<pat::MuonCollection> allmuons;
97 iEvent.getByToken(tok_muons_, allmuons);
98 sig_mus = writeMuons(allmuons, pfcands, vtx, veto_mus, all_mus, rhoEventCentral);
99 edm::Handle<pat::ElectronCollection> allelectrons;
100 iEvent.getByToken(tok_electrons_, allelectrons);
101 sig_els = writeElectrons(allelectrons, pfcands, vtx, veto_els, all_els, rhoEventCentral);
103 writeDiLep(sig_mus, sig_els, veto_mus, veto_els);
107 sig_leps.insert(sig_leps.end(), sig_els.begin(), sig_els.end());
108 writeLeptons(sig_leps);
110 veto_leps = veto_mus;
111 veto_leps.insert(veto_leps.end(), veto_els.begin(), veto_els.end());
114 if (debug) cout<<
"INFO: Writing photons..."<<endl;
116 edm::Handle<double> rhoEvent_h;
117 iEvent.getByToken(tok_rhoFastJet_all_, rhoEvent_h);
118 edm::Handle<reco::BeamSpot> beamspot;
119 iEvent.getByToken(tok_offBeamSpot_, beamspot);
120 edm::Handle<pat::PhotonCollection> allphotons;
121 iEvent.getByToken(tok_photons_, allphotons);
122 edm::Handle<vector<reco::Conversion> > conversions;
123 iEvent.getByToken(tok_reducedEgamma_conver_, conversions);
124 photons = writePhotons(allphotons, allelectrons, conversions, beamspot, *rhoEvent_h);
127 if (debug) cout<<
"INFO: Applying JECs..."<<endl;
128 edm::Handle<pat::JetCollection> alljets;
129 iEvent.getByToken(tok_jets_, alljets);
130 edm::Handle<edm::View<reco::GenJet> > genjets;
131 iEvent.getByToken(tok_genJets_, genjets) ;
132 jetTool->getJetCorrections(genjets, alljets, *rhoEvent_h);
135 if (debug) cout<<
"INFO: Writing MET..."<<endl;
136 edm::Handle<pat::METCollection> mets;
137 iEvent.getByToken(tok_met_, mets);
138 edm::Handle<pat::METCollection> mets_nohf;
139 iEvent.getByToken(tok_met_noHF_, mets_nohf);
140 writeMET(mets, mets_nohf);
143 if (debug) cout<<
"INFO: Calculating track veto..."<<endl;
145 if (eventTool->hasGoodPV(vtx)){
147 tks = lepTool->getIsoTracks(pfcands, baby.met(), baby.met_phi());
148 baby.ntks() = tks.size();
151 if(baby.leps_id().size()>0){
152 vector<float> isos,relisos;
153 ra4tks = lepTool->getRA4IsoTracks(pfcands, baby.met(), baby.met_phi(),rhoEventCentral,isos,relisos,baby.leps_id().at(0));
154 vector<float> tks_pt;
155 vector<float> tks_eta;
156 vector<float> tks_phi;
158 vector<float> tks_miniso;
159 vector<float> tks_mt2;
160 vector<float> tks_mt;
163 for(
unsigned i=0;i<ra4tks.size();i++){
164 tks_pt.push_back(ra4tks.at(i)->pt());
165 tks_eta.push_back(ra4tks.at(i)->eta());
166 tks_phi.push_back(ra4tks.at(i)->phi());
167 tks_pdg.push_back(ra4tks.at(i)->pdgId());
168 tks_miniso.push_back(isos.at(i));
169 tks_mt2.push_back(
getMT2(baby.leps_pt().at(0),baby.leps_phi().at(0),tks_pt.back(),tks_phi.back(),baby.met(),baby.met_phi()));
170 tks_mt.push_back(
getMT(tks_pt.back(),tks_phi.back(),baby.met(),baby.met_phi()));
171 if(fabs(tks_pdg.back())==211 && tks_pt.back()>15. && tks_miniso.back()<0.05 && tks_mt2.back()<100) nveto++;
172 else if (fabs(tks_pdg.back())==13 && tks_pt.back()>10. && tks_miniso.back()<0.2 && tks_mt2.back()<100) nveto++;
173 else if (fabs(tks_pdg.back())==11 && tks_pt.back()>10. && tks_miniso.back()<0.1 && tks_mt2.back()<100) nveto++;
175 baby.tks_pt() = tks_pt;
176 baby.tks_eta() = tks_eta;
177 baby.tks_phi() = tks_phi;
178 baby.tks_pdg() = tks_pdg;
179 baby.tks_miniso() = tks_miniso;
180 baby.tks_mt2() = tks_mt2;
181 baby.tks_mt() = tks_mt;
188 if (debug) cout<<
"INFO: Writing jets..."<<endl;
189 vector<LVector>
jets;
190 vector<vector<LVector> > sys_jets;
192 writeJets(alljets, genjets, sig_leps, veto_leps, photons, tks, jets, sys_jets);
194 writeJets(alljets, genjets, sig_leps, veto_leps, photons, tks, jets, sys_jets);
195 for (
unsigned isys(0); isys<
kSysLast; isys++) baby.sys_mj().push_back(jetTool->getSysMJ(1.2, sys_jets[isys]));
201 if (debug) cout<<
"INFO: Calculating mT..."<<endl;
202 if(sig_leps.size()>0){
203 float wx = baby.met()*cos(baby.met_phi()) + sig_leps[0]->px();
204 float wy = baby.met()*sin(baby.met_phi()) + sig_leps[0]->py();
205 float wphi = atan2(wy, wx);
206 baby.dphi_wlep() = deltaPhi(wphi, sig_leps[0]->phi());
208 baby.mt() =
getMT(baby.met(), baby.met_phi(), sig_leps[0]->pt(), sig_leps[0]->phi());
209 baby.mt_nohf() =
getMT(baby.met_nohf(), baby.met_nohf_phi(), sig_leps[0]->pt(), sig_leps[0]->phi());
213 baby.sys_met().resize(
kSysLast,-999.);
214 baby.sys_mt().resize(
kSysLast,-999.);
215 for (
unsigned isys(0); isys<
kSysLast; isys++) {
216 float sys_met_phi(0.);
217 jetTool->getMETWithJEC(mets, baby.sys_met()[isys], sys_met_phi, isys);
218 if (sig_leps.size()>0)
219 baby.sys_mt()[isys] =
getMT(baby.sys_met()[isys], sys_met_phi, sig_leps[0]->pt(), sig_leps[0]->phi());
225 if (debug) cout<<
"INFO: Writing filters..."<<endl;
226 edm::Handle<bool> filter_hbhe;
227 if(iEvent.getByToken(tok_HBHENoiseFilter_,filter_hbhe)) {
228 if(filter_hbhe.isValid())
229 baby.pass_hbhe() = *filter_hbhe;
231 baby.pass_hbhe() =
true;
233 iEvent.getByToken(tok_HBHEIsoNoiseFilter_,filter_hbhe);
234 if(filter_hbhe.isValid())
235 baby.pass_hbheiso() = *filter_hbhe;
237 baby.pass_hbheiso() =
true;
239 edm::Handle<edm::TriggerResults> filterBits;
240 if(
isData) iEvent.getByToken(tok_trigResults_reco_,filterBits);
241 else iEvent.getByToken(tok_trigResults_pat_,filterBits);
244 if(!filterBits.isValid() &&
isData)
245 iEvent.getByToken(tok_trigResults_pat_,filterBits);
246 if(filterBits.isValid()){
247 const edm::TriggerNames &fnames = iEvent.triggerNames(*filterBits);
249 writeFilters(fnames, filterBits, vtx);
253 if (debug) cout<<
"INFO: Writing HLT objects..."<<endl;
254 edm::Handle<pat::TriggerObjectStandAloneCollection> triggerObjects;
255 iEvent.getByToken(tok_selectedPatTrig_,triggerObjects);
257 if(triggerBits.isValid() && triggerPrescales.isValid()){
258 const edm::TriggerNames &names = iEvent.triggerNames(*triggerBits);
259 writeHLTObjects(names, triggerObjects, all_mus, all_els, photons);
264 if (debug) cout<<
"INFO: Writing MC particles..."<<endl;
265 edm::Handle<reco::GenParticleCollection> genParticles;
266 iEvent.getByToken(tok_pruneGenPart_, genParticles);
267 writeMC(genParticles, all_mus, all_els, photons);
271 if (debug) cout<<
"INFO: Calculating MET rebalancing..."<<endl;
272 baby.jetmismeas() =
false;
274 double temp_met = baby.met();
275 double temp_met_phi = baby.met_phi();
276 rebalancedMET(temp_met, temp_met_phi);
277 baby.met_rebal() = temp_met;
278 baby.mt_rebal() =
getMT(temp_met, temp_met_phi, sig_leps[0]->pt(), sig_leps[0]->phi());
279 if(baby.met_rebal()/baby.met()<0.2 && baby.mt_rebal()<150) baby.jetmismeas()=
true;
282 baby.mt_rebal() = baby.mt();
283 baby.met_rebal() = baby.met();
287 if (debug) cout<<
"INFO: Retrieving hard scatter info..."<<endl;
288 edm::Handle<LHEEventProduct> lhe_info;
289 baby.stitch() =
true;
291 iEvent.getByToken(tok_extLHEProducer_, lhe_info);
292 if(!lhe_info.isValid()) iEvent.getByToken(tok_source_, lhe_info);
293 writeGenInfo(lhe_info);
294 if((
outname.Contains(
"TTJets") && (
outname.Contains(
"Lept") ||
outname.Contains(
"TTJets_Tune")) && baby.ht_isr_me()>600)
295 || (
outname.Contains(
"DYJetsToLL_M-50_TuneCUETP8M") && baby.ht_isr_me()>100))
296 baby.stitch() =
false;
297 if(
outname.Contains(
"TTJets_Tune") && baby.ntruleps()!=0) baby.stitch()=
false;
303 edm::Handle<GenEventInfoProduct> gen_event_info;
304 iEvent.getByToken(tok_generator_, gen_event_info);
305 writeWeights(sig_leps, gen_event_info, lhe_info);
329 jetTool->getMETWithJEC(mets, baby.met(), baby.met_phi(),
kSysLast);
330 jetTool->getMETRaw(mets, baby.met_raw(), baby.met_raw_phi());
331 baby.met_mini() = mets->at(0).pt();
332 baby.met_mini_phi() = mets->at(0).phi();
333 baby.met_calo() = mets->at(0).caloMETPt();
334 baby.met_calo_phi() = mets->at(0).caloMETPhi();
335 if(mets_nohf.isValid()){
336 baby.met_nohf() = mets_nohf->at(0).pt();
337 baby.met_nohf_phi() = mets_nohf->at(0).phi();
340 baby.met_tru() = mets->at(0).genMET()->pt();
341 baby.met_tru_phi() = mets->at(0).genMET()->phi();
343 if(isnan(baby.met())) {
344 cout<<
"MET is NaN. Perhaps you are running on old miniAOD with a new release. Setting MET to zero."<<endl;
351 edm::Handle<edm::View <reco::GenJet> > genjets,
353 vector<LVector> &
jets, vector<vector<LVector> > &sys_jets){
355 LVector jetsys_p4, jetsys_nob_p4;
356 baby.njets() = 0; baby.nbl() = 0; baby.nbm() = 0; baby.nbt() = 0;
357 baby.ht() = 0.; baby.ht_hlt() = 0.;
358 baby.njets_ra2() = 0; baby.njets_clean() = 0; baby.nbm_ra2() = 0; baby.ht_ra2() = 0.; baby.ht_clean() = 0.;
359 baby.pass_jets() =
true; baby.pass_jets_nohf() =
true; baby.pass_jets_tight() =
true;
360 baby.pass_jets_ra2() =
true; baby.pass_jets_tight_ra2() =
true;
361 baby.sys_bctag().resize(2, 1.); baby.sys_udsgtag().resize(2, 1.);
362 baby.sys_bctag_loose().resize(2, 1.); baby.sys_udsgtag_loose().resize(2, 1.);
363 baby.w_btag() = baby.w_btag_loose() = 1.;
364 if (
isFastSim){ baby.sys_fs_bctag().resize(2, 1.); baby.sys_fs_udsgtag().resize(2, 1.);}
368 sys_jets.resize(
kSysLast, vector<LVector>());
370 float mht_px(0.), mht_py(0.), mht_clean_px(0.), mht_clean_py(0.);
371 for (
size_t ijet(0); ijet < alljets->size(); ijet++) {
372 const pat::Jet &jet = (*alljets)[ijet];
373 if(fabs(jet.eta()) > 5)
continue;
375 LVector jetp4(jetTool->corrJet[ijet]);
376 float csv(jet.bDiscriminator(
"pfCombinedInclusiveSecondaryVertexV2BJetTags"));
377 bool isLep = jetTool->leptonInJet(jet, sig_leps);
378 bool looseID = jetTool->idJet(jet, jetTool->kLoose);
379 bool tightID = jetTool->idJet(jet, jetTool->kTight);
380 bool goodPtEta = jetp4.pt() > jetTool->JetPtCut && fabs(jet.eta()) <= jetTool->JetEtaCut;
384 if(jetp4.pt() > jetTool->JetPtCut && !isLep) {
385 if(goodPtEta && !looseID) baby.pass_jets_nohf() =
false;
386 if(!looseID) baby.pass_jets() =
false;
387 if(!tightID) baby.pass_jets_tight() =
false;
392 if((looseID && goodPtEta) || isLep) {
393 baby.jets_pt().push_back(jetp4.pt());
394 baby.jets_eta().push_back(jet.eta());
395 baby.jets_phi().push_back(jet.phi());
396 baby.jets_m().push_back(jetp4.mass());
397 baby.jets_islep().push_back(isLep);
398 if(!
isData && jetTool->genJetPt[ijet]>0.) baby.jets_pt_res().push_back(jetp4.pt()/jetTool->genJetPt[ijet]);
399 else baby.jets_pt_res().push_back(-99999.);
400 baby.jets_hflavor().push_back(jet.hadronFlavour());
401 baby.jets_csv().push_back(csv);
402 jets.push_back(jetp4);
407 bool btag(csv > jetTool->CSVMedium);
408 bool btagLoose(csv > jetTool->CSVLoose);
410 baby.w_btag() *= jetTool->jetBTagWeight(jet, jetp4, btag, BTagEntry::OP_MEDIUM,
411 "central",
"central");
414 baby.sys_bctag()[0] *= jetTool->jetBTagWeight(jet, jetp4, btag, BTagEntry::OP_MEDIUM,
"up",
"central");
415 baby.sys_bctag()[1] *= jetTool->jetBTagWeight(jet, jetp4, btag, BTagEntry::OP_MEDIUM,
"down",
"central");
416 baby.sys_udsgtag()[0] *= jetTool->jetBTagWeight(jet, jetp4, btag, BTagEntry::OP_MEDIUM,
"central",
"up");
417 baby.sys_udsgtag()[1] *= jetTool->jetBTagWeight(jet, jetp4, btag, BTagEntry::OP_MEDIUM,
"central",
"down");
418 baby.w_btag_loose() *= jetTool->jetBTagWeight(jet, jetp4, btagLoose, BTagEntry::OP_LOOSE,
"central",
"central");
419 baby.sys_bctag_loose()[0] *= jetTool->jetBTagWeight(jet, jetp4, btagLoose, BTagEntry::OP_LOOSE,
"up",
"central");
420 baby.sys_bctag_loose()[1] *= jetTool->jetBTagWeight(jet, jetp4, btagLoose, BTagEntry::OP_LOOSE,
"down",
"central");
421 baby.sys_udsgtag_loose()[0] *= jetTool->jetBTagWeight(jet, jetp4, btagLoose, BTagEntry::OP_LOOSE,
"central",
"up");
422 baby.sys_udsgtag_loose()[1] *= jetTool->jetBTagWeight(jet, jetp4, btagLoose, BTagEntry::OP_LOOSE,
"central",
"down");
425 baby.sys_fs_bctag()[0] *= jetTool->jetBTagWeight(jet, jetp4, btag, BTagEntry::OP_MEDIUM,
426 "central",
"central",
"up",
"central");
427 baby.sys_fs_bctag()[1] *= jetTool->jetBTagWeight(jet, jetp4, btag, BTagEntry::OP_MEDIUM,
428 "central",
"central",
"down",
"central");
429 baby.sys_fs_udsgtag()[0] *= jetTool->jetBTagWeight(jet, jetp4, btag, BTagEntry::OP_MEDIUM,
430 "central",
"central",
"central",
"up");
431 baby.sys_fs_udsgtag()[1] *= jetTool->jetBTagWeight(jet, jetp4, btag, BTagEntry::OP_MEDIUM,
432 "central",
"central",
"central",
"down");
435 jetsys_p4 += jet.p4();
437 baby.ht() += jetp4.pt();
438 if(csv > jetTool->CSVLoose) baby.nbl()++;
439 if(csv > jetTool->CSVMedium) baby.nbm()++;
440 else jetsys_nob_p4 += jet.p4();
441 if(csv > jetTool->CSVTight) baby.nbt()++;
447 if(jetp4.pt() > jetTool->JetHLTPtCut && fabs(jet.eta()) <= jetTool->JetHLTEtaCut) baby.ht_hlt() += jetp4.pt();
451 bool isLep_ra2 = jetTool->jetMatched(jet, veto_leps);
452 bool isPhoton = jetTool->jetMatched(jet, photons);
453 bool isIsoTrack = jetTool->jetMatched(jet, tks);
454 bool applyId_ra2 = !isLep_ra2 && !isPhoton && !isIsoTrack;
455 bool goodJet_ra2 = (looseID || !applyId_ra2);
456 bool tightJet_ra2 = (tightID || !applyId_ra2);
458 if(jetp4.pt() > jetTool->JetPtCut) {
459 if(!goodJet_ra2) baby.pass_jets_ra2() =
false;
460 if(!tightJet_ra2) baby.pass_jets_tight_ra2() =
false;
463 if(goodPtEta && goodJet_ra2) {
465 baby.ht_ra2() += jetp4.pt();
466 jets_ra2.push_back(dynamic_cast<const reco::Candidate *>(&jet));
467 if(csv > jetTool->CSVMedium) baby.nbm_ra2()++;
468 if(!isLep_ra2 && !isPhoton) {
469 baby.njets_clean()++;
470 baby.ht_clean() += jetp4.pt();
473 if(goodJet_ra2 && jetp4.pt() > jetTool->JetPtCut && fabs(jet.eta()) <= jetTool->JetMHTEtaCut){
476 if(!isLep_ra2 && !isPhoton) {
477 mht_clean_px -= jet.px();
478 mht_clean_py -= jet.py();
485 for (
unsigned isys(0); isys<
kSysLast; isys++){
486 jetp4 = jetTool->corrJet[ijet];
487 if (isys ==
kSysJER) jetp4 *= (1 + jetTool->jerUnc[ijet]);
488 else if (isys ==
kSysJECUp) jetp4 *= (1 + jetTool->jecUnc[ijet]);
489 else if (isys ==
kSysJECDn) jetp4 *= (1 - jetTool->jecUnc[ijet]);
492 if(jetp4.pt() > jetTool->JetPtCut && !isLep && !looseID) baby.sys_pass()[isys] =
false;
494 if(looseID && jetp4.pt() > jetTool->JetPtCut && fabs(jet.eta()) <= jetTool->JetEtaCut) {
495 sys_jets[isys].push_back(jetp4);
497 baby.sys_njets()[isys]++;
498 baby.sys_ht()[isys] += jetp4.pt();
499 if(csv > jetTool->CSVMedium) baby.sys_nbm()[isys]++;
506 if(!
isData) baby.ht_tru() = jetTool->trueHT(genjets);
508 baby.mht() = hypot(mht_px, mht_py);
509 baby.mht_phi() = atan2(mht_py, mht_px);
510 baby.mht_clean() = hypot(mht_clean_px, mht_clean_py);
511 baby.mht_clean_phi() = atan2(mht_clean_py, mht_clean_px);
512 baby.low_dphi() = jetTool->isLowDphi(jets_ra2, baby.mht_phi(), baby.dphi1(), baby.dphi2(), baby.dphi3(), baby.dphi4());
514 for (
unsigned i(0); i<2; i++){
515 baby.sys_bctag()[i] /= baby.w_btag();
516 baby.sys_udsgtag()[i] /= baby.w_btag();
517 baby.sys_bctag_loose()[i] /= baby.w_btag_loose();
518 baby.sys_udsgtag_loose()[i] /= baby.w_btag_loose();
520 baby.sys_fs_bctag()[i] /= baby.w_btag();
521 baby.sys_fs_udsgtag()[i] /= baby.w_btag();
525 baby.jetsys_pt() = jetsys_p4.pt();
526 baby.jetsys_eta() = jetsys_p4.eta();
527 baby.jetsys_phi() = jetsys_p4.phi();
528 baby.jetsys_nob_pt() = jetsys_nob_p4.pt();
529 baby.jetsys_nob_eta() = jetsys_nob_p4.eta();
530 baby.jetsys_nob_phi() = jetsys_nob_p4.phi();
533 jetTool->getDeltaRbb(baby.dr_bb(),
jets, baby.jets_csv(), baby.jets_islep());
538 jetTool->clusterFatJets(baby.nfjets(), baby.mj(),
539 baby.fjets_pt(), baby.fjets_eta(),
540 baby.fjets_phi(), baby.fjets_m(),
542 baby.fjets_sumcsv(), baby.fjets_poscsv(),
543 baby.fjets_btags(), baby.jets_fjet_index(),
544 1.2,
jets, baby.jets_csv());
545 jetTool->clusterFatJets(baby.nfjets08(), baby.mj08(),
546 baby.fjets08_pt(), baby.fjets08_eta(),
547 baby.fjets08_phi(), baby.fjets08_m(),
548 baby.fjets08_nconst(),
549 baby.fjets08_sumcsv(), baby.fjets08_poscsv(),
550 baby.fjets08_btags(), baby.jets_fjet08_index(),
551 0.8,
jets, baby.jets_csv());
556 edm::Handle<pat::PackedCandidateCollection> pfcands,
557 edm::Handle<reco::VertexCollection> vtx,
558 vCands &veto_mus,
vCands &all_mus,
double rhoEventCentral){
560 veto_mus.clear(); all_mus.clear();
561 baby.nmus() = 0; baby.nvmus() = 0;
562 for (
size_t ilep(0); ilep < muons->size(); ilep++) {
563 const pat::Muon &lep = (*muons)[ilep];
564 if(!lepTool->isVetoMuon(lep, vtx, -99.))
continue;
566 double lep_iso(lepTool->getPFIsolation(pfcands, dynamic_cast<const reco::Candidate *>(&lep), 0.05, 0.2, 10., rhoEventCentral,
false));
567 double lep_reliso(lepTool->getRelIsolation(lep, rhoEventCentral));
568 double dz(0.), d0(0.);
569 lepTool->vertexMuon(lep, vtx, dz, d0);
571 baby.mus_pt().push_back(lep.pt());
572 baby.mus_eta().push_back(lep.eta());
573 baby.mus_phi().push_back(lep.phi());
574 baby.mus_dz().push_back(dz);
575 baby.mus_d0().push_back(d0);
576 baby.mus_charge().push_back(lep.charge());
577 baby.mus_sigid().push_back(lepTool->idMuon(lep, vtx, lepTool->kMedium));
578 baby.mus_tight().push_back(lepTool->idMuon(lep, vtx, lepTool->kTight));
579 baby.mus_miniso().push_back(lep_iso);
580 baby.mus_reliso().push_back(lep_reliso);
581 baby.mus_tm().push_back(
false);
582 baby.mus_inz().push_back(
false);
583 baby.mus_inzv().push_back(
false);
584 baby.mus_vvvl().push_back(
false);
585 baby.mus_isomu18().push_back(
false);
586 baby.mus_mu50().push_back(
false);
587 baby.mus_mu8().push_back(
false);
588 all_mus.push_back(dynamic_cast<const reco::Candidate *>(&lep));
590 if(lepTool->isVetoMuon(lep, vtx, lep_iso)) {
592 veto_mus.push_back(dynamic_cast<const reco::Candidate *>(&lep));
594 if(lepTool->isSignalMuon(lep, vtx, lep_iso)) {
596 sig_mus.push_back(dynamic_cast<const reco::Candidate *>(&lep));
597 baby.mus_sig().push_back(
true);
598 }
else baby.mus_sig().push_back(
false);
606 edm::Handle<pat::PackedCandidateCollection> pfcands,
607 edm::Handle<reco::VertexCollection> vtx,
608 vCands &veto_els,
vCands &all_els,
double rhoEventCentral){
610 veto_els.clear(); all_els.clear();
611 baby.nels() = 0; baby.nvels() = 0;
612 for (
size_t ilep(0); ilep < electrons->size(); ilep++) {
613 const pat::Electron &lep = (*electrons)[ilep];
614 if(!lepTool->isVetoElectron(lep, vtx, -99.))
continue;
616 double lep_iso(lepTool->getPFIsolation(pfcands, dynamic_cast<const reco::Candidate *>(&lep), 0.05, 0.2, 10., rhoEventCentral,
false));
617 double lep_reliso(lepTool->getRelIsolation(lep, rhoEventCentral));
618 double dz(0.), d0(0.);
619 lepTool->vertexElectron(lep, vtx, dz, d0);
621 baby.els_pt().push_back(lep.pt());
622 baby.els_sceta().push_back(lep.superCluster()->position().eta());
623 baby.els_eta().push_back(lep.eta());
624 baby.els_phi().push_back(lep.phi());
625 baby.els_dz().push_back(dz);
626 baby.els_d0().push_back(d0);
627 baby.els_charge().push_back(lep.charge());
628 baby.els_sigid().push_back(lepTool->idElectron(lep, vtx, lepTool->kMedium));
629 baby.els_ispf().push_back(lep.numberOfSourceCandidatePtrs()==2 && abs(lep.sourceCandidatePtr(1)->pdgId())==11);
630 baby.els_tight().push_back(lepTool->idElectron(lep, vtx, lepTool->kTight));
631 baby.els_miniso().push_back(lep_iso);
632 baby.els_reliso().push_back(lep_reliso);
633 baby.els_tm().push_back(
false);
634 baby.els_inz().push_back(
false);
635 baby.els_inzv().push_back(
false);
636 baby.els_vvvl().push_back(
false);
637 baby.els_ele23().push_back(
false);
638 baby.els_ele105().push_back(
false);
639 baby.els_ele8().push_back(
false);
640 all_els.push_back(dynamic_cast<const reco::Candidate *>(&lep));
642 if(lepTool->isVetoElectron(lep, vtx, lep_iso)){
644 veto_els.push_back(dynamic_cast<const reco::Candidate *>(&lep));
646 if(lepTool->isSignalElectron(lep, vtx, lep_iso)) {
648 sig_els.push_back(dynamic_cast<const reco::Candidate *>(&lep));
649 baby.els_sig().push_back(
true);
650 }
else baby.els_sig().push_back(
false);
657 baby.nleps() = baby.nmus() + baby.nels();
658 baby.nvleps() = baby.nvmus() + baby.nvels();
659 sort(leptons.begin(), leptons.end(),
greaterPt);
660 for(
size_t ind(0);
ind < leptons.size();
ind++) {
661 baby.leps_pt().push_back(leptons[
ind]->pt());
662 baby.leps_eta().push_back(leptons[
ind]->eta());
663 baby.leps_phi().push_back(leptons[
ind]->phi());
664 baby.leps_id().push_back(leptons[
ind]->pdgId());
691 for(
size_t lep1(0); lep1 < leptons.size(); lep1++){
692 for(
size_t lep2(lep1+1); lep2 < leptons.size(); lep2++){
693 if(leptons[lep1]->charge()*leptons[lep2]->charge()<0){
694 LVector z_p4(leptons[lep1]->p4());
695 z_p4 += leptons[lep2]->p4();
696 (baby.*ll_m)() = z_p4.mass();
697 (baby.*ll_pt)() = z_p4.pt();
698 (baby.*ll_eta)() = z_p4.eta();
699 (baby.*ll_phi)() = z_p4.phi();
700 float pt1(leptons[lep1]->pt()), pt2(leptons[lep2]->pt());
701 (baby.*ll_pt1)() = max(pt1, pt2);
702 (baby.*ll_pt2)() = min(pt1, pt2);
703 for(
size_t ilep(0); ilep < (baby.*l_pt)().size(); ilep++){
704 if(fabs(pt1 - (baby.*l_pt)()[ilep]) < 1e-7) (baby.*l_inz)()[ilep] =
true;
705 if(fabs(pt2 - (baby.*l_pt)()[ilep]) < 1e-7) (baby.*l_inz)()[ilep] =
true;
717 for(
size_t lep1(0); lep1 < leptons1.size(); lep1++){
718 for(
size_t lep2(0); lep2 < leptons2.size(); lep2++){
719 if(leptons1[lep1]->charge()*leptons2[lep2]->charge()<0){
720 LVector z_p4(leptons1[lep1]->p4());
721 z_p4 += leptons2[lep2]->p4();
722 (baby.*ll_m)() = z_p4.mass();
723 (baby.*ll_pt)() = z_p4.pt();
724 (baby.*ll_eta)() = z_p4.eta();
725 (baby.*ll_phi)() = z_p4.phi();
726 float pt1(leptons1[lep1]->pt()), pt2(leptons2[lep2]->pt());
727 (baby.*ll_pt1)() = pt1;
728 (baby.*ll_pt2)() = pt2;
738 edm::Handle<std::vector<pat::Electron> > &electrons,
739 edm::Handle<reco::ConversionCollection> &conversions,
740 edm::Handle<reco::BeamSpot> &beamspot,
double rho){
744 for (
size_t ind(0);
ind < allphotons->size();
ind++) {
745 const pat::Photon &photon = (*allphotons)[
ind];
747 if(photon.pt() < 50)
continue;
748 if(!photonTool->idPhoton(photon, electrons, conversions, beamspot, rho))
continue;
750 if(photon.pt() > photonTool->PhotonPtCut) baby.nph()++;
751 baby.ph_pt().push_back(photon.pt());
752 baby.ph_eta().push_back(photon.eta());
753 baby.ph_phi().push_back(photon.phi());
754 baby.ph_tm().push_back(
false);
755 baby.ph_ph90().push_back(
false);
757 photons.push_back(dynamic_cast<const reco::Candidate *>(&photon));
764 edm::Handle<edm::TriggerResults> triggerBits,
765 edm::Handle<pat::PackedTriggerPrescales> triggerPrescales){
767 baby.trig().resize(trig_name.size(),
false);
768 baby.trig_prescale().resize(trig_name.size(), -1.);
769 for (
size_t itrig(0); itrig < triggerBits->size(); itrig++) {
770 for(
size_t itn(0); itn < trig_name.size(); itn++){
771 if(names.triggerName(itrig).find(trig_name[itn])!=string::npos){
772 baby.trig()[itn] = triggerBits->accept(itrig);
773 baby.trig_prescale()[itn] = triggerPrescales->getPrescaleForIndex(itrig);
774 if(baby.trig()[itn]) keep =
true;
783 edm::Handle<pat::TriggerObjectStandAloneCollection> triggerObjects,
785 baby.nmus_vvvl() = 0; baby.nmus_isomu18() = 0;
786 baby.nels_vvvl() = 0; baby.nels_ele23() = 0;
787 const float relptThreshold(1), drThreshold(0.3);
788 for (pat::TriggerObjectStandAlone obj : *triggerObjects) {
789 obj.unpackPathNames(names);
790 TString name(obj.collection());
791 float objpt(obj.pt());
792 if(name==
"hltPFMETProducer::HLT") baby.onmet() = objpt;
793 if(name==
"hltPFHT::HLT") baby.onht() = objpt;
795 if(name==
"hltL3MuonCandidates::HLT"){
796 bool vvvl(obj.hasFilterLabel(
"hltL3MuVVVLIsoFIlter"));
797 bool isomu18(obj.hasFilterLabel(
"hltL3crIsoL1sMu16L1f0L2f10QL3f18QL3trkIsoFiltered0p09") );
798 bool mu50(obj.hasFilterLabel(
"hltL3fL1sMu16orMu25L1f0L2f10QL3Filtered50Q"));
799 bool mu8(obj.hasFilterLabel(
"hltDoubleMu8Mass8L3Filtered"));
802 baby.mus_vvvl_pt().push_back(objpt);
803 baby.mus_vvvl_eta().push_back(obj.eta());
804 baby.mus_vvvl_phi().push_back(obj.phi());
806 if(isomu18) baby.nmus_isomu18()++;
807 if(vvvl && baby.onmu_vvvl()<objpt) baby.onmu_vvvl() = objpt;
808 if(isomu18 && baby.onmu_isomu18()<objpt) baby.onmu_isomu18() = objpt;
809 if(mu50 && baby.onmu_mu50()<objpt) baby.onmu_mu50() = objpt;
810 if(mu8 && baby.onmu_mu8()<objpt) baby.onmu_mu8() = objpt;
813 if(vvvl || isomu18 || mu50 || mu8){
814 for(
size_t ind(0);
ind < all_mus.size();
ind++) {
815 double dr(deltaR(obj, *(all_mus[
ind])));
818 if(dr > drThreshold)
continue;
825 baby.mus_vvvl()[minind] = vvvl;
826 baby.mus_isomu18()[minind] = isomu18;
827 baby.mus_mu50()[minind] = mu50;
828 baby.mus_mu8()[minind] = mu8;
832 if(name==
"hltEgammaCandidates::HLT" || name==
"hltDoubleEle8HLTPixelMatchElectronProducer::HLT"){
833 bool vvvl(obj.hasFilterLabel(
"hltEle15VVVLGsfTrackIsoFilter"));
834 bool ele23(obj.hasFilterLabel(
"hltEle23WPLooseGsfTrackIsoFilter") );
835 bool ele105(obj.hasFilterLabel(
"hltEle105CaloIdVTGsfTrkIdTGsfDphiFilter"));
836 bool ele8(obj.hasFilterLabel(
"hltDoubleEle8Mass8Filter"));
839 baby.els_vvvl_pt().push_back(objpt);
840 baby.els_vvvl_eta().push_back(obj.eta());
841 baby.els_vvvl_phi().push_back(obj.phi());
843 if(ele23) baby.nels_ele23()++;
844 if(vvvl && baby.onel_vvvl()<objpt) baby.onel_vvvl() = objpt;
845 if(ele23 && baby.onel_ele23()<objpt) baby.onel_ele23() = objpt;
846 if(ele105 && baby.onel_ele105()<objpt) baby.onel_ele105() = objpt;
847 if(ele8 && baby.onel_ele8()<objpt) baby.onel_ele8() = objpt;
848 if(vvvl || ele23 || ele105 || ele8){
851 for(
size_t ind(0);
ind < all_els.size();
ind++) {
852 double dr(deltaR(obj, *(all_els[
ind])));
853 double drelpt(fabs((all_els[ind]->pt() - objpt)/objpt));
854 if(dr > drThreshold || drelpt > relptThreshold)
continue;
861 baby.els_vvvl()[minind] = vvvl;
862 baby.els_ele23()[minind] = ele23;
863 baby.els_ele105()[minind] = ele105;
864 baby.els_ele8()[minind] = ele8;
867 bool ph90(obj.hasFilterLabel(
"hltEG90L1SingleEG40HEFilter"));
868 if(ph90 && baby.onph_ph90()<objpt) baby.onph_ph90() = objpt;
872 for(
size_t ind(0);
ind < photons.size();
ind++) {
873 double dr(deltaR(obj, *(photons[
ind])));
874 double drelpt(fabs((photons[ind]->pt() - objpt)/objpt));
875 if(dr > drThreshold || drelpt > relptThreshold)
continue;
882 baby.ph_ph90()[minind] = ph90;
891 edm::Handle<edm::TriggerResults> filterBits,
892 edm::Handle<reco::VertexCollection> vtx){
893 baby.pass_goodv() =
true; baby.pass_cschalo() =
true; baby.pass_eebadsc() =
true;
894 for (
size_t i(0); i < filterBits->size(); ++i) {
895 string name = fnames.triggerName(i);
896 bool pass =
static_cast<bool>(filterBits->accept(i));
897 if (name==
"Flag_goodVertices") baby.pass_goodv() = pass;
899 else if (name==
"Flag_eeBadScFilter") baby.pass_eebadsc() = pass;
904 baby.pass_cschalo() = eventTool->passBeamHalo(baby.run(), baby.event());
906 baby.pass() = baby.pass_goodv() && baby.pass_eebadsc() && baby.pass_cschalo() && baby.pass_hbhe() && baby.pass_hbheiso()
908 baby.pass_ra2() = baby.pass_goodv() && baby.pass_eebadsc() && baby.pass_cschalo() && baby.pass_hbhe() && baby.pass_hbheiso()
909 && baby.pass_jets_ra2();
910 baby.pass_nohf() = baby.pass_goodv() && baby.pass_eebadsc() && baby.pass_cschalo() && baby.pass_hbhe() && baby.pass_hbheiso()
911 && baby.pass_jets_nohf();
914 for (
unsigned isys(0); isys<
kSysLast; isys++){
916 baby.sys_pass()[isys] = baby.sys_pass()[isys] && baby.pass_goodv() && baby.pass_eebadsc() && baby.pass_cschalo() && baby.pass_hbhe() && baby.pass_hbheiso();
922 edm::Handle<std::vector< PileupSummaryInfo > > pu_info){
923 baby.npv() = vtx->size();
924 if(pu_info.isValid()){
925 for(
size_t bc(0); bc<pu_info->size(); ++bc){
926 if(pu_info->at(bc).getBunchCrossing()==0){
927 baby.ntrupv() = pu_info->at(bc).getPU_NumInteractions();
928 baby.ntrupv_mean() = pu_info->at(bc).getTrueNumInteractions();
936 baby.nisr_me()=0; baby.ht_isr_me()=0.;
937 for (
unsigned int icount = 0 ; icount < (
unsigned int)lhe_info->hepeup().NUP; icount++ ) {
938 unsigned int pdgid = abs(lhe_info->hepeup().IDUP[icount]);
939 int status = lhe_info->hepeup().ISTUP[icount];
940 int mom1id = abs(lhe_info->hepeup().IDUP[lhe_info->hepeup().MOTHUP[icount].first-1]);
941 int mom2id = abs(lhe_info->hepeup().IDUP[lhe_info->hepeup().MOTHUP[icount].second-1]);
942 float px = (lhe_info->hepeup().PUP[icount])[0];
943 float py = (lhe_info->hepeup().PUP[icount])[1];
944 float pt = sqrt(px*px+py*py);
946 if(status==1 && (pdgid<6 || pdgid==21) && mom1id!=6 && mom2id!=6 && mom1id!=24 && mom2id!=24
947 && mom1id!=23 && mom2id!=23 && mom1id!=25 && mom2id!=25) {
949 baby.ht_isr_me() += pt;
956 typedef std::vector<std::string>::const_iterator comments_const_iterator;
958 comments_const_iterator c_begin = lhe_info->comments_begin();
959 comments_const_iterator c_end = lhe_info->comments_end();
961 TString model_params;
962 for(comments_const_iterator cit=c_begin; cit!=c_end; ++cit) {
963 size_t found = (*cit).find(
"model");
964 if(found != std::string::npos) {
969 mcTool->getMassPoints(model_params,baby.mgluino(),baby.mlsp());
976 float metw_tru_x(0.), metw_tru_y(0.);
977 float lep_tru_pt(0.), lep_tru_phi(0.);
978 baby.ntruleps()=0; baby.ntrumus()=0; baby.ntruels()=0; baby.ntrutaush()=0; baby.ntrutausl()=0;
982 vector<float> top_pt;
985 const size_t bsmid(1000000);
986 for (
size_t imc(0); imc < genParticles->size(); imc++) {
987 const reco::GenParticle &mc = (*genParticles)[imc];
988 size_t id = abs(mc.pdgId());
989 bool isLast = mcTool->isLast(mc,
id);
992 const reco::GenParticle *mom =
nullptr;
993 size_t momid = abs(mcTool->mom(mc, mom));
995 bool isNewPhysics(
id>=bsmid);
996 bool isGluino(
id==1000021);
999 bool bTopOrBSM(
id==5 && (momid==6 || momid>=bsmid));
1000 bool nuFromZ((
id==12 ||
id==14 ||
id==16) && momid==23);
1001 bool eFromTopZ(
id==11 && (momid==24 || momid==23));
1002 bool muFromTopZ(
id==13 && (momid==24 || momid==23));
1003 bool tauFromTopZ(
id==15 && (momid==24 || momid==23));
1004 bool fromWOrWTau(mcTool->fromWOrWTau(mc));
1007 if(isTop) mc.pdgId()>0 ? topIndex=imc : antitopIndex=imc;
1010 if((isTop &&
outname.Contains(
"TTJets"))
1011 || (isGluino && (
outname.Contains(
"SMS") ||
outname.Contains(
"RPV")))
1012 || (isZ &&
outname.Contains(
"DY"))) isr_p4 -= mc.p4();
1015 if(isTop || isNewPhysics || isZ
1016 || isW || bTopOrBSM || eFromTopZ || muFromTopZ
1017 || tauFromTopZ || nuFromZ || fromWOrWTau){
1018 baby.mc_id().push_back(mc.pdgId());
1019 baby.mc_pt().push_back(mc.pt());
1020 baby.mc_eta().push_back(mc.eta());
1021 baby.mc_phi().push_back(mc.phi());
1022 baby.mc_mass().push_back(mc.mass());
1023 baby.mc_mom().push_back(mcTool->mom(mc,mom));
1025 if(isTop && (
outname.Contains(
"TTJets") ||
outname.Contains(
"TT_"))){
1026 top_pt.push_back(mc.pt());
1030 if(muFromTopZ) baby.ntrumus()++;
1031 if(eFromTopZ) baby.ntruels()++;
1033 const reco::GenParticle *tauDaughter(0);
1034 if(mcTool->decaysTo(mc, 11, tauDaughter) || mcTool->decaysTo(mc, 13, tauDaughter)){
1035 baby.mc_id().push_back(tauDaughter->pdgId());
1036 baby.mc_pt().push_back(tauDaughter->pt());
1037 baby.mc_eta().push_back(tauDaughter->eta());
1038 baby.mc_phi().push_back(tauDaughter->phi());
1039 baby.mc_mom().push_back(mcTool->mom(*tauDaughter,mom));
1041 }
else baby.ntrutaush()++;
1046 const float relptThreshold(0.3), drThreshold(0.1);
1047 if(
id==11 && fromWOrWTau){
1050 for(
size_t ind(0);
ind < all_els.size();
ind++) {
1051 double dr(deltaR(mc, *(all_els[
ind])));
1052 double drelpt(fabs((all_els[ind]->pt() - mc.pt())/mc.pt()));
1053 if(dr > drThreshold || drelpt > relptThreshold)
continue;
1060 baby.els_tm()[minind] =
true;
1061 if(baby.els_sig()[minind]) baby.nleps_tm()++;
1063 if(lep_tru_pt < mc.pt()){
1064 lep_tru_pt = mc.pt();
1065 lep_tru_phi = mc.phi();
1068 if(
id==13 && fromWOrWTau){
1071 for(
size_t ind(0);
ind < all_mus.size();
ind++) {
1072 double dr(deltaR(mc, *(all_mus[
ind])));
1073 double drelpt(fabs((all_mus[ind]->pt() - mc.pt())/mc.pt()));
1074 if(dr > drThreshold || drelpt > relptThreshold)
continue;
1081 baby.mus_tm()[minind] =
true;
1082 if(baby.mus_sig()[minind]) baby.nleps_tm()++;
1084 if(lep_tru_pt < mc.pt()){
1085 lep_tru_pt = mc.pt();
1086 lep_tru_phi = mc.phi();
1092 for(
size_t ind(0);
ind < photons.size();
ind++) {
1093 double dr(deltaR(mc, *(photons[
ind])));
1094 double drelpt(fabs((photons[ind]->pt() - mc.pt())/mc.pt()));
1095 if(dr > drThreshold || drelpt > relptThreshold)
continue;
1101 if(minind >= 0) baby.ph_tm()[minind] =
true;
1105 if((
id==12 ||
id==14 ||
id==16 ||
id==18 ||
id==1000012 ||
id==1000014 ||
id==1000016
1106 ||
id==1000022 ||
id==1000023 ||
id==1000025 ||
id==1000035 ||
id==1000039) &&
1109 metw_tru_x += mc.px();
1110 metw_tru_y += mc.py();
1115 if(!baby.fromGS()) baby.fromGS()|=mcTool->isFromGSP(dynamic_cast<const reco::Candidate*>(&mc));
1118 if(topIndex>=0 && antitopIndex>=0) {
1119 reco::Candidate::LorentzVector topP4 = genParticles->at(topIndex).p4();
1120 reco::Candidate::LorentzVector antitopP4 = genParticles->at(antitopIndex).p4();
1121 reco::Candidate::LorentzVector ttbarP4 = topP4+antitopP4;
1122 baby.m_tt()=ttbarP4.mass();
1125 baby.ntruleps() = baby.ntrumus()+baby.ntruels()+baby.ntrutaush()+baby.ntrutausl();
1126 baby.isr_tru_pt() = isr_p4.pt();
1127 baby.isr_tru_eta() = isr_p4.eta();
1128 baby.isr_tru_phi() = isr_p4.phi();
1130 vector<float> isr_sys;
1132 isr_sys.push_back(1. + weightTool->isrWeight(baby.isr_tru_pt()));
1133 isr_sys.push_back(1. - weightTool->isrWeight(baby.isr_tru_pt()));
1135 else{ isr_sys.push_back(1.); isr_sys.push_back(1.);}
1136 baby.sys_isr()=isr_sys;
1138 if((
outname.Contains(
"TTJets") ||
outname.Contains(
"TT_")) && top_pt.size() == 2) baby.w_toppt() = weightTool->topPtWeight(top_pt.at(0),top_pt.at(1));
1139 else baby.w_toppt() = 1.;
1141 baby.met_tru_nuw() = hypot(metw_tru_x, metw_tru_y);
1142 baby.met_tru_nuw_phi() = atan2(metw_tru_y, metw_tru_x);
1144 baby.mt_tru() =
getMT(baby.met_tru(), baby.met_tru_phi(), lep_tru_pt, lep_tru_phi);
1145 baby.mt_tru_nuw() =
getMT(baby.met_tru_nuw(), baby.met_tru_nuw_phi(), lep_tru_pt, lep_tru_phi);
1151 for(
unsigned int iJet=0; iJet<baby.jets_pt().size(); iJet++) {
1153 double rescalingFactor=calculateRescalingFactor(iJet);
1155 double newMET=calculateRebalancedMET(iJet, rescalingFactor, newMETPhi);
1158 minMETPhi=newMETPhi;
1168 const double scaleCutoff=1;
1170 TVector3 jet, metVector;
1171 jet.SetPtEtaPhi(baby.jets_pt().at(jetIdx), baby.jets_eta().at(jetIdx), baby.jets_phi().at(jetIdx));
1172 metVector.SetPtEtaPhi(baby.met(), 0, baby.met_phi());
1174 double denominator = -jet.Px()*jet.Px()-jet.Py()*jet.Py();
1175 double numerator = jet.Px()*metVector.Px()+jet.Py()*metVector.Py();
1177 double rescalingFactor=1e6;
1178 if(denominator!=0) rescalingFactor = numerator/denominator;
1179 if(fabs(rescalingFactor)>scaleCutoff) rescalingFactor=scaleCutoff*rescalingFactor/fabs(rescalingFactor);
1182 if(rescalingFactor>0) rescalingFactor=0;
1184 return rescalingFactor;
1189 TVector3 jet, metVector;
1190 jet.SetPtEtaPhi(baby.jets_pt().at(jetIdx), baby.jets_eta().at(jetIdx), baby.jets_phi().at(jetIdx));
1191 metVector.SetPtEtaPhi(baby.met(), 0, baby.met_phi());
1193 double sumPx = metVector.Px()+mu*jet.Px();
1194 double sumPy = metVector.Py()+mu*jet.Py();
1196 METPhi=atan(sumPy/sumPx);
1198 return sqrt(sumPx*sumPx+sumPy*sumPy);
1202 edm::Handle<LHEEventProduct> &lhe_info){
1203 if (debug) cout<<
"INFO: Filling weights..."<<endl;
1207 baby.eff_trig() = baby.w_btag() = baby.w_btag_loose() = baby.w_pu() = baby.w_pu_rpv() = baby.w_lep() = baby.w_fs_lep() = baby.w_toppt() = 1.;
1208 baby.eff_jetid() = baby.w_lumi() = baby.weight() = baby.weight_rpv() = 1.;
1214 baby.w_lumi() =
xsec*luminosity / (
static_cast<double>(nevents_sample)*(1-2*fneg));
1215 if (gen_event_info->weight() < 0) baby.w_lumi() *= -1.;
1218 baby.w_pu() = weightTool->pileupWeight(baby.ntrupv_mean());
1219 baby.w_pu_rpv() = weightTool->pileupWeightRPV(baby.ntrupv_mean(), 0);
1220 baby.sys_pu_rpv().resize(2, 1.);
1221 baby.sys_pu_rpv()[0] = weightTool->pileupWeightRPV(baby.ntrupv_mean(), 1)/baby.w_pu_rpv();
1222 baby.sys_pu_rpv()[1] = weightTool->pileupWeightRPV(baby.ntrupv_mean(), -1)/baby.w_pu_rpv();
1225 double sf = lepTool->getScaleFactor(sig_leps);
1226 double unc = lepTool->getScaleFactorUncertainty(sig_leps)/sf;
1228 baby.sys_lep().resize(2, 1.);
1229 baby.sys_lep().at(0) = 1.+unc;
1230 baby.sys_lep().at(1) = 1.-unc;
1233 baby.sys_fs_lep().resize(2, 1.);
1235 double sf_fs = lepTool->getScaleFactorFs(sig_leps, baby.npv());
1236 double unc_fs = lepTool->getScaleFactorUncertaintyFs(sig_leps, baby.npv())/sf_fs;
1237 baby.w_fs_lep() = sf_fs;
1238 baby.sys_fs_lep()[0] = 1.+unc_fs;
1239 baby.sys_fs_lep()[1] = 1.-unc_fs;
1240 }
else baby.w_fs_lep() = 1.;
1243 baby.eff_trig() = weightTool->triggerEfficiency(baby.nmus(), baby.nels(), baby.sys_trig());
1247 else baby.eff_jetid() = 1.;
1251 baby.weight() = baby.w_lumi() * baby.w_lep() * baby.w_fs_lep() * baby.w_toppt() * baby.w_btag()
1252 * baby.eff_trig() * baby.eff_jetid();
1253 baby.weight_rpv() = baby.w_lumi() * baby.w_lep() * baby.w_fs_lep() * baby.w_toppt() * baby.w_btag()
1254 * baby.w_pu_rpv() * baby.eff_jetid();
1257 weightTool->getTheoryWeights(lhe_info);
1266 weightTool->getPDFWeights(baby.sys_pdf(), baby.w_pdf());
1281 outname(TString(iConfig.getParameter<string>(
"outputFile"))),
1282 inputfiles(iConfig.getParameter<vector<string> >(
"inputFiles")),
1283 jsonfile(iConfig.getParameter<string>(
"json")),
1285 jec_label(iConfig.getParameter<string>(
"jec")),
1286 met_label(iConfig.getParameter<edm::InputTag>(
"met")),
1287 met_nohf_label(iConfig.getParameter<edm::InputTag>(
"met_nohf")),
1288 jets_label(iConfig.getParameter<edm::InputTag>(
"jets")),
1289 nevents_sample(iConfig.getParameter<unsigned int>(
"nEventsSample")),
1293 isFastSim(iConfig.getParameter<bool>(
"isFastSim")),
1295 debug(iConfig.getParameter<bool>(
"debugMode")),
1298 tok_trigResults_hlt_(consumes<edm::TriggerResults>(edm::InputTag(
"TriggerResults",
"",
"HLT"))),
1299 tok_patTrig_(consumes<pat::PackedTriggerPrescales>(edm::InputTag(
"patTrigger"))),
1300 tok_primVertex_(consumes<
reco::VertexCollection>(edm::InputTag(
"offlineSlimmedPrimaryVertices"))),
1301 tok_addPileup_(consumes<
std::vector< PileupSummaryInfo > >(edm::InputTag(
"addPileupInfo"))),
1302 tok_slimAddPileup_(consumes<
std::vector< PileupSummaryInfo > >(edm::InputTag(
"slimmedAddPileupInfo"))),
1303 tok_packPFCands_(consumes<pat::PackedCandidateCollection>(edm::InputTag(
"packedPFCandidates"))),
1304 tok_rhoFastJet_centralNeutral_(consumes<double>(edm::InputTag(
"fixedGridRhoFastjetCentralNeutral"))),
1305 tok_muons_(consumes<pat::MuonCollection>(edm::InputTag(
"slimmedMuons"))),
1306 tok_electrons_(consumes<pat::ElectronCollection>(edm::InputTag(
"slimmedElectrons"))),
1307 tok_rhoFastJet_all_(consumes<double>(edm::InputTag(
"fixedGridRhoFastjetAll"))),
1308 tok_offBeamSpot_(consumes<
reco::BeamSpot>(edm::InputTag(
"offlineBeamSpot"))),
1309 tok_photons_(consumes<pat::PhotonCollection>(edm::InputTag(
"slimmedPhotons"))),
1310 tok_reducedEgamma_conver_(consumes<vector<
reco::Conversion> >(edm::InputTag(
"reducedEgamma",
"reducedConversions"))),
1311 tok_jets_(consumes<pat::JetCollection>(jets_label)),
1312 tok_genJets_(consumes<edm::View<
reco::GenJet> >(edm::InputTag(
"slimmedGenJets"))),
1313 tok_met_(consumes<pat::METCollection>(met_label)),
1314 tok_met_noHF_(consumes<pat::METCollection>(met_nohf_label)),
1315 tok_HBHENoiseFilter_(consumes<bool>(edm::InputTag(
"HBHENoiseFilterResultProducer",
"HBHENoiseFilterResult"))),
1316 tok_HBHEIsoNoiseFilter_(consumes<bool>(edm::InputTag(
"HBHENoiseFilterResultProducer",
"HBHEIsoNoiseFilterResult"))),
1317 tok_trigResults_reco_(consumes<edm::TriggerResults>(edm::InputTag(
"TriggerResults",
"",
"RECO"))),
1318 tok_trigResults_pat_(consumes<edm::TriggerResults>(edm::InputTag(
"TriggerResults",
"",
"PAT"))),
1319 tok_selectedPatTrig_(consumes<pat::TriggerObjectStandAloneCollection>(edm::InputTag(
"selectedPatTrigger"))),
1320 tok_pruneGenPart_(consumes<
reco::GenParticleCollection>(edm::InputTag(
"prunedGenParticles"))),
1321 tok_extLHEProducer_(consumes<LHEEventProduct>(edm::InputTag(
"externalLHEProducer"))),
1322 tok_source_(consumes<LHEEventProduct>(edm::InputTag(
"source"))),
1323 tok_generator_(consumes<GenEventInfoProduct>(edm::InputTag(
"generator")))
1347 if(
outname.Contains(
"Run201")){
1348 trig_name.push_back(
"HLT_PFHT350_PFMET100_");
1349 trig_name.push_back(
"HLT_Mu15_IsoVVVL_PFHT350_PFMET50_v");
1350 trig_name.push_back(
"HLT_Mu15_IsoVVVL_PFHT600_v");
1351 trig_name.push_back(
"HLT_Mu15_IsoVVVL_BTagCSV0p72_PFHT400_v");
1352 trig_name.push_back(
"HLT_Mu15_IsoVVVL_PFHT350_v");
1353 trig_name.push_back(
"HLT_Ele15_IsoVVVL_PFHT350_PFMET50_v");
1354 trig_name.push_back(
"HLT_Ele15_IsoVVVL_PFHT600_v");
1355 trig_name.push_back(
"HLT_Ele15_IsoVVVL_BTagCSV0p72_PFHT400_v");
1356 trig_name.push_back(
"HLT_Ele15_IsoVVVL_PFHT350_v");
1357 trig_name.push_back(
"HLT_DoubleMu8_Mass8_PFHT300_v");
1358 trig_name.push_back(
"HLT_DoubleEle8_CaloIdM_TrackIdM_Mass8_PFHT300_v");
1361 trig_name.push_back(
"HLT_PFMET120_JetIdCleaned_Mu5_v");
1362 trig_name.push_back(
"HLT_PFMET170_JetIdCleaned_v");
1363 trig_name.push_back(
"HLT_DoubleIsoMu17_eta2p1_v");
1364 trig_name.push_back(
"HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_v");
1367 trig_name.push_back(
"HLT_IsoMu24_eta2p1_v");
1370 trig_name.push_back(
"HLT_Ele27_eta2p1_WPLoose_Gsf_v");
1371 trig_name.push_back(
"HLT_Ele23_WPLoose_Gsf_v");
1372 trig_name.push_back(
"HLT_Ele105_CaloIdVT_GsfTrkIdT_v");
1373 trig_name.push_back(
"HLT_DoubleEle33_CaloIdL_GsfTrkIdVL_v");
1374 trig_name.push_back(
"HLT_DoubleEle24_22_eta2p1_WPLoose_Gsf_v");
1375 trig_name.push_back(
"HLT_Photon90_CaloIdL_PFHT500_v");
1376 trig_name.push_back(
"HLT_PFMETNoMu90_JetIdCleaned_PFMHTNoMu90_IDTight_v");
1378 trig_name.push_back(
"HLT_PFHT350_PFMET120_NoiseCleaned_v");
1379 trig_name.push_back(
"HLT_Mu15_IsoVVVL_PFHT400_PFMET70_v");
1380 trig_name.push_back(
"HLT_Mu15_IsoVVVL_PFHT600_v");
1381 trig_name.push_back(
"HLT_Mu15_IsoVVVL_BTagCSV07_PFHT400_v");
1382 trig_name.push_back(
"HLT_Mu15_PFHT300_v");
1383 trig_name.push_back(
"HLT_Ele15_IsoVVVL_PFHT400_PFMET70_v");
1384 trig_name.push_back(
"HLT_Ele15_IsoVVVL_PFHT600_v");
1385 trig_name.push_back(
"HLT_Ele15_IsoVVVL_BTagtop8CSV07_PFHT400_v");
1386 trig_name.push_back(
"HLT_Ele15_PFHT300_v");
1387 trig_name.push_back(
"HLT_DoubleMu8_Mass8_PFHT300_v");
1388 trig_name.push_back(
"HLT_DoubleEle8_CaloIdM_TrackIdM_Mass8_PFHT300_v");
1391 trig_name.push_back(
"HLT_PFMET120_NoiseCleaned_Mu5_v");
1392 trig_name.push_back(
"HLT_PFMET170_NoiseCleaned_v");
1393 trig_name.push_back(
"HLT_DoubleIsoMu17_eta2p1_v");
1394 trig_name.push_back(
"HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_v");
1396 trig_name.push_back(
"HLT_IsoMu17_eta2p1_v");
1397 trig_name.push_back(
"HLT_IsoMu24_eta2p1_v");
1400 trig_name.push_back(
"HLT_Ele27_eta2p1_WP75_Gsf_v");
1401 trig_name.push_back(
"HLT_Ele22_eta2p1_WP75_Gsf_v");
1402 trig_name.push_back(
"HLT_Ele105_CaloIdVT_GsfTrkIdT_v");
1403 trig_name.push_back(
"HLT_DoubleEle33_CaloIdL_GsfTrkIdVL_v");
1404 trig_name.push_back(
"HLT_DoubleEle24_22_eta2p1_WP75_Gsf_v");
1405 trig_name.push_back(
"HLT_Photon90_CaloIdL_PFHT500_v");
1406 trig_name.push_back(
"HLT_PFMETNoMu90_JetIdCleaned_PFMHTNoMu90_IDTight_v");
1417 string commit_s =
execute(
"git rev-parse HEAD");
1418 while(!commit_s.empty() && commit_s.at(commit_s.length()-1) ==
'\n') commit_s.erase(commit_s.length()-1);
1419 TString commit = commit_s;
1421 TString root_version = gROOT->GetVersion();
1422 TString root_tutorial_dir = gROOT->GetTutorialsDir();
1423 TString user(getenv(
"ORIGIN_USER"));
1424 if (user==
"") user = getenv(
"USER");
1425 TString
cmssw(getenv(
"CMSSW_BASE"));
1429 struct tm * timeinfo = localtime(&curTime);
1430 strftime(time_c,100,
"%Y-%m-%d %H:%M:%S",timeinfo);
1431 TString date(time_c);
1432 int seconds(floor(difftime(curTime,
startTime)+0.5));
1434 vector<TString> sys_names;
1440 TTree treeglobal(
"treeglobal",
"treeglobal");
1442 treeglobal.Branch(
"nev_file", &
nevents);
1443 treeglobal.Branch(
"runtime_seconds", &seconds);
1444 treeglobal.Branch(
"git_commit", &commit);
1446 treeglobal.Branch(
"baby_type", &type);
1447 treeglobal.Branch(
"root_version", &root_version);
1448 treeglobal.Branch(
"root_tutorial_dir", &root_tutorial_dir);
1449 treeglobal.Branch(
"trig_names", &
trig_name);
1450 treeglobal.Branch(
"sys_names", &sys_names);
1451 treeglobal.Branch(
"xsec", &
xsec);
1452 treeglobal.Branch(
"user", &user);
1453 treeglobal.Branch(
"cmssw", &cmssw);
1455 treeglobal.Branch(
"json", &
jsonfile);
1456 treeglobal.Branch(
"date", &date);
1457 treeglobal.Branch(
"inputfiles", &
inputfiles);
1460 treeglobal.SetDirectory(
outfile);
1465 int minutes((seconds/60)%60), hours(seconds/3600);
1466 TString runtime(
"");
1467 if(hours<10) runtime +=
"0";
1468 runtime += hours; runtime +=
":";
1469 if(minutes<10) runtime +=
"0";
1470 runtime += minutes; runtime +=
":";
1471 if((seconds%60)<10) runtime +=
"0";
1472 runtime += seconds%60;
1473 float hertz(
nevents); hertz /= seconds;
1474 cout<<endl<<
"BABYMAKER: Written "<<
nevents<<
" events in "<<
outname<<
". It took "<<seconds<<
" seconds to run ("<<runtime<<
"), " 1476 cout<<
"BABYMAKER: *********** List of input files ***********"<<endl;
1495 cout<<endl<<
"BABYMAKER: Took "<<
roundNumber(difftime(curTime,
startTime),1)<<
" seconds for set up and run first event" 1503 float seconds(difftime(curTime,
startTime));
1504 cout<<
"BABYMAKER: Run "<<iEvent.id().run()<<
", Event "<< setw(8)<<iEvent.id().event()
1505 <<
", LumiSection "<< setw(5)<< iEvent.luminosityBlock()
1506 <<
". Ran "<<setw(7)<<
nevents<<
" events in "<<setw(7)<<seconds<<
" seconds -> " 1557 edm::ParameterSetDescription desc;
1559 descriptions.addDefault(desc);
virtual void analyze(const edm::Event &, const edm::EventSetup &) override
void writeFilters(const edm::TriggerNames &fnames, edm::Handle< edm::TriggerResults > filterBits, edm::Handle< reco::VertexCollection > vtx)
float const & elel_pt2() const
float fractionNegWeights(const TString &file)
float const & mumuv_pt1() const
float const & mumu_pt1() const
DEFINE_FWK_MODULE(bmaker_basic)
float const & elmu_w() const
double calculateRescalingFactor(unsigned int jetIdx)
std::vector< float > const & mus_pt() const
float const & elelv_w() const
float const & mumuv_m() const
float const & elel_phi() const
std::vector< bool > const & mus_inz() const
vCands writeElectrons(edm::Handle< pat::ElectronCollection > electrons, edm::Handle< pat::PackedCandidateCollection > pfcands, edm::Handle< reco::VertexCollection > vtx, vCands &veto_els, vCands &all_els, double rhoEventCentral)
void writeGenInfo(edm::Handle< LHEEventProduct > lhe_info)
std::vector< bool > const & els_inz() const
float crossSection(const TString &file)
std::vector< float > &(baby_base::* baby_vfloat)()
float const & elmu_pt2() const
vCands writePhotons(edm::Handle< pat::PhotonCollection > allphotons, edm::Handle< std::vector< pat::Electron > > &electrons, edm::Handle< reco::ConversionCollection > &conversions, edm::Handle< reco::BeamSpot > &beamspot, double rho)
float const & elel_m() const
void writeLeptons(vCands &leptons)
float const & elelv_pt() const
float const & mumu_eta() const
void setDiLepMass(vCands leptons, baby_float ll_m, baby_float ll_pt1, baby_float ll_pt2, baby_float ll_pt, baby_float ll_eta, baby_float ll_phi, baby_vfloat l_pt, baby_vbool l_inz, baby_float ll_w)
void writeHLTObjects(const edm::TriggerNames &names, edm::Handle< pat::TriggerObjectStandAloneCollection > triggerObjects, vCands &all_mus, vCands &all_els, vCands &photons)
void setElMuMass(vCands leptons1, vCands leptons2, baby_float ll_m, baby_float ll_pt1, baby_float ll_pt2, baby_float ll_pt, baby_float ll_eta, baby_float ll_phi, baby_float ll_w)
std::vector< const reco::Candidate * > vCands
void writeMET(edm::Handle< pat::METCollection > mets, edm::Handle< pat::METCollection > mets_nohf)
float const & elelv_pt2() const
std::vector< bool > const & mus_inzv() const
float const & mumuv_w() const
void writeVertices(edm::Handle< reco::VertexCollection > vtx, edm::Handle< std::vector< PileupSummaryInfo > > pu_info)
float const & mumuv_pt() const
float const & elmu_m() const
void reportTime(const edm::Event &iEvent)
float const & mumuv_phi() const
std::vector< bool > &(baby_base::* baby_vbool)()
void writeDiLep(vCands &sig_mus, vCands &sig_els, vCands &veto_mus, vCands &veto_els)
float getMT(float pt1, float phi1, float pt2, float phi2)
float const & elelv_pt1() const
bmaker_basic(const edm::ParameterSet &)
float const & mumu_m() const
float const & elmu_pt1() const
float const & elelv_m() const
weight_tools * weightTool
std::vector< TString > trig_name
float const & mumu_phi() const
void rebalancedMET(double &MET, double &METPhi)
float const & elel_pt() const
void writeMC(edm::Handle< reco::GenParticleCollection > genParticles, vCands &all_mus, vCands &all_els, vCands &photons)
bool greaterPt(const reco::Candidate *a, const reco::Candidate *b)
void writeWeights(const vCands &sig_leps, edm::Handle< GenEventInfoProduct > &gen_event_info, edm::Handle< LHEEventProduct > &lhe_info)
std::vector< float > const & els_pt() const
TString roundNumber(double num, int decimals, double denom=1.)
unsigned int nevents_sample
float const & elel_pt1() const
void writeJets(edm::Handle< pat::JetCollection > alljets, edm::Handle< edm::View< reco::GenJet > > genjets, vCands &sig_leps, vCands &veto_leps, vCands &photons, vCands &tks, std::vector< LVector > &jets, std::vector< std::vector< LVector > > &sysjets)
float const & mumuv_pt2() const
float const & mumu_pt2() const
photon_tools * photonTool
virtual void endJob() override
reco::Candidate::LorentzVector LVector
float const & elmu_eta() const
vCands writeMuons(edm::Handle< pat::MuonCollection > muons, edm::Handle< pat::PackedCandidateCollection > pfcands, edm::Handle< reco::VertexCollection > vtx, vCands &veto_mus, vCands &all_mus, double rhoEventCentral)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void writeFatJets(std::vector< LVector > &jets)
bool writeTriggers(const edm::TriggerNames &names, edm::Handle< edm::TriggerResults > triggerBits, edm::Handle< pat::PackedTriggerPrescales > triggerPrescales)
float const & mumuv_eta() const
float const & elelv_phi() const
std::string execute(const std::string &cmd)
std::vector< std::string > inputfiles
float const & elmu_phi() const
float const & mumu_pt() const
float const & elel_w() const
float getMT2(float pt1, float phi1, float pt2, float phi2, float met, float met_phi)
virtual void beginJob() override
float const & elel_eta() const
float &(baby_base::* baby_float)()
double calculateRebalancedMET(unsigned int jetIdx, double mu, double &METPhi)
virtual std::string Type() const
float const & elelv_eta() const
std::vector< bool > const & els_inzv() const
float const & elmu_pt() const
float const & mumu_w() const