CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_2_9_HLT1_bphpatch4/src/Validation/RecoTau/plugins/DQMHistPlotter.h

Go to the documentation of this file.
00001 #ifndef ElectroWeakAnalysis_EWKTau_DQMHistPlotter_h
00002 #define ElectroWeakAnalysis_EWKTau_DQMHistPlotter_h
00003 
00013 // framework & common header files
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