1277 lines
43 KiB
C++
1277 lines
43 KiB
C++
//Helper function for making pretty plots
|
|
//Renata Kopecna
|
|
|
|
|
|
#include "Design.hpp"
|
|
|
|
using namespace std;
|
|
|
|
void design_markers(TH1F *histogram, string xaxis_name, string yaxis_name, Color_t color){
|
|
gStyle->SetOptStat(0);
|
|
histogram->SetMarkerStyle(8);
|
|
histogram->SetMarkerColor(color);
|
|
histogram->GetXaxis()->SetTitle(xaxis_name.c_str());
|
|
histogram->GetYaxis()->SetTitle(yaxis_name.c_str());
|
|
histogram->GetYaxis()->SetTitleOffset(1.9);
|
|
histogram->GetXaxis()->SetTitleOffset(1.0);
|
|
histogram->GetXaxis()->SetTitleSize(0.05);
|
|
histogram->GetYaxis()->SetTitleSize(0.05);
|
|
histogram->GetXaxis()->SetLabelSize(0.045);
|
|
histogram->GetYaxis()->SetLabelSize(0.045);
|
|
|
|
histogram->SetLineColor(color);
|
|
}
|
|
void design_markers(TH1D *histogram, string xaxis_name, string yaxis_name, Color_t color){
|
|
gStyle->SetOptStat(0);
|
|
histogram->SetMarkerStyle(8);
|
|
histogram->SetMarkerColor(color);
|
|
histogram->GetXaxis()->SetTitle(xaxis_name.c_str());
|
|
histogram->GetYaxis()->SetTitle(yaxis_name.c_str());
|
|
histogram->GetYaxis()->SetTitleOffset(1.9);
|
|
histogram->GetXaxis()->SetTitleOffset(1.0);
|
|
histogram->GetXaxis()->SetTitleSize(0.05);
|
|
histogram->GetYaxis()->SetTitleSize(0.05);
|
|
histogram->GetXaxis()->SetLabelSize(0.045);
|
|
histogram->GetYaxis()->SetLabelSize(0.045);
|
|
|
|
histogram->SetLineColor(color);
|
|
}
|
|
void design_markers(TEfficiency *histogram, string xaxis_name, string yaxis_name, Color_t color){ //TODO
|
|
gStyle->SetOptStat(0);
|
|
histogram->SetMarkerStyle(8);
|
|
histogram->SetMarkerColor(color);
|
|
histogram->SetLineColor(color);
|
|
}
|
|
|
|
void design_lines(TH1F *histogram, string xaxis_name, string yaxis_name, Color_t color){
|
|
gStyle->SetOptStat(0);
|
|
histogram->SetLineWidth(3);
|
|
histogram->GetXaxis()->SetTitle(xaxis_name.c_str());
|
|
histogram->GetYaxis()->SetTitle(yaxis_name.c_str());
|
|
histogram->GetYaxis()->SetTitleOffset(1.3);
|
|
histogram->GetXaxis()->SetTitleOffset(1.1);
|
|
|
|
histogram->GetYaxis()->SetTitleSize(0.05);
|
|
histogram->GetXaxis()->SetTitleSize(0.05);
|
|
histogram->GetYaxis()->SetLabelSize(0.04);
|
|
histogram->GetXaxis()->SetLabelSize(0.04);
|
|
|
|
histogram->SetLineColor(color);
|
|
}
|
|
void design_lines(TH1D *histogram, string xaxis_name, string yaxis_name, Color_t color){
|
|
gStyle->SetOptStat(0);
|
|
histogram->SetLineWidth(3);
|
|
histogram->GetXaxis()->SetTitle(xaxis_name.c_str());
|
|
histogram->GetYaxis()->SetTitle(yaxis_name.c_str());
|
|
histogram->GetYaxis()->SetTitleOffset(1.3);
|
|
histogram->GetXaxis()->SetTitleOffset(1.05);
|
|
|
|
histogram->GetYaxis()->SetTitleSize(0.05);
|
|
histogram->GetXaxis()->SetTitleSize(0.05);
|
|
histogram->GetYaxis()->SetLabelSize(0.04);
|
|
histogram->GetXaxis()->SetLabelSize(0.04);
|
|
|
|
histogram->SetLineColor(color);
|
|
}
|
|
void design_lines(TH1 *histogram, string xaxis_name, string yaxis_name, Color_t color){
|
|
gStyle->SetOptStat(0);
|
|
histogram->SetLineWidth(3);
|
|
histogram->GetXaxis()->SetTitle(xaxis_name.c_str());
|
|
histogram->GetYaxis()->SetTitle(yaxis_name.c_str());
|
|
|
|
histogram->GetYaxis()->SetTitleOffset(1.3);
|
|
histogram->GetXaxis()->SetTitleOffset(1.05);
|
|
|
|
histogram->GetYaxis()->SetTitleSize(0.05);
|
|
histogram->GetXaxis()->SetTitleSize(0.05);
|
|
histogram->GetYaxis()->SetLabelSize(0.04);
|
|
histogram->GetXaxis()->SetLabelSize(0.04);
|
|
|
|
histogram->SetLineColor(color);
|
|
}
|
|
|
|
void design_filled_plot(TH1F *histogram, string xaxis_name, string yaxis_name, Color_t fill_color, int fill_style){
|
|
gStyle->SetOptStat(0);
|
|
|
|
histogram->SetLineWidth(2);
|
|
histogram->GetXaxis()->SetTitle(xaxis_name.c_str());
|
|
histogram->GetYaxis()->SetTitle(yaxis_name.c_str());
|
|
histogram->GetYaxis()->SetTitleOffset(1.0);
|
|
histogram->GetXaxis()->SetTitleOffset(1.0);
|
|
|
|
histogram->GetYaxis()->SetTitleSize(0.05);
|
|
histogram->GetXaxis()->SetTitleSize(0.05);
|
|
histogram->GetYaxis()->SetLabelSize(0.05);
|
|
histogram->GetXaxis()->SetLabelSize(0.05);
|
|
|
|
histogram->SetFillColor(fill_color);
|
|
histogram->SetFillStyle(fill_style);
|
|
}
|
|
void design_filled_plot(TH1D *histogram, string xaxis_name, string yaxis_name, Color_t fill_color, int fill_style){
|
|
gStyle->SetOptStat(0);
|
|
|
|
histogram->SetLineWidth(2);
|
|
histogram->GetXaxis()->SetTitle(xaxis_name.c_str());
|
|
histogram->GetYaxis()->SetTitle(yaxis_name.c_str());
|
|
histogram->GetYaxis()->SetTitleOffset(1.0);
|
|
histogram->GetXaxis()->SetTitleOffset(1.0);
|
|
|
|
histogram->GetYaxis()->SetTitleSize(0.05);
|
|
histogram->GetXaxis()->SetTitleSize(0.05);
|
|
histogram->GetYaxis()->SetLabelSize(0.05);
|
|
histogram->GetXaxis()->SetLabelSize(0.05);
|
|
|
|
histogram->SetFillColor(fill_color);
|
|
histogram->SetFillStyle(fill_style);
|
|
}
|
|
void design_filled_plot(TH1F *histogram, string xaxis_name, string yaxis_name, Color_t fill_color, int fill_style, Color_t line_color){
|
|
design_filled_plot(histogram,xaxis_name,yaxis_name,fill_color,fill_style);
|
|
histogram->SetLineColor(line_color);
|
|
}
|
|
void design_filled_plot(TH1D *histogram, string xaxis_name, string yaxis_name, Color_t fill_color, int fill_style , Color_t line_color){
|
|
design_filled_plot(histogram,xaxis_name,yaxis_name,fill_color,fill_style);
|
|
histogram->SetLineColor(line_color);
|
|
}
|
|
|
|
void design_canvas(TCanvas *canvas){
|
|
canvas->SetRightMargin(0.05);
|
|
canvas->SetTopMargin(0.1);
|
|
canvas->SetLeftMargin(0.13);
|
|
canvas->SetBottomMargin(0.12);
|
|
}
|
|
void design_canvas(TCanvas *canvas, string title){
|
|
design_canvas(canvas);
|
|
canvas->SetTitle(title.c_str());
|
|
}
|
|
void design_canvas_Bmass(TCanvas *canvas){
|
|
canvas->SetRightMargin(0.03);
|
|
canvas->SetTopMargin(0.1);
|
|
canvas->SetLeftMargin(0.09);
|
|
canvas->SetBottomMargin(0.12);
|
|
}
|
|
void design_canvas_Bmass(TCanvas *canvas, string title){
|
|
design_canvas_Bmass(canvas);
|
|
canvas->SetTitle(title.c_str());
|
|
}
|
|
TCanvas *c_TH2F(string c_name){
|
|
TCanvas *c_eff = new TCanvas(c_name.c_str(),c_name.c_str(),750, 700);
|
|
c_eff->SetRightMargin(0.14);
|
|
gStyle->SetOptStat(0);
|
|
c_eff->SetLeftMargin(0.14);
|
|
c_eff->SetTopMargin(0.075);
|
|
c_eff->SetBottomMargin(0.12);
|
|
return c_eff;
|
|
|
|
}
|
|
|
|
void design_canvas_TH2F(TCanvas *canvas){
|
|
canvas->SetRightMargin(0.15);
|
|
canvas->SetTopMargin(0.04);
|
|
canvas->SetBottomMargin(0.25);
|
|
canvas->SetLeftMargin(0.25);
|
|
}
|
|
void design_canvas_fancy(TCanvas *canvas){
|
|
canvas->SetRightMargin(0.515);
|
|
canvas->SetTopMargin(0.05);
|
|
canvas->SetBottomMargin(0.12);
|
|
canvas->SetLeftMargin(0.3);
|
|
}
|
|
|
|
void design_TH2F(TH2F *histogram, string xaxis_name, string yaxis_name, string zaxis_name){
|
|
gStyle->SetOptStat(0);
|
|
histogram->GetXaxis()->SetTitle(xaxis_name.c_str());
|
|
histogram->GetYaxis()->SetTitle(yaxis_name.c_str());
|
|
histogram->GetZaxis()->SetTitle(zaxis_name.c_str());
|
|
|
|
histogram->GetXaxis()->SetTitleOffset(0.95);
|
|
histogram->GetYaxis()->SetTitleOffset(1.5);
|
|
histogram->GetZaxis()->SetTitleOffset(0.8);
|
|
|
|
histogram->GetXaxis()->SetTitleSize(0.05);
|
|
histogram->GetYaxis()->SetTitleSize(0.05);
|
|
histogram->GetZaxis()->SetTitleSize(0.04);
|
|
|
|
histogram->GetXaxis()->SetLabelSize(0.04);
|
|
histogram->GetYaxis()->SetLabelSize(0.04);
|
|
histogram->GetZaxis()->SetLabelSize(0.04);
|
|
//histogram->GetZaxis()->CenterTitle(kTRUE);
|
|
histogram->SetTitle("");
|
|
}
|
|
|
|
void design_TH2F(TH2D *histogram, string xaxis_name, string yaxis_name, string zaxis_name){
|
|
gStyle->SetOptStat(0);
|
|
histogram->GetXaxis()->SetTitle(xaxis_name.c_str());
|
|
histogram->GetYaxis()->SetTitle(yaxis_name.c_str());
|
|
histogram->GetZaxis()->SetTitle(zaxis_name.c_str());
|
|
|
|
histogram->GetXaxis()->SetTitleOffset(0.95);
|
|
histogram->GetYaxis()->SetTitleOffset(1.5);
|
|
histogram->GetZaxis()->SetTitleOffset(0.8);
|
|
|
|
histogram->GetXaxis()->SetTitleSize(0.05);
|
|
histogram->GetYaxis()->SetTitleSize(0.05);
|
|
histogram->GetZaxis()->SetTitleSize(0.04);
|
|
|
|
histogram->GetXaxis()->SetLabelSize(0.04);
|
|
histogram->GetYaxis()->SetLabelSize(0.04);
|
|
histogram->GetZaxis()->SetLabelSize(0.04);
|
|
//histogram->GetZaxis()->CenterTitle(kTRUE);
|
|
histogram->SetTitle("");
|
|
}
|
|
|
|
void design_TH2F(TH2F *histogram, string xaxis_name, string yaxis_name, string zaxis_name, int palette){
|
|
design_TH2F(histogram,xaxis_name,yaxis_name,zaxis_name);
|
|
gStyle->SetPalette(palette);
|
|
}
|
|
|
|
void design_TH2F(TH2D *histogram, string xaxis_name, string yaxis_name, string zaxis_name, int palette){
|
|
design_TH2F(histogram,xaxis_name,yaxis_name,zaxis_name);
|
|
gStyle->SetPalette(palette);
|
|
}
|
|
|
|
void design_TH2F_ratio(TH2F *histogram, string xaxis_name, string yaxis_name, string zaxis_name, int palette){
|
|
gStyle->SetOptStat(0);
|
|
histogram->GetXaxis()->SetTitle(xaxis_name.c_str());
|
|
histogram->GetYaxis()->SetTitle(yaxis_name.c_str());
|
|
string zaxis_name_offset = " " + zaxis_name;
|
|
histogram->GetZaxis()->SetTitle(zaxis_name_offset.c_str());
|
|
|
|
histogram->GetXaxis()->SetTitleOffset(1.2);
|
|
histogram->GetYaxis()->SetTitleOffset(1.2);
|
|
histogram->GetZaxis()->SetTitleOffset(1.2);
|
|
histogram->GetZaxis()->SetLabelSize(0.03);
|
|
histogram->GetZaxis()->CenterTitle(kTRUE);
|
|
histogram->SetTitle("");
|
|
gStyle->SetPalette(palette);
|
|
}
|
|
void design_TH2F_ratio(TH2D *histogram, string xaxis_name, string yaxis_name, string zaxis_name, int palette){
|
|
gStyle->SetOptStat(0);
|
|
histogram->GetXaxis()->SetTitle(xaxis_name.c_str());
|
|
histogram->GetYaxis()->SetTitle(yaxis_name.c_str());
|
|
string zaxis_name_offset = " " + zaxis_name;
|
|
histogram->GetZaxis()->SetTitle(zaxis_name_offset.c_str());
|
|
|
|
histogram->GetXaxis()->SetTitleOffset(1.2);
|
|
histogram->GetYaxis()->SetTitleOffset(1.2);
|
|
histogram->GetZaxis()->SetTitleOffset(1.2);
|
|
histogram->GetZaxis()->SetLabelSize(0.03);
|
|
histogram->GetZaxis()->CenterTitle(kTRUE);
|
|
histogram->SetTitle("");
|
|
gStyle->SetPalette(palette);
|
|
}
|
|
|
|
void design_function(TF1 *graph, Color_t color){
|
|
gStyle->SetOptStat(0);
|
|
graph->SetLineWidth(3);
|
|
graph->SetLineColor(color);
|
|
|
|
}
|
|
void design_function(TF1 *graph, Color_t color, int style){
|
|
design_function(graph,color);
|
|
graph->SetLineStyle(style);
|
|
}
|
|
|
|
void design_TH1F(TH1F *histogram, string xaxis_name, string yaxis_name, Color_t color){
|
|
gStyle->SetOptStat(0);
|
|
design_markers(histogram, xaxis_name, yaxis_name, color);
|
|
histogram->SetMarkerSize(3);
|
|
histogram->GetXaxis()->SetTitleOffset(1.0);
|
|
histogram->GetYaxis()->SetTitleOffset(1.6);
|
|
histogram->SetTitle("");
|
|
histogram->GetXaxis()->SetLabelSize(0.05);
|
|
histogram->GetYaxis()->SetLabelSize(0.04);
|
|
histogram->GetXaxis()->SetTitleSize(0.05);
|
|
histogram->GetYaxis()->SetTitleSize(0.05);
|
|
}
|
|
void design_TH1D(TH1D *histogram, string xaxis_name, string yaxis_name, Color_t color){
|
|
gStyle->SetOptStat(0);
|
|
design_markers(histogram, xaxis_name, yaxis_name, color);
|
|
histogram->SetMarkerSize(3);
|
|
histogram->GetXaxis()->SetTitleOffset(1.0);
|
|
histogram->GetYaxis()->SetTitleOffset(1.6);
|
|
histogram->SetTitle("");
|
|
histogram->GetXaxis()->SetLabelSize(0.05);
|
|
histogram->GetYaxis()->SetLabelSize(0.04);
|
|
histogram->GetXaxis()->SetTitleSize(0.05);
|
|
histogram->GetYaxis()->SetTitleSize(0.05);
|
|
}
|
|
void design_TH1F(TH1F *histogram, string xaxis_name, string yaxis_name, Color_t color, int marker_style){
|
|
design_TH1F(histogram,xaxis_name,yaxis_name,color);
|
|
histogram->SetMarkerStyle(marker_style);
|
|
}
|
|
void design_TH1D(TH1D *histogram, string xaxis_name, string yaxis_name, Color_t color, int marker_style){
|
|
design_TH1D(histogram,xaxis_name,yaxis_name,color);
|
|
histogram->SetMarkerStyle(marker_style);
|
|
}
|
|
void design_TH1F(TH1F *histogram, string xaxis_name, string yaxis_name, Color_t color, int marker_style, double x_low, double x_up, double y_low, double y_up){
|
|
design_TH1F(histogram,xaxis_name,yaxis_name,color,marker_style);
|
|
|
|
histogram->GetXaxis()->SetRangeUser(x_low, x_up);
|
|
histogram->GetYaxis()->SetRangeUser(y_low, y_up);
|
|
}
|
|
void design_TH1D(TH1D *histogram, string xaxis_name, string yaxis_name, Color_t color, int marker_style, double x_low, double x_up, double y_low, double y_up){
|
|
design_TH1D(histogram,xaxis_name,yaxis_name,color,marker_style);
|
|
histogram->GetXaxis()->SetRangeUser(x_low, x_up);
|
|
histogram->GetYaxis()->SetRangeUser(y_low, y_up);
|
|
}
|
|
|
|
TLine *design_cut_line(float x1, float y1, float x2, float y2, Color_t color){
|
|
TLine *line = new TLine(x1,y1,x2,y2);
|
|
line->SetLineColor(color);
|
|
line->SetLineWidth(5);
|
|
return line;
|
|
}
|
|
TLine *design_ratio_line(float x1, float x2, Color_t color){
|
|
TLine *line = new TLine(x1,1,x2,1);
|
|
line->SetLineColor(color);
|
|
line->SetLineWidth(3);
|
|
line->SetLineStyle(2);
|
|
return line;
|
|
}
|
|
|
|
TLine *design_veto_line(float x1, float y1, float x2, float y2, Color_t color){
|
|
TLine *line = new TLine(x1,y1,x2,y2);
|
|
line->SetLineColor(color);
|
|
line->SetLineWidth(1);
|
|
return line;
|
|
}
|
|
////////////////////////////////////
|
|
///
|
|
///
|
|
/// TMVA plots
|
|
///
|
|
///
|
|
////////////////////////////////////
|
|
|
|
bool DesignCorrelationPlots(TH2F *h_corr){
|
|
h_corr->SetMarkerColor(kBlack); //in order for the text Draw option to be black
|
|
h_corr->GetXaxis()->SetLabelSize(0.04);
|
|
h_corr->GetYaxis()->SetLabelSize(0.04);
|
|
gStyle->SetPalette(kRainBow);
|
|
return true;
|
|
}
|
|
|
|
TCanvas *c_Correlation(string type){
|
|
string c_name = "c_Correlation" + type;
|
|
TCanvas *c_corr = new TCanvas(c_name.c_str(),c_name.c_str(),800, 750);
|
|
c_corr->SetRightMargin(0.13);
|
|
c_corr->SetLeftMargin(0.23);
|
|
c_corr->SetTopMargin(0.075);
|
|
c_corr->SetBottomMargin(0.12);
|
|
return c_corr;
|
|
}
|
|
|
|
bool designVariablesSignalVsBackground(TH1F *h_variableS, TH1F *h_variableB){
|
|
|
|
//Set plot height (find max(S,B) and add 10%
|
|
double height = max(h_variableS->GetMaximum(),h_variableB->GetMaximum());
|
|
height*=1.1;
|
|
h_variableS->GetYaxis()->SetRangeUser(0,height);
|
|
h_variableS->GetYaxis()->SetTitleOffset(1.23);
|
|
|
|
//Add dN/N
|
|
string YaxisTitle = h_variableS->GetYaxis()->GetTitle();
|
|
replace(YaxisTitle,"dN","dN/N");
|
|
h_variableS->GetYaxis()->SetTitle(YaxisTitle.c_str());
|
|
|
|
//Add color
|
|
h_variableS->SetLineColor(kBlue+2);
|
|
h_variableS->SetFillStyle(1001);
|
|
h_variableS->SetFillColor(38);
|
|
h_variableS->SetLineWidth(2);
|
|
|
|
|
|
h_variableB->SetLineColor(kRed+2);
|
|
h_variableB->SetFillStyle(3354);
|
|
h_variableB->SetFillColor(kRed);
|
|
h_variableB->SetLineWidth(2);
|
|
|
|
return 1;
|
|
}
|
|
|
|
bool designResponseSignalVsBackground(TH1F *h_responseS, TH1F *h_responseB, string method){
|
|
|
|
|
|
//Set plot height (find max(S,B) and add 20%
|
|
double height = max(h_responseS->GetMaximum(),h_responseB->GetMaximum());
|
|
height*= (method != "BDT" ? 5.0 : 1.4);
|
|
h_responseS->GetYaxis()->SetRangeUser( (method == "BDT" ? 0.00 : 0.01) ,height); //prevent log from crashing
|
|
h_responseS->GetYaxis()->SetTitleOffset(1.25);
|
|
|
|
//Set axis titles
|
|
string XaxisTitle = method + " response";
|
|
string YaxisTitle = "(1/N) dN/dx";
|
|
|
|
h_responseS->GetXaxis()->SetTitle(XaxisTitle.c_str());
|
|
h_responseS->GetYaxis()->SetTitle(YaxisTitle.c_str());
|
|
h_responseS->SetTitle(XaxisTitle.c_str());
|
|
|
|
//Set Xaxis range
|
|
//if (method != "MLP") h_responseS->GetXaxis()->SetRangeUser(-1,1);
|
|
//else h_responseS->GetXaxis()->SetRangeUser(0,1);
|
|
|
|
//Add color
|
|
h_responseS->SetFillStyle(1001);
|
|
h_responseS->SetFillColor(38);
|
|
h_responseS->SetLineWidth(0);
|
|
h_responseS->SetLineColor(kBlue+2);
|
|
h_responseS->SetLineWidth(1);
|
|
h_responseS->SetMarkerSize(0);
|
|
|
|
h_responseB->SetFillStyle(3354);
|
|
h_responseB->SetFillColor(kRed);
|
|
h_responseB->SetLineColor(kRed+2);
|
|
h_responseB->SetLineWidth(1);
|
|
h_responseB->SetMarkerSize(0);
|
|
|
|
return 1;
|
|
}
|
|
|
|
bool designOvertraining(TH1F *h_responseS, TH1F *h_responseB){
|
|
|
|
//Add color
|
|
h_responseS->SetLineColor(kBlue+2);
|
|
h_responseS->SetLineWidth(3);
|
|
h_responseS->SetMarkerColor(kBlue+2);
|
|
h_responseS->SetMarkerStyle(20);
|
|
|
|
|
|
h_responseB->SetLineColor(kRed+2);
|
|
h_responseB->SetLineWidth(3);
|
|
h_responseB->SetMarkerColor(kRed+2);
|
|
h_responseB->SetMarkerStyle(20);
|
|
|
|
return 1;
|
|
}
|
|
|
|
TCanvas *c_VariablesSignalVsBackground(string variable){
|
|
string c_name = "c_" + variable;
|
|
TCanvas *c_Var = new TCanvas(c_name.c_str(),c_name.c_str(),750, 600);
|
|
gStyle->SetOptStat(0);
|
|
c_Var->SetRightMargin(0.05);
|
|
c_Var->SetLeftMargin(0.18);
|
|
c_Var->SetTopMargin(0.05);
|
|
c_Var->SetBottomMargin(0.17);
|
|
return c_Var;
|
|
}
|
|
|
|
TCanvas *c_Efficiency(string c_name){
|
|
TCanvas *c_eff = new TCanvas(c_name.c_str(),c_name.c_str(),750, 525);
|
|
c_eff->SetRightMargin(0.13);
|
|
gStyle->SetOptStat(0);
|
|
c_eff->SetLeftMargin(0.23);
|
|
c_eff->SetTopMargin(0.075);
|
|
c_eff->SetBottomMargin(0.12);
|
|
return c_eff;
|
|
}
|
|
|
|
bool designEfficiency(TH1F *h_efficiencySignal,TH1F *h_efficiencyBackground,TH1F *h_purity,TH1F *h_significance, string method){
|
|
|
|
//Set axis titles
|
|
string XaxisTitle = "Cut value applied on " + method + " output";
|
|
h_efficiencySignal->GetXaxis()->SetTitle(XaxisTitle.c_str());
|
|
h_efficiencySignal->GetYaxis()->SetTitle("Efficiency (purity)");
|
|
h_significance->GetYaxis()->SetTitle("Significance");
|
|
|
|
//Set titles
|
|
h_efficiencySignal->SetTitle("Cut efficiencies and optimal cut value");
|
|
h_significance->SetTitle("");
|
|
|
|
//Add top margin for legend boxes
|
|
h_efficiencySignal->GetYaxis()->SetRangeUser(0,1.24);
|
|
h_significance->GetYaxis()->SetRangeUser(0,h_significance->GetMaximum()*1.24);
|
|
|
|
|
|
//Add color
|
|
h_efficiencySignal->SetLineColor(kBlue+2);
|
|
h_efficiencySignal->SetLineWidth(3);
|
|
|
|
h_efficiencyBackground->SetLineColor(kRed);
|
|
h_efficiencyBackground->SetLineWidth(3);
|
|
|
|
h_purity->SetLineColor(kMagenta);
|
|
h_purity->SetLineWidth(3);
|
|
|
|
h_significance->SetLineColor(kGreen+2);
|
|
h_significance->SetLineWidth(3);
|
|
h_significance->GetYaxis()->SetLabelColor(kGreen+2);
|
|
h_significance->GetYaxis()->SetTitleColor(kGreen+2);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
TPaveText *significanceText(double xmin, int nSig, int nBkg, double maxSignificance, double maxSignificanceMLPcut){
|
|
TPaveText *text = new TPaveText(xmin+0.01,0.05,(1-xmin)*0.8,0.3);
|
|
text->SetFillColor(0);
|
|
text->SetFillStyle(0);
|
|
text->SetTextAlign(12);
|
|
text->SetTextSize(0.04);
|
|
text->SetBorderSize(0);
|
|
|
|
string s_text = "For " + to_string(nSig) + " sigEvts and " + to_string(nBkg) + " bkgEvts";
|
|
text->AddText(s_text.c_str());
|
|
|
|
stringstream stream; //workaround for to_string() precision
|
|
stream << fixed << setprecision(2) << maxSignificance;
|
|
s_text = "the maximum significance is " + stream.str();
|
|
text->AddText(s_text.c_str());
|
|
stream.str(""); //clear stream
|
|
stream << fixed << setprecision(2) << maxSignificanceMLPcut;
|
|
s_text = "when cutting at " + stream.str() + ".";
|
|
text->AddText(s_text.c_str());
|
|
|
|
return text;
|
|
}
|
|
TPaveText *text_effFromPi0(double yieldSig, double yieldBkg, double ymax){
|
|
TPaveText *text = new TPaveText(145,ymax*0.9,160,ymax*1.15);
|
|
text->SetFillColor(0);
|
|
text->SetFillStyle(0);
|
|
text->SetTextAlign(12);
|
|
text->SetTextSize(0.04);
|
|
text->SetBorderSize(0);
|
|
text->AddText(Form("Sig yield: %i",int(yieldSig)));
|
|
text->AddText(Form("Bkg yield: %i",int(yieldBkg)));
|
|
return text;
|
|
}
|
|
|
|
TCanvas *c_ROCplot(string c_name){
|
|
TCanvas *c_ROCs = new TCanvas(c_name.c_str(),c_name.c_str(),650, 600);
|
|
gStyle->SetOptStat(0);
|
|
c_ROCs->SetRightMargin(0.055);
|
|
c_ROCs->SetLeftMargin(0.175);
|
|
c_ROCs->SetTopMargin(0.055);
|
|
c_ROCs->SetBottomMargin(0.175);
|
|
c_ROCs->SetGridx();
|
|
c_ROCs->SetGridy();
|
|
return c_ROCs;
|
|
}
|
|
|
|
void designROC(TH1F* h_ROC, int index){
|
|
if ( 9 <= index ) index += 20; //remove ugly white-ish colors
|
|
h_ROC->SetLineColor(index+1);
|
|
|
|
h_ROC->SetLineWidth(2);
|
|
h_ROC->GetXaxis()->SetTitleOffset(0.95);
|
|
h_ROC->GetYaxis()->SetTitleOffset(1.1);
|
|
h_ROC->GetXaxis()->SetLabelSize(0.05);
|
|
h_ROC->GetYaxis()->SetLabelSize(0.05);
|
|
h_ROC->GetYaxis()->SetNdivisions(505);
|
|
|
|
h_ROC->GetXaxis()->SetRangeUser(0.5,1.0);
|
|
h_ROC->GetYaxis()->SetRangeUser(0.5,1.0);
|
|
h_ROC->SetTitle("ROCs");
|
|
|
|
}
|
|
|
|
TCanvas *c_L0MuonEff(string c_name){
|
|
TCanvas *c_L0Muon = new TCanvas(c_name.c_str(),c_name.c_str(),650, 600);
|
|
gStyle->SetOptStat(0);
|
|
c_L0Muon->SetRightMargin(0.075);
|
|
c_L0Muon->SetLeftMargin(0.18);
|
|
c_L0Muon->SetTopMargin(0.05);
|
|
c_L0Muon->SetBottomMargin(0.19);
|
|
return c_L0Muon;
|
|
}
|
|
|
|
void designL0MuonEffHistos(TH1D *L0MuonEffData,TH1D *L0MuonEffMC, TH1D *L0MuonEffRatio){
|
|
L0MuonEffData->GetYaxis()->SetRangeUser(0.5,1.3);
|
|
L0MuonEffData->SetTitle("L0Muon efficiencies");
|
|
L0MuonEffData->GetYaxis()->SetTitle("Efficiency");
|
|
L0MuonEffData->GetXaxis()->SetTitle("max(#mu^{-}_{p_{T}},#mu^{+}_{p_{T}})");
|
|
L0MuonEffData->GetXaxis()->SetTitleOffset(1.2);
|
|
L0MuonEffData->GetYaxis()->SetTitleOffset(1.2);
|
|
|
|
L0MuonEffMC->GetYaxis()->SetTitle("Efficiency");
|
|
L0MuonEffMC->GetXaxis()->SetTitle("max(#mu^{-}_{p_{T}},#mu^{+}_{p_{T}})");
|
|
L0MuonEffMC->GetXaxis()->SetTitleOffset(1.2);
|
|
L0MuonEffMC->GetYaxis()->SetTitleOffset(1.2);
|
|
|
|
L0MuonEffData->GetYaxis()->SetTitle("Efficiency");
|
|
L0MuonEffRatio->GetXaxis()->SetTitle("max(#mu^{-}_{p_{T}},#mu^{+}_{p_{T}})");
|
|
L0MuonEffData->GetXaxis()->SetTitleOffset(1.2);
|
|
L0MuonEffRatio->GetYaxis()->SetTitleOffset(1.2);
|
|
|
|
L0MuonEffData->SetLineColor(kBlack);
|
|
L0MuonEffMC->SetLineColor(kRed);
|
|
L0MuonEffRatio->SetLineColor(kBlue);
|
|
|
|
L0MuonEffData->SetLineWidth(2);
|
|
L0MuonEffMC->SetLineWidth(2);
|
|
L0MuonEffRatio->SetLineWidth(2);
|
|
|
|
L0MuonEffData->SetMarkerColor(kBlack);
|
|
L0MuonEffMC->SetMarkerColor(kRed);
|
|
L0MuonEffRatio->SetMarkerColor(kBlue);
|
|
|
|
L0MuonEffData->SetMarkerStyle(0);
|
|
L0MuonEffMC->SetMarkerStyle(0);
|
|
L0MuonEffRatio->SetMarkerStyle(0);
|
|
|
|
}
|
|
|
|
//TODO: make it compile on its own possibly
|
|
TCanvas * designL0MuonEfficiencies(string year, string magnet,TH1D *L0MuonEffData,TH1D *L0MuonEffMC, TH1D *L0MuonEffRatio, string extraString){
|
|
string name = "eff_" + extraString;
|
|
TCanvas *c_L0Eff = c_L0MuonEff(name.c_str());
|
|
c_L0Eff->cd();
|
|
|
|
designL0MuonEffHistos(L0MuonEffData, L0MuonEffMC, L0MuonEffRatio);
|
|
//line at 1
|
|
TLine *line = design_ratio_line(L0MuonEffData->GetXaxis()->GetXmin(),L0MuonEffData->GetXaxis()->GetXmax(),kBlack);
|
|
line->SetLineWidth(1);
|
|
line->SetLineStyle(1);
|
|
|
|
//Add legend
|
|
|
|
TLegend *leg = new TLegend(0.45,0.25,0.9,0.45);
|
|
leg->AddEntry(L0MuonEffData, "Data eff","l");
|
|
string s_leg = extraString + " eff";
|
|
leg->AddEntry(L0MuonEffMC, s_leg.c_str(),"l");
|
|
leg->AddEntry(L0MuonEffRatio, "Data eff/MC eff","l");
|
|
leg->SetTextSize(0.05);
|
|
|
|
L0MuonEffData->Draw();
|
|
line->Draw("SAME");
|
|
L0MuonEffMC->Draw("SAME");
|
|
L0MuonEffRatio->Draw("SAME");
|
|
|
|
addLHCbtag(0.56, 0.87, year , 1.0);
|
|
|
|
leg->Draw("SAME");
|
|
|
|
string output_name = GetEfficiencyFile("L0Muon",year,magnet,false,false,false,false,false,false,false,false,extraString);
|
|
replace (output_name,".root",".eps");
|
|
c_L0Eff->SaveAs(output_name.c_str());
|
|
|
|
return c_L0Eff;
|
|
|
|
}
|
|
|
|
void designBasicEfficiency(TGraphErrors *graph, string title, string xAxisName, string effName, double lowRange, double highRange){
|
|
|
|
graph->SetName(title.c_str());
|
|
graph->SetLineColor(kGreen+3);
|
|
graph->SetMarkerStyle(20);
|
|
graph->SetMarkerColor(kGreen+3);
|
|
graph->GetXaxis()->SetTitle(xAxisName.c_str());
|
|
graph->GetYaxis()->SetTitle(Form("#varepsilon_%s",effName.c_str()));
|
|
graph->GetYaxis()->SetTitleSize(0.07);
|
|
graph->GetYaxis()->SetRangeUser(lowRange,highRange);
|
|
}
|
|
|
|
void designBasicEfficiency(TGraphErrors *graph, string title, string xAxisName, string effName, double lowRange, double highRange, Color_t color){
|
|
graph->SetName(title.c_str());
|
|
graph->SetLineColor(color);
|
|
graph->SetMarkerStyle(20);
|
|
graph->SetMarkerColor(color);
|
|
graph->GetXaxis()->SetTitle(xAxisName.c_str());
|
|
graph->GetYaxis()->SetTitle(Form("#varepsilon_%s",effName.c_str()));
|
|
graph->GetYaxis()->SetTitleSize(0.05);
|
|
graph->GetYaxis()->SetRangeUser(lowRange,highRange);
|
|
}
|
|
|
|
void designMultiGraphEfficiency(TMultiGraph *graph, string title, string xAxisName, string effName, double lowRange, double highRange){
|
|
graph->SetName(title.c_str());
|
|
graph->GetXaxis()->SetTitle(xAxisName.c_str());
|
|
graph->GetYaxis()->SetTitle(Form("#varepsilon_%s",effName.c_str()));
|
|
graph->GetYaxis()->SetTitleSize(0.05);
|
|
graph->GetYaxis()->SetRangeUser(lowRange,highRange);
|
|
}
|
|
|
|
|
|
////////////////////////////////////
|
|
///
|
|
///
|
|
/// generic plots
|
|
///
|
|
///
|
|
////////////////////////////////////
|
|
TCanvas *c_canvas(string name){
|
|
TCanvas *canvas = new TCanvas(name.c_str(),name.c_str(),750, 600);
|
|
gStyle->SetOptStat(0);
|
|
canvas->SetRightMargin(0.08);
|
|
canvas->SetTopMargin(0.05);
|
|
canvas->SetBottomMargin(0.12);
|
|
canvas->SetLeftMargin(0.15);
|
|
return canvas;
|
|
}
|
|
|
|
void designTGraph(TGraphErrors *graph, string title, string xAxisName, string yAxisName, Color_t color, Int_t markerStyle){
|
|
|
|
graph->SetName(title.c_str());
|
|
graph->SetLineColor(color);
|
|
//graph->SetLineWidth(0);
|
|
graph->SetMarkerStyle(markerStyle);
|
|
graph->SetMarkerColor(color);
|
|
graph->GetXaxis()->SetTitle(xAxisName.c_str());
|
|
graph->GetYaxis()->SetTitle(yAxisName.c_str());
|
|
gStyle->SetOptStat(0);
|
|
|
|
graph->GetXaxis()->SetTitleOffset(1.0);
|
|
graph->GetYaxis()->SetTitleOffset(1.7);
|
|
graph->SetTitle("");
|
|
graph->GetXaxis()->SetLabelSize(0.07);
|
|
graph->GetYaxis()->SetLabelSize(0.05);
|
|
graph->GetXaxis()->SetTitleSize(0.05);
|
|
graph->GetYaxis()->SetTitleSize(0.04);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
TH1D *generalHistogram(string hist_name, string title, int nBins, double low_edge, double high_edge, string xaxis_name, string yaxis_name, Color_t color){
|
|
TH1D *histogram = new TH1D(hist_name.c_str(), title.c_str(),nBins,low_edge,high_edge);
|
|
design_TH1D(histogram, xaxis_name, yaxis_name, color);
|
|
return histogram;
|
|
}
|
|
|
|
TH1D *BmassHistogram(string hist_name, string title, string xaxis_name,Color_t color){
|
|
TH1D *histogram = generalHistogram(hist_name, title, 100, cut_B_plus_M_low, cut_B_plus_M_high, xaxis_name, "Counts a.u.", color);
|
|
histogram->SetLineWidth(2);
|
|
return histogram;
|
|
}
|
|
|
|
void TM_canvas(string name, TH1D *all, TH1D *TMed, TH1D *notTMed, string year, bool ReferenceChannel, bool PHSP, bool B0, bool K1, bool Inc){
|
|
|
|
string path = getTMplotsPath(name, year, ReferenceChannel, PHSP, B0, K1, Inc);
|
|
|
|
TCanvas *canvas = c_canvas(name);
|
|
canvas->cd();
|
|
all->SetLineWidth(2);
|
|
TMed->SetLineWidth(2);
|
|
notTMed->SetLineWidth(2);
|
|
|
|
all->Draw();
|
|
TMed->Draw("SAME");
|
|
notTMed->Draw("SAME");
|
|
|
|
canvas->Print(path.c_str(),"eps");
|
|
replace(path,".eps",".root");
|
|
canvas->Print(path.c_str(),"root");
|
|
delete canvas;
|
|
return;
|
|
|
|
}
|
|
|
|
void designMultiGraph(TMultiGraph *multGraph, string name, string xaxis_name, string yaxis_name, double lowx, double highx, double lowy, double highy){
|
|
designMultiGraph(multGraph, name, xaxis_name, yaxis_name);
|
|
multGraph->GetXaxis()->SetRangeUser(lowx, highx);
|
|
multGraph->GetYaxis()->SetRangeUser(lowy, highy);
|
|
return;
|
|
}
|
|
|
|
void designMultiGraph(TMultiGraph *multGraph, string name, string xaxis_name, string yaxis_name){
|
|
|
|
//One needs to draw the multGraph first!
|
|
multGraph->SetName(name.c_str());
|
|
multGraph->GetXaxis()->SetTitle(xaxis_name.c_str());
|
|
multGraph->GetYaxis()->SetTitle(yaxis_name.c_str());
|
|
gStyle->SetOptStat(0);
|
|
|
|
multGraph->GetXaxis()->SetTitleOffset(0.9);
|
|
multGraph->GetYaxis()->SetTitleOffset(1.1);
|
|
multGraph->SetTitle("");
|
|
multGraph->GetXaxis()->SetLabelSize(0.05);
|
|
multGraph->GetYaxis()->SetLabelSize(0.05);
|
|
multGraph->GetXaxis()->SetTitleSize(0.05);
|
|
multGraph->GetYaxis()->SetTitleSize(0.05);
|
|
return;
|
|
}
|
|
|
|
void addYearTag(Float_t x = 0.6, Float_t y = 0.85, string year = "", int Run = 0, Int_t color = 1, Float_t Scaling = 1.0){
|
|
TLatex* lhcbtext = new TLatex();
|
|
lhcbtext->SetTextFont(132);
|
|
lhcbtext->SetTextColor(color);
|
|
lhcbtext->SetTextSize(0.07*Scaling);
|
|
lhcbtext->SetTextAlign(13);
|
|
lhcbtext->SetNDC(1);
|
|
lhcbtext->DrawLatex(x,y,getYearRunTag(Run,year).c_str());
|
|
return;
|
|
}
|
|
|
|
void addAnyTag(Float_t x = 0.6, Float_t y = 0.85, string text = "", Int_t color = 1, Float_t Scaling = 1.0){
|
|
TLatex* lhcbtext = new TLatex();
|
|
lhcbtext->SetTextFont(132);
|
|
lhcbtext->SetTextColor(color);
|
|
lhcbtext->SetTextSize(0.07*Scaling);
|
|
lhcbtext->SetTextAlign(13);
|
|
lhcbtext->SetNDC(1);
|
|
lhcbtext->DrawLatex(x,y,text.c_str());
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////
|
|
///
|
|
///
|
|
/// Truth-matching stuff
|
|
///
|
|
///
|
|
////////////////////////////////////
|
|
|
|
TCanvas *c_for_TH2D(string name){
|
|
TCanvas *c_TH2D = new TCanvas(name.c_str(),name.c_str(),800, 750);
|
|
c_TH2D->SetRightMargin(0.13);
|
|
c_TH2D->SetLeftMargin(0.13);
|
|
c_TH2D->SetTopMargin(0.075);
|
|
c_TH2D->SetBottomMargin(0.13);
|
|
return c_TH2D;
|
|
}
|
|
|
|
bool designTH2D(TH2F *hist){
|
|
hist->SetMarkerColor(kBlack); //in order for the text Draw option to be black
|
|
hist->GetXaxis()->SetLabelSize(0.04);
|
|
hist->GetYaxis()->SetLabelSize(0.04);
|
|
gStyle->SetPalette(kRainBow);
|
|
return true;
|
|
}
|
|
|
|
TH1D *hist_cosThetaK(string hist_name, string title, Color_t color, bool cos){
|
|
TH1D *histogram = generalHistogram(hist_name, title, 75, cos ? -1.0 : 0.0, cos ? 1.0 : 3.15, cos ? "cos(#theta_{K})" : "#theta_{K}", "Counts a.u.", color);
|
|
histogram->SetLineWidth(2);
|
|
return histogram;
|
|
}
|
|
|
|
TH1D *hist_cosAngle(string angle, string hist_name, string title, Color_t color, bool cos, bool norm){
|
|
|
|
if (angle == "thetak") angle = "#theta_{K}";
|
|
else if (angle == "thetal") angle = "#theta_{L}";
|
|
else if (angle == "phi") angle = "#phi";
|
|
else{
|
|
coutERROR("Wrong angle selected! Select from thetak, thetal and phi.");
|
|
return 0;
|
|
}
|
|
if (cos) angle = "cos(" + angle + ")";
|
|
|
|
TH1D *histogram = generalHistogram(hist_name, title, norm ? 20 : 50, cos ? -1.0 : 0.0, cos ? 1.0 : 3.15, angle.c_str(), "Counts a.u.", color);
|
|
histogram->SetLineWidth(2);
|
|
histogram->SetMarkerSize(1.0);
|
|
return histogram;
|
|
}
|
|
|
|
////////////////////////////////////
|
|
///
|
|
///
|
|
/// Mass Fit stuff
|
|
///
|
|
///
|
|
////////////////////////////////////
|
|
|
|
void designMassFitFrame(RooPlot* frame, float pullHeight){
|
|
|
|
float textsize = gStyle->GetTextSize();
|
|
if (Kst2Kpluspi0Resolved && UseDTF)frame->SetTitle("event distribution #B^{+} with fixed M_{#pi^{0}}");
|
|
else frame->SetTitle("event distribution #B^{+}");
|
|
|
|
frame->GetXaxis()->SetNoExponent(); //<-- spoils MaxDigits settings, so don't use it on other axis
|
|
frame->GetXaxis()->SetLabelSize(0.0);//don't print labels
|
|
frame->GetYaxis()->SetRangeUser(0.001, frame->GetMaximum()*1.2);//don't print 0-label
|
|
frame->GetXaxis()->SetTickLength(frame->GetXaxis()->GetTickLength()/(1-pullHeight));
|
|
frame->GetXaxis()->SetNdivisions(gStyle->GetNdivisions("X"));
|
|
frame->GetYaxis()->SetTitleSize(textsize/(1-pullHeight));
|
|
frame->GetYaxis()->SetLabelSize(textsize/(1-pullHeight));
|
|
frame->GetYaxis()->SetNdivisions(gStyle->GetNdivisions("Y"));
|
|
frame->GetYaxis()->SetTitleOffset(1.06*(1-pullHeight));
|
|
return;
|
|
}
|
|
|
|
void designPullFrame(RooPlot *pullFrame, RooPlot *frame_m, float pullHeight){
|
|
|
|
RooHist* frame2 = frame_m->pullHist("data", "pdf") ;
|
|
float textsize = gStyle->GetTextSize();
|
|
float pullFrameRange = 6.5; //This is +/- boundaries of the pull
|
|
|
|
//make red boxes
|
|
pullFrame->addPlotable(frame2,"X0 B");
|
|
pullFrame->getAttFill()->SetFillColor(kRed+1);
|
|
|
|
//format the x- and y-axis of the pull plot
|
|
TGaxis::SetExponentOffset(1e+9,1e+9,"x");//offset = pad size * 1e+7
|
|
pullFrame->GetXaxis()->SetRangeUser(get_cut_B_plus_M_low(2), cut_B_plus_M_high); //TODO: sort low B mass cut
|
|
|
|
pullFrame->GetXaxis()->SetTitleOffset(1.05);
|
|
pullFrame->GetXaxis()->SetTitleSize (textsize/pullHeight);
|
|
pullFrame->GetXaxis()->SetLabelSize (textsize/pullHeight);
|
|
pullFrame->GetXaxis()->SetTickLength (frame_m->GetXaxis()->GetTickLength()/(pullHeight/(1-pullHeight)));
|
|
pullFrame->GetXaxis()->SetNdivisions (gStyle->GetNdivisions("X"));
|
|
|
|
pullFrame->GetYaxis()->SetLabelSize (textsize/pullHeight);
|
|
pullFrame->GetYaxis()->SetTitleSize (textsize/pullHeight);
|
|
pullFrame->GetYaxis()->SetNdivisions (3, 9, 0, kTRUE);//gStyle->GetNdivisions("Y"));
|
|
pullFrame->GetYaxis()->SetTitleOffset(1.06*pullHeight);
|
|
pullFrame->GetYaxis()->SetRangeUser (-pullFrameRange, pullFrameRange);
|
|
pullFrame->GetYaxis()->SetTitle("Pull");
|
|
|
|
return ;
|
|
|
|
}
|
|
|
|
TLine *threeSigmaLine (bool plus){
|
|
TLine * line = new TLine(get_cut_B_plus_M_low("2016"), plus ? +3. : -3, cut_B_plus_M_high, plus ? +3. : -3); //TODO: sort low B mass cut
|
|
line->SetLineStyle(5);
|
|
line->SetLineWidth(gStyle->GetLineWidth());
|
|
return line;
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////
|
|
///
|
|
///
|
|
/// reweighting control plots
|
|
///
|
|
///
|
|
////////////////////////////////////
|
|
|
|
void drawKolmogorovTest(TH1D *hist_nTracks, TH1D * hist_nTracks_MC, string canvasPath, string TMtype){
|
|
TCanvas* c1 = new TCanvas("c1", "c1");
|
|
|
|
//get yRange
|
|
double maxY= hist_nTracks->GetMaximum();
|
|
if(hist_nTracks_MC->GetMaximum()>maxY)maxY=hist_nTracks_MC->GetMaximum();
|
|
hist_nTracks->SetMinimum(0.);
|
|
hist_nTracks->SetMaximum(maxY*1.2);
|
|
design_TH1D(hist_nTracks, firstMClatex.c_str(),"Events ( norm. )", kBlack);
|
|
hist_nTracks->SetMarkerSize(1);
|
|
|
|
//format colors and draw
|
|
hist_nTracks_MC->SetLineStyle(0);
|
|
|
|
hist_nTracks_MC->GetXaxis()->SetTitle(firstMClatex.c_str());
|
|
hist_nTracks_MC->GetYaxis()->SetTitle("Events ( norm. )");
|
|
|
|
hist_nTracks_MC->SetLineColor(kRed);
|
|
hist_nTracks_MC->SetFillColor(kRed);
|
|
hist_nTracks_MC->SetMarkerColor(kRed);
|
|
hist_nTracks_MC->SetMarkerSize(0);
|
|
hist_nTracks_MC->SetMinimum(0.);
|
|
hist_nTracks_MC->SetMaximum(maxY*1.2);
|
|
hist_nTracks_MC->Draw("E2");
|
|
hist_nTracks->Draw("SAME");
|
|
|
|
//define plot for Kolmogorov test
|
|
//Kolmogorov test shouldn't be used at binned data (one should use TMath::Kolmogorov)
|
|
//<<1 means NOT compatible
|
|
double KolmoTest = hist_nTracks->KolmogorovTest(hist_nTracks_MC);
|
|
TPaveText *KolmOut= new TPaveText(0.55,0.6,0.85,0.7,"NDC");
|
|
KolmOut->AddText(Form("Kolmogorov Test : %.3f ", KolmoTest));
|
|
KolmOut->SetLineColor(kWhite);
|
|
KolmOut->SetFillColor(kWhite);
|
|
KolmOut->SetShadowColor(0);
|
|
KolmOut->SetTextSize(0.04);
|
|
KolmOut->SetTextColor(kRed);
|
|
|
|
TLegend *leg = new TLegend(0.55,0.7,0.85,0.85);
|
|
leg->SetHeader(" ");
|
|
leg->AddEntry(hist_nTracks,"Data","LEP");
|
|
leg->AddEntry(hist_nTracks_MC,"MC","F");
|
|
leg->SetLineColor(kWhite);
|
|
leg->SetFillColor(kWhite);
|
|
leg->SetTextSize(0.05);
|
|
KolmOut->Draw();
|
|
leg->Draw();
|
|
|
|
addLHCbtag(0.65, 0.88, "");
|
|
replace(canvasPath,".root",TMtype+".root");
|
|
c1->SaveAs(canvasPath.c_str());
|
|
replace(canvasPath,".root",".eps");
|
|
c1->Print(canvasPath.c_str());
|
|
|
|
delete leg;
|
|
c1->Clear();
|
|
delete c1;
|
|
|
|
return;
|
|
}
|
|
|
|
void drawWeightRatio(TH1D *hist_w, string canvasPath, bool is2D, string TMtype){
|
|
TCanvas* c2 = new TCanvas("c2", "c2");
|
|
c2->SetGridy();
|
|
c2->cd();
|
|
|
|
//format colors and draw
|
|
hist_w->GetYaxis()->SetRangeUser(-2., 6.);
|
|
if (is2D) design_TH1D(hist_w,seconMClatex,"2 x 1D Weights of sim. Events",kBlue);
|
|
else design_TH1D(hist_w,firstMClatex,"1D Weights of sim. Events",kBlue);
|
|
hist_w->SetMarkerSize(1);
|
|
hist_w->Draw("E1");
|
|
addLHCbtag(0.25, 0.9, "");
|
|
|
|
replace(canvasPath,".root",TMtype+".root");
|
|
c2->SaveAs(canvasPath.c_str());
|
|
replace(canvasPath,".root",".eps");
|
|
c2->Print(canvasPath.c_str());
|
|
|
|
c2->Clear();
|
|
delete c2;
|
|
return;
|
|
}
|
|
|
|
void drawWeightCorrelation(TH2D *hCorrelationCheck, double CorrelationCoefficent, string canvasPath){
|
|
TCanvas * c4 = new TCanvas("c4", "c4");
|
|
c4->SetRightMargin(0.19);
|
|
c4->cd();
|
|
//Adjust NTrack range
|
|
hCorrelationCheck->GetXaxis()->SetRangeUser(0,150);
|
|
//hCorrelationCheck->GetZaxis()->SetRangeUser(-5,270);
|
|
hCorrelationCheck->GetZaxis()->SetTitleOffset(0.9);
|
|
|
|
//format colors and draw
|
|
hCorrelationCheck->GetXaxis()->SetTitle(firstMClatex.c_str());
|
|
hCorrelationCheck->GetYaxis()->SetTitle("log(p_{T}(B^{+})) [MeV]");
|
|
hCorrelationCheck->GetZaxis()->SetTitle("Entries [a.u.]");
|
|
hCorrelationCheck->Draw("COLZ"); //TODO
|
|
|
|
addLHCbtag(0.4, 0.9, "data", 0);
|
|
TLatex* CorrCoe = new TLatex();
|
|
CorrCoe->SetTextFont(132);
|
|
CorrCoe->SetTextColor(0);
|
|
CorrCoe->SetTextSize(0.05);
|
|
CorrCoe->SetTextAlign(13);
|
|
CorrCoe->SetNDC(1);
|
|
CorrCoe->DrawLatex(0.4,0.83,Form("Correlation coefficient: %.3f", CorrelationCoefficent));
|
|
|
|
|
|
c4->SaveAs(canvasPath.c_str());
|
|
replace(canvasPath,".root",".eps");
|
|
c4->Print(canvasPath.c_str());
|
|
|
|
c4->Clear();
|
|
delete c4;
|
|
return;
|
|
}
|
|
|
|
|
|
////////////////////////////////////
|
|
///
|
|
///
|
|
/// BDT scan
|
|
///
|
|
///
|
|
////////////////////////////////////
|
|
|
|
void designYieldGraph(TGraphErrors *graph, int Run, string year, string tag, string basicPath, TFile *TGraphOutput, bool fineScan){
|
|
|
|
if (graph == NULL){
|
|
coutWarning("Graph " + tag + " is void.");
|
|
return;
|
|
}
|
|
coutInfo("Saving " + tag + " to file and plotting.");
|
|
|
|
string graphName = string(TMVAmethod) + " ";
|
|
graphName.append(tag);
|
|
graphName.append( Run == 0 ? year : string("Run" + to_string(Run)) );
|
|
|
|
designTGraph(graph,graphName,string(TMVAmethod)+"response", graphName, kBlue+3, 20);
|
|
graph->SetMarkerSize(0.6);
|
|
if (fineScan) graph->GetXaxis()->SetRangeUser(0.9,1.0);
|
|
|
|
//Save in a file
|
|
TGraphOutput->cd();
|
|
graph->Write("",TObject::kWriteDelete);
|
|
|
|
//Save in a canvas
|
|
TCanvas * c1 = new TCanvas("c1", "c1");
|
|
c1->cd();
|
|
graph->Draw("ap");
|
|
string path = basicPath;
|
|
replace(path,".root","_"+tag+".eps");
|
|
c1->SaveAs(path.c_str(),"eps");
|
|
return;
|
|
}
|
|
|
|
|
|
////////////////////////////////////
|
|
///
|
|
///
|
|
/// Yiled plots
|
|
///
|
|
///
|
|
////////////////////////////////////
|
|
|
|
void design_YieldInQ2(int Run, TGraphErrors *graphSig, TGraphErrors *graphBkg, TGraphErrors *graphSignificance, TGraphErrors *CMS, bool fixRange){
|
|
|
|
string mainName = "Q2_Run" + to_string(Run);
|
|
|
|
designTGraph(graphSig,"Signal","Q2","Yield",kBlack,20);
|
|
designTGraph(graphBkg,"Background","Q2","Yield",kRed,20);
|
|
graphSig->SetLineStyle(1);
|
|
graphSig->SetLineWidth(1);
|
|
graphSig->SetMarkerSize(0.5);
|
|
graphBkg->SetLineStyle(1);
|
|
graphBkg->SetLineWidth(1);
|
|
graphBkg->SetMarkerSize(0.65);
|
|
|
|
designTGraph(graphSignificance,"Significance","Q2","S/(S+B)",kBlue,20);
|
|
designTGraph(CMS,"Significance_CMS","Q2","S/(S+B)",kGreen+2,20);
|
|
|
|
graphSignificance->GetYaxis()->SetRangeUser(0.0,graphSignificance->GetY()[0]*1.5);
|
|
graphSignificance->GetXaxis()->SetRangeUser(0.01,20);
|
|
CMS->GetXaxis()->SetRangeUser(0.01,20);
|
|
graphSignificance->SetLineWidth(3);
|
|
CMS->SetLineWidth(3);
|
|
|
|
//Create multigraphs
|
|
TMultiGraph *mg = new TMultiGraph();
|
|
mg->Add(graphSig,"AP");
|
|
mg->Add(graphBkg,"AP");
|
|
mg->Draw("AP");
|
|
mg->GetYaxis()->SetTitle("Yield");
|
|
mg->GetYaxis()->SetRangeUser(0.0,graphBkg->GetY()[1]*1.5);
|
|
mg->GetXaxis()->SetRangeUser(0.01,20);
|
|
mg->GetXaxis()->SetTitle("");
|
|
|
|
TMultiGraph *mg_FoM = new TMultiGraph();
|
|
mg_FoM->Add(graphSignificance,"AP");
|
|
mg_FoM->Add(CMS,"AP");
|
|
mg_FoM->Draw("AP");
|
|
mg_FoM->GetYaxis()->SetTitle("S/(S+B)");
|
|
mg_FoM->GetXaxis()->SetRangeUser(0.01,20);
|
|
mg_FoM->GetXaxis()->SetTitle("q^{2} [GeV^{2}]");
|
|
|
|
|
|
//Create a TCanvas
|
|
TCanvas *c = c_Efficiency(mainName.c_str());
|
|
c->cd();
|
|
|
|
//Create two pads (to get significance y-axis on the right)
|
|
TPad *pad1 = new TPad("pad1","",0,0,1,1);
|
|
TPad *pad2 = new TPad("pad2","",0,0,1,1);
|
|
|
|
pad2->SetFillStyle(4000); //will be transparent
|
|
pad2->SetFrameFillStyle(0);
|
|
pad1->SetRightMargin(0.16);
|
|
pad2->SetRightMargin(0.16);
|
|
pad1->Draw();
|
|
pad1->cd();
|
|
|
|
//Add legends
|
|
TLegend *leg = new TLegend(0.15,0.93,0.52,0.82);
|
|
leg->AddEntry(graphSig, "Signal yield","l");
|
|
leg->AddEntry(graphBkg, "Background yield","l");
|
|
|
|
TLegend *legSignificance = new TLegend(0.52,0.93,0.8,0.82);
|
|
legSignificance->AddEntry(graphSignificance, "Significance","l");
|
|
legSignificance->AddEntry(CMS, "CMS","l");
|
|
|
|
//Plot it
|
|
pad1->cd();
|
|
gStyle->SetGridColor(kGray);
|
|
pad1->SetGridy();
|
|
pad1->SetGridx();
|
|
mg->Draw("SAME");
|
|
mg->GetYaxis()->SetTitle("Yield");
|
|
mg->GetYaxis()->SetRangeUser(0.0,graphBkg->GetY()[1]*1.5);
|
|
mg->GetXaxis()->SetRangeUser(0.01,20);
|
|
mg->GetXaxis()->SetLabelSize(0);
|
|
mg->GetYaxis()->SetTickLength(0);
|
|
leg->Draw("SAME");
|
|
pad1->Update();
|
|
c->cd();
|
|
|
|
pad2->Draw();
|
|
pad2->cd();
|
|
//Get axis on the left side
|
|
TGaxis *axis = new TGaxis(20,0.01,20,graphSignificance->GetY()[0]*1.5,0,graphSignificance->GetY()[0]*1.75,510,"+L");
|
|
axis->SetTitle("S/sqrt(S+B)");
|
|
axis->SetTextFont(21);
|
|
mg_FoM->Draw("AP");
|
|
mg_FoM->GetXaxis()->SetRangeUser(0.01,20);
|
|
mg_FoM->GetYaxis()->SetRangeUser(0.0,graphSignificance->GetY()[0]*1.5);
|
|
mg_FoM->GetYaxis()->SetLabelSize(0);
|
|
mg_FoM->GetYaxis()->SetTickLength(0);
|
|
mg_FoM->GetYaxis()->SetTitle("");
|
|
axis->Draw("SAME");
|
|
legSignificance->Draw("SAME");
|
|
pad2->Update();
|
|
c->cd();
|
|
|
|
//Save it
|
|
string path = GetBDTScanFile("","both",Run,false,false,false);
|
|
replace(path,"BDTscan","Q2");
|
|
if (!fixRange) replace(path,".root","_sigma.root");
|
|
TFile *file = new TFile (path.c_str(), "RECREATE");
|
|
file->cd();
|
|
graphSig->Write();
|
|
graphBkg->Write();
|
|
graphSignificance->Write();
|
|
CMS->Write();
|
|
c->Write();
|
|
file->Close();
|
|
|
|
replace(path,".root",".eps");
|
|
c->SaveAs(path.c_str());
|
|
return;
|
|
|
|
}
|
|
|
|
void design_SignificanceInQ2(int Run, TGraphErrors *graphSignificance, TGraphErrors *CMS, bool fixRange){
|
|
string mainName = "Q2_Run" + to_string(Run);
|
|
|
|
designTGraph(graphSignificance,"Significance","Q2","S/(S+B)",kBlue,20);
|
|
designTGraph(CMS,"Significance_CMS","Q2","S/(S+B)",kGreen+2,20);
|
|
|
|
graphSignificance->GetYaxis()->SetRangeUser(0.0,graphSignificance->GetY()[0]*1.5);
|
|
graphSignificance->GetXaxis()->SetRangeUser(0.01,20);
|
|
CMS->GetXaxis()->SetRangeUser(0.01,20);
|
|
graphSignificance->SetLineWidth(3);
|
|
CMS->SetLineWidth(3);
|
|
|
|
//Create multigraph
|
|
TMultiGraph *mg_FoM = new TMultiGraph();
|
|
mg_FoM->Add(graphSignificance,"AP");
|
|
mg_FoM->Add(CMS,"AP");
|
|
mg_FoM->Draw("AP");
|
|
|
|
//Create a TCanvas
|
|
TCanvas *c = c_canvas(mainName.c_str());
|
|
gStyle->SetGridColor(kGray);
|
|
c->SetGridy();
|
|
c->SetGridx();
|
|
c->SetBottomMargin(0.16);
|
|
|
|
//Add legend
|
|
TLegend *legSignificance = new TLegend(0.35,0.9,0.65,0.75);
|
|
legSignificance->AddEntry(graphSignificance, "Significance","l");
|
|
legSignificance->AddEntry(CMS, "CMS","l");
|
|
|
|
//Plot it
|
|
c->cd();
|
|
mg_FoM->Draw("AP");
|
|
mg_FoM->GetYaxis()->SetTitle("S/(S+B)");
|
|
mg_FoM->GetXaxis()->SetRangeUser(0.01,20);
|
|
mg_FoM->GetYaxis()->SetRangeUser(0.0,graphSignificance->GetY()[0]*1.5);
|
|
mg_FoM->GetXaxis()->SetTitle("q^{2} [GeV^{2}]");
|
|
legSignificance->Draw("SAME");
|
|
c->Update();
|
|
|
|
//Save it
|
|
string path = GetBDTScanFile("","both",Run,false,false,false);
|
|
replace(path,"BDTscan","Q2_sigOnly");
|
|
if (!fixRange) replace(path,".root","_sigma.root");
|
|
|
|
TFile *file = new TFile (path.c_str(), "RECREATE");
|
|
file->cd();
|
|
graphSignificance->Write();
|
|
CMS->Write();
|
|
c->Write();
|
|
file->Close();
|
|
|
|
|
|
replace(path,".root",".eps");
|
|
c->SaveAs(path.c_str());
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|