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) {
138 hists_[
"invMass_" ] = store_.
book1D(
"InvMass" ,
"M(lep1, lep2)" , 80, 0., 320.);
140 hists_[
"invMassWC_" ] = store_.
book1D(
"InvMassWC" ,
"M_{WC}(L1, L2)" , 80, 0., 320.);
142 hists_[
"decayChannel_"] = store_.
book1D(
"DecayChannel",
"Decay Channel" , 3, 0, 3);
146 hists_[
"elecMuMon_" ] = store_.
book1D(
"ElecMuMon" ,
"Mon(e/#mu paths)" , nElecMu, 0., nElecMu);
150 hists_[
"diMuonMon_" ] = store_.
book1D(
"DiMuonMon" ,
"Mon(#mu/#mu paths)" , nDiMuon, 0., nDiMuon);
154 hists_[
"diElecMon_" ] = store_.
book1D(
"DiElecMon" ,
"Mon(e/e paths)" , nDiElec, 0., nDiElec);
156 hists_[
"jetMult_" ] = store_.
book1D(
"JetMult" ,
"N_{30}(jet)" , 20, 0., 20.);
163 hists_[
"decayChannel_"]->setBinLabel( 1,
"#mu e" , 1);
164 hists_[
"decayChannel_"]->setBinLabel( 2,
"#mu #mu", 1);
165 hists_[
"decayChannel_"]->setBinLabel( 3,
"e e" , 1);
168 hists_[
"diMuonLogger_"] = store_.
book2D(
"DiMuonLogger",
"Logged DiMuon Events" , 8, 0., 8., 10, 0., 10.);
170 hists_[
"diElecLogger_"] = store_.
book2D(
"DiElecLogger",
"Logged DiElec Events" , 8, 0., 8., 10, 0., 10.);
172 hists_[
"elecMuLogger_"] = store_.
book2D(
"ElecMuLogger",
"Logged ElecMu Events" , 8, 0., 8., 10, 0., 10.);
180 hists_[
"leptDeltaREta_"] = store_.
book2D(
"DeltaRMinEtaLepton",
"#Delta R_{min}(leptons) wrt #eta", 30, -3, 3, 10, 0., 0.1);
182 hists_[
"leptResolution_"] = store_.
book1D(
"ResIsoLeptons",
"#Delta p_{T}/p_{T}(matched leptons)", 20, 0., 0.1);
184 hists_[
"matchingMon_"] = store_.
book1D(
"MatchingMon",
"Mon(matching)", 3, 0., 3.);
186 hists_[
"matchingMon_"]->setBinLabel( 1 ,
"1st lepton" );
187 hists_[
"matchingMon_"]->setBinLabel( 2 ,
"2nd lepton" );
188 hists_[
"matchingMon_"]->setBinLabel( 3 ,
"both " );
221 std::vector<const reco::Muon*> isoMuons;
226 <<
"Muon collection not found \n";
232 if(
muon->isGlobalMuon() ){
249 std::vector<const reco::GsfElectron*> isoElecs;
258 <<
"Electron collection not found \n";
264 int idx = elec-elecs->begin();
284 if(setup.
find( edm::eventsetup::EventSetupRecordKey::makeKey<JetCorrectionsRecord>() )){
290 <<
"------------------------------------------------------------------------------------- \n"
291 <<
" No JetCorrectionsRecord available from EventSetup: \n"
292 <<
" - Jets will not be corrected. \n"
293 <<
" - If you want to change this add the following lines to your cfg file: \n"
295 <<
" ## load jet corrections \n"
296 <<
" process.load(\"JetMETCorrections.Configuration.JetCorrectionServicesAllAlgos_cff\") \n"
297 <<
" process.prefer(\"ak5CaloL2L3\") \n"
299 <<
"------------------------------------------------------------------------------------- \n";
305 std::vector<reco::Jet> leadingJets;
309 <<
"Jet collection not found \n";
319 unsigned int idx=
jet-jets->begin();
320 if(
jetIDSelect_ && dynamic_cast<const reco::CaloJet*>(jets->refAt(idx).get())){
321 if(!(*
jetIDSelect_)((*jetID)[jets->refAt(idx)]))
continue;
324 if(dynamic_cast<const reco::CaloJet*>(&*
jet)){
328 else if(dynamic_cast<const reco::PFJet*>(&*
jet)){
338 for(std::vector<const reco::GsfElectron*>::const_iterator elec=isoElecs.begin(); elec!=isoElecs.end(); ++elec){
339 if(
reco::deltaR((*elec)->eta(), (*elec)->phi(),
jet->eta(),
jet->phi())<0.4){overlap=
true;
break;}
340 }
if(overlap){
continue;}
345 leadingJets.push_back(monitorJet);
348 leadingJets.push_back(monitorJet);
351 fill(
"jetMult_", mult);
368 if(met->begin()!=met->end()){
369 unsigned int idx=met_-
mets_.begin();
371 caloMET=*met->begin();
392 for (
unsigned int j=0;
j<triggerPaths.size();
j++) {
393 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;
395 if (TString(name.c_str()).Contains(TString(triggerPaths[j]), TString::kIgnoreCase) && TString(name.c_str()).Contains(TString(
"ele"), TString::kIgnoreCase)) dielec =
true;
396 if (TString(name.c_str()).Contains(TString(triggerPaths[j]), TString::kIgnoreCase) && TString(name.c_str()).Contains(TString(
"mu"), TString::kIgnoreCase)) dimuon =
true;
402 fill(
"decayChannel_", 0.5);
403 if( isoElecs.size()>0 && isoMuons.size()>0 ) {
404 double mass = (isoElecs[0]->p4()+isoMuons[0]->p4()).mass();
412 double runID =
static_cast<double>(
event.eventAuxiliary().run());
413 double luminosityBlockID =
static_cast<double>(
event.eventAuxiliary().luminosityBlock());
414 double eventID =
static_cast<double>(
event.eventAuxiliary().event());
420 if(leadingJets.size()>0)
fill(
"elecMuLogger_", 5.5,
elecMuLogged_+0.5, leadingJets[0].
pt());
421 if(leadingJets.size()>1)
fill(
"elecMuLogger_", 6.5,
elecMuLogged_+0.5, leadingJets[1].
pt());
431 fill(
"decayChannel_", 1.5);
432 if (isoMuons.size()>1) {
433 int charge = isoMuons[0]->charge()*isoMuons[1]->charge();
434 double mass = (isoMuons[0]->p4()+isoMuons[1]->p4()).mass();
435 fill(charge<0 ?
"invMass_" :
"invMassWC_" , mass );
443 double runID =
static_cast<double>(
event.eventAuxiliary().run());
444 double luminosityBlockID =
static_cast<double>(
event.eventAuxiliary().luminosityBlock());
445 double eventID =
static_cast<double>(
event.eventAuxiliary().event());
451 if(leadingJets.size()>0)
fill(
"diMuonLogger_", 5.5,
diMuonLogged_+0.5, leadingJets[0].
pt());
452 if(leadingJets.size()>1)
fill(
"diMuonLogger_", 6.5,
diMuonLogged_+0.5, leadingJets[1].
pt());
462 fill(
"decayChannel_", 2.5);
463 if( dielec && isoElecs.size()>1 ){
464 int charge = isoElecs[0]->charge()*isoElecs[1]->charge();
465 double mass = (isoElecs[0]->p4()+isoElecs[1]->p4()).mass();
466 fill(charge<0 ?
"invMass_" :
"invMassWC_" , mass );
474 double runID =
static_cast<double>(
event.eventAuxiliary().run());
475 double luminosityBlockID =
static_cast<double>(
event.eventAuxiliary().luminosityBlock());
476 double eventID =
static_cast<double>(
event.eventAuxiliary().event());
482 if(leadingJets.size()>0)
fill(
"diElecLogger_", 5.5,
diElecLogged_+0.5, leadingJets[0].
pt());
483 if(leadingJets.size()>1)
fill(
"diElecLogger_", 6.5,
diElecLogged_+0.5, leadingJets[1].
pt());
507 bool isInteresting =
false;
508 for (
unsigned int j=0;
j<triggerPaths.size();
j++) {
509 if (TString(name.c_str()).Contains(TString(triggerPaths[
j]), TString::kIgnoreCase)) isInteresting =
true;
511 if (!isInteresting)
continue;
513 const unsigned int triggerIndex = triggerNames.
triggerIndex(name);
515 const vector<string>& moduleLabels(hltConfig.
moduleLabels(triggerIndex));
516 const unsigned int moduleIndex(triggerTable->index(triggerIndex));
521 unsigned int kElec=0;
522 unsigned int kMuon=0;
523 for (
unsigned int k=0;
k<=moduleIndex; ++
k) {
524 const string& moduleLabel(moduleLabels[
k]);
525 const string moduleType(hltConfig.
moduleType(moduleLabel));
528 if (filterIndex<triggerEventWithRefsHandle->
size()) {
531 if (nElectrons>0) kElec =
k;
534 const unsigned int nMuons(
muonIds_.size());
535 if (nMuons>0) kMuon =
k;
539 bool l1Matched =
false;
540 bool l2Matched =
false;
541 double l1DeltaRMin = 500.;
542 double l2DeltaRMin = 500.;
543 unsigned int l1IndMatched = 500;
544 unsigned int l2IndMatched = 500;
547 if (kElec > 0 && kMuon < 1 && isoElecs.size()>0) {
548 const string& moduleLabelElec(moduleLabels[kElec]);
549 const string moduleTypeElec(hltConfig.
moduleType(moduleLabelElec));
550 const unsigned int filterIndexElec(triggerEventWithRefsHandle->filterIndex(
edm::InputTag(moduleLabelElec,
"",
processName_)));
553 double deltar1 = 600.;
554 double deltar2 = 600.;
555 for (
unsigned int inde = 0; inde < isoElecs.size(); inde++) {
558 if (deltar1 < deltar2 && deltar1 < l1DeltaRMin) {
559 l1DeltaRMin = deltar1;
562 if (deltar2 < deltar1 && deltar2 < l2DeltaRMin) {
563 l2DeltaRMin = deltar2;
567 if (nElectrons > 0 && l1IndMatched < 500)
fill(
"leptDeltaREta_", isoElecs[l1IndMatched]->
eta(), l1DeltaRMin);
568 if (nElectrons > 1 && l2IndMatched < 500)
fill(
"leptDeltaREta_", isoElecs[l2IndMatched]->
eta(), l2DeltaRMin);
569 if (l1DeltaRMin <
DRMIN) {
571 fill(
"matchingMon_", 0.5 );
572 fill(
"leptResolution_", fabs(isoElecs[l1IndMatched]->
pt()-
electronRefs_[0]->
pt())/isoElecs[l1IndMatched]->
pt() );
574 if (l2DeltaRMin <
DRMIN) {
576 fill(
"matchingMon_", 1.5 );
577 fill(
"leptResolution_", fabs(isoElecs[l2IndMatched]->
pt()-
electronRefs_[1]->
pt())/isoElecs[l2IndMatched]->
pt() );
582 l1DeltaRMin = 500.; l2DeltaRMin = 500.;
double l3DeltaRMin = 500.;
583 l1IndMatched = 500; l2IndMatched = 500;
double l3IndMatched = 500;
584 if (kMuon > 0 && kElec < 1 && isoMuons.size()>0) {
585 const string& moduleLabelMuon(moduleLabels[kMuon]);
586 const string moduleTypeMuon(hltConfig.
moduleType(moduleLabelMuon));
587 const unsigned int filterIndexMuon(triggerEventWithRefsHandle->filterIndex(
edm::InputTag(moduleLabelMuon,
"",
processName_)));
590 const unsigned int nMuons(
muonIds_.size());
591 for (
unsigned int l=0;
l<nMuons;
l++) {
593 for (
unsigned int ll=0; ll<myMuonRefs.size(); ll++) {
596 if (isNew) myMuonRefs.push_back(
muonRefs_[
l]);
598 const unsigned int nMyMuons(myMuonRefs.size());
599 double deltar1 = 600.;
600 double deltar2 = 600.;
601 double deltar3 = 600.;
602 for (
unsigned int indm = 0; indm < isoMuons.size(); indm++) {
603 if (nMyMuons > 0) deltar1 =
deltaR(*myMuonRefs[0],*isoMuons[indm]);
604 if (nMyMuons > 1) deltar2 =
deltaR(*myMuonRefs[1],*isoMuons[indm]);
605 if (nMyMuons > 2) deltar3 =
deltaR(*myMuonRefs[2],*isoMuons[indm]);
606 if (nMyMuons > 0 && (nMyMuons<1 || deltar1 < deltar2) && (nMyMuons<2 || deltar1<deltar3) && deltar1 < l1DeltaRMin) {
607 l1DeltaRMin = deltar1;
610 if (nMyMuons > 1 && deltar2 < deltar1 && (nMyMuons<3 || deltar2<deltar3) && deltar2 < l2DeltaRMin) {
611 l2DeltaRMin = deltar2;
614 if (nMyMuons > 2 && deltar3 < deltar1 && deltar3 < deltar2 && deltar3 < l3DeltaRMin) {
615 l3DeltaRMin = deltar3;
619 if (nMyMuons > 0 && l1IndMatched < 500)
fill(
"leptDeltaREta_", isoMuons[l1IndMatched]->
eta(), l1DeltaRMin);
620 if (nMyMuons > 1 && l2IndMatched < 500)
fill(
"leptDeltaREta_", isoMuons[l2IndMatched]->
eta(), l2DeltaRMin);
621 if (nMyMuons > 2 && l3IndMatched < 500)
fill(
"leptDeltaREta_", isoMuons[l3IndMatched]->
eta(), l3DeltaRMin);
622 if (l1DeltaRMin <
DRMIN) {
624 fill(
"matchingMon_", 0.5 );
625 fill(
"leptResolution_", fabs(isoMuons[l1IndMatched]->
pt()-myMuonRefs[0]->
pt())/isoMuons[l1IndMatched]->
pt() );
626 if (l2DeltaRMin <
DRMIN) {
628 fill(
"matchingMon_", 1.5 );
629 fill(
"leptResolution_", fabs(isoMuons[l2IndMatched]->
pt()-myMuonRefs[1]->
pt())/isoMuons[l2IndMatched]->
pt() );
630 }
else if (l3DeltaRMin <
DRMIN) {
632 fill(
"matchingMon_", 1.5 );
633 fill(
"leptResolution_", fabs(isoMuons[l3IndMatched]->
pt()-myMuonRefs[2]->
pt())/isoMuons[l3IndMatched]->
pt() );
636 if (l2DeltaRMin <
DRMIN) {
638 fill(
"matchingMon_", 0.5 );
639 fill(
"leptResolution_", fabs(isoMuons[l2IndMatched]->
pt()-myMuonRefs[1]->
pt())/isoMuons[l2IndMatched]->
pt() );
640 if (l3DeltaRMin <
DRMIN) {
642 fill(
"matchingMon_", 1.5 );
643 fill(
"leptResolution_", fabs(isoMuons[l3IndMatched]->
pt()-myMuonRefs[2]->
pt())/isoMuons[l3IndMatched]->
pt() );
646 if (l3DeltaRMin <
DRMIN) {
648 fill(
"matchingMon_", 0.5 );
649 fill(
"leptResolution_", fabs(isoMuons[l3IndMatched]->
pt()-myMuonRefs[2]->
pt())/isoMuons[l3IndMatched]->
pt() );
656 l1DeltaRMin = 500.; l2DeltaRMin = 500.;
657 l1IndMatched = 500; l2IndMatched = 500;
658 if (kElec > 0 && kMuon > 0 && isoElecs.size()>0) {
659 const string& moduleLabelElec(moduleLabels[kElec]);
660 const string moduleTypeElec(hltConfig.
moduleType(moduleLabelElec));
661 const unsigned int filterIndexElec(triggerEventWithRefsHandle->filterIndex(
edm::InputTag(moduleLabelElec,
"",
processName_)));
664 double deltar = 600.;
665 for (
unsigned int inde = 0; inde < isoElecs.size(); inde++) {
667 if (deltar < l1DeltaRMin) {
668 l1DeltaRMin = deltar;
672 if (nElectrons > 0 && l1IndMatched < 500)
fill(
"leptDeltaREta_", isoElecs[l1IndMatched]->
eta(), l1DeltaRMin);
673 if (l1DeltaRMin <
DRMIN) {
675 fill(
"matchingMon_", 0.5 );
676 fill(
"leptResolution_", fabs(isoElecs[l1IndMatched]->
pt()-
electronRefs_[0]->
pt())/isoElecs[l1IndMatched]->
pt() );
679 if (kElec > 0 && kMuon > 0 && isoMuons.size()>0) {
680 const string& moduleLabelMuon(moduleLabels[kMuon]);
681 const string moduleTypeMuon(hltConfig.
moduleType(moduleLabelMuon));
682 const unsigned int filterIndexMuon(triggerEventWithRefsHandle->filterIndex(
edm::InputTag(moduleLabelMuon,
"",
processName_)));
684 const unsigned int nMuons(
muonIds_.size());
685 if (isoMuons.size()<1)
continue;
686 double deltar = 600.;
687 for (
unsigned int indm = 0; indm < isoMuons.size(); indm++) {
689 if (deltar < l2DeltaRMin) {
690 l2DeltaRMin = deltar;
694 if (nMuons > 0 && l2IndMatched < 500)
fill(
"leptDeltaREta_", isoMuons[l2IndMatched]->
eta(), l2DeltaRMin);
695 if (l2DeltaRMin <
DRMIN) {
697 fill(
"matchingMon_", 1.5 );
698 fill(
"leptResolution_", fabs(isoMuons[l2IndMatched]->
pt()-
muonRefs_[0]->
pt())/isoMuons[l2IndMatched]->
pt() );
701 if (l1Matched && l2Matched)
fill(
"matchingMon_", 2.5 );
730 std::vector<edm::ParameterSet>
sel=cfg.
getParameter<std::vector<edm::ParameterSet> >(
"selection");
731 for(
unsigned int i=0;
i<sel.size(); ++
i){
742 if (
type ==
"muons"){
745 if (
type ==
"elecs"){
751 if (
type ==
"jets/pf"){
754 if (
type ==
"jets/calo"){
772 <<
"Config extraction failure with process name "
790 if(vertex->empty() || !(*vertexSelect_)(vertex->front()))
return;
813 for(std::vector<std::string>::const_iterator selIt2=
selectionOrder_.begin(); selIt2<=selIt; ++selIt2){
817 if(type2==
"Hlt" || type2==
"empty" )
continue;
823 if ( !passSel )
continue;
835 sel.second.second->book(i);
TopDiLeptonHLTOfflineDQM(const edm::ParameterSet &cfg)
default constructor
T getParameter(std::string const &) const
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
virtual double et() const
transverse energy
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
double deltaR(const T1 &t1, const T2 &t2)
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
trigger::VRmuon muonRefs_
edm::EDGetTokenT< trigger::TriggerEventWithRefs > triggerEventWithRefsTag_
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
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
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
bool isUninitialized() const
edm::EDGetTokenT< edm::View< reco::Muon > > muons_
edm::EDGetTokenT< std::vector< reco::Vertex > > vertex_
primary vertex
static std::string const triggerPaths
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
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