e0a48631bc0281f81e374435ddb8839160f94529
[u/mrichter/AliRoot.git] / PWG2 / FORWARD / analysis2 / OtherData.C
1 /**
2  * @file 
3  * 
4  * @ingroup pwg2_forward_scripts
5  */
6 #include <TGraphAsymmErrors.h>
7 #include <TMultiGraph.h>
8 #include <TStyle.h>
9 #include <TMath.h>
10 #include <TCanvas.h>
11 #include <TLegend.h>
12
13 //____________________________________________________________________
14 /**
15  * @defgroup pwg2_forward_otherdata  External data 
16  *
17  * @ingroup pwg2_forward_scripts
18  */
19 //____________________________________________________________________
20 /**
21  * Values used 
22  * 
23  * @ingroup pwg2_forward_otherdata 
24  */
25 enum { 
26   /** Color used for UA5 data */
27   UA5Color   = kBlue+1,
28   /** Color used for CMS data */
29   CMSColor   = kGreen+1,
30   /** Color used for ALICE data */
31   ALICEColor = kMagenta+1,
32   /** Marker style INEL data */
33   INELStyle  = 22,
34   /** Marker style INEL>0 data */
35   INELGtStyle= 29,
36   /** Marker style NSD data */
37   NSDStyle   = 23,
38   /** Colour offset for mirror data */
39   MirrorOff  = 4
40 };
41
42 //____________________________________________________________________
43 /** 
44  * Set graph attributes 
45  * 
46  * @param g        Graph
47  * @param marker   Marker style 
48  * @param color    Marker and line color
49  * @param name     Name of graph 
50  * @param title    Title of graph 
51  * 
52  * @ingroup pwg2_forward_otherdata
53  */
54 void
55 SetGraphAttributes(TGraph* g, Int_t marker, Int_t color,
56                    const Char_t* name, const Char_t* title)
57 {
58   g->SetName(name);
59   g->SetTitle(title);
60   g->SetMarkerStyle(marker);
61   g->SetMarkerColor(color);
62   g->SetLineColor(color);
63   g->SetFillColor(0);
64   g->SetFillStyle(0);
65   g->GetHistogram()->SetStats(kFALSE);
66   g->GetHistogram()->SetXTitle("#eta");
67   g->GetHistogram()->SetYTitle("#frac{1}{N} #frac{dN_{ch}}{#eta}");
68 }
69
70 //____________________________________________________________________
71 /** 
72  * Get the UA5 NSD data for pp at @f$ \sqrt{s} = 900GeV@f$
73  * p7886_d1x1y4 - Z.Phys.C33:1-6,1986.
74  *
75  * @param mirrored Wether to produce the mirrored plot 
76  * 
77  * @return graph of data 
78  * 
79  * @ingroup pwg2_forward_otherdata
80  */
81 TGraphAsymmErrors* UA5Nsd(Bool_t mirrored=false) 
82 {
83   //UA5 data NSD - p7886_d1x1y4 - Z.Phys.C33:1-6,1986.
84   double x[] = { 0.125, 0.375, 0.625, 0.875, 1.125, 1.375, 1.625, 1.875, 2.125, 
85                  2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.125, 4.375,
86                  4.625 };
87   double exm[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
88                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
89   double exp[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
90                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
91   double y[] = { 3.48, 3.38, 3.52, 3.68, 3.71, 3.86, 3.76, 3.66, 3.72, 
92                  3.69, 3.56, 3.41, 3.15, 3.09, 2.74, 2.73, 2.32, 1.99, 1.69 };
93   double eym[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 
94                    0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 0.13 };
95   double eyp[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 
96                    0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 0.13 };
97   const int np = 19;
98   double xm[np]; 
99   double exmm[np];
100   double expm[np];
101   double ym[np];
102   double eymm[np];
103   double eypm[np];
104   for (int i = 0; i < np; i++) {
105     int j = np-1-i;
106     xm[i]   = -x[j];
107     exmm[i] = exm[j];
108     expm[i] = exp[j];
109     ym[i]   = y[j];
110     eymm[i] = eym[j];
111     eypm[i] = eyp[j];
112   }
113
114   TGraphAsymmErrors* g  = new TGraphAsymmErrors(19,x, y, exm, exp, eym, eyp);
115   TGraphAsymmErrors* gm = new TGraphAsymmErrors(19,xm,ym,exmm,expm,eymm,eypm);
116   SetGraphAttributes(g,  NSDStyle, UA5Color,"ua5_nsd",         "UA5 NSD");
117   SetGraphAttributes(gm, NSDStyle+MirrorOff, UA5Color,"ua5_nsd_mirrored",
118                      "UA5 NSD (mirrored)");
119
120   return (mirrored ? gm : g);
121 }
122
123 //____________________________________________________________________
124 /** 
125  * Get the UA5 INEL data for pp at @f$ \sqrt{s} = 900GeV@f$
126  * p7886_d2x1y2 - Z.Phys.C33:1-6,1986.
127  *
128  * @param mirrored Wether to produce the mirrored plot 
129  * 
130  * @return graph of data 
131  * 
132  * @ingroup pwg2_forward_otherdata
133  */
134 TGraphAsymmErrors* UA5Inel(Bool_t mirrored=false) 
135 {
136   //UA5 data INEL - p7886_d2x1y2 - Z.Phys.C33:1-6,1986.
137   double x[] = { 0.125, 0.375, 0.625, 0.875, 1.125, 1.375, 1.625, 1.875, 2.125, 
138                  2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.125, 4.375,
139                  4.625 };
140   double exm[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
141                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
142   double exp[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
143                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
144   double y[] = { 3.14, 3.04, 3.17, 3.33, 3.33, 3.53, 3.46, 3.41, 3.45, 
145                  3.39, 3.07, 3.07, 2.93, 2.93, 2.55, 2.48, 2.18, 1.91, 1.52 };
146   double eym[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 
147                    0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 0.13 };
148   double eyp[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 
149                    0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 0.13 };
150   const int np = 19;
151   double xm[np]; 
152   double exmm[np];
153   double expm[np];
154   double ym[np];
155   double eymm[np];
156   double eypm[np];
157   for (int i = 0; i < np; i++) {
158     int j = np-1-i;
159     xm[i]   = -x[j];
160     exmm[i] = exm[j];
161     expm[i] = exp[j];
162     ym[i]   = y[j];
163     eymm[i] = eym[j];
164     eypm[i] = eyp[j];
165   }
166   TGraphAsymmErrors* g  = new TGraphAsymmErrors(np,x, y, exm, exp, eym, eyp);
167   TGraphAsymmErrors* gm = new TGraphAsymmErrors(np,xm,ym,exmm,expm,eymm,eypm);
168
169   SetGraphAttributes(g,  INELStyle, UA5Color, "ua5_inel", "UA5 INEL");
170   SetGraphAttributes(gm, INELStyle+MirrorOff, UA5Color, "ua5_inel_mirrored", 
171                      "UA5 INEL (mirrored)");
172   
173   return (mirrored ? gm : g);
174 }
175
176 //____________________________________________________________________
177 /** 
178  * Get the ALICE INEL data in @f$ |\eta|<1.3@f$ for pp at @f$ \sqrt{s}
179  * = 900GeV@f$ 
180  * p7742_d1x1y1 - Eur.Phys.J.C68:89-108,2010. 
181  *
182  * @return graph of data 
183  * 
184  * @ingroup pwg2_forward_otherdata
185  */
186 TGraphAsymmErrors* AliceCentralInel900()
187 {  
188   // INEL - p7742_d1x1y1 - Eur.Phys.J.C68:89-108,2010. 
189   TGraphAsymmErrors* g = 0;
190   double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, 
191                                  -0.1, 0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3 };
192   double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
193                    0.1, 0.1, 0.1, 0.1, 0.1 };
194   double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
195                    0.1, 0.1, 0.1, 0.1, 0.1 };
196   double y[] = { 3.28, 3.28, 3.22, 3.12, 3.06, 3.02, 2.98, 3.02, 3.02, 
197                  3.05, 3.15, 3.21, 3.26, 3.33 };
198   double eym[] = { 0.06324555320336758, 0.06324555320336758, 
199                    0.06324555320336758, 0.06324555320336758, 
200                    0.06324555320336758, 0.05385164807134505, 
201                    0.05385164807134505, 0.05385164807134505, 
202                    0.05385164807134505, 0.06324555320336758, 
203                    0.06324555320336758, 0.06324555320336758, 
204                    0.06324555320336758, 0.06324555320336758 };
205   double eyp[] = { 0.08246211251235322, 0.08246211251235322, 
206                    0.08246211251235322, 0.08246211251235322, 
207                    0.08246211251235322, 0.08246211251235322, 
208                    0.07280109889280519, 0.08246211251235322, 
209                    0.08246211251235322, 0.08246211251235322, 
210                    0.08246211251235322, 0.08246211251235322, 
211                    0.08246211251235322, 0.08246211251235322 };
212   const int np = 14;
213   for (int i = 0; i < np; i++) { 
214     eym[i] += 0.02;
215     eyp[i] += 0.02;
216   }
217   g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
218   SetGraphAttributes(g, INELStyle, ALICEColor, "alice_inel", 
219                      "ALICE INEL (publ.)");
220
221   return g;
222 }
223
224 //____________________________________________________________________
225 /** 
226  * Get the ALICE INEL>0 data in @f$ |\eta|<1.3@f$ for pp at @f$
227  * \sqrt{s} = 900GeV@f$ 
228  *
229  * p7741_d4x1y1 - Eur.Phys.J.C68:345-354,2010. 
230  *
231  * @return graph of data 
232  * 
233  * @ingroup pwg2_forward_otherdata
234  */
235 TGraphAsymmErrors* AliceCentralInelGt900()
236 {  
237   // INEL>0 - p7741_d4x1y1 - Eur.Phys.J.C68:345-354,2010. 
238   double x[] = { -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7, 
239     0.9 };
240   double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
241     0.1 };
242   double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
243     0.1 };
244   double y[] = { 4.0, 3.87, 3.8, 3.7, 3.67, 3.73, 3.72, 3.77, 3.92, 
245     4.01 };
246   double eym[] = { 0.07615773105863909, 0.07615773105863909, 
247                    0.07615773105863909, 0.06324555320336758, 
248                    0.06324555320336758, 0.06324555320336758, 
249                    0.0670820393249937, 0.07615773105863909, 
250                    0.07615773105863909, 0.07615773105863909 };
251   double eyp[] = { 0.08544003745317531, 0.07615773105863909, 
252                    0.07615773105863909, 0.07280109889280519, 
253                    0.07280109889280519, 0.07280109889280519, 
254                    0.07615773105863909, 0.07615773105863909, 
255                    0.08544003745317531, 0.08544003745317531 };
256   const int np = 10;
257   for (int i = 0; i < np; i++) { 
258     double stat = (i >= 3  && i<=5) ? 0.02 : 0.03;
259     eym[i] += stat;
260     eyp[i] += stat;
261   }
262
263   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
264   SetGraphAttributes(g, INELGtStyle, ALICEColor, "alice_inelgt900", 
265                      "ALICE INEL>0 (publ.)");
266   return g;
267
268 }
269
270 //____________________________________________________________________
271 /** 
272  * Get the ALICE INEL>0 data in @f$ |\eta|<0.9@f$ for pp at @f$
273  * \sqrt{s} = 2.36TeV@f$ 
274  *
275  * p7741_d5x1y1 - Eur.Phys.J.C68:345-354,2010. 
276  *
277  * @return graph of data 
278  * 
279  * @ingroup pwg2_forward_otherdata
280  */
281 TGraphAsymmErrors* AliceCentralInelGt2360()
282 {  
283   // INEL>0 - p7741_d5x1y1 - Eur.Phys.J.C68:345-354,2010. 
284   double x[] = { -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7, 0.9 };
285   double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
286   double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
287   double y[] = { 4.91, 4.76, 4.63, 4.64, 4.55, 4.55, 4.64, 4.66, 4.82, 4.88 };
288   double eym[] = { 0.08544003745317531, 0.08544003745317531, 
289                    0.08544003745317531, 0.08544003745317531, 
290                    0.08544003745317531, 0.08544003745317531, 
291                    0.08544003745317531, 0.08544003745317531, 
292                    0.08544003745317531, 0.08544003745317531 };
293   double eyp[] = { 0.11401754250991379, 0.11401754250991379, 
294                    0.1044030650891055, 0.1044030650891055, 
295                    0.1044030650891055, 0.1044030650891055, 
296                    0.1044030650891055, 0.1044030650891055, 
297                    0.11401754250991379, 0.11401754250991379 };
298   const int np = 10;
299   for (int i = 0; i < np; i++) { 
300     double stat = 0.3;
301     eym[i] += stat;
302     eyp[i] += stat;
303   }
304
305   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
306   SetGraphAttributes(g, INELGtStyle, ALICEColor, "alice_inelgt2360", 
307                      "ALICE INEL>0 (publ.)");
308   return g;
309 }
310
311 //____________________________________________________________________
312 /** 
313  * Get the ALICE INEL>0 data in @f$ |\eta|<0.9@f$ for pp at @f$
314  * \sqrt{s} = 7TeV@f$ 
315  *
316  * p7741_d6x1y1 - Eur.Phys.J.C68:345-354,2010. 
317  *
318  * @return graph of data 
319  * 
320  * @ingroup pwg2_forward_otherdata
321  */
322 TGraphAsymmErrors* AliceCentralInelGt7000()
323 {  
324   // INEL>0 - p7741_d6x1y1 - Eur.Phys.J.C68:345-354,2010. 
325 // Plot: p7741_d6x1y1
326   double x[] = { -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7, 0.9 };
327   double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
328   double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
329   double y[] = { 6.22, 6.07, 6.01, 5.84, 5.85, 5.85, 5.91, 6.01, 6.17, 6.26 };
330   double eym[] = { 0.1216552506059644, 0.1216552506059644, 
331                    0.1216552506059644, 0.11180339887498948, 
332                    0.11180339887498948, 0.11180339887498948, 
333                    0.11180339887498948, 0.1216552506059644, 
334                    0.1216552506059644, 0.1216552506059644 };
335   double eyp[] = { 0.21095023109728983, 0.21095023109728983, 
336                    0.2009975124224178, 0.2009975124224178, 
337                    0.2009975124224178, 0.2009975124224178, 
338                    0.2009975124224178, 0.2009975124224178, 
339                    0.21095023109728983, 0.21095023109728983 };
340   const int np = 10;
341   for (int i = 0; i < np; i++) { 
342     double stat = 0.2;
343     eym[i] += stat;
344     eyp[i] += stat;
345   }
346
347   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
348   SetGraphAttributes(g, INELGtStyle, ALICEColor, "alice_inelgt7000", 
349                      "ALICE INEL>0 (publ.)");
350   return g;
351 }
352
353 //____________________________________________________________________
354 /** 
355  * Get the ALICE NSD data in @f$ |\eta|<1.3@f$ for pp at @f$
356  * \sqrt{s} = 900GeV@f$ 
357  *
358  * p7742_d2x1y1 - Eur.Phys.J.C68:89-108,2010. 
359  *
360  * @return graph of data 
361  * 
362  * @ingroup pwg2_forward_otherdata
363  */
364 TGraphAsymmErrors* AliceCentralNsd900()
365 {
366   //NSD - p7742_d2x1y1 - Eur.Phys.J.C68:89-108,2010. 
367   double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 
368                  0.5, 0.7, 0.9, 1.1, 1.3 };
369   double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
370                    0.1, 0.1, 0.1, 0.1, 0.1 };
371   double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
372                    0.1, 0.1, 0.1, 0.1, 0.1 };
373   double y[] = { 3.9, 3.89, 3.81, 3.7, 3.64, 3.59, 3.53, 3.58, 3.59, 
374                  3.61, 3.74, 3.8, 3.87, 3.95 };
375   double eym[] = { 0.13341664064126335, 0.13152946437965907, 
376                    0.13152946437965907, 0.1216552506059644, 
377                    0.1216552506059644, 0.1216552506059644, 
378                    0.1216552506059644, 0.1216552506059644, 
379                    0.1216552506059644, 0.1216552506059644, 
380                    0.1216552506059644, 0.13152946437965907, 
381                    0.13152946437965907, 0.13341664064126335 };
382   double eyp[] = { 0.13341664064126335, 0.13152946437965907, 
383                    0.13152946437965907, 0.1216552506059644, 
384                    0.1216552506059644, 0.1216552506059644, 
385                    0.1216552506059644, 0.1216552506059644, 
386                    0.1216552506059644, 0.1216552506059644, 
387                    0.1216552506059644, 0.13152946437965907, 
388                    0.13152946437965907, 0.13341664064126335 };
389   const int np = 14;
390   for (int i = 0; i < np; i++) { 
391     double stat = (i == 0 || i == np-1) ? 0.03 : 0.02;
392     eym[i] += stat;
393     eyp[i] += stat;
394   }
395
396   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
397   SetGraphAttributes(g, NSDStyle, ALICEColor, "alice_nsd", "ALICE NSD (publ.)");
398
399   return g;
400 }
401
402 //____________________________________________________________________
403 /** 
404  * Get the ALICE INEL data in @f$ |\eta|<1.3@f$ for pp at @f$
405  * \sqrt{s} = 2.36TeV@f$ 
406  *
407  * p7742_d3x1y1 - Eur.Phys.J.C68:89-108,2010. 
408  *
409  * @return graph of data 
410  * 
411  * @ingroup pwg2_forward_otherdata
412  */
413 TGraphAsymmErrors* AliceCentralInel2360()
414 {  
415   // INEL - p7742_d3x1y1 - Eur.Phys.J.C68:89-108,2010. 
416   double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 
417                  0.5, 0.7, 0.9, 1.1, 1.3 };
418   double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
419                    0.1, 0.1, 0.1, 0.1, 0.1 };
420   double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
421                    0.1, 0.1, 0.1, 0.1, 0.1 };
422   double y[] = { 4.08, 4.01, 4.0, 3.88, 3.77, 3.8, 3.73, 3.71, 3.79, 
423                  3.82, 3.94, 4.02, 4.05, 4.16 };
424   double eym[] = { 0.13341664064126335, 0.12369316876852982, 
425                    0.12369316876852982, 0.1216552506059644, 
426                    0.1216552506059644, 0.1216552506059644, 
427                    0.1216552506059644, 0.11180339887498948, 
428                    0.1216552506059644, 0.1216552506059644, 
429                    0.12369316876852982, 0.12369316876852982, 
430                    0.13341664064126335, 0.13341664064126335 };
431   double eyp[] = { 0.2716615541441225, 0.2716615541441225, 
432                    0.2716615541441225, 0.260768096208106, 
433                    0.25079872407968906, 0.25079872407968906, 
434                    0.25079872407968906, 0.25079872407968906, 
435                    0.25079872407968906, 0.260768096208106, 
436                    0.261725046566048, 0.2716615541441225, 
437                    0.2716615541441225, 0.2816025568065745 };
438   const int np = 14;
439   for (int i = 0; i < np; i++) { 
440     double stat = (i < 3  || i > np-1-4) ? 0.03 : 0.02;
441     eym[i] += stat;
442     eyp[i] += stat;
443   }
444
445   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
446   SetGraphAttributes(g, NSDStyle, ALICEColor, "alice_inel2360", 
447                      "ALICE INEL (publ.)");
448   return g;
449 }
450
451 //____________________________________________________________________
452 /** 
453  * Get the ALICE NSD data in @f$ |\eta|<1.3@f$ for pp at @f$
454  * \sqrt{s} = 2.36TeV@f$ 
455  *
456  * p7742_d4x1y1 - Eur.Phys.J.C68:89-108,2010. 
457  *
458  * @return graph of data 
459  * 
460  * @ingroup pwg2_forward_otherdata
461  */
462 TGraphAsymmErrors* AliceCentralNsd2360()
463 {  
464   // NSD - p7742_d4x1y1 - Eur.Phys.J.C68:89-108,2010. 
465   double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 
466                  0.5, 0.7, 0.9, 1.1, 1.3 };
467   double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
468                    0.1, 0.1, 0.1, 0.1, 0.1 };
469   double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
470                    0.1, 0.1, 0.1, 0.1, 0.1 };
471   double y[] = { 4.79, 4.72, 4.7, 4.56, 4.44, 4.47, 4.39, 4.37, 4.47, 
472     4.5, 4.64, 4.73, 4.76, 4.9 };
473   double eym[] = { 0.13601470508735444, 0.13341664064126335, 
474                    0.13341664064126335, 0.12369316876852982, 
475                    0.12369316876852982, 0.12369316876852982, 
476                    0.12369316876852982, 0.12369316876852982, 
477                    0.12369316876852982, 0.12369316876852982,
478                    0.12369316876852982, 0.13341664064126335,
479                    0.13341664064126335, 0.13341664064126335 };
480   double eyp[] = { 0.18439088914585774, 0.18248287590894657,
481                    0.18248287590894657, 0.1726267650163207,
482                    0.1726267650163207, 0.1726267650163207, 
483                    0.16278820596099708, 0.16278820596099708, 
484                    0.1726267650163207, 0.1726267650163207, 
485                    0.1726267650163207, 0.18248287590894657, 
486                    0.18248287590894657, 0.18248287590894657 };
487   const int np = 14;
488   
489   for (int i = 0; i < np; i++) { 
490     double stat = (i < 1) ? 0.03 : 0.02;
491     eym[i] += stat;
492     eyp[i] += stat;
493   }
494
495   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
496   SetGraphAttributes(g, NSDStyle, ALICEColor, "alice_nsd2360", 
497                      "ALICE NSD (publ.)");
498   return g;
499 }
500
501   
502 //____________________________________________________________________
503 /** 
504  * Get the CMS NSD data in @f$ |\eta|<2.25@f$ for pp at @f$
505  * \sqrt{s} = 900GeV@f$ 
506  *
507  * p7743_d8x1y1
508  *
509  * @return graph of data 
510  * 
511  * @ingroup pwg2_forward_otherdata
512  */
513 TGraphAsymmErrors* CMSNsd900()
514 {
515   // CMS published NSD data - p7743_d8x1y1
516   double x[] = { -2.25, -1.75, -1.25, -0.75, -0.25, 0.25, 0.75, 1.25, 1.75, 
517     2.25 };
518   double exm[] = { 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 };
519   double exp[] = { 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 };
520   double y[] = { 3.6, 3.73, 3.62, 3.54, 3.48, 3.48, 3.54, 3.62, 3.73,  3.6 };
521   double eym[] = { 0.13, 0.14, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.14,0.13 };
522   double eyp[] = { 0.13, 0.14, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.14, 0.13 };
523   const int np = 10;
524   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
525   SetGraphAttributes(g, NSDStyle, CMSColor, "cms_nsd900", "CMS NSD");
526
527   return g;
528 }
529
530
531 //____________________________________________________________________
532 /** 
533  * Get the CMS NSD data in @f$ |\eta|<2.25@f$ for pp at @f$
534  * \sqrt{s} = 2.36GeV@f$ 
535  *
536  * p7743_d8x1y2
537  *
538  * @return graph of data 
539  * 
540  * @ingroup pwg2_forward_otherdata
541  */
542 TGraphAsymmErrors* CMSNsd2360()
543 {
544   // CMS NSD 2360 - p7743_d8x1y2
545   double x[] = { -2.25, -1.75, -1.25, -0.75, -0.25, 0.25, 0.75,1.25,1.75,2.25 };
546   double exm[] = { 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 };
547   double exp[] = { 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 };
548   double y[] = { 4.78, 4.81, 4.66, 4.61, 4.47, 4.47, 4.61, 4.66, 4.81,  4.78 };
549   double eym[] = { 0.17, 0.18, 0.17, 0.17, 0.16, 0.16, 0.17, 0.17, 0.18, 0.17 };
550   double eyp[] = { 0.17, 0.18, 0.17, 0.17, 0.16, 0.16, 0.17, 0.17, 0.18, 0.17 };
551   const int np = 10;
552   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
553   SetGraphAttributes(g, NSDStyle, CMSColor, "cms_nsd2360", "CMS NSD");
554   return g;
555 }
556
557
558 //____________________________________________________________________
559 /** 
560  * Get the CMS NSD data in @f$ |\eta|<2.25@f$ for pp at @f$
561  * \sqrt{s} = 7TeV@f$ 
562  *
563  * p7838_d5x1y1
564  *
565  * @return graph of data 
566  * 
567  * @ingroup pwg2_forward_otherdata
568  */
569 TGraphAsymmErrors* CMSNsd7000()
570 {
571   // CMS NSD 7000 - Plot: p7838_d5x1y1
572   double x[] = { -2.25, -1.75, -1.25, -0.75, -0.25, 0.25, 0.75,1.25,1.75,2.25 };
573   double exm[] = { 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 };
574   double exp[] = { 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 };
575   double y[] = { 6.18, 6.26, 6.14, 6.01, 5.78, 5.78, 6.01, 6.14, 6.26,  6.18 };
576   double eym[] = { 0.25, 0.25, 0.24, 0.24, 0.23, 0.23, 0.24, 0.24, 0.25, 0.25 };
577   double eyp[] = { 0.25, 0.25, 0.24, 0.24, 0.23, 0.23, 0.24, 0.24, 0.25, 0.25 };
578   const int np = 10;
579   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
580   SetGraphAttributes(g, NSDStyle, CMSColor, "cms_nsd7000", "CMS NSD");
581   return g;
582 }
583
584 //____________________________________________________________________
585 /** 
586  * Get a multi graph of data for a given energy and trigger type 
587  * 
588  * @param energy Energy in GeV (900, 2360, 7000)
589  * @param type   Bit pattern of trigger type 
590  *   - 0x1 INEL 
591  *   - 0x2 INEL>0
592  *   - 0x4 NSD 
593  * 
594  * @return A multi graph with the selected data. 
595  * 
596  * @ingroup pwg2_forward_otherdata
597  */
598 TMultiGraph* 
599 GetData(Int_t energy, Int_t type, bool aliceOnly=false)
600 {
601   TMultiGraph* mp = new TMultiGraph(Form("dndeta_%dGeV_%d", energy, type),"");
602   TString tn;
603   TString en;
604   if (TMath::Abs(energy-900) < 10) {
605     en.Append(" #sqrt{s}=900GeV");
606     if (type & 0x1) { 
607       tn.Append(" INEL");
608       if (!aliceOnly) mp->Add(UA5Inel(false));
609       if (!aliceOnly) mp->Add(UA5Inel(true));
610       mp->Add(AliceCentralInel900());
611     }      
612     if (type & 0x4) { 
613       tn.Append(" NSD");
614       if (!aliceOnly) mp->Add(UA5Nsd(false));
615       if (!aliceOnly) mp->Add(UA5Nsd(true));
616       mp->Add(AliceCentralNsd900());
617       if (!aliceOnly) mp->Add(CMSNsd900());
618     }
619     if (type & 0x2) { 
620       tn.Append(" INEL>0");
621       mp->Add(AliceCentralInelGt900());
622     }
623   }
624   if (TMath::Abs(energy-2360) < 10) {
625     en.Append(" #sqrt{s}=2.36TeV");
626     if (type & 0x1) { 
627       tn.Append(" INEL");
628       mp->Add(AliceCentralInel2360());
629     }
630     if (type & 0x4) { 
631       tn.Append(" NSD");
632       mp->Add(AliceCentralNsd2360());
633       if (!aliceOnly) mp->Add(CMSNsd2360());
634     }
635     if (type & 0x1) { 
636       tn.Append(" INEL>0");
637       mp->Add(AliceCentralInelGt2360());
638     }
639   }
640   if (TMath::Abs(energy-7000) < 10) {
641     en.Append(" #sqrt{s}=7TeV");
642     if (type & 0x1) { 
643       tn.Append(" INEL");
644     }
645     if (type & 0x4) { 
646       tn.Append(" NSD");
647       if (!aliceOnly) mp->Add(CMSNsd7000());
648     }
649     if (type & 0x1) { 
650       tn.Append(" INEL>0");
651       mp->Add(AliceCentralInelGt7000());
652     }
653   }
654   mp->SetTitle(Form("1/N dN_{ch}/d#eta, pp(p#bar{p}), %s, %s", 
655                     en.Data(), tn.Data()));
656   if (!mp->GetListOfGraphs() || mp->GetListOfGraphs()->GetEntries() <= 0) {
657     delete mp;
658     mp = 0;
659   }
660   return mp;
661 }
662
663 //____________________________________________________________________
664 /** 
665  * Plot external data for a given selection of energy and trigger type
666  * (see GetData)
667  * 
668  * @param energy  Energy in GeV
669  * @param type    Trigger type bit mask 
670  * 
671  * @ingroup pwg2_forward_otherdata
672  */
673 void
674 OtherData(Int_t energy=900, Int_t type=0x1, bool aliceOnly=false)
675 {
676   TMultiGraph* mp = GetData(energy, type, aliceOnly);
677   if (!mp) return;
678
679   gStyle->SetTitleX(0.1);
680   gStyle->SetTitleY(1.0);
681   gStyle->SetTitleW(0.85);
682   gStyle->SetTitleH(0.05);
683   gStyle->SetTitleBorderSize(0);
684   gStyle->SetTitleTextColor(kWhite);
685   gStyle->SetTitleFillColor(kBlack);
686   gStyle->SetTitleFontSize(0.02);
687   
688   gStyle->SetOptTitle(1);
689   gStyle->SetOptStat(0);
690   
691   TCanvas* c = new TCanvas("c", "dN/deta", 800, 600);
692   c->SetFillColor(0);
693   c->SetBorderSize(0);
694   c->SetBorderMode(0);
695   c->SetRightMargin(0.05);
696   c->SetTopMargin(0.05);
697   
698
699   mp->SetMinimum(0);
700   mp->Draw("ap");
701   if (mp->GetXaxis())
702     mp->GetXaxis()->SetTitle("#eta");
703   if (mp->GetYaxis())
704     mp->GetYaxis()->SetTitle("#frac{1}{N} #frac{dN_{ch}}{#eta}");
705
706   TLegend* l = c->BuildLegend(0.3, 0.15, 0.7, 0.5);
707   l->SetFillColor(0);
708   l->SetBorderSize(0);
709
710   c->cd();
711 }
712
713 //____________________________________________________________________
714 //
715 // EOF
716 //