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)" , 21, -0.5, 20.5);
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 " );
224 std::vector<const reco::Muon*> isoMuons;
229 <<
"Muon collection not found \n";
235 if(
muon->isGlobalMuon() ){
252 std::vector<const reco::GsfElectron*> isoElecs;
261 <<
"Electron collection not found \n";
267 int idx = elec-elecs->begin();
287 if(setup.
find( edm::eventsetup::EventSetupRecordKey::makeKey<JetCorrectionsRecord>() )){
293 <<
"------------------------------------------------------------------------------------- \n"
294 <<
" No JetCorrectionsRecord available from EventSetup: \n"
295 <<
" - Jets will not be corrected. \n"
296 <<
" - If you want to change this add the following lines to your cfg file: \n"
298 <<
" ## load jet corrections \n"
299 <<
" process.load(\"JetMETCorrections.Configuration.JetCorrectionServicesAllAlgos_cff\") \n"
300 <<
" process.prefer(\"ak5CaloL2L3\") \n"
302 <<
"------------------------------------------------------------------------------------- \n";
308 std::vector<reco::Jet> leadingJets;
312 <<
"Jet collection not found \n";
322 unsigned int idx=
jet-jets->begin();
323 if(
jetIDSelect_ && dynamic_cast<const reco::CaloJet*>(jets->refAt(idx).get())){
324 if(!(*
jetIDSelect_)((*jetID)[jets->refAt(idx)]))
continue;
327 if(dynamic_cast<const reco::CaloJet*>(&*
jet)){
331 else if(dynamic_cast<const reco::PFJet*>(&*
jet)){
341 for(std::vector<const reco::GsfElectron*>::const_iterator elec=isoElecs.begin(); elec!=isoElecs.end(); ++elec){
342 if(
reco::deltaR((*elec)->eta(), (*elec)->phi(),
jet->eta(),
jet->phi())<0.4){overlap=
true;
break;}
343 }
if(overlap){
continue;}
348 leadingJets.push_back(monitorJet);
351 leadingJets.push_back(monitorJet);
354 fill(
"jetMult_", mult);
371 if(met->begin()!=met->end()){
372 unsigned int idx=met_-
mets_.begin();
374 caloMET=*met->begin();
395 for (
unsigned int j=0;
j<triggerPaths.size();
j++) {
396 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;
398 if (TString(name.c_str()).Contains(TString(triggerPaths[j]), TString::kIgnoreCase) && TString(name.c_str()).Contains(TString(
"ele"), TString::kIgnoreCase)) dielec =
true;
399 if (TString(name.c_str()).Contains(TString(triggerPaths[j]), TString::kIgnoreCase) && TString(name.c_str()).Contains(TString(
"mu"), TString::kIgnoreCase)) dimuon =
true;
405 fill(
"decayChannel_", 0.5);
406 if( isoElecs.size()>0 && isoMuons.size()>0 ) {
407 double mass = (isoElecs[0]->p4()+isoMuons[0]->p4()).mass();
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 );
446 if(leadingJets.size()>0)
fill(
"diMuonLogger_", 5.5,
diMuonLogged_+0.5, leadingJets[0].
pt());
447 if(leadingJets.size()>1)
fill(
"diMuonLogger_", 6.5,
diMuonLogged_+0.5, leadingJets[1].
pt());
457 fill(
"decayChannel_", 2.5);
458 if( dielec && isoElecs.size()>1 ){
459 int charge = isoElecs[0]->charge()*isoElecs[1]->charge();
460 double mass = (isoElecs[0]->p4()+isoElecs[1]->p4()).mass();
461 fill(charge<0 ?
"invMass_" :
"invMassWC_" , mass );
473 if(leadingJets.size()>0)
fill(
"diElecLogger_", 5.5,
diElecLogged_+0.5, leadingJets[0].
pt());
474 if(leadingJets.size()>1)
fill(
"diElecLogger_", 6.5,
diElecLogged_+0.5, leadingJets[1].
pt());
495 bool isInteresting =
false;
496 for (
unsigned int j=0;
j<triggerPaths.size();
j++) {
497 if (TString(name.c_str()).Contains(TString(triggerPaths[
j]), TString::kIgnoreCase)) isInteresting =
true;
499 if (!isInteresting)
continue;
501 const unsigned int triggerIndex = triggerNames.
triggerIndex(name);
503 const vector<string>& moduleLabels(hltConfig.
moduleLabels(triggerIndex));
504 const unsigned int moduleIndex(triggerTable->index(triggerIndex));
509 unsigned int kElec=0;
510 unsigned int kMuon=0;
511 for (
unsigned int k=0;
k<=moduleIndex; ++
k) {
512 const string& moduleLabel(moduleLabels[
k]);
513 const string moduleType(hltConfig.
moduleType(moduleLabel));
516 if (filterIndex<triggerEventWithRefsHandle->
size()) {
519 if (nElectrons>0) kElec =
k;
522 const unsigned int nMuons(
muonIds_.size());
523 if (nMuons>0) kMuon =
k;
527 bool l1Matched =
false;
528 bool l2Matched =
false;
529 double l1DeltaRMin = 500.;
530 double l2DeltaRMin = 500.;
531 unsigned int l1IndMatched = 500;
532 unsigned int l2IndMatched = 500;
535 if (kElec > 0 && kMuon < 1 && isoElecs.size()>0) {
536 const string& moduleLabelElec(moduleLabels[kElec]);
537 const string moduleTypeElec(hltConfig.
moduleType(moduleLabelElec));
538 const unsigned int filterIndexElec(triggerEventWithRefsHandle->filterIndex(
edm::InputTag(moduleLabelElec,
"",
processName_)));
541 double deltar1 = 600.;
542 double deltar2 = 600.;
543 for (
unsigned int inde = 0; inde < isoElecs.size(); inde++) {
546 if (deltar1 < deltar2 && deltar1 < l1DeltaRMin) {
547 l1DeltaRMin = deltar1;
550 if (deltar2 < deltar1 && deltar2 < l2DeltaRMin) {
551 l2DeltaRMin = deltar2;
555 if (nElectrons > 0 && l1IndMatched < 500)
fill(
"leptDeltaREta_", isoElecs[l1IndMatched]->
eta(), l1DeltaRMin);
556 if (nElectrons > 1 && l2IndMatched < 500)
fill(
"leptDeltaREta_", isoElecs[l2IndMatched]->
eta(), l2DeltaRMin);
557 if (l1DeltaRMin <
DRMIN) {
559 fill(
"matchingMon_", 0.5 );
560 fill(
"leptResolution_", fabs(isoElecs[l1IndMatched]->
pt()-
electronRefs_[0]->
pt())/isoElecs[l1IndMatched]->
pt() );
562 if (l2DeltaRMin <
DRMIN) {
564 fill(
"matchingMon_", 1.5 );
565 fill(
"leptResolution_", fabs(isoElecs[l2IndMatched]->
pt()-
electronRefs_[1]->
pt())/isoElecs[l2IndMatched]->
pt() );
570 l1DeltaRMin = 500.; l2DeltaRMin = 500.;
double l3DeltaRMin = 500.;
571 l1IndMatched = 500; l2IndMatched = 500;
double l3IndMatched = 500;
572 if (kMuon > 0 && kElec < 1 && isoMuons.size()>0) {
573 const string& moduleLabelMuon(moduleLabels[kMuon]);
574 const string moduleTypeMuon(hltConfig.
moduleType(moduleLabelMuon));
575 const unsigned int filterIndexMuon(triggerEventWithRefsHandle->filterIndex(
edm::InputTag(moduleLabelMuon,
"",
processName_)));
578 const unsigned int nMuons(
muonIds_.size());
579 for (
unsigned int l=0;
l<nMuons;
l++) {
581 for (
unsigned int ll=0; ll<myMuonRefs.size(); ll++) {
584 if (isNew) myMuonRefs.push_back(
muonRefs_[
l]);
586 const unsigned int nMyMuons(myMuonRefs.size());
587 double deltar1 = 600.;
588 double deltar2 = 600.;
589 double deltar3 = 600.;
590 for (
unsigned int indm = 0; indm < isoMuons.size(); indm++) {
591 if (nMyMuons > 0) deltar1 =
deltaR(*myMuonRefs[0],*isoMuons[indm]);
592 if (nMyMuons > 1) deltar2 =
deltaR(*myMuonRefs[1],*isoMuons[indm]);
593 if (nMyMuons > 2) deltar3 =
deltaR(*myMuonRefs[2],*isoMuons[indm]);
594 if (nMyMuons > 0 && (nMyMuons<1 || deltar1 < deltar2) && (nMyMuons<2 || deltar1<deltar3) && deltar1 < l1DeltaRMin) {
595 l1DeltaRMin = deltar1;
598 if (nMyMuons > 1 && deltar2 < deltar1 && (nMyMuons<3 || deltar2<deltar3) && deltar2 < l2DeltaRMin) {
599 l2DeltaRMin = deltar2;
602 if (nMyMuons > 2 && deltar3 < deltar1 && deltar3 < deltar2 && deltar3 < l3DeltaRMin) {
603 l3DeltaRMin = deltar3;
607 if (nMyMuons > 0 && l1IndMatched < 500)
fill(
"leptDeltaREta_", isoMuons[l1IndMatched]->
eta(), l1DeltaRMin);
608 if (nMyMuons > 1 && l2IndMatched < 500)
fill(
"leptDeltaREta_", isoMuons[l2IndMatched]->
eta(), l2DeltaRMin);
609 if (nMyMuons > 2 && l3IndMatched < 500)
fill(
"leptDeltaREta_", isoMuons[l3IndMatched]->
eta(), l3DeltaRMin);
610 if (l1DeltaRMin <
DRMIN) {
612 fill(
"matchingMon_", 0.5 );
613 fill(
"leptResolution_", fabs(isoMuons[l1IndMatched]->
pt()-myMuonRefs[0]->
pt())/isoMuons[l1IndMatched]->
pt() );
614 if (l2DeltaRMin <
DRMIN) {
616 fill(
"matchingMon_", 1.5 );
617 fill(
"leptResolution_", fabs(isoMuons[l2IndMatched]->
pt()-myMuonRefs[1]->
pt())/isoMuons[l2IndMatched]->
pt() );
618 }
else if (l3DeltaRMin <
DRMIN) {
620 fill(
"matchingMon_", 1.5 );
621 fill(
"leptResolution_", fabs(isoMuons[l3IndMatched]->
pt()-myMuonRefs[2]->
pt())/isoMuons[l3IndMatched]->
pt() );
624 if (l2DeltaRMin <
DRMIN) {
626 fill(
"matchingMon_", 0.5 );
627 fill(
"leptResolution_", fabs(isoMuons[l2IndMatched]->
pt()-myMuonRefs[1]->
pt())/isoMuons[l2IndMatched]->
pt() );
628 if (l3DeltaRMin <
DRMIN) {
630 fill(
"matchingMon_", 1.5 );
631 fill(
"leptResolution_", fabs(isoMuons[l3IndMatched]->
pt()-myMuonRefs[2]->
pt())/isoMuons[l3IndMatched]->
pt() );
634 if (l3DeltaRMin <
DRMIN) {
636 fill(
"matchingMon_", 0.5 );
637 fill(
"leptResolution_", fabs(isoMuons[l3IndMatched]->
pt()-myMuonRefs[2]->
pt())/isoMuons[l3IndMatched]->
pt() );
644 l1DeltaRMin = 500.; l2DeltaRMin = 500.;
645 l1IndMatched = 500; l2IndMatched = 500;
646 if (kElec > 0 && kMuon > 0 && isoElecs.size()>0) {
647 const string& moduleLabelElec(moduleLabels[kElec]);
648 const string moduleTypeElec(hltConfig.
moduleType(moduleLabelElec));
649 const unsigned int filterIndexElec(triggerEventWithRefsHandle->filterIndex(
edm::InputTag(moduleLabelElec,
"",
processName_)));
652 double deltar = 600.;
653 for (
unsigned int inde = 0; inde < isoElecs.size(); inde++) {
655 if (deltar < l1DeltaRMin) {
656 l1DeltaRMin = deltar;
660 if (nElectrons > 0 && l1IndMatched < 500)
fill(
"leptDeltaREta_", isoElecs[l1IndMatched]->
eta(), l1DeltaRMin);
661 if (l1DeltaRMin <
DRMIN) {
663 fill(
"matchingMon_", 0.5 );
664 fill(
"leptResolution_", fabs(isoElecs[l1IndMatched]->
pt()-
electronRefs_[0]->
pt())/isoElecs[l1IndMatched]->
pt() );
667 if (kElec > 0 && kMuon > 0 && isoMuons.size()>0) {
668 const string& moduleLabelMuon(moduleLabels[kMuon]);
669 const string moduleTypeMuon(hltConfig.
moduleType(moduleLabelMuon));
670 const unsigned int filterIndexMuon(triggerEventWithRefsHandle->filterIndex(
edm::InputTag(moduleLabelMuon,
"",
processName_)));
672 const unsigned int nMuons(
muonIds_.size());
673 if (isoMuons.size()<1)
continue;
674 double deltar = 600.;
675 for (
unsigned int indm = 0; indm < isoMuons.size(); indm++) {
677 if (deltar < l2DeltaRMin) {
678 l2DeltaRMin = deltar;
682 if (nMuons > 0 && l2IndMatched < 500)
fill(
"leptDeltaREta_", isoMuons[l2IndMatched]->
eta(), l2DeltaRMin);
683 if (l2DeltaRMin <
DRMIN) {
685 fill(
"matchingMon_", 1.5 );
686 fill(
"leptResolution_", fabs(isoMuons[l2IndMatched]->
pt()-
muonRefs_[0]->
pt())/isoMuons[l2IndMatched]->
pt() );
689 if (l1Matched && l2Matched)
fill(
"matchingMon_", 2.5 );
717 std::vector<edm::ParameterSet>
sel=cfg.
getParameter<std::vector<edm::ParameterSet> >(
"selection");
718 for(
unsigned int i=0;
i<sel.size(); ++
i){
729 if (
type ==
"muons"){
732 if (
type ==
"elecs"){
738 if (
type ==
"jets/pf"){
741 if (
type ==
"jets/calo"){
759 <<
"Config extraction failure with process name "
777 if(vertex->empty() || !(*vertexSelect_)(vertex->front()))
return;
800 for(std::vector<std::string>::const_iterator selIt2=
selectionOrder_.begin(); selIt2<=selIt; ++selIt2){
804 if(type2==
"Hlt" || type2==
"empty" )
continue;
810 if ( !passSel )
continue;
822 sel.second.second->book(i);
TopDiLeptonHLTOfflineDQM(const edm::ParameterSet &cfg)
default constructor
T getParameter(std::string const &) const
virtual double et() const GCC11_FINAL
transverse energy
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
tuple met
____________________________________________________________________________||
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.
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
virtual void scaleEnergy(double fScale)
scale energy of the jet
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_
LuminosityBlockNumber_t luminosityBlock() const
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())
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
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.
EventNumber_t event() const
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