22 namespace HLTOfflineDQMTopDiLepton {
26 static const double DRMIN = 0.05;
29 label_(label), eidPattern_(0), elecIso_(0), elecSelect_(0), muonIso_(0), muonSelect_(0), jetIDSelect_(0),
30 lowerEdge_(-1.), upperEdge_(-1.), elecMuLogged_(0), diMuonLogged_(0), diElecLogged_(0)
38 const auto& mets = sources.
getParameter<std::vector<edm::InputTag>>(
"mets");
39 for (
const auto&
met: mets) {
140 hists_[
"invMass_" ] = store_.
book1D(
"InvMass" ,
"M(lep1, lep2)" , 80, 0., 320.);
142 hists_[
"invMassWC_" ] = store_.
book1D(
"InvMassWC" ,
"M_{WC}(L1, L2)" , 80, 0., 320.);
144 hists_[
"decayChannel_"] = store_.
book1D(
"DecayChannel",
"Decay Channel" , 3, 0, 3);
148 hists_[
"elecMuMon_" ] = store_.
book1D(
"ElecMuMon" ,
"Mon(e/#mu paths)" , nElecMu, 0., nElecMu);
152 hists_[
"diMuonMon_" ] = store_.
book1D(
"DiMuonMon" ,
"Mon(#mu/#mu paths)" , nDiMuon, 0., nDiMuon);
156 hists_[
"diElecMon_" ] = store_.
book1D(
"DiElecMon" ,
"Mon(e/e paths)" , nDiElec, 0., nDiElec);
158 hists_[
"jetMult_" ] = store_.
book1D(
"JetMult" ,
"N_{30}(jet)" , 20, 0., 20.);
165 hists_[
"decayChannel_"]->setBinLabel( 1,
"#mu e" , 1);
166 hists_[
"decayChannel_"]->setBinLabel( 2,
"#mu #mu", 1);
167 hists_[
"decayChannel_"]->setBinLabel( 3,
"e e" , 1);
170 hists_[
"diMuonLogger_"] = store_.
book2D(
"DiMuonLogger",
"Logged DiMuon Events" , 8, 0., 8., 10, 0., 10.);
172 hists_[
"diElecLogger_"] = store_.
book2D(
"DiElecLogger",
"Logged DiElec Events" , 8, 0., 8., 10, 0., 10.);
174 hists_[
"elecMuLogger_"] = store_.
book2D(
"ElecMuLogger",
"Logged ElecMu Events" , 8, 0., 8., 10, 0., 10.);
182 hists_[
"leptDeltaREta_"] = store_.
book2D(
"DeltaRMinEtaLepton",
"#Delta R_{min}(leptons) wrt #eta", 30, -3, 3, 10, 0., 0.1);
184 hists_[
"leptResolution_"] = store_.
book1D(
"ResIsoLeptons",
"#Delta p_{T}/p_{T}(matched leptons)", 20, 0., 0.1);
186 hists_[
"matchingMon_"] = store_.
book1D(
"MatchingMon",
"Mon(matching)", 3, 0., 3.);
188 hists_[
"matchingMon_"]->setBinLabel( 1 ,
"1st lepton" );
189 hists_[
"matchingMon_"]->setBinLabel( 2 ,
"2nd lepton" );
190 hists_[
"matchingMon_"]->setBinLabel( 3 ,
"both " );
222 std::vector<const reco::Muon*> isoMuons;
227 <<
"Muon collection not found \n";
233 if(
muon->isGlobalMuon() ){
250 std::vector<const reco::GsfElectron*> isoElecs;
259 <<
"Electron collection not found \n";
265 int idx = elec-elecs->begin();
285 if(setup.
find( edm::eventsetup::EventSetupRecordKey::makeKey<JetCorrectionsRecord>() )){
291 <<
"------------------------------------------------------------------------------------- \n"
292 <<
" No JetCorrectionsRecord available from EventSetup: \n"
293 <<
" - Jets will not be corrected. \n"
294 <<
" - If you want to change this add the following lines to your cfg file: \n"
296 <<
" ## load jet corrections \n"
297 <<
" process.load(\"JetMETCorrections.Configuration.JetCorrectionServicesAllAlgos_cff\") \n"
298 <<
" process.prefer(\"ak5CaloL2L3\") \n"
300 <<
"------------------------------------------------------------------------------------- \n";
306 std::vector<reco::Jet> leadingJets;
310 <<
"Jet collection not found \n";
320 unsigned int idx=
jet-jets->begin();
321 if(
jetIDSelect_ && dynamic_cast<const reco::CaloJet*>(jets->refAt(idx).get())){
322 if(!(*
jetIDSelect_)((*jetID)[jets->refAt(idx)]))
continue;
325 if(dynamic_cast<const reco::CaloJet*>(&*
jet)){
329 else if(dynamic_cast<const reco::PFJet*>(&*
jet)){
339 for(std::vector<const reco::GsfElectron*>::const_iterator elec=isoElecs.begin(); elec!=isoElecs.end(); ++elec){
340 if(
reco::deltaR((*elec)->eta(), (*elec)->phi(),
jet->eta(),
jet->phi())<0.4){overlap=
true;
break;}
341 }
if(overlap){
continue;}
346 leadingJets.push_back(monitorJet);
349 leadingJets.push_back(monitorJet);
352 fill(
"jetMult_", mult);
368 if(met->begin()!=met->end()){
369 unsigned int idx=met_-
mets_.begin();
371 caloMET=*met->begin();
391 for (
unsigned int j=0;
j<triggerPaths.size();
j++) {
392 if (TString(name.c_str()).Contains(TString(triggerPaths[
j]), TString::kIgnoreCase) && TString(name.c_str()).Contains(TString(
"ele"), TString::kIgnoreCase) && TString(name.c_str()).Contains(TString(
"mu"), TString::kIgnoreCase)) elecmu =
true;
394 if (TString(name.c_str()).Contains(TString(triggerPaths[j]), TString::kIgnoreCase) && TString(name.c_str()).Contains(TString(
"ele"), TString::kIgnoreCase)) dielec =
true;
395 if (TString(name.c_str()).Contains(TString(triggerPaths[j]), TString::kIgnoreCase) && TString(name.c_str()).Contains(TString(
"mu"), TString::kIgnoreCase)) dimuon =
true;
401 fill(
"decayChannel_", 0.5);
402 if( isoElecs.size()>0 && isoMuons.size()>0 ) {
403 double mass = (isoElecs[0]->p4()+isoMuons[0]->p4()).
mass();
411 double runID =
static_cast<double>(
event.eventAuxiliary().run());
412 double luminosityBlockID =
static_cast<double>(
event.eventAuxiliary().luminosityBlock());
413 double eventID =
static_cast<double>(
event.eventAuxiliary().event());
419 if(leadingJets.size()>0)
fill(
"elecMuLogger_", 5.5,
elecMuLogged_+0.5, leadingJets[0].
pt());
420 if(leadingJets.size()>1)
fill(
"elecMuLogger_", 6.5,
elecMuLogged_+0.5, leadingJets[1].
pt());
430 fill(
"decayChannel_", 1.5);
431 if (isoMuons.size()>1) {
432 int charge = isoMuons[0]->charge()*isoMuons[1]->charge();
433 double mass = (isoMuons[0]->p4()+isoMuons[1]->p4()).
mass();
434 fill(charge<0 ?
"invMass_" :
"invMassWC_" , mass );
442 double runID =
static_cast<double>(
event.eventAuxiliary().run());
443 double luminosityBlockID =
static_cast<double>(
event.eventAuxiliary().luminosityBlock());
444 double eventID =
static_cast<double>(
event.eventAuxiliary().event());
450 if(leadingJets.size()>0)
fill(
"diMuonLogger_", 5.5,
diMuonLogged_+0.5, leadingJets[0].
pt());
451 if(leadingJets.size()>1)
fill(
"diMuonLogger_", 6.5,
diMuonLogged_+0.5, leadingJets[1].
pt());
461 fill(
"decayChannel_", 2.5);
462 if( dielec && isoElecs.size()>1 ){
463 int charge = isoElecs[0]->charge()*isoElecs[1]->charge();
464 double mass = (isoElecs[0]->p4()+isoElecs[1]->p4()).
mass();
465 fill(charge<0 ?
"invMass_" :
"invMassWC_" , mass );
473 double runID =
static_cast<double>(
event.eventAuxiliary().run());
474 double luminosityBlockID =
static_cast<double>(
event.eventAuxiliary().luminosityBlock());
475 double eventID =
static_cast<double>(
event.eventAuxiliary().event());
481 if(leadingJets.size()>0)
fill(
"diElecLogger_", 5.5,
diElecLogged_+0.5, leadingJets[0].
pt());
482 if(leadingJets.size()>1)
fill(
"diElecLogger_", 6.5,
diElecLogged_+0.5, leadingJets[1].
pt());
509 if(!rawTriggerEvent.
isValid()){
526 bool isInteresting =
false;
527 for (
unsigned int j=0;
j<triggerPaths.size();
j++) {
528 if (TString(name.c_str()).Contains(TString(triggerPaths[
j]), TString::kIgnoreCase)) isInteresting =
true;
530 if (!isInteresting)
continue;
532 const unsigned int triggerIndex = triggerNames.
triggerIndex(name);
534 const vector<string>& moduleLabels(hltConfig.
moduleLabels(triggerIndex));
535 const unsigned int moduleIndex(triggerTable->index(triggerIndex));
540 unsigned int kElec=0;
541 unsigned int kMuon=0;
542 for (
unsigned int k=0;
k<=moduleIndex; ++
k) {
543 const string& moduleLabel(moduleLabels[
k]);
544 const string moduleType(hltConfig.
moduleType(moduleLabel));
552 if (filterIndex<rawTriggerEvent->
size()) {
555 if (nElectrons>0) kElec =
k;
558 const unsigned int nMuons(
muonIds_.size());
559 if (nMuons>0) kMuon =
k;
565 if (filterIndex<aodTriggerEvent->
size()) {
569 if (nElectrons>0) kElec =
k;
572 const unsigned int nMuons(
muonIds_.size());
573 if (nMuons>0) kMuon =
k;
578 bool l1Matched =
false;
579 bool l2Matched =
false;
580 double l1DeltaRMin = 500.;
581 double l2DeltaRMin = 500.;
582 unsigned int l1IndMatched = 500;
583 unsigned int l2IndMatched = 500;
586 if (kElec > 0 && kMuon < 1 && isoElecs.size()>0) {
587 const string& moduleLabelElec(moduleLabels[kElec]);
588 const string moduleTypeElec(hltConfig.
moduleType(moduleLabelElec));
603 double deltar1 = 600.;
604 double deltar2 = 600.;
605 for (
unsigned int inde = 0; inde < isoElecs.size(); inde++) {
608 if (deltar1 < deltar2 && deltar1 < l1DeltaRMin) {
609 l1DeltaRMin = deltar1;
612 if (deltar2 < deltar1 && deltar2 < l2DeltaRMin) {
613 l2DeltaRMin = deltar2;
617 if (nElectrons > 0 && l1IndMatched < 500)
fill(
"leptDeltaREta_", isoElecs[l1IndMatched]->
eta(), l1DeltaRMin);
618 if (nElectrons > 1 && l2IndMatched < 500)
fill(
"leptDeltaREta_", isoElecs[l2IndMatched]->
eta(), l2DeltaRMin);
619 if (l1DeltaRMin <
DRMIN) {
621 fill(
"matchingMon_", 0.5 );
622 fill(
"leptResolution_", fabs(isoElecs[l1IndMatched]->
pt()-
electronRefs_[0]->
pt())/isoElecs[l1IndMatched]->
pt() );
624 if (l2DeltaRMin <
DRMIN) {
626 fill(
"matchingMon_", 1.5 );
627 fill(
"leptResolution_", fabs(isoElecs[l2IndMatched]->
pt()-
electronRefs_[1]->
pt())/isoElecs[l2IndMatched]->
pt() );
632 l1DeltaRMin = 500.; l2DeltaRMin = 500.;
double l3DeltaRMin = 500.;
633 l1IndMatched = 500; l2IndMatched = 500;
double l3IndMatched = 500;
634 if (kMuon > 0 && kElec < 1 && isoMuons.size()>0) {
635 const string& moduleLabelMuon(moduleLabels[kMuon]);
636 const string moduleTypeMuon(hltConfig.
moduleType(moduleLabelMuon));
652 const unsigned int nMuons(
muonIds_.size());
653 for (
unsigned int l=0;
l<nMuons;
l++) {
655 for (
unsigned int ll=0; ll<myMuonRefs.size(); ll++) {
658 if (isNew) myMuonRefs.push_back(
muonRefs_[
l]);
660 const unsigned int nMyMuons(myMuonRefs.size());
661 double deltar1 = 600.;
662 double deltar2 = 600.;
663 double deltar3 = 600.;
664 for (
unsigned int indm = 0; indm < isoMuons.size(); indm++) {
665 if (nMyMuons > 0) deltar1 =
deltaR(*myMuonRefs[0],*isoMuons[indm]);
666 if (nMyMuons > 1) deltar2 =
deltaR(*myMuonRefs[1],*isoMuons[indm]);
667 if (nMyMuons > 2) deltar3 =
deltaR(*myMuonRefs[2],*isoMuons[indm]);
668 if (nMyMuons > 0 && (nMyMuons<1 || deltar1 < deltar2) && (nMyMuons<2 || deltar1<deltar3) && deltar1 < l1DeltaRMin) {
669 l1DeltaRMin = deltar1;
672 if (nMyMuons > 1 && deltar2 < deltar1 && (nMyMuons<3 || deltar2<deltar3) && deltar2 < l2DeltaRMin) {
673 l2DeltaRMin = deltar2;
676 if (nMyMuons > 2 && deltar3 < deltar1 && deltar3 < deltar2 && deltar3 < l3DeltaRMin) {
677 l3DeltaRMin = deltar3;
681 if (nMyMuons > 0 && l1IndMatched < 500)
fill(
"leptDeltaREta_", isoMuons[l1IndMatched]->
eta(), l1DeltaRMin);
682 if (nMyMuons > 1 && l2IndMatched < 500)
fill(
"leptDeltaREta_", isoMuons[l2IndMatched]->
eta(), l2DeltaRMin);
683 if (nMyMuons > 2 && l3IndMatched < 500)
fill(
"leptDeltaREta_", isoMuons[l3IndMatched]->
eta(), l3DeltaRMin);
684 if (l1DeltaRMin <
DRMIN) {
686 fill(
"matchingMon_", 0.5 );
687 fill(
"leptResolution_", fabs(isoMuons[l1IndMatched]->
pt()-myMuonRefs[0]->
pt())/isoMuons[l1IndMatched]->
pt() );
688 if (l2DeltaRMin <
DRMIN) {
690 fill(
"matchingMon_", 1.5 );
691 fill(
"leptResolution_", fabs(isoMuons[l2IndMatched]->
pt()-myMuonRefs[1]->
pt())/isoMuons[l2IndMatched]->
pt() );
692 }
else if (l3DeltaRMin <
DRMIN) {
694 fill(
"matchingMon_", 1.5 );
695 fill(
"leptResolution_", fabs(isoMuons[l3IndMatched]->
pt()-myMuonRefs[2]->
pt())/isoMuons[l3IndMatched]->
pt() );
698 if (l2DeltaRMin <
DRMIN) {
700 fill(
"matchingMon_", 0.5 );
701 fill(
"leptResolution_", fabs(isoMuons[l2IndMatched]->
pt()-myMuonRefs[1]->
pt())/isoMuons[l2IndMatched]->
pt() );
702 if (l3DeltaRMin <
DRMIN) {
704 fill(
"matchingMon_", 1.5 );
705 fill(
"leptResolution_", fabs(isoMuons[l3IndMatched]->
pt()-myMuonRefs[2]->
pt())/isoMuons[l3IndMatched]->
pt() );
708 if (l3DeltaRMin <
DRMIN) {
710 fill(
"matchingMon_", 0.5 );
711 fill(
"leptResolution_", fabs(isoMuons[l3IndMatched]->
pt()-myMuonRefs[2]->
pt())/isoMuons[l3IndMatched]->
pt() );
718 l1DeltaRMin = 500.; l2DeltaRMin = 500.;
719 l1IndMatched = 500; l2IndMatched = 500;
720 if (kElec > 0 && kMuon > 0 && isoElecs.size()>0) {
721 const string& moduleLabelElec(moduleLabels[kElec]);
722 const string moduleTypeElec(hltConfig.
moduleType(moduleLabelElec));
737 double deltar = 600.;
738 for (
unsigned int inde = 0; inde < isoElecs.size(); inde++) {
740 if (deltar < l1DeltaRMin) {
741 l1DeltaRMin = deltar;
745 if (nElectrons > 0 && l1IndMatched < 500)
fill(
"leptDeltaREta_", isoElecs[l1IndMatched]->
eta(), l1DeltaRMin);
746 if (l1DeltaRMin <
DRMIN) {
748 fill(
"matchingMon_", 0.5 );
749 fill(
"leptResolution_", fabs(isoElecs[l1IndMatched]->
pt()-
electronRefs_[0]->
pt())/isoElecs[l1IndMatched]->
pt() );
752 if (kElec > 0 && kMuon > 0 && isoMuons.size()>0) {
753 const string& moduleLabelMuon(moduleLabels[kMuon]);
754 const string moduleTypeMuon(hltConfig.
moduleType(moduleLabelMuon));
768 const unsigned int nMuons(
muonIds_.size());
769 if (isoMuons.size()<1)
continue;
770 double deltar = 600.;
771 for (
unsigned int indm = 0; indm < isoMuons.size(); indm++) {
773 if (deltar < l2DeltaRMin) {
774 l2DeltaRMin = deltar;
778 if (nMuons > 0 && l2IndMatched < 500)
fill(
"leptDeltaREta_", isoMuons[l2IndMatched]->
eta(), l2DeltaRMin);
779 if (l2DeltaRMin <
DRMIN) {
781 fill(
"matchingMon_", 1.5 );
782 fill(
"leptResolution_", fabs(isoMuons[l2IndMatched]->
pt()-
muonRefs_[0]->
pt())/isoMuons[l2IndMatched]->
pt() );
785 if (l1Matched && l2Matched)
fill(
"matchingMon_", 2.5 );
814 std::vector<edm::ParameterSet>
sel=cfg.
getParameter<std::vector<edm::ParameterSet> >(
"selection");
815 for(
unsigned int i=0;
i<sel.size(); ++
i){
826 if (
type ==
"muons"){
829 if (
type ==
"elecs"){
835 if (
type ==
"jets/pf"){
838 if (
type ==
"jets/calo"){
856 <<
"Config extraction failure with process name "
874 if(vertex->empty() || !(*vertexSelect_)(vertex->front()))
return;
897 for(std::vector<std::string>::const_iterator selIt2=
selectionOrder_.begin(); selIt2<=selIt; ++selIt2){
901 if(type2==
"Hlt" || type2==
"empty" )
continue;
907 if ( !passSel )
continue;
919 sel.second.second->book(i);
TopDiLeptonHLTOfflineDQM(const edm::ParameterSet &cfg)
default constructor
T getParameter(std::string const &) const
bool hasRawTriggerSummary
const std::string moduleType(const std::string &module) const
C++ class name of module.
double lowerEdge_
mass window upper and lower edge
bool existsAs(std::string const ¶meterName, bool trackiness=true) const
checks if a parameter exists as a given type
Jets made from CaloTowers.
virtual void scaleEnergy(double fScale)
scale energy of the jet
StringCutObjectSelector< reco::Muon > * muonSelect_
extra selection on muons
edm::EDGetTokenT< reco::BeamSpot > beamspot_
beamspot
StringCutObjectSelector< reco::GsfElectron > * elecSelect_
extra selection on electrons
bool getByToken(EDGetToken token, Handle< PROD > &result) const
virtual double correction(const LorentzVector &fJet) const =0
get correction using Jet information only
Base class for all types of Jets.
std::string processName_
hlt objects
std::string selectionStep(const std::string &label)
void bookHistograms(DQMStore::IBooker &i, edm::Run const &, edm::EventSetup const &) override
int elecMuLogged_
number of logged interesting events
edm::EDGetTokenT< edm::View< reco::GsfElectron > > elecs_
input sources for monitoring
StringCutObjectSelector< reco::GsfElectron > * elecIso_
extra isolation criterion on electron
edm::EDGetTokenT< edm::View< reco::Jet > > jets_
Strings const & triggerNames() const
Jets made from PFObjects.
trigger::Vids electronIds_
edm::EDGetTokenT< reco::JetIDValueMap > jetIDLabel_
jetID as an extra selection type
std::vector< std::string > triggerPaths_
trigger paths
const eventsetup::EventSetupRecord * find(const eventsetup::EventSetupRecordKey &) const
std::vector< edm::EDGetTokenT< edm::View< reco::MET > > > mets_
considers a vector of METs
bool overlap(const reco::Muon &muon1, const reco::Muon &muon2, double pullX=1.0, double pullY=1.0, bool checkAdjacentChambers=false)
std::map< std::string, SelectionStepHLTBase * > selectmap_
std::vector< std::string > diMuonPaths_
trigger paths for di muon channel
std::string jetCorrector_
jetCorrector
StringCutObjectSelector< reco::BeamSpot > * beamspotSelect_
string cut selector
virtual void analyze(const edm::Event &event, const edm::EventSetup &setup)
unsigned int triggerIndex(std::string const &name) const
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
void loggerBinLabels(std::string hist)
set labels for event logging histograms
MonitorElement * book1D(Args &&...args)
std::vector< std::string > diElecPaths_
trigger paths for di electron channel
virtual void dqmBeginRun(const edm::Run &r, const edm::EventSetup &c)
do this during the event loop
auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
edm::EDGetTokenT< trigger::TriggerEventWithRefs > triggerSummaryTokenAOD
trigger::VRmuon muonRefs_
edm::EDGetTokenT< edm::TriggerResults > triggerTable_
trigger table
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
string key
FastSim: produces sample of signal events, overlayed with premixed minbias events.
std::map< std::string, MonitorElement * > hists_
histogram container
HLTConfigProvider hltConfig_
void fill(const edm::Event &event, const edm::EventSetup &setup, const HLTConfigProvider &hltConfig, const std::vector< std::string > triggerPaths)
fill monitor histograms with electronId and jetCorrections
void triggerBinLabels(std::string channel, const std::vector< std::string > &labels)
set configurable labels for trigger monitoring histograms
const std::string & processName() const
process name
std::map< std::string, std::pair< edm::ParameterSet, HLTOfflineDQMTopDiLepton::MonitorDiLepton * > > selection_
const std::vector< std::string > & moduleLabels(unsigned int trigger) const
label(s) of module(s) on a trigger path
double deltaR(double eta1, double eta2, double phi1, double phi2)
EventAuxiliary const & eventAuxiliary() const
void setCurrentFolder(const std::string &fullpath)
bool acceptHLT(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
MonitorElement * book2D(Args &&...args)
tuple idx
DEBUGGING if hasattr(process,"trackMonIterativeTracking2012"): print "trackMonIterativeTracking2012 D...
std::vector< std::string > selectionOrder_
static const double DRMIN
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d'tor
static const JetCorrector * getJetCorrector(const std::string &fName, const edm::EventSetup &fSetup)
retrieve corrector from the event setup. troughs exception if something is missing ...
trigger::VRelectron electronRefs_
void book(DQMStore::IBooker &store_)
book histograms in subdirectory directory
std::string objectType(const std::string &label)
std::vector< reco::RecoChargedCandidateRef > VRmuon
edm::EDGetTokenT< edm::ValueMap< float > > electronId_
electronId label
edm::EDGetTokenT< trigger::TriggerEventWithRefs > triggerSummaryTokenRAW
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
virtual double et() const final
transverse energy
bool isUninitialized() const
edm::EDGetTokenT< edm::View< reco::Muon > > muons_
edm::EDGetTokenT< std::vector< reco::Vertex > > vertex_
primary vertex
static std::string const triggerPaths
tuple size
Write out results.
std::vector< std::string > elecMuPaths_
edm::EDGetTokenT< edm::TriggerResults > triggerTable_
trigger table
std::string label_
instance label
StringCutObjectSelector< reco::Muon > * muonIso_
extra isolation criterion on muon
StringCutObjectSelector< reco::JetID > * jetIDSelect_
extra jetID selection on calo jets
StringCutObjectSelector< reco::Vertex > * vertexSelect_
string cut selector