Angular analysis of B+->K*+(K+pi0)mumu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

1276 lines
43 KiB

//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;
}