14 static const double mur[nren] = {1.0,0.25,4.0};
15 static const double muf[nren] = {1.0,0.25,4.0};
16 const unsigned int NUMPDF=41;
18 TGraphErrors* GetGraph(Int_t ir, Int_t ifs,Int_t icut, Int_t ipdf);
19 void AddtoBand(TGraphErrors* g1, TGraphAsymmErrors* g2);
20 TGraphAsymmErrors* MakeBand(TGraphErrors* g0, TGraphErrors* g1,TGraphErrors* g2);
24 gROOT->SetStyle(
"ATLAS");
29 auto canvas =
new TCanvas(
"canvas",
"single inclusive jets",50,50,600,600);
32 Double_t ymin = 1.e-3; Double_t ymax = 2e7;
33 Double_t xmin = 60.00; Double_t xmax = 3500.;
34 auto frame = canvas->DrawFrame(xmin,ymin,xmax,ymax);
35 frame->SetYTitle(
"d#sigma_{jet}/dE_{T,jet} [fb/GeV]");
36 frame->SetXTitle(
"E_{T,jet} [GeV]");
37 frame->GetYaxis()->SetTitleOffset(1.4);
38 frame->GetXaxis()->SetTitleOffset(1.4);
41 TGraphErrors *data[ncut];
43 for (Int_t icut=0; icut<ncut; icut++) {
44 TGraphErrors *g1[nren][ncut];
45 for (Int_t ir=0; ir<nren; ir++) {
46 g1[ir][icut] = GetGraph(ir,ir,icut,0);
48 cout <<
" g1 not found " << endl;
51 g1[ir][icut]->SetLineColor(1);
52 g1[ir][icut]->SetMarkerStyle(0);
56 sprintf(daname,
"data_%d",icut);
57 data[icut] = (TGraphErrors*)g1[0][icut]->Clone(daname);
58 data[icut]->SetMarkerStyle(20);
59 data[icut]->SetMarkerColor(1);
62 for (Int_t i=0; i< data[icut]->GetN(); i++) {
63 Double_t x1,y1,e,dx1=0.;
64 data[icut]->GetPoint(i,x1,y1);
65 Double_t r1 = 0.4*(gRandom->Rndm(1)+2);
66 Double_t r2 = 0.4*(gRandom->Rndm(1)+2);
68 if (icut==0) y = r1*y1+r1*r2*r2*x1/50000.;
71 data[icut]->SetPoint(i, x1,y);
72 data[icut]->SetPointError(i,dx1,e);
75 TGraphAsymmErrors* scale[ncut];
76 TGraphAsymmErrors* scalepdf[ncut];
78 scale[icut] = MakeBand(g1[0][icut],g1[1][icut],g1[2][icut]);
79 scalepdf[icut]=(TGraphAsymmErrors* ) scale[icut]->Clone(
"scalepdf");
81 TGraphErrors *gpdf[NUMPDF][ncut];
82 for (Int_t ipdf=0; ipdf<NUMPDF; ipdf++) {
83 gpdf[ipdf][icut]= GetGraph(0,0,icut,ipdf);
84 if (!gpdf[ipdf][icut]) {
85 cout <<
" gpdf not found " << endl;
88 gpdf[ipdf][icut]->SetLineColor(2);
89 gpdf[ipdf][icut]->SetLineStyle(1);
90 gpdf[ipdf][icut]->SetMarkerStyle(0);
91 AddtoBand(gpdf[ipdf][icut],scalepdf[icut]);
94 scalepdf[icut]->SetFillColor(icol2);
95 scalepdf[icut]->Draw(
"zE2");
96 scalepdf[icut]->SetLineWidth(3);
97 scale[icut]->SetFillColor(icol1);
98 scale[icut]->Draw(
"zE2");
99 g1[0][icut]->SetLineWidth(3);
100 g1[0][icut]->Draw(
"z");
101 data[icut]->Draw(
"P");
104 auto t =
new TLatex; t->SetNDC();
105 t->DrawLatex(0.3, 0.85,
"#sqrt{s}= 14 TeV");
106 t->DrawLatex(0.57, 0.85,
"|#eta_{jet}|<0.5");
108 auto l =
new TLegend(0.45,0.65,0.8,0.8,
"",
"NDC");
109 l->SetBorderSize(0.);
111 l->AddEntry(
"data_0",
"Data 2009",
"ep");
112 l->AddEntry(
"scalepdf",
"NLO QCD",
"lf");
116 TGraphErrors* GetGraph(Int_t ir, Int_t ifs,Int_t icut, Int_t ipdf)
118 const char *cuts[5] =
119 {
"0.0 <= |eta| < 0.5",
120 "0.5 <= |eta| < 1.0",
121 "1.0 <= |eta| < 1.5",
122 "1.5 <= |eta| < 2.0",
123 "2.0 <= |eta| < 3.0"};
125 const double mur[] = {1.0,0.25,4.0};
126 const double muf[] = {1.0,0.25,4.0};
128 TFile::SetCacheFileDir(
".");
129 TFile *file = TFile::Open(
"http://root.cern.ch/files/AtlasGraphs.root",
"CACHEREAD");
135 sprintf(tname,
" E_T (mu_r=%g, mu_f=%g);%s Pdf: %d",mur[ir],muf[ifs],cuts[icut],ipdf);
137 sprintf(tname,
" E_T %s Ms= %d",cuts[icut],-ipdf);
139 TGraphErrors* g1 = 0;
141 for (
int i=1; i<=GMAX; i++) {
142 sprintf(gname,
"full_%d",i);
143 g1 = (TGraphErrors*) file->Get(gname);
145 cout << gname <<
" not found " << endl;
149 const char *title = g1->GetTitle();
151 if (strcmp(title,tname)==0)
break;
155 if (!g1)
return nullptr;
159 TGraphAsymmErrors* MakeBand(TGraphErrors* g0, TGraphErrors* g1,TGraphErrors* g2) {
161 TGraphAsymmErrors* g3 =
new TGraphAsymmErrors();
163 Double_t x1 = 0., y1 = 0., x2 = 0., y2 = 0., y0 = 0, x3 = 0.;
165 for (Int_t i=0; i<g1->GetN(); i++) {
166 g0->GetPoint(i, x1, y0);
167 g1->GetPoint(i, x1, y1);
168 g2->GetPoint(i, x1, y2);
170 if (i==g1->GetN()-1) x2=x1;
171 else g2->GetPoint(i+1,x2,dum);
174 else g2->GetPoint(i-1,x3,dum);
181 g3->SetPoint(i,x1,y0);
183 Double_t binwl = (x1-x3)/2.;
184 Double_t binwh = (x2-x1)/2.;
185 if (binwl == 0.) binwl = binwh;
186 if (binwh == 0.) binwh = binwl;
187 g3->SetPointError(i, binwl, binwh, y0-y2, y1-y0);
193 void AddtoBand(TGraphErrors* g1, TGraphAsymmErrors* g2) {
195 Double_t x1=0., y1=0., y2=0., y0=0;
197 if (g1->GetN()!=g2->GetN())
198 cout <<
" graphs don't have the same number of elements " << endl;
200 Double_t* EYhigh = g2-> GetEYhigh();
201 Double_t* EYlow = g2-> GetEYlow();
203 for (Int_t i=0; i<g1->GetN(); i++) {
204 g1->GetPoint(i, x1, y1);
205 g2->GetPoint(i, x1, y2);
207 if ( y1==0 || y2==0 )
208 cerr <<
"check these points very carefully : AddtoBand() : point " << i << endl;
210 Double_t eyh=0., eyl=0.;
216 eyh = sqrt(eyh*eyh+y0*y0);
217 g2->SetPointEYhigh(i, eyh);
220 eyl = sqrt(eyl*eyl+y0*y0);
221 g2->SetPointEYlow (i, eyl);