36 _analysisname(analysisname),
40 _hltProcessName(pset.getParameter<
std::
string>(
"hltProcessName")),
41 _histDirectory(pset.getParameter<
std::
string>(
"histDirectory")),
45 _parametersEta(pset.getParameter<
std::vector<double> >(
"parametersEta")),
46 _parametersPhi(pset.getParameter<
std::vector<double> >(
"parametersPhi")),
47 _parametersPu(pset.getParameter<
std::vector<double> >(
"parametersPu")),
49 _parametersTurnOn(pset.getParameter<
std::vector<double> >(
"parametersTurnOn")),
50 _trigResultsTag(iC.consumes<
edm::TriggerResults>(
edm::InputTag(
"TriggerResults",
"",_hltProcessName))),
61 _useNminOneCuts(
false)
67 if( anpset.
exists(
"parametersTurnOn") )
74 for(std::map<unsigned int,std::string>::const_iterator it =
_recLabels.begin();
84 for(std::map<unsigned int,std::string>::const_iterator it =
_recLabels.begin();
96 if(anpset.
existsAs<
double>( objStr+
"_cutMinPt" ,
false) )
100 if(anpset.
existsAs<
double>( objStr+
"_cutMaxEta" ,
false) )
108 std::vector<double> default_parametersHt;
109 default_parametersHt.push_back(100);
110 default_parametersHt.push_back(0);
111 default_parametersHt.push_back(1000);
117 if( _HtJetPtMin>0 && _HtJetEtaMax>0 )
_bookHtPlots =
true;
120 if( pset.
exists(
"pileUpInfoLabel") )
125 if( anpset.
existsAs<std::vector<double>>(
"NminOneCuts" ,
false) )
129 edm::LogError(
"HiggsValidation") <<
"In HLTHiggsSubAnalysis::HLTHiggsSubAnalysis, " 130 <<
"Incoherence found in the python configuration file!!\nThe SubAnalysis '" 132 <<
_NminOneCuts.size() <<
", while it needs to be at least of size " 138 edm::LogError(
"HiggsValidation") <<
"In HLTHiggsSubAnalysis::HLTHiggsSubAnalysis, " 139 <<
"Incoherence found in the python configuration file!!\nThe SubAnalysis '" 140 <<
_analysisname <<
"' has a vector NminOneCuts with a dEtaqq of mqq cut on the least b-tagged jets of the first 4 jets while only requiring " 141 << _minCandidates <<
" jets.";
146 edm::LogError(
"HiggsValidation") <<
"In HLTHiggsSubAnalysis::HLTHiggsSubAnalysis, " 147 <<
"Incoherence found in the python configuration file!!\nThe SubAnalysis '" 148 <<
_analysisname <<
"' has a vector NminOneCuts with a CSV3 cut while only requiring " 149 << _minCandidates <<
" jets.";
154 edm::LogError(
"HiggsValidation") <<
"In HLTHiggsSubAnalysis::HLTHiggsSubAnalysis, " 155 <<
"Incoherence found in the python configuration file!!\nThe SubAnalysis '" 156 <<
_analysisname <<
"' has a vector NminOneCuts with a dPhibb or CSV2 cut using the second most b-tagged jet while only requiring " 157 << _minCandidates <<
" jet.";
213 edm::LogError(
"HiggsValidations") <<
"HLTHiggsSubAnalysis::beginRun: " 214 <<
"Initializtion of HLTConfigProvider failed!!";
228 if(TString(thetriggername).Contains(pattern))
236 LogDebug(
"HiggsValidations") <<
"HLTHiggsSubAnalysis::beginRun, In " 243 <<
"\nHLT Trigger Paths found >>>";
246 for(std::set<std::string>::iterator iPath =
_hltPaths.begin();
253 if(path.rfind(
"_v") < path.length())
255 shortpath = path.substr(0, path.rfind(
"_v"));
260 const std::vector<unsigned int> objsNeedHLT = this->
getObjectsType(shortpath);
263 std::vector<unsigned int> userInstantiate;
264 for(std::map<unsigned int,std::string>::iterator it =
_recLabels.begin() ;
267 userInstantiate.push_back(it->first);
269 for(std::vector<unsigned int>::const_iterator it = objsNeedHLT.begin(); it != objsNeedHLT.end();
272 if(
std::find(userInstantiate.begin(),userInstantiate.end(), *it) ==
273 userInstantiate.end() )
275 edm::LogError(
"HiggsValidation") <<
"In HLTHiggsSubAnalysis::beginRun, " 276 <<
"Incoherence found in the python configuration file!!\nThe SubAnalysis '" 277 <<
_analysisname <<
"' has been asked to evaluate the trigger path '" 278 << shortpath <<
"' (found it in 'hltPathsToCheck') BUT this path" 280 <<
"' which has not been instantiate ('recVariableLabels'" 285 LogTrace(
"HiggsValidation") <<
" --- " << shortpath;
299 std::vector<std::string> sources(2);
303 for(std::map<unsigned int,std::string>::const_iterator it =
_recLabels.begin();
309 for(
size_t i = 0;
i < sources.size();
i++)
313 if( source ==
"gen" )
continue;
321 else bookHist(source, objStr,
"CSV1", ibooker);
328 bookHist(source, objStr,
"Eta", ibooker);
329 bookHist(source, objStr,
"Phi", ibooker);
334 bookHist(source, objStr, maxPt.Data(), ibooker);
340 for(std::vector<HLTHiggsPlotter>::iterator it =
_analyzers.begin();
346 for(
size_t i = 0;
i < sources.size();
i++)
348 std::string nameGlobalEfficiency =
"SummaryPaths_"+_analysisname+
"_"+sources[
i];
352 std::string nameGlobalEfficiencyPassing= nameGlobalEfficiency+
"_passingHLT";
355 std::string titlePu =
"nb of interations in the event";
356 std::string nameVtxPlot =
"trueVtxDist_"+_analysisname+
"_"+sources[
i];
358 int nBinsPu = (
int)paramsPu[0];
359 double minPu = paramsPu[1];
360 double maxPu = paramsPu[2];
362 std::string titleHt =
"sum of jet pT in the event";
363 std::string nameHtPlot =
"HtDist_"+_analysisname+
"_"+sources[
i];
365 int nBinsHt = (
int)paramsHt[0];
366 double minHt = paramsHt[1];
367 double maxHt = paramsHt[2];
375 if(path.rfind(
"_v") < path.length())
377 shortpath = path.substr(0, path.rfind(
"_v"));
379 std::string titlePassingPu =
"nb of interations in the event passing path " + shortpath;
382 std::string titlePassingHt =
"sum of jet pT in the event passing path " + shortpath;
383 if(
_bookHtPlots )
_elements[nameHtPlot+
"_"+shortpath] = ibooker.
book1D(nameHtPlot+
"_"+shortpath, titlePassingHt.c_str(), nBinsHt, minHt, maxHt);
386 _elements[nameGlobalEfficiency]->setBinLabel(j+1,shortpath);
387 _elements[nameGlobalEfficiencyPassing]->setBinLabel(j+1,shortpath);
400 std::map<unsigned int,std::string> u2str;
404 std::map<unsigned int,double> Htmap;
412 std::vector<PileupSummaryInfo>::const_iterator PVI;
413 for(PVI = puInfo->begin(); PVI != puInfo->end(); ++PVI) {
414 if(PVI->getBunchCrossing()==0){
415 nbMCvtx = PVI->getPU_NumInteractions();
426 std::vector<MatchStruct> *
matches =
new std::vector<MatchStruct>;
428 for(std::map<unsigned int,std::string>::iterator it =
_recLabels.begin();
443 for(
size_t i = 0;
i < cols->
genJets->size(); ++
i)
483 std::map<unsigned int,std::vector<MatchStruct> > sourceMatchMap;
492 std::map<std::string,bool> nMinOne;
493 std::map<std::string,bool> jetCutResult;
500 bool passAllCuts =
false;
513 this->
passJetCuts(matches, jetCutResult, dEtaqq, mqq, dPhibb, CSV1, CSV2, CSV3);
517 for(std::map<unsigned int,std::string>::iterator it =
_recLabels.begin();
535 for(std::map<std::string,bool>::const_iterator it = jetCutResult.begin(); it != jetCutResult.end(); ++it)
537 nMinOne[it->first] =
true;
538 for(std::map<std::string,bool>::const_iterator it2 = jetCutResult.begin(); it2 != jetCutResult.end(); ++it2)
541 if( it->first==
"CSV1" && it2->first==
"CSV3")
continue;
542 if( it->first==
"CSV1" && it2->first==
"CSV2")
continue;
545 if( it->first==
"CSV2" && it2->first==
"CSV3")
continue;
547 if( it->first != it2->first && !(it2->second) ) {
548 nMinOne[it->first] =
false;
554 for(std::map<std::string,bool>::const_iterator it = nMinOne.begin(); it != nMinOne.end(); ++it)
556 if( temp && it->second ) {
560 if( it->second ) temp =
true;
576 for( reco::PFJetCollection::const_iterator iJet = recoJet->begin(); iJet != recoJet->end(); iJet++ ){
577 double pt = iJet->pt();
578 double eta = iJet->eta();
588 for( reco::GenJetCollection::const_iterator iJet = genJet->begin(); iJet != genJet->end(); iJet++ ){
589 double pt = iJet->pt();
590 double eta = iJet->eta();
600 for(
std::map<
unsigned int,std::vector<MatchStruct> >::iterator it = sourceMatchMap.begin();
601 it != sourceMatchMap.end(); ++it)
611 std::map<unsigned int,int> * countobjects =
new std::map<unsigned int,int>;
613 for(std::map<unsigned int,std::string>::iterator co =
_recLabels.begin();
617 countobjects->insert(std::pair<unsigned int,int>(co->first,0));
620 const int totalobjectssize2 =
NptPlots*countobjects->size();
621 for(
size_t j = 0; j < it->second.size(); ++j)
623 const unsigned int objType = it->second[j].objType;
626 float pt = (it->second)[j].pt;
627 float eta = (it->second)[j].eta;
628 float phi = (it->second)[j].phi;
639 maxPt += (*countobjects)[
objType]+1;
641 if( nMinOne[maxPt.Data()] )
643 this->
fillHist(u2str[it->first],objTypeStr,maxPt.Data(),
pt);
647 this->
fillHist(u2str[it->first],objTypeStr,maxPt.Data(),
pt);
664 this->
fillHist(u2str[it->first],objTypeStr,
"Eta",eta);
665 this->
fillHist(u2str[it->first],objTypeStr,
"Phi",phi);
669 this->
fillHist(u2str[it->first],objTypeStr,
"Eta",eta);
670 this->
fillHist(u2str[it->first],objTypeStr,
"Phi",phi);
674 if( counttotal == totalobjectssize2 )
716 for(std::vector<HLTHiggsPlotter>::iterator an =
_analyzers.begin();
720 const std::string fillShortPath = an->gethltpath();
724 an->analyze(ispassTrigger,source,it->second, nMinOne, dEtaqq, mqq, dPhibb, CSV1, CSV2, CSV3, passAllCuts);
730 int refOfThePath = -1;
735 _elements[SummaryName]->Fill(refOfThePath);
737 _elements[SummaryName+
"_passingHLT"]->Fill(refOfThePath,1);
742 _elements[SummaryName+
"_passingHLT"]->Fill(refOfThePath,0);
752 static const unsigned int objSize = 7;
753 static const unsigned int objtriggernames[] = {
764 std::set<unsigned int> objsType;
766 for(
unsigned int i = 0;
i < objSize; ++
i)
770 if( ! TString(hltPath).Contains(objTypeStr) )
774 (objtriggernames[i] == EVTColContainer::PFMET && TString(hltPath).Contains(
"MHT")) ||
777 objsType.insert(objtriggernames[i]);
781 if( ( objtriggernames[i] ==
EVTColContainer::CALOMET && (TString(hltPath).Contains(
"PFMET") || TString(hltPath).Contains(
"MHT") ) ) ||
782 (objtriggernames[i] ==
EVTColContainer::PFJET && TString(hltPath).Contains(
"JetIdCleaned") && ! TString(hltPath).Contains(TRegexp(
"Jet[^I]"))) ||
788 objsType.insert(objtriggernames[i]);
791 return std::vector<unsigned int>(objsType.begin(),objsType.end());
798 if( anpset.
exists(
"recMuonLabel") )
804 if( anpset.
exists(
"recElecLabel") )
810 if( anpset.
exists(
"recPhotonLabel") )
816 if( anpset.
exists(
"recCaloMETLabel") )
822 if( anpset.
exists(
"recPFMETLabel") )
828 if( anpset.
exists(
"recPFTauLabel") )
834 if( anpset.
exists(
"recJetLabel") )
838 if( anpset.
exists(
"jetTagLabel") )
850 edm::LogError(
"HiggsValidation") <<
"HLTHiggsSubAnalysis::bookobjects, " 851 <<
"Not included any object (recMuonLabel, recElecLabel, ...) " 883 for(std::map<unsigned int,std::string>::iterator it =
_recLabels.begin();
937 edm::LogError(
"HiggsValidation") <<
"HLTHiggsSubAnalysis::initobjects " 938 <<
" NOT IMPLEMENTED (yet) ERROR: '" << it->second <<
"'";
948 sourceUpper[0] = std::toupper(sourceUpper[0]);
952 if(variable.find(
"MaxPt") != std::string::npos)
955 if (variable ==
"MaxPt1") desc =
"Leading";
956 else if (variable ==
"MaxPt2") desc =
"Next-to-Leading";
957 else desc = variable.substr(5,6) +
"th Leading";
960 size_t nBins = nBinsStandard;
961 float * edges =
new float[nBinsStandard + 1];
962 for(
size_t i = 0;
i < nBinsStandard + 1;
i++)
968 if( objType == jetObj ) {
969 const size_t nBinsJets = 25;
972 edges =
new float[nBinsJets+1];
973 for(
size_t i = 0;
i < nBinsJets + 1;
i++)
979 const size_t nBinsJets = 30;
982 edges =
new float[nBinsJets+1];
983 for(
size_t i = 0;
i < nBinsJets + 1;
i++)
988 h =
new TH1F(name.c_str(), title.c_str(), nBins, edges);
991 else if( variable ==
"dEtaqq" ){
996 h =
new TH1F(name.c_str(), title.c_str(), nBins,
min,
max);
998 else if ( variable ==
"mqq" ){
1003 h =
new TH1F(name.c_str(), title.c_str(), nBins,
min,
max);
1005 else if ( variable ==
"dPhibb" ){
1009 double max = 3.1416;
1010 h =
new TH1F(name.c_str(), title.c_str(), nBins,
min,
max);
1012 else if ( variable ==
"CSV1" ){
1017 h =
new TH1F(name.c_str(), title.c_str(), nBins,
min,
max);
1019 else if ( variable ==
"CSV2" ){
1024 h =
new TH1F(name.c_str(), title.c_str(), nBins,
min,
max);
1026 else if ( variable ==
"CSV3" ){
1031 h =
new TH1F(name.c_str(), title.c_str(), nBins,
min,
max);
1033 else if ( variable ==
"maxCSV" ){
1038 h =
new TH1F(name.c_str(), title.c_str(), nBins,
min,
max);
1042 std::string symbol = (variable ==
"Eta") ?
"#eta" :
"#phi";
1046 int nBins = (
int)params[0];
1047 double min = params[1];
1048 double max = params[2];
1049 h =
new TH1F(name.c_str(), title.c_str(), nBins,
min,
max);
1060 sourceUpper[0] = toupper(sourceUpper[0]);
1110 std::vector<MatchStruct> *
matches)
1121 for(reco::PFJetCollection::const_iterator it = PFJetHandle->begin();
1122 it != PFJetHandle->end(); ++it)
1131 float bTag = (*(JetTagHandle.
product()))[jetBaseRef];
1151 if( (*matches)[
i].pt >
_NminOneCuts[9+
i] ) jetCutResult[maxPt.Data()] =
true;
1152 else jetCutResult[maxPt.Data()] =
false;
1156 if( matches->size() < NbTag ) NbTag = matches->size();
1161 jetCutResult[
"dEtaqq"] =
false;
1162 if (matches->size() > 2){
1163 dEtaqq = fabs((*matches)[2].
eta - (*matches)[3].
eta);
1164 if( dEtaqq >
_NminOneCuts[0] ) jetCutResult[
"dEtaqq"] =
true;
1169 jetCutResult[
"mqq"] =
false;
1170 if (matches->size() > 2){
1171 mqq = ((*matches)[2].lorentzVector + (*matches)[3].lorentzVector).M();
1172 if( mqq >
_NminOneCuts[1] ) jetCutResult[
"mqq"] =
true;
1177 jetCutResult[
"dPhibb"] =
false;
1178 if (matches->size() > 1){
1179 dPhibb = fmod(fabs((*matches)[0].
phi - (*matches)[1].
phi),3.1416);
1180 if( dPhibb <
_NminOneCuts[2] ) jetCutResult[
"dPhibb"] =
true;
1186 jetCutResult[nameCSV2plot] =
false;
1187 if (matches->size() > 1){
1188 CSV2 = (*matches)[1].bTag;
1189 if( CSV2 >
_NminOneCuts[4] ) jetCutResult[nameCSV2plot] =
true;
1195 jetCutResult[nameCSV3plot] =
false;
1196 if (matches->size() > 2){
1197 CSV3 = (*matches)[2].bTag;
1198 if( CSV3 >
_NminOneCuts[5] ) jetCutResult[nameCSV3plot] =
true;
1204 CSV1 = (*matches)[0].bTag;
1208 if( CSV1 >
_NminOneCuts[3] ) jetCutResult[nameCSVplot] =
true;
1209 else jetCutResult[nameCSVplot] =
false;
1214 CSV1 = (*matches)[0].bTag;
1216 if (
_NminOneCuts[6] > matches->size()) Njets = matches->size();
1217 for(
unsigned int i=1;
i < (
unsigned int) Njets ; ++
i) {
1218 if( (*matches)[
i].bTag > CSV1 && (*matches)[
i].pt >
_NminOneCuts[7] ) CSV1 = (*matches)[
i].bTag;
1226 jetCutResult[
"PFMET"] =
false;
1227 for(std::vector<MatchStruct>::const_iterator it = matches.begin(); it != matches.end(); ++it)
1230 if( it->pt >
_NminOneCuts[8] ) jetCutResult[
"PFMET"] =
true;
1238 std::vector<MatchStruct> *
matches)
1242 for(
size_t i = 0;
i < cols->
muons->size();
i++)
1262 for(
size_t i = 0;
i < cols->
photons->size();
i++)
1272 for(
size_t i = 0;
i < cols->
caloMETs->size();
i++)
1282 for(
size_t i = 0;
i < cols->
pfMETs->size();
i++)
1292 for(
size_t i = 0;
i < cols->
pfTaus->size();
i++)
const std::vector< reco::Muon > * muons
std::vector< double > _parametersTurnOn
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
std::vector< GenParticle > GenParticleCollection
collection of GenParticles
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
void InitSelector(const unsigned int &objtype)
std::map< std::string, std::string > _shortpath2long
Relation between the short version of a path.
StringCutObjectSelector< reco::CaloMET > * _recCaloMETSelector
std::vector< PFTau > PFTauCollection
collection of PFTau objects
edm::EDGetTokenT< reco::PFMETCollection > _recLabelsPFMET
edm::EDGetTokenT< reco::PFJetCollection > _recLabelsPFJet
bool existsAs(std::string const ¶meterName, bool trackiness=true) const
checks if a parameter exists as a given type
edm::EDGetTokenT< reco::GenParticleCollection > _genParticleLabel
void passJetCuts(std::vector< MatchStruct > *matches, std::map< std::string, bool > &jetCutResult, float &dEtaqq, float &mqq, float &dPhibb, float &CSV1, float &CSV2, float &CSV3)
std::map< unsigned int, std::string > _genCut
gen/rec objects cuts
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
void initobjects(const edm::Event &iEvent, EVTColContainer *col)
edm::EDGetTokenT< reco::PFJetCollection > _recoHtJetLabel
const std::vector< reco::CaloMET > * caloMETs
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::EDGetTokenT< reco::PFTauCollection > _recLabelsPFTau
unsigned int _minCandidates
The minimum number of reco/gen candidates needed by the analysis.
std::map< std::string, MonitorElement * > _elements
std::vector< double > _NminOneCuts
bool accept() const
Has at least one path accepted the event?
std::vector< GenJet > GenJetCollection
collection of GenJet objects
const std::vector< std::string > & triggerNames() const
names of trigger paths
bool exists(std::string const ¶meterName) const
checks if a parameter exists
std::set< std::string > _hltPaths
the hlt paths found in the hltConfig
const reco::GenParticleCollection * genParticles
container with all the objects needed
StringCutObjectSelector< reco::PFMET > * _recPFMETSelector
edm::EDGetTokenT< reco::GenJetCollection > _genJetLabel
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
HLTConfigProvider _hltConfig
edm::EDGetTokenT< reco::JetTagCollection > _recTagPFJet
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
const std::vector< reco::PFTau > * pfTaus
std::vector< Muon > MuonCollection
collection of Muon objects
void bookHistograms(DQMStore::IBooker &)
std::vector< double > _parametersPu
edm::EDGetTokenT< reco::PhotonCollection > _recLabelsPhoton
edm::EDGetTokenT< reco::CaloMETCollection > _recLabelsCaloMET
StringCutObjectSelector< reco::Track > * _recTrackSelector
std::map< unsigned int, std::string > _recCut
void passOtherCuts(const std::vector< MatchStruct > &matches, std::map< std::string, bool > &jetCutResult)
std::map< unsigned int, StringCutObjectSelector< reco::GenParticle > * > _genSelectorMap
void set(const reco::MuonCollection *v)
Setter: multiple overloaded function.
const reco::GenJetCollection * genJets
unsigned int triggerIndex(std::string const &name) const
std::string _hltProcessName
StringCutObjectSelector< reco::GenJet > * _genJetSelector
void initAndInsertJets(const edm::Event &iEvent, EVTColContainer *cols, std::vector< MatchStruct > *matches)
void addParameter(std::string const &name, T const &value)
edm::EDGetTokenT< std::vector< PileupSummaryInfo > > _puSummaryInfo
std::vector< HLTHiggsPlotter > _analyzers
MonitorElement * book1D(Args &&...args)
std::map< unsigned int, std::string > _recLabels
const std::vector< reco::Photon > * photons
void analyze(const edm::Event &iEvent, const edm::EventSetup &iEventSetup, EVTColContainer *cols)
std::map< unsigned int, double > _cutMinPt
StringCutObjectSelector< reco::PFTau > * _recPFTauSelector
void beginRun(const edm::Run &iRun, const edm::EventSetup &iEventSetup)
edm::EDGetTokenT< edm::TriggerResults > _trigResultsTag
static const char *const trigNames[]
void bookHist(const std::string &source, const std::string &objType, const std::string &variable, DQMStore::IBooker &)
void setCurrentFolder(const std::string &fullpath)
std::vector< reco::CaloMET > CaloMETCollection
collection of CaloMET objects
std::vector< double > _parametersHt
edm::EDGetTokenT< reco::GsfElectronCollection > _recLabelsElec
HLTHiggsSubAnalysis(const edm::ParameterSet &pset, const std::string &analysisname, edm::ConsumesCollector &&iC)
T const * product() const
StringCutObjectSelector< reco::Muon > * _recMuonSelector
std::string _histDirectory
void fillHist(const std::string &source, const std::string &objType, const std::string &variable, const float &value)
std::vector< Photon > PhotonCollection
collectin of Photon objects
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d'tor
const std::vector< reco::GsfElectron > * electrons
Helper structure to order MatchStruct.
const std::vector< unsigned int > getObjectsType(const std::string &hltpath) const
Extract what objects need this analysis.
void insertcandidates(const unsigned int &objtype, const EVTColContainer *col, std::vector< MatchStruct > *matches)
std::vector< PFJet > PFJetCollection
collection of PFJet objects
edm::EDGetTokenT< reco::MuonCollection > _recLabelsMuon
std::vector< double > _parametersPhi
std::string _analysisname
std::vector< std::string > _hltPathsToCheck
the hlt paths with regular expressions
std::vector< reco::PFMET > PFMETCollection
collection of PFMET objects
std::vector< double > _parametersEta
Some kinematical parameters.
std::map< unsigned int, double > _cutMaxEta
void bookobjects(const edm::ParameterSet &anpset, edm::ConsumesCollector &iC)
StringCutObjectSelector< reco::Photon > * _recPhotonSelector
const std::vector< reco::PFMET > * pfMETs
StringCutObjectSelector< reco::PFJet > * _recPFJetSelector
static const std::string getTypeString(const unsigned int &objtype)
Tranform types into strings.
const edm::TriggerResults * triggerResults
static std::string const source
StringCutObjectSelector< reco::GsfElectron > * _recElecSelector
edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const override