Loading [MathJax]/extensions/tex2jax.js
Logo ROOT  
Reference Guide
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
AtlasExample.C File Reference

Detailed Description

View in nbviewer Open in SWAN Show how ATLAS Style looks like.

It is based on a style file from BaBar.

const Int_t GMAX=864;
const int nren=3;
static const double mur[nren] = {1.0,0.25,4.0};
static const double muf[nren] = {1.0,0.25,4.0};
const unsigned int NUMPDF=41;
TGraphErrors* GetGraph(Int_t ir, Int_t ifs,Int_t icut, Int_t ipdf);
void AddtoBand(TGraphErrors* g1, TGraphAsymmErrors* g2);
void AtlasExample()
{
gROOT->SetStyle("ATLAS");
Int_t icol1=5;
Int_t icol2=5;
auto canvas = new TCanvas("canvas","single inclusive jets",50,50,600,600);
canvas->SetLogy();
Double_t ymin = 1.e-3; Double_t ymax = 2e7;
Double_t xmin = 60.00; Double_t xmax = 3500.;
auto frame = canvas->DrawFrame(xmin,ymin,xmax,ymax);
frame->SetYTitle("d#sigma_{jet}/dE_{T,jet} [fb/GeV]");
frame->SetXTitle("E_{T,jet} [GeV]");
frame->GetYaxis()->SetTitleOffset(1.4);
frame->GetXaxis()->SetTitleOffset(1.4);
const Int_t ncut=1;
TGraphErrors *data[ncut];
for (Int_t icut=0; icut<ncut; icut++) { // loop over cuts
TGraphErrors *g1[nren][ncut];
for (Int_t ir=0; ir<nren; ir++) { // loop over ren scale
g1[ir][icut] = GetGraph(ir,ir,icut,0);
if (!g1[ir][icut]) {
cout << " g1 not found " << endl;
return;
}
g1[ir][icut]->SetLineColor(1);
g1[ir][icut]->SetMarkerStyle(0);
}
char daname[100];
sprintf(daname,"data_%d",icut);
data[icut] = (TGraphErrors*)g1[0][icut]->Clone(daname);
data[icut]->SetMarkerStyle(20);
data[icut]->SetMarkerColor(1);
// Just invent some data
for (Int_t i=0; i< data[icut]->GetN(); i++) {
Double_t x1,y1,e,dx1=0.;
data[icut]->GetPoint(i,x1,y1);
Double_t r1 = 0.4*(gRandom->Rndm(1)+2);
Double_t r2 = 0.4*(gRandom->Rndm(1)+2);
if (icut==0) y = r1*y1+r1*r2*r2*x1/50000.;
else y = r1*y1;
e = sqrt(y*1000)/200;
data[icut]->SetPoint(i, x1,y);
data[icut]->SetPointError(i,dx1,e);
}
TGraphAsymmErrors* scale[ncut];
TGraphAsymmErrors* scalepdf[ncut];
scale[icut] = MakeBand(g1[0][icut],g1[1][icut],g1[2][icut]);
scalepdf[icut]=(TGraphAsymmErrors* ) scale[icut]->Clone("scalepdf");
TGraphErrors *gpdf[NUMPDF][ncut];
for (Int_t ipdf=0; ipdf<NUMPDF; ipdf++) {
gpdf[ipdf][icut]= GetGraph(0,0,icut,ipdf);
if (!gpdf[ipdf][icut]) {
cout << " gpdf not found " << endl;
return;
}
gpdf[ipdf][icut]->SetLineColor(2);
gpdf[ipdf][icut]->SetLineStyle(1);
gpdf[ipdf][icut]->SetMarkerStyle(0);
AddtoBand(gpdf[ipdf][icut],scalepdf[icut]);
}
scalepdf[icut]->SetFillColor(icol2);
scalepdf[icut]->Draw("zE2");
scalepdf[icut]->SetLineWidth(3);
scale[icut]->SetFillColor(icol1);
scale[icut]->Draw("zE2");
g1[0][icut]->SetLineWidth(3);
g1[0][icut]->Draw("z");
data[icut]->Draw("P");
}
auto t = new TLatex; t->SetNDC();
t->DrawLatex(0.3, 0.85, "#sqrt{s}= 14 TeV");
t->DrawLatex(0.57, 0.85, "|#eta_{jet}|<0.5");
auto l = new TLegend(0.45,0.65,0.8,0.8,"","NDC");
l->SetBorderSize(0.);
l->SetTextFont(42);
l->AddEntry("data_0", "Data 2009", "ep");
l->AddEntry("scalepdf", "NLO QCD", "lf");
l->Draw();
}
TGraphErrors* GetGraph(Int_t ir, Int_t ifs,Int_t icut, Int_t ipdf)
{
const char *cuts[5] =
{"0.0 <= |eta| < 0.5",
"0.5 <= |eta| < 1.0",
"1.0 <= |eta| < 1.5",
"1.5 <= |eta| < 2.0",
"2.0 <= |eta| < 3.0"};
const double mur[] = {1.0,0.25,4.0};
const double muf[] = {1.0,0.25,4.0};
TFile *file = TFile::Open("http://root.cern.ch/files/AtlasGraphs.root", "CACHEREAD");
char gname[100];
char tname[100];
if (ipdf>=0)
sprintf(tname," E_T (mu_r=%g, mu_f=%g);%s Pdf: %d",mur[ir],muf[ifs],cuts[icut],ipdf);
else
sprintf(tname," E_T %s Ms= %d",cuts[icut],-ipdf);
TGraphErrors* g1 = 0;
for (int i=1; i<=GMAX; i++) {
sprintf(gname,"full_%d",i);
g1 = (TGraphErrors*) file->Get(gname);
if (!g1) {
cout << gname << " not found " << endl;
return nullptr;
}
const char *title = g1->GetTitle();
if (strcmp(title,tname)==0) break;
g1 = 0;
}
if (!g1) return nullptr;
return g1;
}
Double_t x1 = 0., y1 = 0., x2 = 0., y2 = 0., y0 = 0, x3 = 0.;
Double_t dum;
for (Int_t i=0; i<g1->GetN(); i++) {
g0->GetPoint(i, x1, y0);
g1->GetPoint(i, x1, y1);
g2->GetPoint(i, x1, y2);
if (i==g1->GetN()-1) x2=x1;
else g2->GetPoint(i+1,x2,dum);
if (i==0) x3=x1;
else g2->GetPoint(i-1,x3,dum);
Double_t tmp = y2;
if (y1 < y2) {
y2 = y1;
y1 = tmp;
}
g3->SetPoint(i,x1,y0);
Double_t binwl = (x1-x3)/2.;
Double_t binwh = (x2-x1)/2.;
if (binwl == 0.) binwl = binwh;
if (binwh == 0.) binwh = binwl;
g3->SetPointError(i, binwl, binwh, y0-y2, y1-y0);
}
return g3;
}
void AddtoBand(TGraphErrors* g1, TGraphAsymmErrors* g2) {
Double_t x1=0., y1=0., y2=0., y0=0;
if (g1->GetN()!=g2->GetN())
cout << " graphs don't have the same number of elements " << endl;
Double_t* EYhigh = g2-> GetEYhigh();
Double_t* EYlow = g2-> GetEYlow();
for (Int_t i=0; i<g1->GetN(); i++) {
g1->GetPoint(i, x1, y1);
g2->GetPoint(i, x1, y2);
if ( y1==0 || y2==0 )
cerr << "check these points very carefully : AddtoBand() : point " << i << endl;
Double_t eyh=0., eyl=0.;
y0 = y1-y2;
if (y0 != 0) {
if (y0 > 0) {
eyh = EYhigh[i];
eyh = sqrt(eyh*eyh+y0*y0);
g2->SetPointEYhigh(i, eyh);
} else {
eyl = EYlow[i];
eyl = sqrt(eyl*eyl+y0*y0);
g2->SetPointEYlow (i, eyl);
}
}
}
}
#define e(i)
Definition: RSha256.hxx:103
static const double x2[5]
static const double x1[5]
static const double x3[11]
int Int_t
Definition: RtypesCore.h:43
double Double_t
Definition: RtypesCore.h:57
float xmin
Definition: THbookFile.cxx:93
float ymin
Definition: THbookFile.cxx:93
float xmax
Definition: THbookFile.cxx:93
float ymax
Definition: THbookFile.cxx:93
double sqrt(double)
#define gROOT
Definition: TROOT.h:406
R__EXTERN TRandom * gRandom
Definition: TRandom.h:62
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
Definition: TAttFill.h:37
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
Definition: TAttLine.h:42
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
Definition: TAttLine.h:43
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Definition: TAttLine.h:40
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
Definition: TAttMarker.h:38
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
Definition: TAttMarker.h:40
The Canvas class.
Definition: TCanvas.h:27
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
Definition: TFile.h:53
static Bool_t SetCacheFileDir(ROOT::Internal::TStringView cacheDir, Bool_t operateDisconnected=kTRUE, Bool_t forceCacheread=kFALSE)
Definition: TFile.h:323
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
Definition: TFile.cxx:3942
TGraph with asymmetric error bars.
virtual void SetPointEYlow(Int_t i, Double_t eyl)
Set EYlow for point i.
virtual void SetPointError(Double_t exl, Double_t exh, Double_t eyl, Double_t eyh)
Set ex and ey values for point pointed by the mouse.
virtual void SetPointEYhigh(Int_t i, Double_t eyh)
Set EYhigh for point i.
A TGraphErrors is a TGraph with error bars.
Definition: TGraphErrors.h:26
virtual void SetPointError(Double_t ex, Double_t ey)
Set ex and ey values for point pointed by the mouse.
virtual void SetPoint(Int_t i, Double_t x, Double_t y)
Set x and y values for point number i.
Definition: TGraph.cxx:2269
Int_t GetN() const
Definition: TGraph.h:123
virtual void Draw(Option_t *chopt="")
Draw this graph with its current attributes.
Definition: TGraph.cxx:760
virtual Int_t GetPoint(Int_t i, Double_t &x, Double_t &y) const
Get x and y values for point number i.
Definition: TGraph.cxx:1593
To draw Mathematical Formula.
Definition: TLatex.h:18
This class displays a legend box (TPaveText) containing several legend entries.
Definition: TLegend.h:23
virtual const char * GetTitle() const
Returns title of object.
Definition: TNamed.h:48
virtual Double_t Rndm()
Machine independent random number generator.
Definition: TRandom.cxx:541
virtual void SetNDC(Bool_t isNDC=kTRUE)
Set NDC mode on if isNDC = kTRUE, off otherwise.
Definition: TText.cxx:813
Double_t y[n]
Definition: legend1.C:17
Definition: file.py:1
auto * l
Definition: textangle.C:4
Author
M.Sutton

Definition in file AtlasExample.C.