34 Plot(TString xTitle, TString yTitle);
39 template <
class PO>
static void SetLineProperties(PO* pobj, Color_t
color, Style_t lstyle, Size_t lwid = 2.);
41 template <
class PO>
static void SetPlottjectProperties(PO* pobj, Color_t
color, Style_t mstyle, Size_t msize = 3., Style_t lstyle = 1, Size_t lwid= 2., std::string title =
"");
45 void SetCanvasMargins(Float_t rMargin, Float_t lMargin, Float_t tMargin, Float_t bMargin);
47 void SetLog(Bool_t xLog = kFALSE, Bool_t yLog = kTRUE);
48 void SetRanges(Float_t xLow, Float_t xUp, Float_t yLow, Float_t yUp);
52 void SetStyle(std::vector<Color_t> col, std::vector<Style_t> mark, std::vector<Size_t> siz = {}, std::vector<Style_t> lstyl = {}, std::vector<Size_t> lwid = {});
54 void SetPalette(Int_t pal, Bool_t invert = kFALSE);
57 void SetOptions(std::vector<std::string> optns);
58 virtual void SetOptions(std::string optns, std::string postns, Int_t off = 0);
59 void SetOption(std::string opt, Int_t pos);
63 void EnsureAxes(TObject* first, std::string arrayName =
"");
64 template <
class AO>
void SetCanvasStyle(AO* first, Float_t xOff, Float_t yOff);
65 template <
class AO>
void SetPadStyle(AO* first, TString xTitle, TString yTitle, Float_t xUp, Float_t xLow, Float_t yUp, Float_t yLow);
69 void SetUpStyle(TObject* first, TString xTitle, TString yTitle, Float_t xUp, Float_t xLow, Float_t yUp, Float_t yLow, Float_t xOff, Float_t yOff);
70 void SetUpPad(TPad* pad, Bool_t xLog, Bool_t yLog);
71 void DrawArray(TObjArray* array, Int_t off = 0, Int_t offOpt = 0);
83 static std::vector<Size_t>
sizes;
127 Plot::Plot(TString xTitle, TString yTitle):
159 first->GetXaxis()->SetTitleOffset(xOff);
160 first->GetYaxis()->SetTitleOffset(yOff);
161 first->GetXaxis()->SetTickSize(0.03);
162 first->GetYaxis()->SetTickSize(0.03);
163 first->GetXaxis()->SetTitleSize(
label);
164 first->GetYaxis()->SetTitleSize(
label);
165 first->GetXaxis()->SetTitleFont(
font);
166 first->GetYaxis()->SetTitleFont(
font);
167 first->GetXaxis()->SetLabelFont(
font);
168 first->GetYaxis()->SetLabelFont(
font);
169 first->GetXaxis()->SetLabelSize(
label);
170 first->GetYaxis()->SetLabelSize(
label);
175 void Plot::SetPadStyle(AO* first, TString xTitle, TString yTitle, Float_t xUp, Float_t xLow, Float_t yUp, Float_t yLow){
179 if (first->InheritsFrom(
"TGraph")) first->GetXaxis()->SetLimits(xLow, xUp);
180 else first->GetXaxis()->SetRangeUser(xLow, xUp);
181 first->GetYaxis()->SetRangeUser(yLow, yUp);
182 first->GetXaxis()->SetTitle(xTitle);
183 first->GetYaxis()->SetTitle(yTitle);
187 void Plot::SetUpStyle(TObject* first, TString xTitle, TString yTitle, Float_t xUp, Float_t xLow, Float_t yUp, Float_t yLow, Float_t xOff, Float_t yOff){
191 if (first->InheritsFrom(
"TH1")){
193 SetPadStyle((TH1*)first, xTitle, yTitle, xUp, xLow, yUp, yLow);
196 else if (first->InheritsFrom(
"TF1")){
198 SetPadStyle((TF1*)first, xTitle, yTitle, xUp, xLow, yUp, yLow);
201 else if (first->InheritsFrom(
"TMultiGraph")){
202 SetPadStyle((TMultiGraph*)first, xTitle, yTitle, xUp, xLow, yUp, yLow);
213 pobj->SetLineStyle(lstyle);
214 pobj->SetLineWidth(lwid);
215 pobj->SetLineColor(color);
224 pobj->SetMarkerColor(color);
225 pobj->SetMarkerStyle(mstyle);
226 pobj->SetMarkerSize(msize);
235 if (!title.empty()) pobj->SetTitle(title.data());
245 if (obj->InheritsFrom(
"TPave")){
246 ((TLegend*)obj)->SetTextFont(
font);
247 ((TLegend*)obj)->SetTextSize(
label);
248 ((TLegend*)obj)->SetBorderSize(0);
251 else if (obj->InheritsFrom(
"TH1")) ((TH1*)obj)->SetStats(kFALSE);
255 Double_t size, lwidth; Int_t lstyle,
color, marker;
257 size = (index <
sizes.size()) ?
sizes[index] : 2.;
260 color = (index <
colors.size()) ?
colors[index] : kBlack;
263 if (obj->InheritsFrom(
"TH1")) {
266 else if (obj->InheritsFrom(
"TF1")){
269 else if (obj->InheritsFrom(
"TGraph")){
272 else if (obj->InheritsFrom(
"TMultiGraph")){
273 TIter iMultiGraph(((TMultiGraph*)obj)->GetListOfGraphs());
274 while (TObject* graph = iMultiGraph()){
275 if (!graph)
continue;
276 if (index >=
markers.size())
break;
282 else if (obj->InheritsFrom(
"TLine")){
285 else if (obj->InheritsFrom(
"TMarker")){
289 std::cout <<
"\033[1;34mMissing Class \033[0m" << obj->ClassName() << std::endl;
367 xRangeUp = ((TH1*)first)->GetXaxis()->GetBinCenter(binHigh+2);
368 xRangeLow = ((TH1*)first)->GetXaxis()->GetBinCenter(binLow-1);
377 if (first->InheritsFrom(
"TH1")){
378 ((TH1*)first)->GetXaxis()->SetLabelSize(0);
379 ((TH1*)first)->GetXaxis()->SetLabelColor(kWhite);
381 else if (first->InheritsFrom(
"TF1")){
382 ((TF1*)first)->GetXaxis()->SetLabelSize(0);
383 ((TF1*)first)->GetXaxis()->SetLabelColor(kWhite);
385 else if (first->InheritsFrom(
"TMultiGraph")){
386 ((TMultiGraph*)first)->GetXaxis()->SetLabelSize(0);
387 ((TMultiGraph*)first)->GetXaxis()->SetLabelColor(kWhite);
397 if (first->InheritsFrom(
"TH1")){
398 ((TH1*)first)->GetYaxis()->SetLabelSize(0);
399 ((TH1*)first)->GetYaxis()->SetLabelColor(kWhite);
401 else if (first->InheritsFrom(
"TF1")){
402 ((TF1*)first)->GetYaxis()->SetLabelSize(0);
403 ((TF1*)first)->GetYaxis()->SetLabelColor(kWhite);
405 else if (first->InheritsFrom(
"TMultiGraph")){
406 ((TMultiGraph*)first)->GetYaxis()->SetLabelSize(0);
407 ((TMultiGraph*)first)->GetYaxis()->SetLabelColor(kWhite);
437 void Plot::SetStyle(std::vector<Color_t> col, std::vector<Style_t> mark, std::vector<Size_t> siz, std::vector<Style_t> lstyl, std::vector<Size_t> lwid){
444 if (!siz.empty())
sizes = std::move(siz);
446 if (!lstyl.empty())
lstyles = std::move(lstyl);
448 if (!lwid.empty())
lwidths = std::move(lwid);
473 if (
palColors.empty()) std::cout <<
"\033[1;31mERROR:\033[0m Gradient is empty!" << std::endl;
484 options.resize(size, opt.Data());
503 std::istringstream
options(optns);
504 std::istringstream positions(postns);
506 TString* opt =
new TString();
507 TString* pos =
new TString();
509 opt->ReadLine(options);
510 pos->ReadToken(positions);
512 while(!opt->IsNull() && !pos->IsNull()) {
514 SetOption(opt->Data(), pos->Atoi() + off);
515 std::cout <<
"- " << opt->Data() <<
" " << pos->Data() << std::endl;
517 opt->ReadLine(options);
518 pos->ReadToken(positions);
530 else std::cout <<
"\033[1;31mERROR in Set Options:\033[0m Position \033[1;34m" << pos <<
"\033[0m is out of range!" << std::endl;
538 gStyle->SetOptTitle(0);
541 TColor::InvertPalette();
545 pad->SetFillStyle(4100);
555 else std::cout <<
"\033[1;31mERROR in SetLog:\033[0m X-Ranges must be above zero! Logarithm not set!!" << std::endl;
559 else std::cout <<
"\033[1;31mERROR in SetLog:\033[0m Y-Ranges must be above zero! Logarithm not set!!" << std::endl;
570 std::cout <<
"\033[1;33mFATAL ERROR:\033[0m First entry in array doesn't exist!!" << std::endl;
576 if (!(first->InheritsFrom(
"TH1")) && !(first->InheritsFrom(
"TF1")) && !(first->InheritsFrom(
"TMultiGraph"))){
578 std::cout <<
"\033[1;33mFATAL ERROR:\033[0m First entry in array must have axes "
579 <<
"\033[1;36m(" << arrayName <<
")\033[0m" << std::endl;
591 Int_t nPlots = array->GetEntries();
594 for (Int_t plot = 0; plot < nPlots; plot++){
596 if(!array->At(plot)) {
597 std::cout <<
"\033[1;31mERROR:\033[0m Plot object No " << plot <<
" is broken! Will be skipped." << std::endl;
601 if ((plot == 0) && array->At(plot)->InheritsFrom(
"TF1")) opt = TString(
options[plot+offOpt]).ReplaceAll(
"SAME",
"").Data();
602 else if (array->At(plot)->InheritsFrom(
"TGraph")) opt = TString(
options[plot+offOpt]).ReplaceAll(
"SAME",
"").Data();
603 else opt =
options[plot+offOpt].data();
605 std::cout <<
" -> Draw " << array->At(plot)->ClassName() <<
": "
606 << array->At(plot)->GetName() <<
" as " << opt << std::endl;
609 array->At(plot)->Draw(opt.data());
static std::vector< Size_t > lwidths
Object line width.
Definition: PlotBase.h:84
vector< Int_t > GetPalette()
Definition: Color.h:106
static Bool_t inversion
Should palette be inverted?
Definition: PlotBase.h:77
Float_t bottomMargin
Bottom margin of (main) pad.
Definition: PlotBase.h:97
void SetCanvasOffsets(Float_t xOffset, Float_t yOffset)
Definition: PlotBase.h:314
static std::vector< Style_t > lstyles
Object line style.
Definition: PlotBase.h:82
Float_t yRangeLow
Lower Y-axis range.
Definition: PlotBase.h:101
static void SetLineProperties(PO *pobj, Color_t color, Style_t lstyle, Size_t lwid=2.)
Definition: PlotBase.h:209
TPad * mainPad
Main pad.
Definition: PlotBase.h:73
Mode
Enumerator for choice of Mode, determining font size and style.
Definition: PlotBase.h:27
static std::vector< Style_t > markers
Object marker style.
Definition: PlotBase.h:81
Float_t offsetY
Offset of Y title.
Definition: PlotBase.h:93
Structure for saving RGB colors.
Definition: Color.h:18
Base class for all plotting functionality.
Definition: PlotBase.h:21
void SetOptions(TString opt)
Definition: PlotBase.h:478
Bool_t logX
Should X-axis be logarithmic?
Definition: PlotBase.h:98
static void SetMarkerProperties(PO *pobj, Color_t color, Style_t mstyle, Size_t msize=3.)
Definition: PlotBase.h:220
static Int_t mOffset
Offset for style array index.
Definition: PlotBase.h:114
void SetPalette(Int_t pal, Bool_t invert=kFALSE)
Definition: PlotBase.h:455
void Draw()
Abstract template for function.
Definition: PlotBase.h:37
void SetUpStyle(TObject *first, TString xTitle, TString yTitle, Float_t xUp, Float_t xLow, Float_t yUp, Float_t yLow, Float_t xOff, Float_t yOff)
Definition: PlotBase.h:187
static Style_t label
Label size.
Definition: PlotBase.h:112
void SetOffset(Int_t off)
Definition: PlotBase.h:345
Float_t topMargin
Top margin of (main) pad.
Definition: PlotBase.h:96
void SetMode(Mode m)
Definition: PlotBase.h:412
Float_t height
Height of canvas.
Definition: PlotBase.h:91
Float_t rightMargin
Right margin of (main) pad.
Definition: PlotBase.h:94
static void SetPlottjectProperties(PO *pobj, Color_t color, Style_t mstyle, Size_t msize=3., Style_t lstyle=1, Size_t lwid=2., std::string title="")
Definition: PlotBase.h:231
Class for saving color gradients (palettes)
Definition: Color.h:41
Plots will be used for a presentation.
Definition: PlotBase.h:28
void DrawArray(TObjArray *array, Int_t off=0, Int_t offOpt=0)
Definition: PlotBase.h:587
Bool_t logY
Should Y-axis be logarithmic?
Definition: PlotBase.h:99
void SetCanvasMargins(Float_t rMargin, Float_t lMargin, Float_t tMargin, Float_t bMargin)
Definition: PlotBase.h:303
void SuppressYaxis(AO *first)
Definition: PlotBase.h:393
void SetStyle(std::vector< Color_t > col, std::vector< Style_t > mark, std::vector< Size_t > siz={}, std::vector< Style_t > lstyl={}, std::vector< Size_t > lwid={})
Definition: PlotBase.h:437
void EnsureAxes(TObject *first, std::string arrayName="")
Definition: PlotBase.h:564
void SetCanvasStyle(AO *first, Float_t xOff, Float_t yOff)
Definition: PlotBase.h:155
void SetPadStyle(AO *first, TString xTitle, TString yTitle, Float_t xUp, Float_t xLow, Float_t yUp, Float_t yLow)
Definition: PlotBase.h:175
static std::vector< Size_t > sizes
Object marker size.
Definition: PlotBase.h:83
std::vector< std::string > options
Drawing options.
Definition: PlotBase.h:85
static std::vector< Color_t > colors
Object colors.
Definition: PlotBase.h:80
TString titleY
Title of Y-axis.
Definition: PlotBase.h:88
Float_t xRangeUp
Upper X-axis range.
Definition: PlotBase.h:104
static std::vector< Int_t > palColors
Color vector of personalised palette.
Definition: PlotBase.h:79
Int_t GetXfirstFilledBin(AO *hst)
Definition: functionality.h:13
void ToggleStyle()
Toggle wether style arrays are used. Note that SetStyles will automatically set this to on...
Definition: PlotBase.h:53
Float_t xRangeLow
Lower X-axis range.
Definition: PlotBase.h:103
Int_t GetNpoints()
Definition: Color.h:126
void SetOption(std::string opt, Int_t pos)
Definition: PlotBase.h:524
Placeholder.
Definition: PlotBase.h:30
static Style_t font
Font style.
Definition: PlotBase.h:111
TString titleX
Title of X-axis.
Definition: PlotBase.h:87
Int_t GetXlastFilledBin(AO *hst)
Definition: functionality.h:29
void SuppressXaxis(AO *first)
Definition: PlotBase.h:373
Bool_t ranges
Were ranges set manually?
Definition: PlotBase.h:106
static Bool_t inverted
Is palette currently inverted?
Definition: PlotBase.h:78
Float_t offsetX
Offset of X title.
Definition: PlotBase.h:92
void SetRanges(Float_t xLow, Float_t xUp, Float_t yLow, Float_t yUp)
Definition: PlotBase.h:332
Float_t yRangeUp
Upper Y-axis range.
Definition: PlotBase.h:102
TCanvas * canvas
Main canvas.
Definition: PlotBase.h:74
Float_t width
Width of canvas.
Definition: PlotBase.h:90
Plots will be used for a thesis.
Definition: PlotBase.h:29
void SetProperties(TObject *obj, Int_t index)
Definition: PlotBase.h:241
Bool_t broken
Did any fatal error occur?
Definition: PlotBase.h:107
static Bool_t styles
Were styles set manually?
Definition: PlotBase.h:109
void SetUpPad(TPad *pad, Bool_t xLog, Bool_t yLog)
Definition: PlotBase.h:534
void SetLog(Bool_t xLog=kFALSE, Bool_t yLog=kTRUE)
Definition: PlotBase.h:323
Float_t leftMargin
Left margin of (main) pad.
Definition: PlotBase.h:95
static Int_t palette
Color Palette.
Definition: PlotBase.h:76
void SetCanvasDimensions(Float_t cWidth, Float_t cHeight)
Definition: PlotBase.h:294
void SetRangesAuto(AO *first)
Definition: PlotBase.h:354