CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Types | Private Attributes
TauDQMHistPlotter Class Reference

#include <DQMHistPlotter.h>

Inheritance diagram for TauDQMHistPlotter:
edm::EDAnalyzer edm::EDConsumerBase

Classes

struct  cfgEntryAxisX
 
struct  cfgEntryAxisY
 
struct  cfgEntryDrawJob
 
struct  cfgEntryDrawOption
 
struct  cfgEntryLabel
 
struct  cfgEntryLegend
 
struct  cfgEntryProcess
 
struct  plotDefEntry
 

Public Member Functions

virtual void analyze (const edm::Event &, const edm::EventSetup &)
 
virtual void endJob ()
 
virtual void endRun (const edm::Run &r, const edm::EventSetup &c)
 
 TauDQMHistPlotter (const edm::ParameterSet &)
 
virtual ~TauDQMHistPlotter ()
 
- Public Member Functions inherited from edm::EDAnalyzer
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzer ()
 
ModuleDescription const & moduleDescription () const
 
std::string workerType () const
 
 ~EDAnalyzer () override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Types

typedef std::list< plotDefEntryplotDefList
 
typedef std::vector< std::string > vstring
 

Private Attributes

int canvasSizeX_
 
int canvasSizeY_
 
int cfgError_
 
std::list< cfgEntryDrawJobdrawJobs_
 
std::map< std::string, cfgEntryDrawOptiondrawOptionEntries_
 
std::string indOutputFileName_
 
std::map< std::string, cfgEntryLabellabels_
 
std::map< std::string, cfgEntryLegendlegends_
 
std::string outputFileName_
 
std::string outputFilePath_
 
std::map< std::string, cfgEntryProcessprocesses_
 
bool toFile_
 
std::map< std::string, cfgEntryAxisXxAxes_
 
std::map< std::string, cfgEntryAxisYyAxes_
 

Additional Inherited Members

- Public Types inherited from edm::EDAnalyzer
typedef EDAnalyzer ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::EDAnalyzer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Class to plot histograms and create a postscript file

Author
Christian Veelken, UC Davis

Definition at line 27 of file DQMHistPlotter.h.

Member Typedef Documentation

Definition at line 140 of file DQMHistPlotter.h.

typedef std::vector<std::string> TauDQMHistPlotter::vstring
private

Definition at line 29 of file DQMHistPlotter.h.

Constructor & Destructor Documentation

TauDQMHistPlotter::TauDQMHistPlotter ( const edm::ParameterSet cfg)
explicit

Definition at line 560 of file DQMHistPlotter.cc.

References canvasSizeX_, canvasSizeY_, cfgError_, gather_cfg::cout, defaultCanvasSizeX, defaultCanvasSizeY, drawJobs_, drawOptionEntries_, drawOptionSeparator, RecoTauValidation_cfi::drawOptionSets, mps_splice::entry, edm::ParameterSet::exists(), edm::ParameterSet::existsAs(), find_vstring(), edm::ParameterSet::getParameter(), edm::ParameterSet::getParameterNamesForType(), diffTreeTool::index, indOutputFileName_, tablePrinter::labels, labels_, listHistos::legend, RecoTauValidation_cfi::legendEntry, legends_, outputFileName_, outputFilePath_, parKeyword, plotFactory::plot, TauDQMHistPlotter::plotDefEntry::plotDefEntry(), nanoDQM_cff::plots, LaserDQM_cfg::process, processDirKeyword, edmIntegrityCheck::processes, processes_, replace_string(), svgfig::stack, AlCaHLTBitMon_QueryRunRegistry::string, fftjetcommon_cfi::title, toFile_, type_bsmMC, type_Data, type_smMC, type_smSumMC, verbosity, xAxes_, MuonErrorMatrixValues_cff::xAxis, yAxes_, and MuonErrorMatrixValues_cff::yAxis.

561 {
562  if( verbosity)
563  std::cout << "<TauDQMHistPlotter::TauDQMHistPlotter>:" << std::endl;
564 
565  toFile_ = cfg.getParameter<bool>("PrintToFile");
566  cfgError_ = 0;
567 
568 //--- configure processes
569  //std::cout << "--> configuring processes..." << std::endl;
570  edm::ParameterSet cfgParSet_processes = cfg.getParameter<edm::ParameterSet>("processes");
571  readCfgParameter<cfgEntryProcess>(cfgParSet_processes, processes_);
572 
573 //--- check that process types are defined
574  //std::cout << "--> checking configuration parameters..." << std::endl;
575 
576  int numProcesses_Data = 0;
577  int numProcesses_sumMC = 0;
578  for ( std::map<std::string, cfgEntryProcess>::const_iterator process = processes_.begin();
579  process != processes_.end(); ++process ) {
580  const std::string& type = process->second.type_;
581 
582  if ( !((type == type_smMC) ||
583  (type == type_bsmMC) ||
584  (type == type_smSumMC) ||
585  (type == type_Data)) ) {
586  edm::LogError ("TauDQMHistPlotter") << " Undefined process type = " << type << " !!";
587  cfgError_ = 1;
588  }
589 
590  if ( type == type_smSumMC ) ++numProcesses_sumMC;
591  if ( type == type_Data ) ++numProcesses_Data;
592  }
593 
594  if ( (numProcesses_Data > 1) || (numProcesses_sumMC > 1) ) {
595  edm::LogError ("TauDQMHistPlotter") << " Cannot have more than one process of types sumMC and Data !!";
596  cfgError_ = 1;
597  }
598 
599 //--- configure x-axes
600  //std::cout << "--> configuring x-axes..." << std::endl;
601  edm::ParameterSet cfgParSet_xAxes = cfg.getParameter<edm::ParameterSet>("xAxes");
602  readCfgParameter<cfgEntryAxisX>(cfgParSet_xAxes, xAxes_);
603 
604 //--- configure y-axes
605  //std::cout << "--> configuring y-axes..." << std::endl;
606  edm::ParameterSet cfgParSet_yAxes = cfg.getParameter<edm::ParameterSet>("yAxes");
607  readCfgParameter<cfgEntryAxisY>(cfgParSet_yAxes, yAxes_);
608 
609 //--- configure legends
610  //std::cout << "--> configuring legends..." << std::endl;
611  edm::ParameterSet cfgParSet_legends = cfg.getParameter<edm::ParameterSet>("legends");
612  readCfgParameter<cfgEntryLegend>(cfgParSet_legends, legends_);
613 
614 //--- configure labels
615  //std::cout << "--> configuring labels..." << std::endl;
616  edm::ParameterSet cfgParSet_labels = cfg.getParameter<edm::ParameterSet>("labels");
617  readCfgParameter<cfgEntryLabel>(cfgParSet_labels, labels_);
618 
619 //--- configure drawOptions
620  //std::cout << "--> configuring drawOptions..." << std::endl;
621  if ( cfg.exists("drawOptionSets") ) {
623  vstring drawOptionSetNames = drawOptionSets.getParameterNamesForType<edm::ParameterSet>();
624  for ( vstring::const_iterator drawOptionSetName = drawOptionSetNames.begin();
625  drawOptionSetName != drawOptionSetNames.end(); ++drawOptionSetName ) {
626  edm::ParameterSet drawOptionSet = drawOptionSets.getParameter<edm::ParameterSet>(*drawOptionSetName);
627 
628  vstring drawOptionEntryNames = drawOptionSet.getParameterNamesForType<edm::ParameterSet>();
629  for ( vstring::const_iterator drawOptionEntryName = drawOptionEntryNames.begin();
630  drawOptionEntryName != drawOptionEntryNames.end(); ++drawOptionEntryName ) {
631  edm::ParameterSet drawOptionEntry = drawOptionSet.getParameter<edm::ParameterSet>(*drawOptionEntryName);
632 
633  std::string drawOptionEntryName_full = std::string(*drawOptionSetName).append(drawOptionSeparator).append(*drawOptionEntryName);
634  drawOptionEntries_.insert(std::pair<std::string, cfgEntryDrawOption>
635  (drawOptionEntryName_full, cfgEntryDrawOption(drawOptionEntryName_full, drawOptionEntry)));
636  }
637  }
638  }
639 
640  if ( cfg.exists("drawOptionEntries") ) {
641  edm::ParameterSet cfgParSet_drawOptionEntries = cfg.getParameter<edm::ParameterSet>("drawOptionEntries");
642  readCfgParameter<cfgEntryDrawOption>(cfgParSet_drawOptionEntries, drawOptionEntries_);
643  }
644 
645 //--- configure drawJobs
646  //std::cout << "--> configuring drawJobs..." << std::endl;
647  edm::ParameterSet drawJobs = cfg.getParameter<edm::ParameterSet>("drawJobs");
648  vstring drawJobNames = drawJobs.getParameterNamesForType<edm::ParameterSet>();
649  for ( vstring::const_iterator drawJobName = drawJobNames.begin();
650  drawJobName != drawJobNames.end(); ++drawJobName ) {
651  edm::ParameterSet drawJob = drawJobs.getParameter<edm::ParameterSet>(*drawJobName);
652 
653  std::map<int, plotDefList> plotDefMap;
654 
655  if ( drawJob.existsAs<edm::ParameterSet>("plots") ) { // display same monitor element for different processes
657 
658  vstring dqmMonitorElements = plots.getParameter<vstring>("dqmMonitorElements");
659  vstring processes = plots.getParameter<vstring>("processes");
660 
661  std::string drawOptionSet = drawJob.getParameter<std::string>("drawOptionSet");
662  //std::cout << "drawOptionSet = " << drawOptionSet << std::endl;
663 
664  vstring stack = ( cfg.exists("stack") ) ? drawJob.getParameter<vstring>("stack") : vstring();
665 
666  for ( vstring::const_iterator process = processes.begin();
667  process != processes.end(); ++process ) {
668  int index = 0;
669  for ( vstring::const_iterator dqmMonitorElement = dqmMonitorElements.begin();
670  dqmMonitorElement != dqmMonitorElements.end(); ++dqmMonitorElement ) {
671  bool stack_dqmMonitorElement = find_vstring(stack, *process);
672  std::string drawOptionEntry = std::string(drawOptionSet).append(drawOptionSeparator).append(*process);
673  plotDefMap[index].push_back(plotDefEntry(*dqmMonitorElement, drawOptionEntry, "", "", *process, stack_dqmMonitorElement));
674  ++index;
675  }
676  }
677  } else { // display different monitor elements for same process
678  typedef std::vector<edm::ParameterSet> vParameterSet;
679  vParameterSet plots = drawJob.getParameter<vParameterSet>("plots");
680 
681  std::string process = ( drawJob.exists("process") ) ? drawJob.getParameter<std::string>("process") : "";
682  //std::cout << "process (globally set) = " << process << std::endl;
683 
684  for ( vParameterSet::const_iterator plot = plots.begin();
685  plot != plots.end(); ++plot ) {
686 
687  if ( process == "" || plot->exists("process")) {
688  process = plot->getParameter<std::string>("process");
689  //std::cout << "process (locally set) = " << process << std::endl;
690  }
691 
692  std::string drawOptionEntry = plot->getParameter<std::string>("drawOptionEntry");
693  //std::cout << "drawOptionEntry = " << drawOptionEntry << std::endl;
694 
695  std::string legendEntry = "", legendEntryErrorBand = "";
696  if ( plot->exists("legendEntry") ) {
697  legendEntry = plot->getParameter<std::string>("legendEntry");
698  legendEntryErrorBand = ( plot->exists("legendEntryErrorBand") ) ?
699  plot->getParameter<std::string>("legendEntryErrorBand") : std::string(legendEntry).append(" Uncertainty");
700  }
701  //std::cout << "legendEntry = " << legendEntry << std::endl;
702  //std::cout << "legendEntryErrorBand = " << legendEntryErrorBand << std::endl;
703 
704  vstring dqmMonitorElements = plot->getParameter<vstring>("dqmMonitorElements");
705  int index = 0;
706  for ( vstring::const_iterator dqmMonitorElement = dqmMonitorElements.begin();
707  dqmMonitorElement != dqmMonitorElements.end(); ++dqmMonitorElement ) {
708  plotDefMap[index].push_back(plotDefEntry(*dqmMonitorElement, drawOptionEntry, legendEntry, legendEntryErrorBand, process, false));
709  ++index;
710  }
711  }
712  }
713 
714 //--- check that number of displayed monitor elements is the same for each plot
715  unsigned numMonitorElements_ref = 0;
716  bool isFirstEntry = true;
717  for ( std::map<int, plotDefList>::const_iterator plot = plotDefMap.begin();
718  plot != plotDefMap.end(); ++plot ) {
719  if ( isFirstEntry ) {
720  numMonitorElements_ref = plot->second.size();
721  isFirstEntry = false;
722  } else {
723  if ( plot->second.size() != numMonitorElements_ref ) {
724  edm::LogError ("TauDQMHistPlotter::TauDQMHistPlotter") << " Numbers of dqmMonitorElements must be the same for all plots"
725  << " --> skipping drawJob = " << (*drawJobName) << " !!";
726  cfgError_ = 1;
727  }
728  }
729  }
730 
731 //--- expand process directories in names of dqmMonitorElements
732  for ( std::map<int, plotDefList>::iterator plot = plotDefMap.begin();
733  plot != plotDefMap.end(); ++plot ) {
734  for ( plotDefList::iterator entry = plot->second.begin();
735  entry != plot->second.end(); ++entry ) {
736  std::string dqmMonitorElement = entry->dqmMonitorElement_;
737  std::string process = entry->process_;
738 
739  std::map<std::string, cfgEntryProcess>::const_iterator it = processes_.find(process);
740  if ( it != processes_.end() ) {
741  std::string process_dqmDirectory = it->second.dqmDirectory_;
742 
743  //std::cout << "replacing processDir = " << process_dqmDirectory << " in drawJob = " << (*drawJobName) << std::endl;
744 
745  int errorFlag = 0;
746  std::string dqmMonitorElement_expanded = replace_string(dqmMonitorElement, processDirKeyword, process_dqmDirectory, 0, 1, errorFlag);
747  //std::cout << " dqmMonitorElement_expanded = " << dqmMonitorElement_expanded << std::endl;
748 
749  if ( !errorFlag ) {
750  entry->dqmMonitorElement_ = dqmMonitorElement_expanded;
751  } else {
752  cfgError_ = 1;
753  }
754  } else {
755  edm::LogError ("TauDQMHistPlotter::TauDQMHistPlotter") << " Undefined process = " << process << " !!";
756  cfgError_ = 1;
757  }
758  }
759  }
760 
761  std::string title = ( drawJob.exists("title") ) ? drawJob.getParameter<std::string>("title") : "";
762 
763  std::string xAxis = drawJob.getParameter<std::string>("xAxis");
764  std::string yAxis = drawJob.getParameter<std::string>("yAxis");
765 
766  std::string legend = drawJob.getParameter<std::string>("legend");
767 
768  vstring labels = ( drawJob.exists("labels") ) ? drawJob.getParameter<vstring>("labels") : vstring();
769 
770 //--- expand parameters in names of dqmMonitorElements;
771 // create drawJob objects
772  for ( std::map<int, plotDefList>::iterator plot = plotDefMap.begin();
773  plot != plotDefMap.end(); ++plot ) {
774  if ( drawJob.exists("parameter") ) {
775  vstring vparameter = drawJob.getParameter<vstring>("parameter");
776  //std::cout << "replacing parameter = " << format_vstring(vparameter) << " in drawJob = " << (*drawJobName) << std::endl;
777 
778  for ( vstring::const_iterator parameter = vparameter.begin();
779  parameter != vparameter.end(); ++parameter ) {
780 
781  plotDefList plot_expanded;
782 
783  for ( plotDefList::const_iterator entry = plot->second.begin();
784  entry != plot->second.end(); ++entry ) {
785  std::string dqmMonitorElement = entry->dqmMonitorElement_;
786 
787  int errorFlag = 0;
788  std::string dqmMonitorElement_expanded = replace_string(dqmMonitorElement, parKeyword, *parameter, 1, 1, errorFlag);
789  //std::cout << " dqmMonitorElement_expanded = " << dqmMonitorElement_expanded << std::endl;
790  if ( !errorFlag ) {
791  plot_expanded.push_back(plotDefEntry(dqmMonitorElement_expanded, entry->drawOptionEntry_,
792  entry->legendEntry_, entry->legendEntryErrorBand_, entry->process_, entry->doStack_));
793  } else {
794  cfgError_ = 1;
795  }
796  }
797 
798  int errorFlag = 0;
799  std::string title_expanded = replace_string(title, parKeyword, *parameter, 0, 1, errorFlag);
800  //std::cout << " title_expanded = " << title_expanded << std::endl;
801  std::string xAxis_expanded = replace_string(xAxis, parKeyword, *parameter, 0, 1, errorFlag);
802  //std::cout << " xAxis_expanded = " << xAxis_expanded << std::endl;
803  std::string yAxis_expanded = replace_string(yAxis, parKeyword, *parameter, 0, 1, errorFlag);
804  //std::cout << " yAxis_expanded = " << yAxis_expanded << std::endl;
805  if ( errorFlag ) cfgError_ = 1;
806 
807  drawJobs_.push_back(cfgEntryDrawJob(std::string(*drawJobName).append(*parameter),
808  plot_expanded, title_expanded, xAxis_expanded, yAxis_expanded, legend, labels));
809  }
810  } else {
811  drawJobs_.push_back(cfgEntryDrawJob(*drawJobName,
812  plot->second, title, xAxis, yAxis, legend, labels));
813  }
814  }
815  }
816 
817 //--- check that all information neccessary to process drawJob is defined;
818  for ( std::list<cfgEntryDrawJob>::const_iterator drawJob = drawJobs_.begin();
819  drawJob != drawJobs_.end(); ++drawJob ) {
820  for ( plotDefList::const_iterator plot = drawJob->plots_.begin();
821  plot != drawJob->plots_.end(); ++plot ) {
822  checkCfgDef<cfgEntryDrawOption>(plot->drawOptionEntry_, drawOptionEntries_, cfgError_, "drawOptionEntry", drawJob->name_);
823  checkCfgDef<cfgEntryProcess>(plot->process_, processes_, cfgError_, "process", drawJob->name_);
824  }
825 
826  checkCfgDef<cfgEntryAxisX>(drawJob->xAxis_, xAxes_, cfgError_, "xAxis", drawJob->name_);
827  checkCfgDef<cfgEntryAxisY>(drawJob->yAxis_, yAxes_, cfgError_, "yAxis", drawJob->name_);
828 
829  checkCfgDef<cfgEntryLegend>(drawJob->legend_, legends_, cfgError_, "legend", drawJob->name_);
830 
831  checkCfgDefs<cfgEntryLabel>(drawJob->labels_, labels_, cfgError_, "label", drawJob->name_);
832  }
833 
834 //--- configure canvas size
835  //std::cout << "--> configuring canvas size..." << std::endl;
836  canvasSizeX_ = ( cfg.exists("canvasSizeX") ) ? cfg.getParameter<int>("canvasSizeX") : defaultCanvasSizeX;
837  canvasSizeY_ = ( cfg.exists("canvasSizeY") ) ? cfg.getParameter<int>("canvasSizeY") : defaultCanvasSizeY;
838 
839 //--- configure output files
840  //std::cout << "--> configuring postscript output file..." << std::endl;
841 
842  outputFilePath_ = ( cfg.exists("outputFilePath") ) ? cfg.getParameter<std::string>("outputFilePath") : "";
843  if ( outputFilePath_.rbegin() != outputFilePath_.rend() ) {
844  if ( (*outputFilePath_.rbegin()) == '/' ) outputFilePath_.erase(outputFilePath_.length() - 1);
845  }
846  //std::cout << " outputFilePath = " << outputFilePath_ << std::endl;
847 
848  outputFileName_ = ( cfg.exists("outputFileName") ) ? cfg.getParameter<std::string>("outputFileName") : "";
849  //std::cout << " outputFileName = " << outputFileName_ << std::endl;
850 
851  indOutputFileName_ = ( cfg.exists("indOutputFileName") ) ? cfg.getParameter<std::string>("indOutputFileName") : "";
852  if ( indOutputFileName_ != "" && indOutputFileName_.find('.') == std::string::npos ) {
853  edm::LogError ("TauDQMHistPlotter") << " Failed to determine type of graphics format from indOutputFileName = " << indOutputFileName_ << " !!";
854  cfgError_ = 1;
855  }
856  //std::cout << " indOutputFileName = " << indOutputFileName_ << std::endl;
857 
858 //--- check that exactly one type of output is specified for the plots
859 // (either separate graphics files displaying one plot each
860 // or postscript file displaying all plots on successive pages;
861 // cannot create both types of output simultaneously,
862 // as TCanvas::Print seems to interfere with TPostScript::NewPage)
863  if ( outputFileName_ == "" && indOutputFileName_ == "" ) {
864  edm::LogError ("TauDQMHistPlotter") << " Either outputFileName or indOutputFileName must be specified !!";
865  cfgError_ = 1;
866  }
867 
868  if ( outputFileName_ != "" && indOutputFileName_ != "" ) {
869  edm::LogError ("TauDQMHistPlotter") << " Must not specify outputFileName and indOutputFileName simultaneously !!";
870  cfgError_ = 1;
871  }
872 
873  if( verbosity )
874  std::cout << "done." << std::endl;
875 }
type
Definition: HCALResponse.h:21
const std::string processDirKeyword
T getParameter(std::string const &) const
const std::string type_Data
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:186
vector< string > vstring
Definition: ExoticaDQM.cc:8
bool exists(std::string const &parameterName) const
checks if a parameter exists
std::string replace_string(const std::string &src, const std::string &keyword, const std::string &parameter, unsigned minReplacements, unsigned maxReplacements, int &errorFlag)
std::vector< std::string > getParameterNamesForType(bool trackiness=true) const
Definition: ParameterSet.h:194
const std::string type_bsmMC
stack
Definition: svgfig.py:558
const std::string type_smMC
bool find_vstring(const std::vector< std::string > &vs, const std::string &s)
std::map< std::string, cfgEntryLegend > legends_
const std::string parKeyword
std::vector< std::string > vstring
std::string outputFileName_
std::map< std::string, cfgEntryLabel > labels_
std::map< std::string, cfgEntryProcess > processes_
std::map< std::string, cfgEntryAxisX > xAxes_
const std::string type_smSumMC
const int defaultCanvasSizeY
std::list< plotDefEntry > plotDefList
std::string outputFilePath_
std::map< std::string, cfgEntryDrawOption > drawOptionEntries_
const std::string drawOptionSeparator
std::list< cfgEntryDrawJob > drawJobs_
std::map< std::string, cfgEntryAxisY > yAxes_
const int defaultCanvasSizeX
std::string indOutputFileName_
const int verbosity
TauDQMHistPlotter::~TauDQMHistPlotter ( )
virtual

Definition at line 877 of file DQMHistPlotter.cc.

878 {
879 // nothing to be done yet...
880 }

Member Function Documentation

void TauDQMHistPlotter::analyze ( const edm::Event ,
const edm::EventSetup  
)
virtual

Definition at line 882 of file DQMHistPlotter.cc.

883 {
884 // nothing to be done yet...
885 }
virtual void TauDQMHistPlotter::endJob ( void  )
inlinevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 159 of file DQMHistPlotter.h.

References EnergyCorrector::c, endRun(), and alignCSCRings::r.

159 {}
void TauDQMHistPlotter::endRun ( const edm::Run r,
const edm::EventSetup c 
)
virtual

Definition at line 887 of file DQMHistPlotter.cc.

References mps_setup::append, TauDQMHistPlotter::cfgEntryLabel::applyTo(), TauDQMHistPlotter::cfgEntryDrawOption::applyTo(), svgfig::canvas(), canvasSizeX_, canvasSizeY_, cfgError_, gather_cfg::cout, defaultLegendPosX, defaultLegendPosY, defaultLegendSizeX, defaultLegendSizeY, DEFINE_FWK_MODULE, dqmDirectoryName(), dqmRootDirectory, drawHistograms(), drawJobs_, histoStyle::drawOption, TauDQMHistPlotter::cfgEntryDrawOption::drawOption_, drawOption_eBand, drawOptionEntries_, TauDQMHistPlotter::plotDefEntry::drawOptionEntry_, TauDQMHistPlotter::cfgEntryDrawOption::drawOptionLegend_, TauDQMHistPlotter::cfgEntryDrawOption::fillColor_, TauDQMHistPlotter::cfgEntryDrawOption::fillStyle_, DQMStore::get(), MonitorElement::getTH1F(), indOutputFileName_, TauDQMHistPlotter::plotDefEntry::isErrorBand_, diffTwoXMLs::label, tablePrinter::labels, labels_, listHistos::legend, RecoTauValidation_cfi::legendEntry, TauDQMHistPlotter::plotDefEntry::legendEntry_, TauDQMHistPlotter::plotDefEntry::legendEntryErrorBand_, legends_, TauDQMHistPlotter::cfgEntryDrawOption::lineColor_, TauDQMHistPlotter::cfgEntryDrawOption::lineWidth_, TauDQMHistPlotter::cfgEntryDrawOption::markerColor_, TauDQMHistPlotter::cfgEntryDrawOption::markerSize_, Max(), NULL, outputFileName_, outputFilePath_, plotFactory::plot, TauDQMHistPlotter::plotDefEntry::plotDefEntry(), plotKeyword, TauDQMHistPlotter::plotDefEntry::process_, processes_, replace_string(), AlCaHLTBitMon_QueryRunRegistry::string, toFile_, type_bsmMC, type_Data, type_smMC, type_smSumMC, verbosity, xAxes_, yAxes_, and yScale_log.

Referenced by endJob().

888 {
889  if( verbosity )
890  std::cout << "<TauDQMHistPlotter::endJob>:" << std::endl;
891 
892 //--- check that configuration parameters contain no errors
893  if ( cfgError_ ) {
894  edm::LogError ("endJob") << " Error in Configuration ParameterSet --> histograms will NOT be plotted !!";
895  return;
896  }
897 
898 //--- check that DQMStore service is available
899  if ( !edm::Service<DQMStore>().isAvailable() ) {
900  edm::LogError ("endJob") << " Failed to access dqmStore --> histograms will NOT be plotted !!";
901  return;
902  }
903 
904  DQMStore& dqmStore = (*edm::Service<DQMStore>());
905 
906 //--- stop ROOT from keeping references to all hsitograms
907  //TH1::AddDirectory(false);
908 
909 //--- stop ROOT from opening X-window for canvas output
910 // (in order to be able to run in batch mode)
911  gROOT->SetBatch(true);
912 
913 //--- initialize graphical output;
914 // open postscript file
915  TCanvas canvas("TauDQMHistPlotter","TauDQMHistPlotter", canvasSizeX_, canvasSizeY_);
916  canvas.SetFillColor(10);
917 
918 //--- restrict area in which histograms are drawn to quadratic TPad in the center of the TCanvas,
919 // in order to make space for axis labels...
920  //TPad pad("EWKTauPad", "EWKTauPad", 0.02, 0.15, 0.98, 0.85);
921  //pad.SetFillColor(10);
922  //pad.Draw();
923  //pad.Divide(1,1);
924  //pad.cd(1);
925 
926  TPostScript* ps = NULL;
927  if ( outputFileName_ != "" ) {
928  std::string psFileName = ( outputFilePath_ != "" ) ? std::string(outputFilePath_).append("/").append(outputFileName_) : outputFileName_;
929  ps = new TPostScript(psFileName.data(), 112);
930  }
931 
932 //--- process drawJobs
933  for ( std::list<cfgEntryDrawJob>::const_iterator drawJob = drawJobs_.begin();
934  drawJob != drawJobs_.end(); ++drawJob ) {
935  const std::string& drawJobName = drawJob->name_;
936  if( verbosity )
937  std::cout << "--> processing drawJob " << drawJobName << "..." << std::endl;
938 
939 //--- prepare internally used histogram data-structures
940  TH1* stackedHistogram_sum = NULL;
941  std::list<TH1*> histogramsToDelete;
942  std::list<plotDefEntry*> drawOptionsToDelete;
943 
944  typedef std::pair<TH1*, const plotDefEntry*> histogram_drawOption_pair;
945  std::list<histogram_drawOption_pair> allHistograms;
946 
947  for ( plotDefList::const_iterator plot = drawJob->plots_.begin();
948  plot != drawJob->plots_.end(); ++plot ) {
949 
950  std::string dqmMonitorElementName_full = dqmDirectoryName(std::string(dqmRootDirectory)).append(plot->dqmMonitorElement_);
951  if( verbosity )
952  std::cout << " dqmMonitorElementName_full = " << dqmMonitorElementName_full << std::endl;
953  MonitorElement* dqmMonitorElement = dqmStore.get(dqmMonitorElementName_full);
954 
955  TH1* histogram = dqmMonitorElement->getTH1F();
956  if(verbosity)
957  std::cout<<"Got Histogram "<<std::endl;
958  // TH1* histogram = ( dqmMonitorElement ) ? dynamic_cast<TH1*>(dqmMonitorElement->getTH1()->Clone()) : NULL;
959  //histogramsToDelete.push_back(histogram);
960 
961  if ( histogram == NULL ) {
962  edm::LogError ("endJob") << " Failed to access dqmMonitorElement = " << dqmMonitorElementName_full <<","
963  << " needed by drawJob = " << drawJobName << " --> histograms will NOT be plotted !!";
964  continue;
965  }
966 
967  if ( !histogram->GetSumw2N() ) histogram->Sumw2();
968 
969  const cfgEntryDrawOption* drawOptionConfig =
970  findCfgDef<cfgEntryDrawOption>(plot->drawOptionEntry_, drawOptionEntries_, "drawOptionEntry", drawJobName);
971  if ( drawOptionConfig == NULL ) {
972  edm::LogError ("endJob") << " Failed to access information needed by drawJob = " << drawJobName
973  << " --> histograms will NOT be plotted !!";
974  return;
975  }
976 
977  if ( drawOptionConfig->drawOption_ == drawOption_eBand ) {
978 //--- add histogram displaying central value as solid line
979  TH1* histogram_centralValue = dynamic_cast<TH1*>(histogram->Clone());
980  histogram_centralValue->SetName(std::string(histogram->GetName()).append("_centralValue").data());
981  cfgEntryDrawOption drawOptionConfig_centralValue(*drawOptionConfig);
982  drawOptionConfig_centralValue.fillColor_ = 0;
983  drawOptionConfig_centralValue.fillStyle_ = 0;
984  drawOptionConfig_centralValue.drawOption_ = "hist";
985  drawOptionConfig_centralValue.drawOptionLegend_ = "l";
986  std::string drawOptionName_centralValue = std::string(plot->drawOptionEntry_).append("_centralValue");
987 //--- entries in std::map need to be unique,
988 // so need to check whether drawOptionEntry already exists...
989  if ( drawOptionEntries_.find(drawOptionName_centralValue) == drawOptionEntries_.end() )
990  drawOptionEntries_.insert(std::pair<std::string, cfgEntryDrawOption>
991  (drawOptionName_centralValue, cfgEntryDrawOption(drawOptionName_centralValue, drawOptionConfig_centralValue)));
992  plotDefEntry* plot_centralValue = new plotDefEntry(*plot);
993  plot_centralValue->drawOptionEntry_ = drawOptionName_centralValue;
994  allHistograms.push_back(histogram_drawOption_pair(histogram_centralValue, plot_centralValue));
995  histogramsToDelete.push_back(histogram_centralValue);
996  drawOptionsToDelete.push_back(plot_centralValue);
997 
998 //--- add histogram displaying uncertainty as shaded error band
999  TH1* histogram_ErrorBand = dynamic_cast<TH1*>(histogram->Clone());
1000  histogram_ErrorBand->SetName(std::string(histogram->GetName()).append("_ErrorBand").data());
1001  cfgEntryDrawOption drawOptionConfig_ErrorBand(*drawOptionConfig);
1002  drawOptionConfig_ErrorBand.markerColor_ = drawOptionConfig_ErrorBand.fillColor_;
1003  drawOptionConfig_ErrorBand.markerSize_ = 0.;
1004  drawOptionConfig_ErrorBand.lineColor_ = drawOptionConfig_ErrorBand.fillColor_;
1005  drawOptionConfig_ErrorBand.lineWidth_ = 0;
1006  drawOptionConfig_ErrorBand.drawOption_ = "e2";
1007  drawOptionConfig_ErrorBand.drawOptionLegend_ = "f";
1008  std::string drawOptionName_ErrorBand = std::string(plot->drawOptionEntry_).append("_ErrorBand");
1009 //--- entries in std::map need to be unique,
1010 // so need to check whether drawOptionEntry already exists...
1011  if ( drawOptionEntries_.find(drawOptionName_ErrorBand) == drawOptionEntries_.end() )
1012  drawOptionEntries_.insert(std::pair<std::string, cfgEntryDrawOption>
1013  (drawOptionName_ErrorBand, cfgEntryDrawOption(drawOptionName_ErrorBand, drawOptionConfig_ErrorBand)));
1014  plotDefEntry* plot_ErrorBand = new plotDefEntry(*plot);
1015  plot_ErrorBand->drawOptionEntry_ = drawOptionName_ErrorBand;
1016  plot_ErrorBand->isErrorBand_ = true;
1017  allHistograms.push_back(histogram_drawOption_pair(histogram_ErrorBand, plot_ErrorBand));
1018  histogramsToDelete.push_back(histogram_ErrorBand);
1019  drawOptionsToDelete.push_back(plot_ErrorBand);
1020  } else if ( plot->doStack_ ) {
1021  TH1* stackedHistogram = dynamic_cast<TH1*>(histogram->Clone());
1022  if ( stackedHistogram_sum ) stackedHistogram->Add(stackedHistogram_sum);
1023  stackedHistogram_sum = stackedHistogram;
1024  histogramsToDelete.push_back(stackedHistogram);
1025  allHistograms.push_back(histogram_drawOption_pair(stackedHistogram, &(*plot)));
1026  } else {
1027  allHistograms.push_back(histogram_drawOption_pair(histogram, &(*plot)));
1028  }
1029  }
1030 
1031 //--- determine normalization of y-axis
1032 // (maximum of any of the histograms included in drawJob)
1033  double yAxisNorm = 0.;
1034  for ( std::list<histogram_drawOption_pair>::const_iterator it = allHistograms.begin();
1035  it != allHistograms.end(); ++it ) {
1036  yAxisNorm = TMath::Max(yAxisNorm, it->first->GetMaximum());
1037  }
1038  //std::cout << " yAxisNorm = " << yAxisNorm << std::endl;
1039 
1040 //--- prepare histograms for drawing
1041  const cfgEntryAxisX* xAxisConfig = findCfgDef<cfgEntryAxisX>(drawJob->xAxis_, xAxes_, "xAxis", drawJobName);
1042  const cfgEntryAxisY* yAxisConfig = findCfgDef<cfgEntryAxisY>(drawJob->yAxis_, yAxes_, "yAxis", drawJobName);
1043  const cfgEntryLegend* legendConfig = findCfgDef<cfgEntryLegend>(drawJob->legend_, legends_, "legend", drawJobName);
1044  if ( xAxisConfig == NULL || yAxisConfig == NULL || legendConfig == NULL ) {
1045  edm::LogError ("endJob") << " Failed to access information needed by drawJob = " << drawJobName
1046  << " --> histograms will NOT be plotted !!";
1047  return;
1048  }
1049 
1050 //--- WARNING: need to call
1051 // TLegend::TLegend(Double_t, Double_t,Double_t, Double_t, const char* = "", Option_t* = "brNDC")
1052 // constructor, as TLegend::TLegend default constructor causes the created TLegend object to behave differently !!
1054  legendConfig->applyTo(&legend);
1055 
1056  std::list<histoDrawEntry> smProcessHistogramList;
1057  std::list<histoDrawEntry> bsmProcessHistogramList;
1058  std::list<histoDrawEntry> smSumHistogramList;
1059  std::list<histoDrawEntry> smSumUncertaintyHistogramList;
1060  std::list<histoDrawEntry> dataHistogramList;
1061 
1062  for ( std::list<histogram_drawOption_pair>::const_iterator it = allHistograms.begin();
1063  it != allHistograms.end(); ++it ) {
1064  TH1* histogram = it->first;
1065  const plotDefEntry* drawOption = it->second;
1066 
1067  const cfgEntryDrawOption* drawOptionConfig =
1068  findCfgDef<cfgEntryDrawOption>(drawOption->drawOptionEntry_, drawOptionEntries_, "drawOptionEntry", drawJobName);
1069  const cfgEntryProcess* processConfig = findCfgDef<cfgEntryProcess>(drawOption->process_, processes_, "process", drawJobName);
1070  if ( drawOptionConfig == NULL || processConfig == NULL ) {
1071  edm::LogError ("endJob") << " Failed to access information needed by drawJob = " << drawJobName
1072  << " --> histograms will NOT be plotted !!";
1073  return;
1074  }
1075 
1076  if ( drawJob->title_ != "" ) histogram->SetTitle(drawJob->title_.data());
1077 
1078  xAxisConfig->applyTo(histogram);
1079  yAxisConfig->applyTo(histogram,yAxisNorm);
1080 
1081  bool yLogScale = ( yAxisConfig->yScale_ == yScale_log ) ? true : false;
1082  //std::cout << " yLogScale = " << yLogScale << std::endl;
1083  //pad.SetLogy(yLogScale);
1084  canvas.SetLogy(yLogScale);
1085 
1086  drawOptionConfig->applyTo(histogram);
1087  histogram->SetStats(false);
1088 
1089  if ( drawOption->isErrorBand_ ) {
1090  smSumUncertaintyHistogramList.push_back(histoDrawEntry(histogram, drawOptionConfig->drawOption_.data()));
1091  } else {
1092  if ( processConfig->type_ == type_smMC ) {
1093  smProcessHistogramList.push_back(histoDrawEntry(histogram, drawOptionConfig->drawOption_.data()));
1094  } else if ( processConfig->type_ == type_bsmMC ) {
1095  bsmProcessHistogramList.push_back(histoDrawEntry(histogram, drawOptionConfig->drawOption_.data()));
1096  } else if ( processConfig->type_ == type_smSumMC ) {
1097  smSumHistogramList.push_back(histoDrawEntry(histogram, drawOptionConfig->drawOption_.data()));
1098  } else if ( processConfig->type_ == type_Data ) {
1099  dataHistogramList.push_back(histoDrawEntry(histogram, drawOptionConfig->drawOption_.data()));
1100  }
1101  }
1102 
1103  std::string legendEntry, legendDrawOption;
1104  if ( drawOption->isErrorBand_ ) {
1105  legendEntry = ( drawOption->legendEntryErrorBand_ != "" ) ? drawOption->legendEntryErrorBand_ : processConfig->legendEntryErrorBand_;
1106  legendDrawOption = "f";
1107  } else {
1108  legendEntry = ( drawOption->legendEntry_ != "" ) ? drawOption->legendEntry_ : processConfig->legendEntry_;
1109  legendDrawOption = drawOptionConfig->drawOptionLegend_;
1110  }
1111 
1112  legend.AddEntry(histogram, legendEntry.data(), legendDrawOption.data());
1113  }
1114 
1115  std::list<TPaveText> labels;
1116  for ( vstring::const_iterator labelName = drawJob->labels_.begin();
1117  labelName != drawJob->labels_.end(); ++labelName ) {
1118  const cfgEntryLabel* labelConfig = findCfgDef<cfgEntryLabel>(*labelName, labels_, "label", drawJobName);
1119 
1120  TPaveText label;
1121  labelConfig->applyTo(&label);
1122 
1123  labels.push_back(label);
1124  }
1125 
1126 //--- draw histograms
1127 // - in the order:
1128 // 1. uncertainty on sum of all Standard Model processes
1129 // 2. sum of all Standard Model processes
1130 // 3. individual Standard Model processes
1131 // 4. individual beyond the Standard Model processes
1132 // 5. data
1133  bool isFirstHistogram = true;
1134  drawHistograms(smSumUncertaintyHistogramList, isFirstHistogram);
1135  drawHistograms(smSumHistogramList, isFirstHistogram);
1136 
1137 //--- process histograms for individual Standard Model processes
1138 // in reverse order, so that most stacked histogram gets drawn first
1139  for ( std::list<histoDrawEntry>::reverse_iterator it = smProcessHistogramList.rbegin();
1140  it != smProcessHistogramList.rend(); ++it ) {
1141  std::string drawOption = ( isFirstHistogram ) ? it->second : std::string(it->second).append("same");
1142  it->first->Draw(drawOption.data());
1143  isFirstHistogram = false;
1144  }
1145 
1146  drawHistograms(bsmProcessHistogramList, isFirstHistogram);
1147  drawHistograms(dataHistogramList, isFirstHistogram);
1148 
1149  legend.Draw();
1150 
1151  for ( std::list<TPaveText>::iterator label = labels.begin();
1152  label != labels.end(); ++label ) {
1153  label->Draw();
1154  }
1155 
1156  //pad.RedrawAxis();
1157 
1158  canvas.Update();
1159  //pad.Update();
1160 
1161  if ( indOutputFileName_ != "" && toFile_) {
1162  int errorFlag = 0;
1163  std::string modIndOutputFileName = replace_string(indOutputFileName_, plotKeyword, drawJobName, 1, 1, errorFlag);
1164  if ( !errorFlag ) {
1165  std::string fullFileName = ( outputFilePath_ != "" ) ?
1166  std::string(outputFilePath_).append("/").append(modIndOutputFileName) : modIndOutputFileName;
1167  canvas.Print(fullFileName.data());
1168  } else {
1169  edm::LogError("endJob") << " Failed to decode indOutputFileName = " << indOutputFileName_ << " --> skipping !!";
1170  }
1171  }
1172 
1173  if ( ps ) ps->NewPage();
1174 
1175 //--- delete temporarily created histogram and drawOption objects
1176  for ( std::list<TH1*>::const_iterator histogram = histogramsToDelete.begin();
1177  histogram != histogramsToDelete.end(); ++histogram ) {
1178  delete (*histogram);
1179  }
1180 
1181  for ( std::list<plotDefEntry*>::const_iterator drawOption = drawOptionsToDelete.begin();
1182  drawOption != drawOptionsToDelete.end(); ++drawOption ) {
1183  delete (*drawOption);
1184  }
1185  }
1186 
1187 //--- close postscript file
1188  canvas.Clear();
1189  if(verbosity)
1190  std::cout << "done." << std::endl;
1191  if ( ps ) ps->Close();
1192  delete ps;
1193 }
const std::string type_Data
const std::string yScale_log
std::pair< TH1 *, std::string > histoDrawEntry
std::string replace_string(const std::string &src, const std::string &keyword, const std::string &parameter, unsigned minReplacements, unsigned maxReplacements, int &errorFlag)
#define NULL
Definition: scimark2.h:8
std::string dqmDirectoryName(const std::string &dqmRootDirectory, const std::string &dqmSubDirectory)
Definition: EwkTauDQM.cc:10
const double defaultLegendSizeX
const std::string type_bsmMC
const double defaultLegendSizeY
const std::string drawOption_eBand
const std::string type_smMC
std::map< std::string, cfgEntryLegend > legends_
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. "my/long/dir/my_histo")
Definition: DQMStore.cc:1807
void drawHistograms(const std::list< histoDrawEntry > &histogramList, bool &isFirstHistogram)
std::string outputFileName_
std::map< std::string, cfgEntryLabel > labels_
std::map< std::string, cfgEntryProcess > processes_
std::map< std::string, cfgEntryAxisX > xAxes_
T Max(T a, T b)
Definition: MathUtil.h:44
const std::string type_smSumMC
const double defaultLegendPosX
TH1F * getTH1F(void) const
std::string outputFilePath_
std::map< std::string, cfgEntryDrawOption > drawOptionEntries_
const std::string plotKeyword
def canvas(sub, attr)
Definition: svgfig.py:481
std::list< cfgEntryDrawJob > drawJobs_
const std::string dqmRootDirectory
std::map< std::string, cfgEntryAxisY > yAxes_
std::string indOutputFileName_
const int verbosity
const double defaultLegendPosY

Member Data Documentation

int TauDQMHistPlotter::canvasSizeX_
private

Definition at line 170 of file DQMHistPlotter.h.

Referenced by endRun(), and TauDQMHistPlotter().

int TauDQMHistPlotter::canvasSizeY_
private

Definition at line 171 of file DQMHistPlotter.h.

Referenced by endRun(), and TauDQMHistPlotter().

int TauDQMHistPlotter::cfgError_
private

Definition at line 175 of file DQMHistPlotter.h.

Referenced by endRun(), and TauDQMHistPlotter().

std::list<cfgEntryDrawJob> TauDQMHistPlotter::drawJobs_
private

Definition at line 169 of file DQMHistPlotter.h.

Referenced by endRun(), and TauDQMHistPlotter().

std::map<std::string, cfgEntryDrawOption> TauDQMHistPlotter::drawOptionEntries_
private

Definition at line 168 of file DQMHistPlotter.h.

Referenced by endRun(), and TauDQMHistPlotter().

std::string TauDQMHistPlotter::indOutputFileName_
private

Definition at line 174 of file DQMHistPlotter.h.

Referenced by endRun(), and TauDQMHistPlotter().

std::map<std::string, cfgEntryLabel> TauDQMHistPlotter::labels_
private
std::map<std::string, cfgEntryLegend> TauDQMHistPlotter::legends_
private

Definition at line 166 of file DQMHistPlotter.h.

Referenced by endRun(), and TauDQMHistPlotter().

std::string TauDQMHistPlotter::outputFileName_
private

Definition at line 173 of file DQMHistPlotter.h.

Referenced by endRun(), and TauDQMHistPlotter().

std::string TauDQMHistPlotter::outputFilePath_
private

Definition at line 172 of file DQMHistPlotter.h.

Referenced by endRun(), and TauDQMHistPlotter().

std::map<std::string, cfgEntryProcess> TauDQMHistPlotter::processes_
private

Definition at line 163 of file DQMHistPlotter.h.

Referenced by endRun(), and TauDQMHistPlotter().

bool TauDQMHistPlotter::toFile_
private

Definition at line 176 of file DQMHistPlotter.h.

Referenced by endRun(), and TauDQMHistPlotter().

std::map<std::string, cfgEntryAxisX> TauDQMHistPlotter::xAxes_
private

Definition at line 164 of file DQMHistPlotter.h.

Referenced by endRun(), and TauDQMHistPlotter().

std::map<std::string, cfgEntryAxisY> TauDQMHistPlotter::yAxes_
private

Definition at line 165 of file DQMHistPlotter.h.

Referenced by endRun(), and TauDQMHistPlotter().