Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
zdemo.C
Go to the documentation of this file.
1/// \file
2/// \ingroup tutorial_graphs
3/// \notebook
4/// This macro is an example of graphs in log scales with annotations.
5///
6/// The presented results are predictions of invariant cross-section
7/// of Direct Photons produced at RHIC energies, based on the universality of
8/// scaling function H(z).
9///
10/// These Figures were published in JINR preprint E2-98-64, Dubna,
11/// 1998 and submitted to CPC.
12///
13/// Note that the way greek symbols, super/subscripts are obtained
14/// illustrate the current limitations of Root in this area.
15///
16/// \macro_image
17/// \macro_code
18///
19/// \authors Michael Tokarev, Elena Potrebenikova (JINR Dubna)
20
21#include "TCanvas.h"
22#include "TPad.h"
23#include "TPaveLabel.h"
24#include "TLatex.h"
25#include "TGraph.h"
26#include "TFrame.h"
27
28#ifdef HZ
29#undef HZ
30#endif
31
32const Int_t NMAX = 20;
33Int_t NLOOP;
34Float_t Z[NMAX], HZ[NMAX], PT[NMAX], INVSIG[NMAX];
35
36void hz_calc(Float_t, Float_t, Float_t, Float_t, Float_t, Float_t);
37
38//__________________________________________________________________
39void zdemo()
40{
41
42 Float_t energ;
43 Float_t dens;
44 Float_t tgrad;
45 Float_t ptmin;
46 Float_t ptmax;
47 Float_t delp;
48
49 // Create a new canvas.
50 TCanvas *c1 = new TCanvas("zdemo", "Monte Carlo Study of Z scaling", 10, 40, 800, 600);
51 c1->Range(0, 0, 25, 18);
52 c1->SetFillColor(40);
53
54 TPaveLabel *pl = new TPaveLabel(1, 16.3, 24, 17.5, "Z-scaling of \
55 Direct Photon Productions in pp Collisions at RHIC Energies",
56 "br");
57 pl->SetFillColor(18);
58 pl->SetTextFont(32);
59 pl->SetTextColor(49);
60 pl->Draw();
61
62 TLatex t0;
63 t0.SetTextFont(32);
64 t0.SetTextColor(1);
65 t0.SetTextSize(0.03);
66 t0.SetTextAlign(12);
67 t0.DrawLatex(3.1, 15.5, "M.Tokarev, E.Potrebenikova ");
68 t0.DrawLatex(14., 15.5, "JINR preprint E2-98-64, Dubna, 1998 ");
69
70 TPad *pad1 = new TPad("pad1", "This is pad1", 0.02, 0.02, 0.48, 0.83, 33);
71 TPad *pad2 = new TPad("pad2", "This is pad2", 0.52, 0.02, 0.98, 0.83, 33);
72
73 pad1->Draw();
74 pad2->Draw();
75
76 //
77 // Cross-section of direct photon production in pp collisions
78 // at 500 GeV vs Pt
79 //
80 energ = 63;
81 dens = 1.766;
82 tgrad = 90.;
83 ptmin = 4.;
84 ptmax = 24.;
85 delp = 2.;
86 hz_calc(energ, dens, tgrad, ptmin, ptmax, delp);
87 pad1->cd();
88 pad1->Range(-0.255174, -19.25, 2.29657, -6.75);
89 pad1->SetLogx();
90 pad1->SetLogy();
91
92 // create a 2-d histogram to define the range
93 pad1->DrawFrame(1, 1e-18, 110, 1e-8);
94 pad1->GetFrame()->SetFillColor(19);
95
96 TLatex t1;
97 t1.SetNDC();
98 t1.SetTextFont(62);
99 t1.SetTextColor(36);
100 t1.SetTextSize(0.08);
101 t1.SetTextAlign(12);
102 t1.DrawLatex(0.6, 0.85, "p - p");
103
104 t1.SetTextSize(0.05);
105 t1.DrawLatex(0.6, 0.79, "Direct #gamma");
106 t1.DrawLatex(0.6, 0.75, "#theta = 90^{o}");
107
108 t1.DrawLatex(0.20, 0.45, "Ed^{3}#sigma/dq^{3}");
109 t1.DrawLatex(0.18, 0.40, "(barn/Gev^{2})");
110
111 t1.SetTextSize(0.045);
112 t1.SetTextColor(kBlue);
113 t1.DrawLatex(0.22, 0.260, "#sqrt{s} = 63(GeV)");
114 t1.SetTextColor(kRed);
115 t1.DrawLatex(0.22, 0.205, "#sqrt{s} = 200(GeV)");
116 t1.SetTextColor(6);
117 t1.DrawLatex(0.22, 0.15, "#sqrt{s} = 500(GeV)");
118
119 t1.SetTextSize(0.05);
120 t1.SetTextColor(1);
121 t1.DrawLatex(0.6, 0.06, "q_{T} (Gev/c)");
122
123 TGraph *gr1 = new TGraph(NLOOP, PT, INVSIG);
124
125 gr1->SetLineColor(38);
126 gr1->SetMarkerColor(kBlue);
127 gr1->SetMarkerStyle(21);
128 gr1->SetMarkerSize(1.1);
129 gr1->Draw("LP");
130
131 //
132 // Cross-section of direct photon production in pp collisions
133 // at 200 GeV vs Pt
134 //
135
136 energ = 200;
137 dens = 2.25;
138 tgrad = 90.;
139 ptmin = 4.;
140 ptmax = 64.;
141 delp = 6.;
142 hz_calc(energ, dens, tgrad, ptmin, ptmax, delp);
143
144 TGraph *gr2 = new TGraph(NLOOP, PT, INVSIG);
145 gr2->SetLineColor(38);
146 gr2->SetMarkerColor(kRed);
147 gr2->SetMarkerStyle(29);
148 gr2->SetMarkerSize(1.5);
149 gr2->Draw("LP");
150
151 //
152 // Cross-section of direct photon production in pp collisions
153 // at 500 GeV vs Pt
154 //
155 energ = 500;
156 dens = 2.73;
157 tgrad = 90.;
158 ptmin = 4.;
159 ptmax = 104.;
160 delp = 10.;
161 hz_calc(energ, dens, tgrad, ptmin, ptmax, delp);
162
163 TGraph *gr3 = new TGraph(NLOOP, PT, INVSIG);
164
165 gr3->SetLineColor(38);
166 gr3->SetMarkerColor(6);
167 gr3->SetMarkerStyle(8);
168 gr3->SetMarkerSize(1.1);
169 gr3->Draw("LP");
170
171 Float_t *dum = nullptr;
172 TGraph *graph = new TGraph(1, dum, dum);
173 graph->SetMarkerColor(kBlue);
174 graph->SetMarkerStyle(21);
175 graph->SetMarkerSize(1.1);
176 graph->SetPoint(0, 1.7, 1.e-16);
177 graph->Draw("LP");
178
179 graph = new TGraph(1, dum, dum);
180 graph->SetMarkerColor(kRed);
181 graph->SetMarkerStyle(29);
182 graph->SetMarkerSize(1.5);
183 graph->SetPoint(0, 1.7, 2.e-17);
184 graph->Draw("LP");
185
186 graph = new TGraph(1, dum, dum);
187 graph->SetMarkerColor(6);
188 graph->SetMarkerStyle(8);
189 graph->SetMarkerSize(1.1);
190 graph->SetPoint(0, 1.7, 4.e-18);
191 graph->Draw("LP");
192
193 pad2->cd();
194 pad2->Range(-0.43642, -23.75, 3.92778, -6.25);
195 pad2->SetLogx();
196 pad2->SetLogy();
197
198 pad2->DrawFrame(1, 1e-22, 3100, 1e-8);
199 pad2->GetFrame()->SetFillColor(19);
200
201 TGraph *gr = new TGraph(NLOOP, Z, HZ);
202 gr->SetTitle("HZ vs Z");
203 gr->SetFillColor(19);
204 gr->SetLineColor(9);
205 gr->SetMarkerColor(50);
206 gr->SetMarkerStyle(29);
207 gr->SetMarkerSize(1.5);
208 gr->Draw("LP");
209
210 TLatex t2;
211 t2.SetNDC();
212 t2.SetTextFont(62);
213 t2.SetTextColor(36);
214 t2.SetTextSize(0.08);
215 t2.SetTextAlign(12);
216 t2.DrawLatex(0.6, 0.85, "p - p");
217
218 t2.SetTextSize(0.05);
219 t2.DrawLatex(0.6, 0.79, "Direct #gamma");
220 t2.DrawLatex(0.6, 0.75, "#theta = 90^{o}");
221
222 t2.DrawLatex(0.70, 0.55, "H(z)");
223 t2.DrawLatex(0.68, 0.50, "(barn)");
224
225 t2.SetTextSize(0.045);
226 t2.SetTextColor(46);
227 t2.DrawLatex(0.20, 0.30, "#sqrt{s}, GeV");
228 t2.DrawLatex(0.22, 0.26, "63");
229 t2.DrawLatex(0.22, 0.22, "200");
230 t2.DrawLatex(0.22, 0.18, "500");
231
232 t2.SetTextSize(0.05);
233 t2.SetTextColor(1);
234 t2.DrawLatex(0.88, 0.06, "z");
235
236 c1->Modified();
237 c1->Update();
238}
239
240void hz_calc(Float_t ENERG, Float_t DENS, Float_t TGRAD, Float_t PTMIN, Float_t PTMAX, Float_t DELP)
241{
242 Int_t I;
243
244 Float_t GM1 = 0.00001;
245 Float_t GM2 = 0.00001;
246 Float_t A1 = 1.;
247 Float_t A2 = 1.;
248 Float_t ALX = 2.;
249 Float_t BETA = 1.;
250 Float_t KF1 = 8.E-7;
251 Float_t KF2 = 5.215;
252
253 Float_t MN = 0.9383;
254 Float_t DEGRAD = 0.01745329;
255
256 Float_t EB1, EB2, PB1, PB2, MB1, MB2, M1, M2;
257 Float_t DNDETA;
258
259 Float_t P1P2, P1P3, P2P3;
260 Float_t Y1, Y2, S, SMIN, SX1, SX2, SX1X2, DELM;
261 Float_t Y1X1, Y1X2, Y2X1, Y2X2, Y2X1X2, Y1X1X2;
262 Float_t KX1, KX2, ZX1, ZX2;
263 Float_t H1;
264
265 Float_t PTOT, THET, ETOT, X1, X2;
266
267 DNDETA = DENS;
268 MB1 = MN * A1;
269 MB2 = MN * A2;
270 EB1 = ENERG / 2. * A1;
271 EB2 = ENERG / 2. * A2;
272 M1 = GM1;
273 M2 = GM2;
274 THET = TGRAD * DEGRAD;
275 NLOOP = (PTMAX - PTMIN) / DELP;
276
277 for (I = 0; I < NLOOP; I++) {
278 PT[I] = PTMIN + I * DELP;
279 PTOT = PT[I] / sin(THET);
280
281 ETOT = sqrt(M1 * M1 + PTOT * PTOT);
282 PB1 = sqrt(EB1 * EB1 - MB1 * MB1);
283 PB2 = sqrt(EB2 * EB2 - MB2 * MB2);
284 P2P3 = EB2 * ETOT + PB2 * PTOT * cos(THET);
285 P1P2 = EB2 * EB1 + PB2 * PB1;
286 P1P3 = EB1 * ETOT - PB1 * PTOT * cos(THET);
287
288 X1 = P2P3 / P1P2;
289 X2 = P1P3 / P1P2;
290 Y1 = X1 + sqrt(X1 * X2 * (1. - X1) / (1. - X2));
291 Y2 = X2 + sqrt(X1 * X2 * (1. - X2) / (1. - X1));
292
293 S = (MB1 * MB1) + 2. * P1P2 + (MB2 * MB2);
294 SMIN = 4. * ((MB1 * MB1) * (X1 * X1) + 2. * X1 * X2 * P1P2 + (MB2 * MB2) * (X2 * X2));
295 SX1 = 4. * (2 * (MB1 * MB1) * X1 + 2 * X2 * P1P2);
296 SX2 = 4. * (2 * (MB2 * MB2) * X2 + 2 * X1 * P1P2);
297 SX1X2 = 4. * (2 * P1P2);
298 DELM = pow((1. - Y1) * (1. - Y2), ALX);
299
300 Z[I] = sqrt(SMIN) / DELM / pow(DNDETA, BETA);
301
302 Y1X1 = 1. + X2 * (1 - 2. * X1) / (2. * (Y1 - X1) * (1. - X2));
303 Y1X2 = X1 * (1 - X1) / (2. * (Y1 - X1) * (1. - X2) * (1. - X2));
304 Y2X1 = X2 * (1 - X2) / (2. * (Y2 - X2) * (1. - X1) * (1. - X1));
305 Y2X2 = 1. + X1 * (1 - 2. * X2) / (2. * (Y2 - X2) * (1. - X1));
306 Y2X1X2 = Y2X1 * ((1. - 2. * X2) / (X2 * (1 - X2)) - (Y2X2 - 1.) / (Y2 - X2));
307 Y1X1X2 = Y1X2 * ((1. - 2. * X1) / (X1 * (1 - X1)) - (Y1X1 - 1.) / (Y1 - X1));
308
309 KX1 = -DELM * (Y1X1 * ALX / (1. - Y1) + Y2X1 * ALX / (1. - Y2));
310 KX2 = -DELM * (Y2X2 * ALX / (1. - Y2) + Y1X2 * ALX / (1. - Y1));
311 ZX1 = Z[I] * (SX1 / (2. * SMIN) - KX1 / DELM);
312 ZX2 = Z[I] * (SX2 / (2. * SMIN) - KX2 / DELM);
313
314 H1 = ZX1 * ZX2;
315
316 HZ[I] = KF1 / pow(Z[I], KF2);
317 INVSIG[I] = (HZ[I] * H1 * 16.) / S;
318 }
319}
#define e(i)
Definition RSha256.hxx:103
int Int_t
Definition RtypesCore.h:45
float Float_t
Definition RtypesCore.h:57
@ kRed
Definition Rtypes.h:66
@ kBlue
Definition Rtypes.h:66
#define DEGRAD
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
Definition TAttFill.h:37
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
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
Definition TAttMarker.h:45
virtual void SetTextAlign(Short_t align=11)
Set the text alignment.
Definition TAttText.h:42
virtual void SetTextColor(Color_t tcolor=1)
Set the text color.
Definition TAttText.h:44
virtual void SetTextFont(Font_t tfont=62)
Set the text font.
Definition TAttText.h:46
virtual void SetTextSize(Float_t tsize=1)
Set the text size.
Definition TAttText.h:47
The Canvas class.
Definition TCanvas.h:23
A TGraph is an object made of two arrays X and Y with npoints each.
Definition TGraph.h:41
void Draw(Option_t *chopt="") override
Draw this graph with its current attributes.
Definition TGraph.cxx:833
void SetTitle(const char *title="") override
Change (i.e.
Definition TGraph.cxx:2402
To draw Mathematical Formula.
Definition TLatex.h:18
TLatex * DrawLatex(Double_t x, Double_t y, const char *text)
Make a copy of this object with the new parameters And copy object attributes.
Definition TLatex.cxx:1943
The most important graphics class in the ROOT system.
Definition TPad.h:28
TH1F * DrawFrame(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax, const char *title="") override
Draw an empty pad frame with X and Y axis.
Definition TPad.cxx:1678
void Range(Double_t x1, Double_t y1, Double_t x2, Double_t y2) override
Set world coordinate system for the pad.
Definition TPad.cxx:5331
void SetLogy(Int_t value=1) override
Set Lin/Log scale for Y.
Definition TPad.cxx:6100
TVirtualPad * cd(Int_t subpadnumber=0) override
Set Current pad.
Definition TPad.cxx:693
TFrame * GetFrame() override
Get frame.
Definition TPad.cxx:2955
void Draw(Option_t *option="") override
Draw Pad in Current pad (re-parent pad if necessary).
Definition TPad.cxx:1364
void SetLogx(Int_t value=1) override
Set Lin/Log scale for X.
Definition TPad.cxx:6086
A Pave (see TPave) with a text centered in the Pave.
Definition TPaveLabel.h:20
void Draw(Option_t *option="") override
Draw this pavelabel with its current attributes.
virtual void SetNDC(Bool_t isNDC=kTRUE)
Set NDC mode on if isNDC = kTRUE, off otherwise.
Definition TText.cxx:823
RVec< PromoteType< T > > cos(const RVec< T > &v)
Definition RVec.hxx:1852
RVec< PromoteTypes< T0, T1 > > pow(const T0 &x, const RVec< T1 > &v)
Definition RVec.hxx:1846
RVec< PromoteType< T > > sin(const RVec< T > &v)
Definition RVec.hxx:1851
return c1
Definition legend1.C:41
TGraphErrors * gr
Definition legend1.C:25
#define I(x, y, z)
VecExpr< UnaryOp< Sqrt< T >, VecExpr< A, T, D >, T >, T, D > sqrt(const VecExpr< A, T, D > &rhs)
RooArgSet S(Args_t &&... args)
Definition RooArgSet.h:195
Definition graph.py:1
Definition zdemo.py:1
auto * t1
Definition textangle.C:20