CMS 3D CMS Logo

Overlayer.h
Go to the documentation of this file.
1 #ifndef OVERLAYER_H
2 #define OVERLAYER_H
3 
4 #include "TFile.h"
5 #include "TH1.h"
6 #include "TCanvas.h"
7 #include "TLegend.h"
8 #include <iostream>
9 #include <sstream>
10 #include "round_string.h"
11 
12 class Overlayer {
13 public:
15  : file_(new TFile(filename.c_str(),"READ")),
17  simLocation_(simdir),
18  color_(color)
19 { clear(); }
20 
21  Overlayer& clear();
23  Overlayer& xlabel(std::string s) { xlabel_=s; return *this;}
24  Overlayer& ylabel(std::string s) { ylabel_=s; return *this;}
25  Overlayer& logy(bool state=true) { logy_=state; return *this;}
26  Overlayer& withLegend(bool state=true);
27  Overlayer& legendLeft(bool state=true) { left_=state; return *this;}
28  void print(std::string);
29 private:
30  std::string getStats(const TH1* const) const;
31 
32  TFile* const file_;
34  const Color_t color_;
36  TH1* data_;
37  TH1* sim_;
38  bool logy_,left_;
39  TLegend* legend_;
40 };
41 
43 clear() {
44  std::cout << "clear" << std::endl;
45  data_=sim_=0;
47  logy_=false;
48  legend_=0;
49  left_=false;
50  return *this;
51 }
52 
55  std::cout << "find " << name << "\t" << std::flush;
56  histName_=name;
57  data_ = (TH1*) file_->GetDirectory(dataLocation_.c_str())->FindObjectAny(name.c_str());
58  sim_ = (TH1*) file_->GetDirectory(simLocation_.c_str())->FindObjectAny(name.c_str());
59  return *this;
60 }
61 
63  std::cout << "legend: " << (state?"true\t":"false\t") << std::flush;
64  if(!state) {legend_=0; return *this;}
65 
66  std::string data_stats = getStats(data_);
67  std::string sim_stats = getStats(sim_);
68  unsigned maxlength = std::max( std::max( dataLocation_.size(), simLocation_.size()),
69  std::max( data_stats.size(), sim_stats.size()) );
70 
71  if(left_) legend_ = new TLegend(0,0.75,maxlength*0.015,1.0);
72  else legend_ = new TLegend(1.0-maxlength*0.015,0.75,1.0,1.0);
73 
74  legend_->SetFillColor(kWhite);
75  legend_->AddEntry(data_,("#splitline{"+dataLocation_+"}{"+ data_stats + "}").c_str() );
76  legend_->AddEntry(sim_,("#splitline{"+simLocation_+"}{"+ sim_stats + "}").c_str() );
77  return *this;
78 }
79 
81 getStats(const TH1* const hist) const {
82  stringstream ss;
83  ss << "N: " << hist->GetEntries() << ", "
84  << "#mu: " << round_string()(std::make_pair(hist->GetMean(),hist->GetMeanError())) << ", "
85  << "#sigma: " << round_string()(std::make_pair(hist->GetRMS(),hist->GetRMSError()));
86  return ss.str().c_str();
87 }
88 
89 void Overlayer::
91  std::cout << "print\t" << std::flush;
92 
93  sim_->GetXaxis()->SetLabelSize(0.05); sim_->GetXaxis()->SetTitleSize(0.05);
94  sim_->GetYaxis()->SetLabelSize(0.05); sim_->GetYaxis()->SetTitleSize(0.05);
95  sim_->SetTitle((title_+";"+xlabel_+";"+ylabel_).c_str());
96  sim_->Scale(data_->Integral()/sim_->Integral());
97  sim_->SetMinimum( (logy_?0.1:0) );
98  sim_->SetMaximum( (logy_?2:1.1) * std::max( sim_->GetBinContent(sim_->GetMaximumBin()) + sim_->GetBinError(sim_->GetMaximumBin()) ,
99  data_->GetBinContent(data_->GetMaximumBin()) + data_->GetBinError(data_->GetMaximumBin()) ) );
100 
101  sim_->SetFillColor(color_);
102  TH1* sim_errors = (TH1*) sim_->Clone((histName_+"_clone").c_str());
103  sim_->SetLineColor(kRed);
104  sim_errors->SetFillColor(kRed);
105  sim_errors->SetFillStyle(3244);
106  data_->SetMarkerStyle(20);
107 
108  TCanvas c("c","",800,600);
109  if(logy_) c.SetLogy();
110 
111  sim_->Draw("hist");
112  sim_errors->Draw("e2same");
113  data_->Draw("same");
114  if(legend_) legend_->Draw();
115 
116  c.Print((histName_+suffix).c_str());
117 }
118 
119 #endif
Overlayer::simLocation_
const std::string simLocation_
Definition: Overlayer.h:33
Overlayer::ylabel
Overlayer & ylabel(std::string s)
Definition: Overlayer.h:24
Overlayer::logy
Overlayer & logy(bool state=true)
Definition: Overlayer.h:25
Overlayer::xlabel
Overlayer & xlabel(std::string s)
Definition: Overlayer.h:23
Overlayer::color_
const Color_t color_
Definition: Overlayer.h:34
gather_cfg.cout
cout
Definition: gather_cfg.py:144
Overlayer::data_
TH1 * data_
Definition: Overlayer.h:36
createPayload.suffix
suffix
Definition: createPayload.py:281
contentValuesCheck.ss
ss
Definition: contentValuesCheck.py:33
alignCSCRings.s
s
Definition: alignCSCRings.py:92
Overlayer::xlabel_
std::string xlabel_
Definition: Overlayer.h:35
Overlayer::clear
Overlayer & clear()
Definition: Overlayer.h:43
compare.hist
hist
Definition: compare.py:376
Overlayer
Definition: Overlayer.h:12
fireworks::datadir
const TString datadir("/src/Fireworks/Core/")
corrVsCorr.filename
filename
Definition: corrVsCorr.py:123
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
Overlayer::Overlayer
Overlayer(std::string filename, std::string datadir, std::string simdir, Color_t color)
Definition: Overlayer.h:14
Overlayer::getStats
std::string getStats(const TH1 *const) const
Definition: Overlayer.h:81
Overlayer::histName_
std::string histName_
Definition: Overlayer.h:35
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
Overlayer::find
Overlayer & find(std::string)
Definition: Overlayer.h:54
Overlayer::dataLocation_
const std::string dataLocation_
Definition: Overlayer.h:33
Overlayer::left_
bool left_
Definition: Overlayer.h:38
Overlayer::withLegend
Overlayer & withLegend(bool state=true)
Definition: Overlayer.h:62
HltBtagPostValidation_cff.c
c
Definition: HltBtagPostValidation_cff.py:31
round_string.h
Overlayer::file_
TFile *const file_
Definition: Overlayer.h:32
round_string
Definition: round_string.h:10
Overlayer::ylabel_
std::string ylabel_
Definition: Overlayer.h:35
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
Overlayer::sim_
TH1 * sim_
Definition: Overlayer.h:37
Overlayer::legendLeft
Overlayer & legendLeft(bool state=true)
Definition: Overlayer.h:27
Overlayer::logy_
bool logy_
Definition: Overlayer.h:38
Overlayer::legend_
TLegend * legend_
Definition: Overlayer.h:39
Overlayer::title_
std::string title_
Definition: Overlayer.h:35
Overlayer::print
void print(std::string)
Definition: Overlayer.h:90