16 #include <TPostScript.h> 97 if ( def.find(cfgEntryName) == def.end() ) {
98 edm::LogError (
"checkCfgDef") <<
" " << defType <<
" = " << cfgEntryName <<
" undefined, needed by drawJob = " << drawJobName <<
" !!";
104 void checkCfgDefs(
const std::vector<std::string>& cfgEntryNames, std::map<std::string, T>&
def,
int& errorFlag,
107 for ( std::vector<std::string>::const_iterator cfgEntryName = cfgEntryNames.begin();
108 cfgEntryName != cfgEntryNames.end(); ++cfgEntryName ) {
109 checkCfgDef(*cfgEntryName, def, errorFlag, defType, drawJobName);
117 typename std::map<std::string, T>::const_iterator it = def.find(cfgEntryName);
118 if ( it != def.end() ) {
119 return &(it->second);
121 edm::LogError (
"findCfgDef") <<
" " << defType <<
" = " << cfgEntryName <<
" undefined, needed by drawJob = " << drawJobName <<
" !!";
132 void drawHistograms(
const std::list<histoDrawEntry>& histogramList,
bool& isFirstHistogram)
134 for ( std::list<histoDrawEntry>::const_iterator it = histogramList.begin();
135 it != histogramList.end(); ++it ) {
137 it->first->Draw(drawOption.data());
138 isFirstHistogram =
false;
148 for ( std::vector<std::string>::const_iterator it = vs.begin();
149 it != vs.end(); ++it ) {
150 if ( (*it) ==
s )
return true;
176 std::cout <<
"<TauDQMHistPlotter::cfgEntryProcess::print>:" << std::endl;
203 std::cout <<
"<TauDQMHistPlotter::cfgEntryAxisX::print>:" << std::endl;
205 std::cout <<
" minX_ = " << minX_ << std::endl;
206 std::cout <<
" maxX_ = " << maxX_ << std::endl;
207 std::cout <<
" xAxisTitle = " << xAxisTitle_ << std::endl;
208 std::cout <<
" xAxisTitleOffset = " << xAxisTitleOffset_ << std::endl;
209 std::cout <<
" xAxisTitleSize = " << xAxisTitleSize_ << std::endl;
215 double xMin = ( minX_ !=
defaultMinX ) ? minX_ : histogram->GetXaxis()->GetXmin();
216 double xMax = ( maxX_ !=
defaultMaxX ) ? maxX_ : histogram->GetXaxis()->GetXmax();
217 histogram->SetAxisRange(xMin, xMax,
"X");
218 histogram->GetXaxis()->SetTitle(xAxisTitle_.data());
219 histogram->GetXaxis()->SetTitleOffset(xAxisTitleOffset_);
220 histogram->GetXaxis()->SetTitleSize(xAxisTitleSize_);
246 std::cout <<
"<TauDQMHistPlotter::cfgEntryAxisY::print>:" << std::endl;
248 std::cout <<
" minY_linear = " << minY_linear_ << std::endl;
249 std::cout <<
" minY_log = " << minY_log_ << std::endl;
250 std::cout <<
" maxY_linear = " << maxY_linear_ << std::endl;
251 std::cout <<
" maxY_log = " << maxY_log_ << std::endl;
252 std::cout <<
" yScale = " << yScale_ << std::endl;
253 std::cout <<
" yAxisTitle = " << yAxisTitle_ << std::endl;
254 std::cout <<
" yAxisTitleOffset = " << yAxisTitleOffset_ << std::endl;
255 std::cout <<
" yAxisTitleSize = " << yAxisTitleSize_ << std::endl;
261 bool yLogScale = ( yScale_ ==
yScale_log ) ?
true :
false;
262 double minY = ( yLogScale ) ? minY_log_ : minY_linear_;
263 histogram->SetMinimum(minY);
264 double maxY = ( yLogScale ) ? maxY_log_ : maxY_linear_;
266 if ( maxY != defaultMaxY ) {
268 histogram->SetMaximum(maxY);
274 histogram->SetMaximum(defaultYaxisMaximumScaleFactor*norm);
276 histogram->GetYaxis()->SetTitle(yAxisTitle_.data());
277 histogram->GetYaxis()->SetTitleOffset(yAxisTitleOffset_);
278 histogram->GetYaxis()->SetTitleSize(yAxisTitleSize_);
304 std::cout <<
"<TauDQMHistPlotter::cfgEntryLegend::print>:" << std::endl;
306 std::cout <<
" posX = " << posX_ << std::endl;
307 std::cout <<
" posY = " << posY_ << std::endl;
308 std::cout <<
" sizeX = " << sizeX_ << std::endl;
309 std::cout <<
" sizeY = " << sizeY_ << std::endl;
310 std::cout <<
" header = " << header_ << std::endl;
311 std::cout <<
" option = " << option_ << std::endl;
312 std::cout <<
" borderSize = " << borderSize_ << std::endl;
313 std::cout <<
" fillColor = " << fillColor_ << std::endl;
319 legend->SetX1(posX_);
320 legend->SetY1(posY_);
321 legend->SetX2(posX_ + sizeX_);
322 legend->SetY2(posY_ + sizeY_);
323 legend->SetHeader(header_.data());
324 legend->SetOption(option_.data());
325 legend->SetBorderSize(borderSize_);
326 legend->SetFillColor(fillColor_);
356 std::cout <<
"<TauDQMHistPlotter::cfgEntryLabel::print>:" << std::endl;
358 std::cout <<
" posX = " << posX_ << std::endl;
359 std::cout <<
" posY = " << posY_ << std::endl;
360 std::cout <<
" sizeX = " << sizeX_ << std::endl;
361 std::cout <<
" sizeY = " << sizeY_ << std::endl;
362 std::cout <<
" option = " << option_ << std::endl;
363 std::cout <<
" borderSize = " << borderSize_ << std::endl;
364 std::cout <<
" fillColor = " << fillColor_ << std::endl;
365 std::cout <<
" textColor = " << textColor_ << std::endl;
366 std::cout <<
" textSize = " << textSize_ << std::endl;
367 std::cout <<
" textAlign = " << textAlign_ << std::endl;
368 std::cout <<
" textAngle = " << textAngle_ << std::endl;
379 label->SetX1NDC(posX_);
380 label->SetY1NDC(posY_);
381 label->SetX2NDC(posX_ + sizeX_);
382 label->SetY2NDC(posY_ + sizeY_);
383 label->SetOption(option_.data());
384 label->SetBorderSize(borderSize_);
385 label->SetFillColor(fillColor_);
386 label->SetTextColor(textColor_);
387 label->SetTextSize(textSize_);
388 label->SetTextAlign(textAlign_);
389 label->SetTextAngle(textAngle_);
390 for ( vstring::const_iterator
line = text_.begin();
392 label->AddText(
line->data());
424 markerColor_(blueprint.markerColor_), markerSize_(blueprint.markerSize_), markerStyle_(blueprint.markerStyle_),
425 lineColor_(blueprint.lineColor_), lineStyle_(blueprint.lineStyle_), lineWidth_(blueprint.lineWidth_),
426 fillColor_(blueprint.fillColor_), fillStyle_(blueprint.fillStyle_),
427 drawOption_(blueprint.drawOption_), drawOptionLegend_(blueprint.drawOptionLegend_)
434 std::cout <<
"<TauDQMHistPlotter::cfgEntryDrawOption::print>:" << std::endl;
472 : dqmMonitorElement_(dqmMonitorElement),
473 drawOptionEntry_(drawOptionEntry),
474 legendEntry_(legendEntry),
475 legendEntryErrorBand_(legendEntryErrorBand),
497 std::cout <<
"<TauDQMHistPlotter::plotDefEntry::print>:" << std::endl;
519 for ( plotDefList::const_iterator it = plotDefList.begin();
520 it != plotDefList.end(); ++it ) {
531 for ( vstring::const_iterator it = labels.begin();
532 it != labels.end(); ++it ) {
541 std::cout <<
"<TauDQMHistPlotter::cfgSetDrawJob::print>:" << std::endl;
542 std::cout <<
" name = " << name_ << std::endl;
544 for ( plotDefList::const_iterator
plot = plots_.begin();
549 std::cout <<
" title = " << title_ << std::endl;
550 std::cout <<
" xAxis = " << xAxis_ << std::endl;
551 std::cout <<
" yAxis = " << yAxis_ << std::endl;
552 std::cout <<
" legend = " << legend_ << std::endl;
563 std::cout <<
"<TauDQMHistPlotter::TauDQMHistPlotter>:" << std::endl;
571 readCfgParameter<cfgEntryProcess>(cfgParSet_processes,
processes_);
576 int numProcesses_Data = 0;
577 int numProcesses_sumMC = 0;
578 for ( std::map<std::string, cfgEntryProcess>::const_iterator
process =
processes_.begin();
586 edm::LogError (
"TauDQMHistPlotter") <<
" Undefined process type = " << type <<
" !!";
591 if ( type ==
type_Data ) ++numProcesses_Data;
594 if ( (numProcesses_Data > 1) || (numProcesses_sumMC > 1) ) {
595 edm::LogError (
"TauDQMHistPlotter") <<
" Cannot have more than one process of types sumMC and Data !!";
602 readCfgParameter<cfgEntryAxisX>(cfgParSet_xAxes,
xAxes_);
607 readCfgParameter<cfgEntryAxisY>(cfgParSet_yAxes,
yAxes_);
612 readCfgParameter<cfgEntryLegend>(cfgParSet_legends,
legends_);
617 readCfgParameter<cfgEntryLabel>(cfgParSet_labels,
labels_);
621 if ( cfg.
exists(
"drawOptionSets") ) {
624 for ( vstring::const_iterator drawOptionSetName = drawOptionSetNames.begin();
625 drawOptionSetName != drawOptionSetNames.end(); ++drawOptionSetName ) {
629 for ( vstring::const_iterator drawOptionEntryName = drawOptionEntryNames.begin();
630 drawOptionEntryName != drawOptionEntryNames.end(); ++drawOptionEntryName ) {
635 (drawOptionEntryName_full,
cfgEntryDrawOption(drawOptionEntryName_full, drawOptionEntry)));
640 if ( cfg.
exists(
"drawOptionEntries") ) {
642 readCfgParameter<cfgEntryDrawOption>(cfgParSet_drawOptionEntries,
drawOptionEntries_);
649 for ( vstring::const_iterator drawJobName = drawJobNames.begin();
650 drawJobName != drawJobNames.end(); ++drawJobName ) {
653 std::map<int, plotDefList> plotDefMap;
666 for ( vstring::const_iterator
process = processes.begin();
669 for ( vstring::const_iterator dqmMonitorElement = dqmMonitorElements.begin();
670 dqmMonitorElement != dqmMonitorElements.end(); ++dqmMonitorElement ) {
673 plotDefMap[
index].push_back(
plotDefEntry(*dqmMonitorElement, drawOptionEntry,
"",
"", *
process, stack_dqmMonitorElement));
678 typedef std::vector<edm::ParameterSet> vParameterSet;
684 for ( vParameterSet::const_iterator
plot = plots.begin();
687 if ( process ==
"" ||
plot->exists(
"process")) {
696 if (
plot->exists(
"legendEntry") ) {
698 legendEntryErrorBand = (
plot->exists(
"legendEntryErrorBand") ) ?
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));
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;
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) <<
" !!";
732 for ( std::map<int, plotDefList>::iterator
plot = plotDefMap.begin();
733 plot != plotDefMap.end(); ++
plot ) {
734 for ( plotDefList::iterator
entry =
plot->second.begin();
739 std::map<std::string, cfgEntryProcess>::const_iterator it =
processes_.find(process);
741 std::string process_dqmDirectory = it->second.dqmDirectory_;
750 entry->dqmMonitorElement_ = dqmMonitorElement_expanded;
755 edm::LogError (
"TauDQMHistPlotter::TauDQMHistPlotter") <<
" Undefined process = " << process <<
" !!";
772 for ( std::map<int, plotDefList>::iterator
plot = plotDefMap.begin();
773 plot != plotDefMap.end(); ++
plot ) {
774 if ( drawJob.
exists(
"parameter") ) {
778 for ( vstring::const_iterator
parameter = vparameter.begin();
783 for ( plotDefList::const_iterator
entry =
plot->second.begin();
791 plot_expanded.push_back(
plotDefEntry(dqmMonitorElement_expanded,
entry->drawOptionEntry_,
805 if ( errorFlag ) cfgError_ = 1;
808 plot_expanded, title_expanded, xAxis_expanded, yAxis_expanded,
legend,
labels));
812 plot->second, title, xAxis, yAxis, legend, labels));
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 ) {
826 checkCfgDef<cfgEntryAxisX>(drawJob->xAxis_,
xAxes_,
cfgError_,
"xAxis", drawJob->name_);
827 checkCfgDef<cfgEntryAxisY>(drawJob->yAxis_,
yAxes_,
cfgError_,
"yAxis", drawJob->name_);
829 checkCfgDef<cfgEntryLegend>(drawJob->legend_,
legends_,
cfgError_,
"legend", drawJob->name_);
831 checkCfgDefs<cfgEntryLabel>(drawJob->labels_,
labels_,
cfgError_,
"label", drawJob->name_);
864 edm::LogError (
"TauDQMHistPlotter") <<
" Either outputFileName or indOutputFileName must be specified !!";
869 edm::LogError (
"TauDQMHistPlotter") <<
" Must not specify outputFileName and indOutputFileName simultaneously !!";
890 std::cout <<
"<TauDQMHistPlotter::endJob>:" << std::endl;
894 edm::LogError (
"endJob") <<
" Error in Configuration ParameterSet --> histograms will NOT be plotted !!";
900 edm::LogError (
"endJob") <<
" Failed to access dqmStore --> histograms will NOT be plotted !!";
911 gROOT->SetBatch(
true);
916 canvas.SetFillColor(10);
926 TPostScript* ps =
nullptr;
929 ps =
new TPostScript(psFileName.data(), 112);
933 for ( std::list<cfgEntryDrawJob>::const_iterator drawJob =
drawJobs_.begin();
934 drawJob !=
drawJobs_.end(); ++drawJob ) {
937 std::cout <<
"--> processing drawJob " << drawJobName <<
"..." << std::endl;
940 TH1* stackedHistogram_sum =
nullptr;
941 std::list<TH1*> histogramsToDelete;
942 std::list<plotDefEntry*> drawOptionsToDelete;
944 typedef std::pair<TH1*, const plotDefEntry*> histogram_drawOption_pair;
945 std::list<histogram_drawOption_pair> allHistograms;
947 for ( plotDefList::const_iterator
plot = drawJob->plots_.begin();
948 plot != drawJob->plots_.end(); ++
plot ) {
952 std::cout <<
" dqmMonitorElementName_full = " << dqmMonitorElementName_full << std::endl;
955 TH1* histogram = dqmMonitorElement->
getTH1F();
961 if ( histogram ==
nullptr ) {
962 edm::LogError (
"endJob") <<
" Failed to access dqmMonitorElement = " << dqmMonitorElementName_full <<
"," 963 <<
" needed by drawJob = " << drawJobName <<
" --> histograms will NOT be plotted !!";
967 if ( !histogram->GetSumw2N() ) histogram->Sumw2();
970 findCfgDef<cfgEntryDrawOption>(
plot->drawOptionEntry_,
drawOptionEntries_,
"drawOptionEntry", drawJobName);
971 if ( drawOptionConfig ==
nullptr ) {
972 edm::LogError (
"endJob") <<
" Failed to access information needed by drawJob = " << drawJobName
973 <<
" --> histograms will NOT be plotted !!";
979 TH1* histogram_centralValue =
dynamic_cast<TH1*
>(histogram->Clone());
980 histogram_centralValue->SetName(
std::string(histogram->GetName()).
append(
"_centralValue").data());
984 drawOptionConfig_centralValue.
drawOption_ =
"hist";
991 (drawOptionName_centralValue,
cfgEntryDrawOption(drawOptionName_centralValue, drawOptionConfig_centralValue)));
994 allHistograms.push_back(histogram_drawOption_pair(histogram_centralValue, plot_centralValue));
995 histogramsToDelete.push_back(histogram_centralValue);
996 drawOptionsToDelete.push_back(plot_centralValue);
999 TH1* histogram_ErrorBand =
dynamic_cast<TH1*
>(histogram->Clone());
1000 histogram_ErrorBand->SetName(
std::string(histogram->GetName()).
append(
"_ErrorBand").data());
1013 (drawOptionName_ErrorBand,
cfgEntryDrawOption(drawOptionName_ErrorBand, drawOptionConfig_ErrorBand)));
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)));
1027 allHistograms.push_back(histogram_drawOption_pair(histogram, &(*
plot)));
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());
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 ==
nullptr || yAxisConfig ==
nullptr || legendConfig ==
nullptr ) {
1045 edm::LogError (
"endJob") <<
" Failed to access information needed by drawJob = " << drawJobName
1046 <<
" --> histograms will NOT be plotted !!";
1054 legendConfig->applyTo(&legend);
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;
1062 for ( std::list<histogram_drawOption_pair>::const_iterator it = allHistograms.begin();
1063 it != allHistograms.end(); ++it ) {
1064 TH1* histogram = it->first;
1070 if ( drawOptionConfig ==
nullptr || processConfig ==
nullptr ) {
1071 edm::LogError (
"endJob") <<
" Failed to access information needed by drawJob = " << drawJobName
1072 <<
" --> histograms will NOT be plotted !!";
1076 if ( drawJob->title_ !=
"" ) histogram->SetTitle(drawJob->title_.data());
1078 xAxisConfig->applyTo(histogram);
1079 yAxisConfig->applyTo(histogram,yAxisNorm);
1081 bool yLogScale = ( yAxisConfig->yScale_ ==
yScale_log ) ?
true :
false;
1084 canvas.SetLogy(yLogScale);
1086 drawOptionConfig->
applyTo(histogram);
1087 histogram->SetStats(
false);
1092 if ( processConfig->type_ ==
type_smMC ) {
1094 }
else if ( processConfig->type_ ==
type_bsmMC ) {
1098 }
else if ( processConfig->type_ ==
type_Data ) {
1106 legendDrawOption =
"f";
1112 legend.AddEntry(histogram, legendEntry.data(), legendDrawOption.data());
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);
1123 labels.push_back(label);
1133 bool isFirstHistogram =
true;
1139 for ( std::list<histoDrawEntry>::reverse_iterator it = smProcessHistogramList.rbegin();
1140 it != smProcessHistogramList.rend(); ++it ) {
1142 it->first->Draw(drawOption.data());
1143 isFirstHistogram =
false;
1151 for ( std::list<TPaveText>::iterator
label = labels.begin();
1167 canvas.Print(fullFileName.data());
1173 if ( ps ) ps->NewPage();
1176 for ( std::list<TH1*>::const_iterator histogram = histogramsToDelete.begin();
1177 histogram != histogramsToDelete.end(); ++histogram ) {
1178 delete (*histogram);
1181 for ( std::list<plotDefEntry*>::const_iterator
drawOption = drawOptionsToDelete.begin();
1183 delete (*drawOption);
1191 if ( ps ) ps->Close();
const double defaultMaxY_log
const std::string processDirKeyword
T getParameter(std::string const &) const
std::string drawOptionLegend_
const double defaultLabelPosY
const std::string type_Data
const std::string defaultDrawOption
const double defaultMinY_linear
const double defaultLabelSizeY
std::string dqmMonitorElement_
bool existsAs(std::string const ¶meterName, bool trackiness=true) const
checks if a parameter exists as a given type
const std::string yScale_log
std::pair< TH1 *, std::string > histoDrawEntry
cfgEntryLabel(const std::string &, const edm::ParameterSet &)
const double defaultYaxisMaximumScaleFactor_linear
void endRun(const edm::Run &r, const edm::EventSetup &c) override
#define DEFINE_FWK_MODULE(type)
const int defaultLabelFillColor
std::string legendEntryErrorBand_
void applyTo(TH1 *, double norm) const
bool exists(std::string const ¶meterName) const
checks if a parameter exists
const int defaultLineWidth
std::string replace_string(const std::string &src, const std::string &keyword, const std::string ¶meter, unsigned minReplacements, unsigned maxReplacements, int &errorFlag)
std::string dqmDirectory_
const int defaultLabelTextAlign
cfgEntryAxisX(const std::string &, const edm::ParameterSet &)
const int defaultFillStyle
std::string dqmDirectoryName(const std::string &dqmRootDirectory, const std::string &dqmSubDirectory)
void checkCfgDef(const std::string &cfgEntryName, std::map< std::string, T > &def, int &errorFlag, const std::string &defType, const std::string &drawJobName)
cfgEntryDrawOption(const std::string &, const edm::ParameterSet &)
const double defaultMinY_log
const double defaultLabelSizeX
const double defaultLegendSizeX
const std::string defaultDrawOptionLegend
std::vector< std::string > getParameterNamesForType(bool trackiness=true) const
const int defaultMarkerStyle
const double defaultYaxisTitleOffset
void applyTo(TLegend *) const
const double defaultYaxisMaximumScaleFactor_log
const int defaultLabelTextColor
const std::string type_bsmMC
void applyTo(TH1 *) const
const std::string defaultLegendOptions
const std::string defaultLegendHeader
const double defaultLegendSizeY
const std::string drawOption_eBand
const std::string type_smMC
const T * findCfgDef(const std::string &cfgEntryName, std::map< std::string, T > &def, const std::string &defType, const std::string &drawJobName)
bool find_vstring(const std::vector< std::string > &vs, const std::string &s)
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")
~TauDQMHistPlotter() override
const double defaultLabelTextSize
const std::string parKeyword
std::vector< std::string > vstring
void checkCfgDefs(const std::vector< std::string > &cfgEntryNames, std::map< std::string, T > &def, int &errorFlag, const std::string &defType, const std::string &drawJobName)
std::string format_vstring(const std::vector< std::string > &vs)
void drawHistograms(const std::list< histoDrawEntry > &histogramList, bool &isFirstHistogram)
const std::string yScale_linear
cfgEntryProcess(const std::string &, const edm::ParameterSet &)
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
std::string legendEntryErrorBand_
const int defaultCanvasSizeY
const double defaultLegendPosX
const int defaultFillColor
cfgEntryAxisY(const std::string &, const edm::ParameterSet &)
std::list< plotDefEntry > plotDefList
std::string drawOptionEntry_
std::string outputFilePath_
std::map< std::string, cfgEntryDrawOption > drawOptionEntries_
const int defaultLegendFillColor
const std::string drawOptionSeparator
const std::string plotKeyword
plotDefEntry(const std::string &, const std::string &, const std::string &, const std::string &, const std::string &, bool)
const int defaultLabelBorderSize
const double defaultYaxisTitleSize
const std::string defaultLabelOptions
cfgEntryDrawJob(const std::string &, const plotDefList &, const std::string &, const std::string &, const std::string &, const std::string &, const vstring &)
std::list< cfgEntryDrawJob > drawJobs_
const int defaultLineStyle
void applyTo(TH1 *) const
const double defaultXaxisTitleSize
const double defaultMaxY_linear
const int defaultMarkerSize
const std::string dqmRootDirectory
TauDQMHistPlotter(const edm::ParameterSet &)
const int defaultMarkerColor
const int defaultLineColor
const int defaultLegendBorderSize
const double defaultXaxisTitleOffset
std::map< std::string, cfgEntryAxisY > yAxes_
const int defaultCanvasSizeX
std::string indOutputFileName_
const std::string defaultYscale
void applyTo(TPaveText *) const
cfgEntryLegend(const std::string &, const edm::ParameterSet &)
void analyze(const edm::Event &, const edm::EventSetup &) override
const double defaultLegendPosY
const double defaultLabelTextAngle
const double defaultLabelPosX