Go to the documentation of this file.00001 #ifndef ElectroWeakAnalysis_EWKTau_DQMHistPlotter_h
00002 #define ElectroWeakAnalysis_EWKTau_DQMHistPlotter_h
00003
00013
00014 #include "FWCore/Framework/interface/EDAnalyzer.h"
00015 #include "FWCore/Framework/interface/Event.h"
00016 #include "FWCore/Framework/interface/EventSetup.h"
00017 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00018
00019 #include "DQMServices/Core/interface/DQMDefinitions.h"
00020
00021 #include <TH1.h>
00022 #include <TLegend.h>
00023 #include <TPaveText.h>
00024
00025 #include <string>
00026 #include <vector>
00027 #include <map>
00028
00029 class DQMHistPlotter : public edm::EDAnalyzer
00030 {
00031 typedef std::vector<std::string> vstring;
00032
00033 struct cfgEntryProcess
00034 {
00035 cfgEntryProcess(const std::string&, const edm::ParameterSet&);
00036 void print() const;
00037 std::string name_;
00038 std::string dqmDirectory_;
00039 std::string legendEntry_;
00040 std::string legendEntryErrorBand_;
00041 std::string type_;
00042 };
00043
00044 struct cfgEntryAxisX
00045 {
00046 explicit cfgEntryAxisX(const std::string&, const edm::ParameterSet&);
00047 void print() const;
00048 void applyTo(TH1*) const;
00049 std::string name_;
00050 double minX_;
00051 double maxX_;
00052 std::string xAxisTitle_;
00053 double xAxisTitleOffset_;
00054 double xAxisTitleSize_;
00055 };
00056
00057 struct cfgEntryAxisY
00058 {
00059 explicit cfgEntryAxisY(const std::string&, const edm::ParameterSet&);
00060 void print() const;
00061 static void setNorm(double yAxisNorm) { yAxisNorm_ = yAxisNorm; }
00062 void applyTo(TH1*) const;
00063 std::string name_;
00064 double minY_linear_;
00065 double minY_log_;
00066 double maxY_linear_;
00067 double maxY_log_;
00068 std::string yScale_;
00069 std::string yAxisTitle_;
00070 double yAxisTitleOffset_;
00071 double yAxisTitleSize_;
00072 static double yAxisNorm_;
00073 };
00074
00075 struct cfgEntryLegend
00076 {
00077 cfgEntryLegend(const std::string&, const edm::ParameterSet&);
00078 void print() const;
00079 void applyTo(TLegend*) const;
00080 std::string name_;
00081 double posX_;
00082 double posY_;
00083 double sizeX_;
00084 double sizeY_;
00085 std::string header_;
00086 std::string option_;
00087 int borderSize_;
00088 int fillColor_;
00089 };
00090
00091 struct cfgEntryLabel
00092 {
00093 cfgEntryLabel(const std::string&, const edm::ParameterSet&);
00094 void print() const;
00095 void applyTo(TPaveText*) const;
00096 std::string name_;
00097 double posX_;
00098 double posY_;
00099 double sizeX_;
00100 double sizeY_;
00101 std::string option_;
00102 int borderSize_;
00103 int fillColor_;
00104 int textColor_;
00105 double textSize_;
00106 int textAlign_;
00107 double textAngle_;
00108 vstring text_;
00109 };
00110
00111 struct cfgEntryDrawOption
00112 {
00113 cfgEntryDrawOption(const std::string&, const edm::ParameterSet&);
00114 cfgEntryDrawOption(const std::string&, const cfgEntryDrawOption&);
00115 void print() const;
00116 void applyTo(TH1*) const;
00117 std::string name_;
00118 int markerColor_;
00119 double markerSize_;
00120 int markerStyle_;
00121 int lineColor_;
00122 int lineStyle_;
00123 int lineWidth_;
00124 int fillColor_;
00125 int fillStyle_;
00126 std::string drawOption_;
00127 std::string drawOptionLegend_;
00128 };
00129
00130 struct plotDefEntry
00131 {
00132 plotDefEntry(const std::string&, const std::string&, const std::string&, const std::string&, const std::string&, bool);
00133 plotDefEntry(const plotDefEntry&);
00134 void print() const;
00135 std::string dqmMonitorElement_;
00136 std::string drawOptionEntry_;
00137 std::string legendEntry_;
00138 std::string legendEntryErrorBand_;
00139 std::string process_;
00140 bool doStack_;
00141 bool isErrorBand_;
00142 };
00143
00144 typedef std::list<plotDefEntry> plotDefList;
00145
00146 struct cfgEntryDrawJob
00147 {
00148 cfgEntryDrawJob(const std::string&, const plotDefList&, const std::string&, const std::string&, const std::string&, const std::string&, const vstring&);
00149 void print() const;
00150 std::string name_;
00151 plotDefList plots_;
00152 std::string title_;
00153 std::string xAxis_;
00154 std::string yAxis_;
00155 std::string legend_;
00156 vstring labels_;
00157 };
00158
00159 public:
00160 explicit DQMHistPlotter(const edm::ParameterSet&);
00161 virtual ~DQMHistPlotter();
00162 virtual void analyze(const edm::Event&, const edm::EventSetup&);
00163 virtual void endJob();
00164
00165 private:
00166 std::map<std::string, cfgEntryProcess> processes_;
00167 std::map<std::string, cfgEntryAxisX> xAxes_;
00168 std::map<std::string, cfgEntryAxisY> yAxes_;
00169 std::map<std::string, cfgEntryLegend> legends_;
00170 std::map<std::string, cfgEntryLabel> labels_;
00171 std::map<std::string, cfgEntryDrawOption> drawOptionEntries_;
00172 std::list<cfgEntryDrawJob> drawJobs_;
00173 int canvasSizeX_;
00174 int canvasSizeY_;
00175 std::string outputFilePath_;
00176 std::string outputFileName_;
00177 std::string indOutputFileName_;
00178 int cfgError_;
00179 };
00180
00181 #endif
00182
00183