33 #include <boost/format.hpp>
38 #include "TDirectory.h"
42 #include <Math/VectorUtil.h>
43 using namespace ROOT::Math::VectorUtil ;
60 histName = boost::str(
boost::format(histogramNameTemplate) %
"et");
61 histTitle = boost::str(
boost::format(histogramTitleTemplate) %
"E_{T}");
69 histName = boost::str(
boost::format(histogramNameTemplate) %
"eta");
70 histTitle= boost::str(
boost::format(histogramTitleTemplate) %
"#eta");
78 histName = boost::str(
boost::format(histogramNameTemplate) %
"phi");
79 histTitle= boost::str(
boost::format(histogramTitleTemplate) %
"#phi");
92 etMonitorElement->Fill(momentum.Et());
93 etaMonitorElement->Fill(momentum.eta() );
94 phiMonitorElement->Fill(momentum.phi() );
145 std::vector<edm::ParameterSet>
filters =
146 pset.
getParameter<std::vector<edm::ParameterSet> >(
"filters");
149 for(std::vector<edm::ParameterSet>::iterator filterconf = filters.begin() ; filterconf != filters.end() ; filterconf++)
157 std::vector<double> bounds = filterconf->getParameter<std::vector<double> >(
"PlotBounds");
159 assert(bounds.size() == 2);
160 plotBounds.push_back(std::pair<double,double>(bounds[0],bounds[1]));
161 isoNames.push_back(filterconf->getParameter<std::vector<edm::InputTag> >(
"IsoCollections"));
163 for (
unsigned int i=0; i<
isoNames.back().size(); i++) {
181 throw(
cms::Exception(
"Release Validation Error") <<
"HLT output type not implemented: theHLTOutputTypes[n]" );
187 if (
isoNames.back().at(0).label()==
"none") {
205 bool isHltConfigChanged =
false;
234 histName=
"total_eff_RECO_matched";
235 histTitle=
"total events passing (Reco matched)";
236 totalmatchreco = iBooker.
book1D(histName.c_str(),histTitle.c_str(),numOfHLTCollectionLabels+2,0,numOfHLTCollectionLabels+2);
250 pdgIdString=
"Electron";
break;
252 pdgIdString=
"Photon";
break;
254 pdgIdString=
"Particle";
264 "%s of " + pdgIdString +
"s"
273 "%s of " + pdgIdString +
"s monpath"
295 std::vector<std::string> HltHistTitle;
329 HltHistTitle[
i]+
" %s (ALL)"
355 HltHistTitle[
i]+
" %s (RECO matched)"
382 HltHistTitle[
i]+
" %s (RECO matched, monpath)"
408 HltHistTitle[
i]+
" %s (reco)"
435 histTitle = HltHistTitle[
i]+
" isolation vs #eta (all)";
441 histTitle = HltHistTitle[
i]+
" isolation vs Et (all)";
447 histTitle = HltHistTitle[
i]+
" isolation vs #phi (all)";
457 histTitle = HltHistTitle[
i]+
" isolation vs #eta (reco matched)";
463 histTitle = HltHistTitle[
i]+
" isolation vs Et (reco matched)";
469 histTitle = HltHistTitle[
i]+
" isolation vs #phi (reco matched)";
480 histTitle = HltHistTitle[
i]+
" isolation vs #eta (reco)";
486 histTitle = HltHistTitle[
i]+
" isolation vs Et (reco)";
492 histTitle = HltHistTitle[
i]+
" isolation vs #phi (reco)";
520 bool plotMonpath =
false;
521 bool plotReco =
true;
531 if (recoObjects->size() < (
unsigned int)
recocut_) {
535 }
else if (
pdgGen == 22) {
540 if (recoObjectsEB->size() + recoObjectsEE->size() < (
unsigned int)
recocut_) {
564 unsigned int triggerIndex;
568 bool isFired =
false;
569 if (triggerIndex < HLTR->
size()){
570 isFired = HLTR->accept(triggerIndex);
579 edm::LogWarning(
"EmDQMReco") <<
"RAW-type HLT results not found, skipping event";
603 std::vector<reco::Particle> sortedReco;
604 if (plotReco ==
true) {
607 reco::Particle tmpcand( recopart->charge(), recopart->p4(), recopart->vertex(),recopart->pdgId(),recopart->status() );
608 sortedReco.push_back(tmpcand);
612 for(std::vector<reco::SuperCluster>::const_iterator recopart2 = recoObjectsEB->begin(); recopart2 != recoObjectsEB->end();recopart2++){
613 float en = recopart2->
energy();
614 float er =
sqrt(
pow(recopart2->x(),2) +
pow(recopart2->y(),2) +
pow(recopart2->z(),2) );
615 float px = recopart2->energy()*recopart2->x()/er;
616 float py = recopart2->energy()*recopart2->y()/er;
617 float pz = recopart2->energy()*recopart2->z()/er;
620 sortedReco.push_back(tmpcand);
622 for(std::vector<reco::SuperCluster>::const_iterator recopart2 = recoObjectsEE->begin(); recopart2 != recoObjectsEE->end();recopart2++){
623 float en = recopart2->energy();
624 float er =
sqrt(
pow(recopart2->x(),2) +
pow(recopart2->y(),2) +
pow(recopart2->z(),2) );
625 float px = recopart2->energy()*recopart2->x()/er;
626 float py = recopart2->energy()*recopart2->y()/er;
627 float pz = recopart2->energy()*recopart2->z()/er;
630 sortedReco.push_back(tmpcand);
634 std::sort(sortedReco.begin(),sortedReco.end(),
pTComparator_ );
640 sortedReco.erase(sortedReco.begin()+
recocut_,sortedReco.end());
689 throw(
cms::Exception(
"Release Validation Error") <<
"HLT output type not implemented: theHLTOutputTypes[n]" );
701 std::vector<edm::Ref<T> > recoecalcands;
713 std::vector<edm::Ref<T> > isocands;
715 if (isocands.size()>0)
717 for (
unsigned int i=0;
i < isocands.size();
i++)
718 recoecalcands.push_back(isocands[
i]);
723 if (recoecalcands.size() < 1){
728 if (recoecalcands.size() >=
dqm->
reqNum )
736 for (
unsigned int j=0;
j<recoecalcands.size();
j++){
737 if(!( recoecalcands.at(
j).isAvailable())){
749 for (
unsigned int i=0;
i<recoecalcands.size();
i++) {
764 if (mapi!=depMap->end()){
766 dqm->
ethistiso[n+1]->Fill(recoecalcands[i]->et() ,mapi->val);
779 if (plotReco ==
true) {
784 float closestRecoDeltaR = 1000.;
785 int closestRecoEcalCandIndex = -1;
786 for (
unsigned int j=0;
j<recoecalcands.size();
j++) {
787 float deltaR =
DeltaR(recoecalcands[
j]->momentum(),currentRecoParticleMomentum);
789 if (deltaR < closestRecoDeltaR) {
790 closestRecoDeltaR =
deltaR;
791 closestRecoEcalCandIndex =
j;
797 if ( closestRecoEcalCandIndex >= 0 ) {
812 if (mapi!=depMap->end()) {
827 unsigned int mtachedRecoParts = 0;
828 float minrecodist=0.3;
829 if(n==0) minrecodist=0.5;
832 bool matchThis=
false;
834 unsigned int closest = 0;
835 double closestDr = 1000.;
836 for(
unsigned int trigOb = 0 ; trigOb < recoecalcands.size(); trigOb++){
837 double dr =
DeltaR(recoecalcands[trigOb]->momentum(),candDir);
838 if (dr < closestDr) {
842 if (closestDr > minrecodist) {
849 if ( !matchThis )
continue;
874 if (mapi!=depMapReco->end()){
void fill(const math::XYZTLorentzVector &momentum)
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
boost::ptr_vector< FourVectorMonitorElements > standardHist
std::vector< std::vector< edm::InputTag > > isoNames
double energy() const
energy
void analyze(const edm::Event &event, const edm::EventSetup &)
HistoFillerReco< reco::RecoEcalCandidateCollection > * histoFillerPho
HistoFillerReco< reco::ElectronCollection > * histoFillerEle
bool getByToken(EDGetToken token, Handle< PROD > &result) const
boost::ptr_vector< FourVectorMonitorElements > histMatchReco
#define DEFINE_FWK_MODULE(type)
std::vector< MonitorElement * > histEtIsoOfHltObjMatchToReco
void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
EmDQMReco(const edm::ParameterSet &pset)
Constructor.
std::vector< int > theHLTOutputTypes
void fillHistos(edm::Handle< trigger::TriggerEventWithRefs > &triggerObj, const edm::Event &iEvent, unsigned int n, std::vector< reco::Particle > &sortedReco, bool plotReco, bool plotMonpath)
string format
Some error handling for the usage.
edm::EDGetTokenT< std::vector< reco::SuperCluster > > recoObjectsEET
std::vector< MonitorElement * > phiHistIso
std::vector< MonitorElement * > histEtaIsoOfHltObjMatchToReco
std::vector< TPRegexp > filters
bool isHltConfigInitialized_
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
HLTConfigProvider hltConfig_
FourVectorMonitorElements(EmDQMReco *_parent, DQMStore::IBooker &iBooker, const std::string &histogramNameTemplate, const std::string &histogramTitleTemplate)
unsigned int triggerIndex(const std::string &triggerName) const
slot position of trigger path in trigger table (0 to size-1)
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
boost::ptr_vector< FourVectorMonitorElements > histMatchRecoMonPath
GreaterByPt< reco::Particle > pTComparator_
std::vector< std::string > theHLTCollectionHumanNames
unsigned int numOfHLTCollectionLabels
HistoFillerReco< l1extra::L1EmParticleCollection > * histoFillerL1Iso
MonitorElement * totalreco
MonitorElement * etaMonitorElement
edm::EDGetTokenT< std::vector< reco::SuperCluster > > recoObjectsEBT
MonitorElement * book1D(Args &&...args)
MonitorElement * totalmatchreco
std::vector< MonitorElement * > ethistisomatchreco
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::string triggerNameRecoMonPath
std::vector< bool > plotiso
edm::EDGetTokenT< reco::GsfElectronCollection > recoElectronsInput
bool useHumanReadableHistTitles
edm::EDGetTokenT< trigger::TriggerEventWithRefs > triggerObjT
double deltaR(double eta1, double eta2, double phi1, double phi2)
HistoFillerReco< l1extra::L1EmParticleCollection > * histoFillerL1NonIso
MonitorElement * phiMonitorElement
boost::scoped_ptr< FourVectorMonitorElements > histRecoMonpath
std::vector< MonitorElement * > etahistiso
boost::scoped_ptr< FourVectorMonitorElements > histMonpath
void setCurrentFolder(const std::string &fullpath)
MonitorElement * book2D(Args &&...args)
void dqmBeginRun(const edm::Run &, const edm::EventSetup &)
XYZVectorD XYZVector
spatial vector with cartesian internal representation
XYZPointD XYZPoint
point in space with cartesian internal representation
std::vector< MonitorElement * > etahistisomatchreco
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d'tor
std::vector< std::pair< double, double > > plotBounds
std::vector< edm::EDGetTokenT< edm::AssociationMap< edm::OneToValue< T, float > > > > isoNameTokens_
std::vector< edm::InputTag > theHLTCollectionLabels
math::XYZTLorentzVector LorentzVector
Lorentz vector.
MonitorElement * etMonitorElement
edm::EDGetTokenT< edm::TriggerResults > hltResultsT
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
boost::ptr_vector< FourVectorMonitorElements > histHltObjMatchToReco
std::vector< MonitorElement * > ethistiso
std::string processNameRecoMonPath
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
boost::scoped_ptr< FourVectorMonitorElements > histReco
tuple size
Write out results.
std::vector< MonitorElement * > phiHistIsoMatchReco
Power< A, B >::type pow(const A &a, const B &b)
std::vector< MonitorElement * > histPhiIsoOfHltObjMatchToReco
HistoFillerReco< reco::RecoEcalCandidateCollection > * histoFillerClu