]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/FORWARD/analysis2/OtherData.C
Added Rubens points for pPb
[u/mrichter/AliRoot.git] / PWGLF / FORWARD / analysis2 / OtherData.C
1 //____________________________________________________________________
2 /**
3  * @defgroup pwglf_forward_otherdata  External data 
4  *
5  * Collection of external data points for comparisons and the like 
6  *
7  * @ingroup pwglf_forward_scripts
8  */
9 /**
10  * @file 
11  * 
12  * @ingroup pwglf_forward_script_otherdata
13  */
14 #include <TGraphAsymmErrors.h>
15 #include <TMultiGraph.h>
16 #include <TStyle.h>
17 #include <TMath.h>
18 #include <TCanvas.h>
19 #include <TLegend.h>
20
21 //____________________________________________________________________
22 /**
23  * Values used 
24  * 
25  * @ingroup pwglf_forward_otherdata 
26  */
27 enum { 
28   UA5, 
29   CMS, 
30   ALICE, 
31   PYTHIA,
32   INEL, 
33   INELGt0, 
34   NSD
35 };
36 enum { 
37   /** Style used for UA5 data */
38   UA5Style   = 21, 
39   /** Style used for CMS data */
40   CMSStyle   = 29, 
41   /** Style used for ALICE published data */
42   ALICEStyle = 27,
43   /** Style used for Pythia data */
44   PYTHIAStyle = 28,
45   /** Color used for UA5 data */
46   UA5Color   = kBlue+1,
47   /** Color used for Pytia data */
48   PYTHIAColor = kGray+2,
49   /** Color used for CMS data */
50   CMSColor   = kGreen+1,
51   /** Color used for ALICE data */
52   ALICEColor = kMagenta+1
53 }; 
54 enum { 
55   /** Marker style INEL data */
56   INELStyle   = 22,
57   /** Marker style INEL>0 data */
58   INELGt0Style= 29,
59   /** Marker style NSD data */
60   NSDStyle    = 23,
61   /** Color used for UA5 data */
62   INELColor   = kBlue+1,
63   /** Color used for CMS data */
64   INELGt0Color = kGreen+1,
65   /** Color used for ALICE data */
66   NSDColor     = kMagenta+1
67 };
68 enum {
69   /** Style offset for mirror data */
70   MirrorOff  = 4
71 };
72
73 //____________________________________________________________________
74 /** 
75  * Set graph attributes based on trigger type and experiment. 
76  * 
77  * @param g        Graph
78  * @param trig     Trigger (INEL, INEL>0, NSD)
79  * @param exp      Experiment 
80  * @param mirror   True if mirrored data 
81  * @param name     Name of graph 
82  * @param title    Title of graph 
83  * 
84  * @ingroup pwglf_forward_otherdata
85  */
86 void
87 SetGraphAttributes(TGraph* g, Int_t trig, Int_t exp, bool mirror,
88                    const Char_t* name, const Char_t* title)
89 {
90   Int_t color = 0;
91   switch (exp) { 
92   case UA5:    color = UA5Color;    break;
93   case CMS:    color = CMSColor;    break;
94   case ALICE:  color = ALICEColor;  break;
95   case PYTHIA: color = PYTHIAColor; break;
96   }
97   Int_t style = 0;
98   switch (exp) { 
99   case UA5:    style = UA5Style;    break;
100   case CMS:    style = CMSStyle;    break;
101   case ALICE:  style = ALICEStyle;  break;
102   case PYTHIA: style = PYTHIAStyle; break;
103   }
104   Float_t size = g->GetMarkerSize();
105   switch (style) {
106   case 21: 
107   case 25: size *= 0.8; break;
108   case 27: size *= 1.4; break;
109   }
110     
111   if (mirror) style += MirrorOff;
112
113   g->SetName(name);
114   g->SetTitle(title);
115   g->SetMarkerStyle(style);
116   g->SetMarkerSize(size);
117   g->SetMarkerColor(color);
118   g->SetLineColor(color);
119   g->SetFillColor(0);
120   g->SetFillStyle(0);
121   g->GetHistogram()->SetStats(kFALSE);
122   g->GetHistogram()->SetXTitle("#eta");
123   g->GetHistogram()->SetYTitle("#frac{1}{N} #frac{dN_{ch}}{#eta}");
124 }
125
126 //____________________________________________________________________
127 /** 
128  * Get PYTHIA 900GeV INEL data 
129  * 
130  * 
131  * @return Data graph
132  */
133 TGraphAsymmErrors*
134 Pythia900INEL()
135 {
136    
137   TGraphAsymmErrors *gre = new TGraphAsymmErrors(100);
138   SetGraphAttributes(gre, INEL, PYTHIA, false, "pythia900Inel",
139                      "Pythia INEL");
140   gre->SetPoint(0,-3.95,1.78199);
141   gre->SetPointError(0, 0, 0, 0.0145305, 0.0145305);
142   gre->SetPoint(1,-3.85,1.85486);
143   gre->SetPointError(1,0,0,0.0148246,0.0148246);
144   gre->SetPoint(2,-3.75,1.93886);
145   gre->SetPointError(2,0,0,0.0151566,0.0151566);
146   gre->SetPoint(3,-3.65,1.96055);
147   gre->SetPointError(3,0,0,0.0152411,0.0152411);
148   gre->SetPoint(4,-3.55,1.98756);
149   gre->SetPointError(4,0,0,0.0153458,0.0153458);
150   gre->SetPoint(5,-3.45,2.02844);
151   gre->SetPointError(5,0,0,0.0155028,0.0155028);
152   gre->SetPoint(6,-3.35,2.09585);
153   gre->SetPointError(6,0,0,0.0157583,0.0157583);
154   gre->SetPoint(7,-3.25,2.13732);
155   gre->SetPointError(7,0,0,0.0159134,0.0159134);
156   gre->SetPoint(8,-3.15,2.1686);
157   gre->SetPointError(8,0,0,0.0160295,0.0160295);
158   gre->SetPoint(9,-3.05,2.25296);
159   gre->SetPointError(9,0,0,0.0163383,0.0163383);
160   gre->SetPoint(10,-2.95,2.29265);
161   gre->SetPointError(10,0,0,0.0164815,0.0164815);
162   gre->SetPoint(11,-2.85,2.34799);
163   gre->SetPointError(11,0,0,0.0166792,0.0166792);
164   gre->SetPoint(12,-2.75,2.35652);
165   gre->SetPointError(12,0,0,0.0167095,0.0167095);
166   gre->SetPoint(13,-2.65,2.40545);
167   gre->SetPointError(13,0,0,0.0168821,0.0168821);
168   gre->SetPoint(14,-2.55,2.43934);
169   gre->SetPointError(14,0,0,0.0170006,0.0170006);
170   gre->SetPoint(15,-2.45,2.45735);
171   gre->SetPointError(15,0,0,0.0170633,0.0170633);
172   gre->SetPoint(16,-2.35,2.48945);
173   gre->SetPointError(16,0,0,0.0171744,0.0171744);
174   gre->SetPoint(17,-2.25,2.51635);
175   gre->SetPointError(17,0,0,0.0172669,0.0172669);
176   gre->SetPoint(18,-2.15,2.55047);
177   gre->SetPointError(18,0,0,0.0173836,0.0173836);
178   gre->SetPoint(19,-2.05,2.58021);
179   gre->SetPointError(19,0,0,0.0174846,0.0174846);
180   gre->SetPoint(20,-1.95,2.58732);
181   gre->SetPointError(20,0,0,0.0175087,0.0175087);
182   gre->SetPoint(21,-1.85,2.60095);
183   gre->SetPointError(21,0,0,0.0175547,0.0175547);
184   gre->SetPoint(22,-1.75,2.59941);
185   gre->SetPointError(22,0,0,0.0175495,0.0175495);
186   gre->SetPoint(23,-1.65,2.63021);
187   gre->SetPointError(23,0,0,0.0176532,0.0176532);
188   gre->SetPoint(24,-1.55,2.61043);
189   gre->SetPointError(24,0,0,0.0175867,0.0175867);
190   gre->SetPoint(25,-1.45,2.61363);
191   gre->SetPointError(25,0,0,0.0175975,0.0175975);
192   gre->SetPoint(26,-1.35,2.60829);
193   gre->SetPointError(26,0,0,0.0175795,0.0175795);
194   gre->SetPoint(27,-1.25,2.61434);
195   gre->SetPointError(27,0,0,0.0175999,0.0175999);
196   gre->SetPoint(28,-1.15,2.61327);
197   gre->SetPointError(28,0,0,0.0175963,0.0175963);
198   gre->SetPoint(29,-1.05,2.57145);
199   gre->SetPointError(29,0,0,0.0174549,0.0174549);
200   gre->SetPoint(30,-0.95,2.55723);
201   gre->SetPointError(30,0,0,0.0174066,0.0174066);
202   gre->SetPoint(31,-0.85,2.57879);
203   gre->SetPointError(31,0,0,0.0174798,0.0174798);
204   gre->SetPoint(32,-0.75,2.516);
205   gre->SetPointError(32,0,0,0.0172657,0.0172657);
206   gre->SetPoint(33,-0.65,2.53709);
207   gre->SetPointError(33,0,0,0.0173379,0.0173379);
208   gre->SetPoint(34,-0.55,2.51197);
209   gre->SetPointError(34,0,0,0.0172519,0.0172519);
210   gre->SetPoint(35,-0.45,2.44052);
211   gre->SetPointError(35,0,0,0.0170047,0.0170047);
212   gre->SetPoint(36,-0.35,2.44882);
213   gre->SetPointError(36,0,0,0.0170336,0.0170336);
214   gre->SetPoint(37,-0.25,2.45308);
215   gre->SetPointError(37,0,0,0.0170484,0.0170484);
216   gre->SetPoint(38,-0.15,2.4622);
217   gre->SetPointError(38,0,0,0.0170801,0.0170801);
218   gre->SetPoint(39,-0.05,2.45735);
219   gre->SetPointError(39,0,0,0.0170633,0.0170633);
220   gre->SetPoint(40,0.05,2.49254);
221   gre->SetPointError(40,0,0,0.017185,0.017185);
222   gre->SetPoint(41,0.15,2.49479);
223   gre->SetPointError(41,0,0,0.0171928,0.0171928);
224   gre->SetPoint(42,0.25,2.49289);
225   gre->SetPointError(42,0,0,0.0171862,0.0171862);
226   gre->SetPoint(43,0.35,2.4628);
227   gre->SetPointError(43,0,0,0.0170822,0.0170822);
228   gre->SetPoint(44,0.45,2.51422);
229   gre->SetPointError(44,0,0,0.0172596,0.0172596);
230   gre->SetPoint(45,0.55,2.51268);
231   gre->SetPointError(45,0,0,0.0172543,0.0172543);
232   gre->SetPoint(46,0.65,2.51066);
233   gre->SetPointError(46,0,0,0.0172474,0.0172474);
234   gre->SetPoint(47,0.75,2.53661);
235   gre->SetPointError(47,0,0,0.0173363,0.0173363);
236   gre->SetPoint(48,0.85,2.54479);
237   gre->SetPointError(48,0,0,0.0173642,0.0173642);
238   gre->SetPoint(49,0.95,2.55391);
239   gre->SetPointError(49,0,0,0.0173953,0.0173953);
240   gre->SetPoint(50,1.05,2.5872);
241   gre->SetPointError(50,0,0,0.0175083,0.0175083);
242   gre->SetPoint(51,1.15,2.60344);
243   gre->SetPointError(51,0,0,0.0175631,0.0175631);
244   gre->SetPoint(52,1.25,2.60616);
245   gre->SetPointError(52,0,0,0.0175723,0.0175723);
246   gre->SetPoint(53,1.35,2.62156);
247   gre->SetPointError(53,0,0,0.0176242,0.0176242);
248   gre->SetPoint(54,1.45,2.61173);
249   gre->SetPointError(54,0,0,0.0175911,0.0175911);
250   gre->SetPoint(55,1.55,2.60415);
251   gre->SetPointError(55,0,0,0.0175655,0.0175655);
252   gre->SetPoint(56,1.65,2.60723);
253   gre->SetPointError(56,0,0,0.0175759,0.0175759);
254   gre->SetPoint(57,1.75,2.60427);
255   gre->SetPointError(57,0,0,0.0175659,0.0175659);
256   gre->SetPoint(58,1.85,2.56765);
257   gre->SetPointError(58,0,0,0.017442,0.017442);
258   gre->SetPoint(59,1.95,2.58602);
259   gre->SetPointError(59,0,0,0.0175043,0.0175043);
260   gre->SetPoint(60,2.05,2.55936);
261   gre->SetPointError(60,0,0,0.0174138,0.0174138);
262   gre->SetPoint(61,2.15,2.54858);
263   gre->SetPointError(61,0,0,0.0173771,0.0173771);
264   gre->SetPoint(62,2.25,2.5205);
265   gre->SetPointError(62,0,0,0.0172811,0.0172811);
266   gre->SetPoint(63,2.35,2.49491);
267   gre->SetPointError(63,0,0,0.0171932,0.0171932);
268   gre->SetPoint(64,2.45,2.42773);
269   gre->SetPointError(64,0,0,0.0169601,0.0169601);
270   gre->SetPoint(65,2.55,2.42879);
271   gre->SetPointError(65,0,0,0.0169638,0.0169638);
272   gre->SetPoint(66,2.65,2.39372);
273   gre->SetPointError(66,0,0,0.0168409,0.0168409);
274   gre->SetPoint(67,2.75,2.38412);
275   gre->SetPointError(67,0,0,0.0168071,0.0168071);
276   gre->SetPoint(68,2.85,2.31896);
277   gre->SetPointError(68,0,0,0.0165758,0.0165758);
278   gre->SetPoint(69,2.95,2.26209);
279   gre->SetPointError(69,0,0,0.0163713,0.0163713);
280   gre->SetPoint(70,3.05,2.24313);
281   gre->SetPointError(70,0,0,0.0163026,0.0163026);
282   gre->SetPoint(71,3.15,2.20403);
283   gre->SetPointError(71,0,0,0.0161599,0.0161599);
284   gre->SetPoint(72,3.25,2.12855);
285   gre->SetPointError(72,0,0,0.0158808,0.0158808);
286   gre->SetPoint(73,3.35,2.13104);
287   gre->SetPointError(73,0,0,0.01589,0.01589);
288   gre->SetPoint(74,3.45,2.06339);
289   gre->SetPointError(74,0,0,0.0156358,0.0156358);
290   gre->SetPoint(75,3.55,1.9846);
291   gre->SetPointError(75,0,0,0.0153343,0.0153343);
292   gre->SetPoint(76,3.65,1.95391);
293   gre->SetPointError(76,0,0,0.0152153,0.0152153);
294   gre->SetPoint(77,3.75,1.87998);
295   gre->SetPointError(77,0,0,0.0149247,0.0149247);
296   gre->SetPoint(78,3.85,1.86256);
297   gre->SetPointError(78,0,0,0.0148554,0.0148554);
298   gre->SetPoint(79,3.95,1.77239);
299   gre->SetPointError(79,0,0,0.0144913,0.0144913);
300   gre->SetPoint(80,4.05,1.72855);
301   gre->SetPointError(80,0,0,0.014311,0.014311);
302   gre->SetPoint(81,4.15,1.69479);
303   gre->SetPointError(81,0,0,0.0141705,0.0141705);
304   gre->SetPoint(82,4.25,1.64147);
305   gre->SetPointError(82,0,0,0.0139459,0.0139459);
306   gre->SetPoint(83,4.35,1.58116);
307   gre->SetPointError(83,0,0,0.0136873,0.0136873);
308   gre->SetPoint(84,4.45,1.55735);
309   gre->SetPointError(84,0,0,0.0135838,0.0135838);
310   gre->SetPoint(85,4.55,1.48815);
311   gre->SetPointError(85,0,0,0.0132786,0.0132786);
312   gre->SetPoint(86,4.65,1.40853);
313   gre->SetPointError(86,0,0,0.0129185,0.0129185);
314   gre->SetPoint(87,4.75,1.36979);
315   gre->SetPointError(87,0,0,0.0127396,0.0127396);
316   gre->SetPoint(88,4.85,1.32666);
317   gre->SetPointError(88,0,0,0.0125374,0.0125374);
318   gre->SetPoint(89,4.95,1.29763);
319   gre->SetPointError(89,0,0,0.0123995,0.0123995);
320   gre->SetPoint(90,5.05,1.25533);
321   gre->SetPointError(90,0,0,0.0121957,0.0121957);
322   gre->SetPoint(91,5.15,1.20912);
323   gre->SetPointError(91,0,0,0.0119692,0.0119692);
324   gre->SetPoint(92,5.25,1.18839);
325   gre->SetPointError(92,0,0,0.0118661,0.0118661);
326   gre->SetPoint(93,5.35,1.15948);
327   gre->SetPointError(93,0,0,0.0117209,0.0117209);
328   gre->SetPoint(94,5.45,1.1141);
329   gre->SetPointError(94,0,0,0.0114892,0.0114892);
330   gre->SetPoint(95,5.55,1.06315);
331   gre->SetPointError(95,0,0,0.0112235,0.0112235);
332   gre->SetPoint(96,5.65,1.05213);
333   gre->SetPointError(96,0,0,0.0111651,0.0111651);
334   gre->SetPoint(97,5.75,1.02476);
335   gre->SetPointError(97,0,0,0.011019,0.011019);
336   gre->SetPoint(98,5.85,0.984834);
337   gre->SetPointError(98,0,0,0.0108022,0.0108022);
338   gre->SetPoint(99,5.95,0.952844);
339   gre->SetPointError(99,0,0,0.0106253,0.0106253);
340
341   return gre;
342 }
343
344 //____________________________________________________________________
345 /** 
346  * Get PYTHIA 900GeV NSD data 
347  * 
348  * 
349  * @return Data graph
350  */
351 TGraphAsymmErrors*
352 Pythia900NSD()
353 {
354    
355   TGraphAsymmErrors *gre = new TGraphAsymmErrors(100);
356   SetGraphAttributes(gre, NSD, PYTHIA, false, "pythia900NSD",
357                      "Pythia NSD");
358
359   gre->SetPoint(0,-3.95,2.11766);
360   gre->SetPointError(0,0,0,0.0179417,0.0179417);
361   gre->SetPoint(1,-3.85,2.20415);
362   gre->SetPointError(1,0,0,0.0183045,0.0183045);
363   gre->SetPoint(2,-3.75,2.30949);
364   gre->SetPointError(2,0,0,0.0187368,0.0187368);
365   gre->SetPoint(3,-3.65,2.34582);
366   gre->SetPointError(3,0,0,0.0188836,0.0188836);
367   gre->SetPoint(4,-3.55,2.38322);
368   gre->SetPointError(4,0,0,0.0190335,0.0190335);
369   gre->SetPoint(5,-3.45,2.43353);
370   gre->SetPointError(5,0,0,0.0192334,0.0192334);
371   gre->SetPoint(6,-3.35,2.51106);
372   gre->SetPointError(6,0,0,0.0195373,0.0195373);
373   gre->SetPoint(7,-3.25,2.56578);
374   gre->SetPointError(7,0,0,0.0197491,0.0197491);
375   gre->SetPoint(8,-3.15,2.60515);
376   gre->SetPointError(8,0,0,0.0199,0.0199);
377   gre->SetPoint(9,-3.05,2.7105);
378   gre->SetPointError(9,0,0,0.0202984,0.0202984);
379   gre->SetPoint(10,-2.95,2.77008);
380   gre->SetPointError(10,0,0,0.0205203,0.0205203);
381   gre->SetPoint(11,-2.85,2.83332);
382   gre->SetPointError(11,0,0,0.0207532,0.0207532);
383   gre->SetPoint(12,-2.75,2.84715);
384   gre->SetPointError(12,0,0,0.0208038,0.0208038);
385   gre->SetPoint(13,-2.65,2.91693);
386   gre->SetPointError(13,0,0,0.0210571,0.0210571);
387   gre->SetPoint(14,-2.55,2.95797);
388   gre->SetPointError(14,0,0,0.0212048,0.0212048);
389   gre->SetPoint(15,-2.45,2.97499);
390   gre->SetPointError(15,0,0,0.0212657,0.0212657);
391   gre->SetPoint(16,-2.35,3.01345);
392   gre->SetPointError(16,0,0,0.0214027,0.0214027);
393   gre->SetPoint(17,-2.25,3.04659);
394   gre->SetPointError(17,0,0,0.0215201,0.0215201);
395   gre->SetPoint(18,-2.15,3.09341);
396   gre->SetPointError(18,0,0,0.0216848,0.0216848);
397   gre->SetPoint(19,-2.05,3.13187);
398   gre->SetPointError(19,0,0,0.0218192,0.0218192);
399   gre->SetPoint(20,-1.95,3.13917);
400   gre->SetPointError(20,0,0,0.0218446,0.0218446);
401   gre->SetPoint(21,-1.85,3.16911);
402   gre->SetPointError(21,0,0,0.0219485,0.0219485);
403   gre->SetPoint(22,-1.75,3.15665);
404   gre->SetPointError(22,0,0,0.0219053,0.0219053);
405   gre->SetPoint(23,-1.65,3.19693);
406   gre->SetPointError(23,0,0,0.0220446,0.0220446);
407   gre->SetPoint(24,-1.55,3.17002);
408   gre->SetPointError(24,0,0,0.0219517,0.0219517);
409   gre->SetPoint(25,-1.45,3.18538);
410   gre->SetPointError(25,0,0,0.0220048,0.0220048);
411   gre->SetPoint(26,-1.35,3.18066);
412   gre->SetPointError(26,0,0,0.0219885,0.0219885);
413   gre->SetPoint(27,-1.25,3.19754);
414   gre->SetPointError(27,0,0,0.0220467,0.0220467);
415   gre->SetPoint(28,-1.15,3.18021);
416   gre->SetPointError(28,0,0,0.0219869,0.0219869);
417   gre->SetPoint(29,-1.05,3.13111);
418   gre->SetPointError(29,0,0,0.0218165,0.0218165);
419   gre->SetPoint(30,-0.95,3.12153);
420   gre->SetPointError(30,0,0,0.0217831,0.0217831);
421   gre->SetPoint(31,-0.85,3.14798);
422   gre->SetPointError(31,0,0,0.0218752,0.0218752);
423   gre->SetPoint(32,-0.75,3.07912);
424   gre->SetPointError(32,0,0,0.0216347,0.0216347);
425   gre->SetPoint(33,-0.65,3.10207);
426   gre->SetPointError(33,0,0,0.0217151,0.0217151);
427   gre->SetPoint(34,-0.55,3.06346);
428   gre->SetPointError(34,0,0,0.0215796,0.0215796);
429   gre->SetPoint(35,-0.45,2.97651);
430   gre->SetPointError(35,0,0,0.0212711,0.0212711);
431   gre->SetPoint(36,-0.35,2.98715);
432   gre->SetPointError(36,0,0,0.0213091,0.0213091);
433   gre->SetPoint(37,-0.25,2.98548);
434   gre->SetPointError(37,0,0,0.0213032,0.0213032);
435   gre->SetPoint(38,-0.15,3.00555);
436   gre->SetPointError(38,0,0,0.0213746,0.0213746);
437   gre->SetPoint(39,-0.05,3.01193);
438   gre->SetPointError(39,0,0,0.0213973,0.0213973);
439   gre->SetPoint(40,0.05,3.04385);
440   gre->SetPointError(40,0,0,0.0215104,0.0215104);
441   gre->SetPoint(41,0.15,3.04933);
442   gre->SetPointError(41,0,0,0.0215297,0.0215297);
443   gre->SetPoint(42,0.25,3.04659);
444   gre->SetPointError(42,0,0,0.0215201,0.0215201);
445   gre->SetPoint(43,0.35,3.00813);
446   gre->SetPointError(43,0,0,0.0213838,0.0213838);
447   gre->SetPoint(44,0.45,3.06666);
448   gre->SetPointError(44,0,0,0.0215908,0.0215908);
449   gre->SetPoint(45,0.55,3.07167);
450   gre->SetPointError(45,0,0,0.0216085,0.0216085);
451   gre->SetPoint(46,0.65,3.0659);
452   gre->SetPointError(46,0,0,0.0215881,0.0215881);
453   gre->SetPoint(47,0.75,3.09159);
454   gre->SetPointError(47,0,0,0.0216784,0.0216784);
455   gre->SetPoint(48,0.85,3.10846);
456   gre->SetPointError(48,0,0,0.0217375,0.0217375);
457   gre->SetPoint(49,0.95,3.11925);
458   gre->SetPointError(49,0,0,0.0217752,0.0217752);
459   gre->SetPoint(50,1.05,3.15558);
460   gre->SetPointError(50,0,0,0.0219016,0.0219016);
461   gre->SetPoint(51,1.15,3.16911);
462   gre->SetPointError(51,0,0,0.0219485,0.0219485);
463   gre->SetPoint(52,1.25,3.17246);
464   gre->SetPointError(52,0,0,0.0219601,0.0219601);
465   gre->SetPoint(53,1.35,3.19146);
466   gre->SetPointError(53,0,0,0.0220258,0.0220258);
467   gre->SetPoint(54,1.45,3.17458);
468   gre->SetPointError(54,0,0,0.0219675,0.0219675);
469   gre->SetPoint(55,1.55,3.16866);
470   gre->SetPointError(55,0,0,0.0219469,0.0219469);
471   gre->SetPoint(56,1.65,3.16592);
472   gre->SetPointError(56,0,0,0.0219375,0.0219375);
473   gre->SetPoint(57,1.75,3.16394);
474   gre->SetPointError(57,0,0,0.0219306,0.0219306);
475   gre->SetPoint(58,1.85,3.11956);
476   gre->SetPointError(58,0,0,0.0217762,0.0217762);
477   gre->SetPoint(59,1.95,3.14646);
478   gre->SetPointError(59,0,0,0.02187,0.02187);
479   gre->SetPoint(60,2.05,3.10147);
480   gre->SetPointError(60,0,0,0.021713,0.021713);
481   gre->SetPoint(61,2.15,3.09356);
482   gre->SetPointError(61,0,0,0.0216853,0.0216853);
483   gre->SetPoint(62,2.25,3.05328);
484   gre->SetPointError(62,0,0,0.0215437,0.0215437);
485   gre->SetPoint(63,2.35,3.01953);
486   gre->SetPointError(63,0,0,0.0214243,0.0214243);
487   gre->SetPoint(64,2.45,2.9373);
488   gre->SetPointError(64,0,0,0.0211305,0.0211305);
489   gre->SetPoint(65,2.55,2.92772);
490   gre->SetPointError(65,0,0,0.0210961,0.0210961);
491   gre->SetPoint(66,2.65,2.89154);
492   gre->SetPointError(66,0,0,0.0209653,0.0209653);
493   gre->SetPoint(67,2.75,2.87619);
494   gre->SetPointError(67,0,0,0.0209096,0.0209096);
495   gre->SetPoint(68,2.85,2.78924);
496   gre->SetPointError(68,0,0,0.0205911,0.0205911);
497   gre->SetPoint(69,2.95,2.72159);
498   gre->SetPointError(69,0,0,0.0203399,0.0203399);
499   gre->SetPoint(70,3.05,2.69089);
500   gre->SetPointError(70,0,0,0.0202248,0.0202248);
501   gre->SetPoint(71,3.15,2.64939);
502   gre->SetPointError(71,0,0,0.0200682,0.0200682);
503   gre->SetPoint(72,3.25,2.55545);
504   gre->SetPointError(72,0,0,0.0197092,0.0197092);
505   gre->SetPoint(73,3.35,2.56745);
506   gre->SetPointError(73,0,0,0.0197555,0.0197555);
507   gre->SetPoint(74,3.45,2.47503);
508   gre->SetPointError(74,0,0,0.0193967,0.0193967);
509   gre->SetPoint(75,3.55,2.36741);
510   gre->SetPointError(75,0,0,0.0189703,0.0189703);
511   gre->SetPoint(76,3.65,2.33412);
512   gre->SetPointError(76,0,0,0.0188364,0.0188364);
513   gre->SetPoint(77,3.75,2.2385);
514   gre->SetPointError(77,0,0,0.0184466,0.0184466);
515   gre->SetPoint(78,3.85,2.21768);
516   gre->SetPointError(78,0,0,0.0183606,0.0183606);
517   gre->SetPoint(79,3.95,2.1055);
518   gre->SetPointError(79,0,0,0.0178901,0.0178901);
519   gre->SetPoint(80,4.05,2.05047);
520   gre->SetPointError(80,0,0,0.0176548,0.0176548);
521   gre->SetPoint(81,4.15,2.00486);
522   gre->SetPointError(81,0,0,0.0174574,0.0174574);
523   gre->SetPoint(82,4.25,1.94573);
524   gre->SetPointError(82,0,0,0.017198,0.017198);
525   gre->SetPoint(83,4.35,1.87064);
526   gre->SetPointError(83,0,0,0.0168629,0.0168629);
527   gre->SetPoint(84,4.45,1.83735);
528   gre->SetPointError(84,0,0,0.0167122,0.0167122);
529   gre->SetPoint(85,4.55,1.75314);
530   gre->SetPointError(85,0,0,0.0163247,0.0163247);
531   gre->SetPoint(86,4.65,1.65828);
532   gre->SetPointError(86,0,0,0.0158769,0.0158769);
533   gre->SetPoint(87,4.75,1.60751);
534   gre->SetPointError(87,0,0,0.015632,0.015632);
535   gre->SetPoint(88,4.85,1.56312);
536   gre->SetPointError(88,0,0,0.0154146,0.0154146);
537   gre->SetPoint(89,4.95,1.52117);
538   gre->SetPointError(89,0,0,0.0152064,0.0152064);
539   gre->SetPoint(90,5.05,1.46553);
540   gre->SetPointError(90,0,0,0.0149257,0.0149257);
541   gre->SetPoint(91,5.15,1.42038);
542   gre->SetPointError(91,0,0,0.014694,0.014694);
543   gre->SetPoint(92,5.25,1.38816);
544   gre->SetPointError(92,0,0,0.0145263,0.0145263);
545   gre->SetPoint(93,5.35,1.35046);
546   gre->SetPointError(93,0,0,0.0143277,0.0143277);
547   gre->SetPoint(94,5.45,1.30075);
548   gre->SetPointError(94,0,0,0.0140616,0.0140616);
549   gre->SetPoint(95,5.55,1.24025);
550   gre->SetPointError(95,0,0,0.0137307,0.0137307);
551   gre->SetPoint(96,5.65,1.21806);
552   gre->SetPointError(96,0,0,0.0136073,0.0136073);
553   gre->SetPoint(97,5.75,1.19435);
554   gre->SetPointError(97,0,0,0.0134742,0.0134742);
555   gre->SetPoint(98,5.85,1.14175);
556   gre->SetPointError(98,0,0,0.0131741,0.0131741);
557   gre->SetPoint(99,5.95,1.09235);
558   gre->SetPointError(99,0,0,0.012886,0.012886);
559
560   return gre;
561 }   
562   
563 //____________________________________________________________________
564 /** 
565  * Get the UA5 NSD data for pp at @f$ \sqrt{s} = 900GeV@f$
566  * p7886_d1x1y4 - Z.Phys.C33:1-6,1986.
567  *
568  * @param mirrored Wether to produce the mirrored plot 
569  * 
570  * @return graph of data 
571  * 
572  * @ingroup pwglf_forward_otherdata
573  */
574 TGraphAsymmErrors* UA5Nsd(Bool_t mirrored=false) 
575 {
576   //UA5 data NSD - p7886_d1x1y4 - Z.Phys.C33:1-6,1986.
577   double x[] = { 0.125, 0.375, 0.625, 0.875, 1.125, 1.375, 1.625, 1.875, 2.125, 
578                  2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.125, 4.375,
579                  4.625 };
580   double exm[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
581                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
582   double exp[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
583                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
584   double y[] = { 3.48, 3.38, 3.52, 3.68, 3.71, 3.86, 3.76, 3.66, 3.72, 
585                  3.69, 3.56, 3.41, 3.15, 3.09, 2.74, 2.73, 2.32, 1.99, 1.69 };
586   double eym[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 
587                    0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 0.13 };
588   double eyp[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 
589                    0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 0.13 };
590   const int np = 19;
591   double xm[np]; 
592   double exmm[np];
593   double expm[np];
594   double ym[np];
595   double eymm[np];
596   double eypm[np];
597   for (int i = 0; i < np; i++) {
598     int j = np-1-i;
599     xm[i]   = -x[j];
600     exmm[i] = exm[j];
601     expm[i] = exp[j];
602     ym[i]   = y[j];
603     eymm[i] = eym[j];
604     eypm[i] = eyp[j];
605   }
606
607   TGraphAsymmErrors* g  = new TGraphAsymmErrors(19,x, y, exm, exp, eym, eyp);
608   TGraphAsymmErrors* gm = new TGraphAsymmErrors(19,xm,ym,exmm,expm,eymm,eypm);
609   SetGraphAttributes(g,  NSD, UA5, false,"ua5_nsd",         "UA5 NSD");
610   SetGraphAttributes(gm, NSD, UA5, true,"ua5_nsd_mirrored",
611                      "UA5 NSD (mirrored)");
612
613   return (mirrored ? gm : g);
614 }
615
616 //____________________________________________________________________
617 /** 
618  * Get the UA5 INEL data for pp at @f$ \sqrt{s} = 900GeV@f$
619  * p7886_d2x1y2 - Z.Phys.C33:1-6,1986.
620  *
621  * @param mirrored Wether to produce the mirrored plot 
622  * 
623  * @return graph of data 
624  * 
625  * @ingroup pwglf_forward_otherdata
626  */
627 TGraphAsymmErrors* UA5Inel(Bool_t mirrored=false) 
628 {
629   //UA5 data INEL - p7886_d2x1y2 - Z.Phys.C33:1-6,1986.
630   double x[] = { 0.125, 0.375, 0.625, 0.875, 1.125, 1.375, 1.625, 1.875, 2.125, 
631                  2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.125, 4.375,
632                  4.625 };
633   double exm[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
634                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
635   double exp[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
636                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
637   double y[] = { 3.14, 3.04, 3.17, 3.33, 3.33, 3.53, 3.46, 3.41, 3.45, 
638                  3.39, 3.07, 3.07, 2.93, 2.93, 2.55, 2.48, 2.18, 1.91, 1.52 };
639   double eym[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 
640                    0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 0.13 };
641   double eyp[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 
642                    0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 0.13 };
643   const int np = 19;
644   double xm[np]; 
645   double exmm[np];
646   double expm[np];
647   double ym[np];
648   double eymm[np];
649   double eypm[np];
650   for (int i = 0; i < np; i++) {
651     int j = np-1-i;
652     xm[i]   = -x[j];
653     exmm[i] = exm[j];
654     expm[i] = exp[j];
655     ym[i]   = y[j];
656     eymm[i] = eym[j];
657     eypm[i] = eyp[j];
658   }
659   TGraphAsymmErrors* g  = new TGraphAsymmErrors(np,x, y, exm, exp, eym, eyp);
660   TGraphAsymmErrors* gm = new TGraphAsymmErrors(np,xm,ym,exmm,expm,eymm,eypm);
661
662   SetGraphAttributes(g,  INEL, UA5, false, "ua5_inel", "UA5 INEL");
663   SetGraphAttributes(gm, INEL, UA5, true, "ua5_inel_mirrored", 
664                      "UA5 INEL (mirrored)");
665   
666   return (mirrored ? gm : g);
667 }
668
669 //____________________________________________________________________
670 /** 
671  * Get the ALICE INEL data in @f$ |\eta|<1.3@f$ for pp at @f$ \sqrt{s}
672  * = 900GeV@f$ 
673  * p7742_d1x1y1 - Eur.Phys.J.C68:89-108,2010. 
674  *
675  * @return graph of data 
676  * 
677  * @ingroup pwglf_forward_otherdata
678  */
679 TGraphAsymmErrors* AliceCentralInel900()
680 {  
681   // INEL - p7742_d1x1y1 - Eur.Phys.J.C68:89-108,2010. 
682   TGraphAsymmErrors* g = 0;
683   double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, 
684                                  -0.1, 0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3 };
685   double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
686                    0.1, 0.1, 0.1, 0.1, 0.1 };
687   double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
688                    0.1, 0.1, 0.1, 0.1, 0.1 };
689   double y[] = { 3.28, 3.28, 3.22, 3.12, 3.06, 3.02, 2.98, 3.02, 3.02, 
690                  3.05, 3.15, 3.21, 3.26, 3.33 };
691   double eym[] = { 0.06324555320336758, 0.06324555320336758, 
692                    0.06324555320336758, 0.06324555320336758, 
693                    0.06324555320336758, 0.05385164807134505, 
694                    0.05385164807134505, 0.05385164807134505, 
695                    0.05385164807134505, 0.06324555320336758, 
696                    0.06324555320336758, 0.06324555320336758, 
697                    0.06324555320336758, 0.06324555320336758 };
698   double eyp[] = { 0.08246211251235322, 0.08246211251235322, 
699                    0.08246211251235322, 0.08246211251235322, 
700                    0.08246211251235322, 0.08246211251235322, 
701                    0.07280109889280519, 0.08246211251235322, 
702                    0.08246211251235322, 0.08246211251235322, 
703                    0.08246211251235322, 0.08246211251235322, 
704                    0.08246211251235322, 0.08246211251235322 };
705   const int np = 14;
706   for (int i = 0; i < np; i++) { 
707     eym[i] += 0.02;
708     eyp[i] += 0.02;
709   }
710   g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
711   SetGraphAttributes(g, INEL, ALICE, false, "alice_inel", 
712                      "ALICE INEL (publ.)");
713
714   return g;
715 }
716
717 //____________________________________________________________________
718 /** 
719  * Get the ALICE INEL>0 data in @f$ |\eta|<1.3@f$ for pp at @f$
720  * \sqrt{s} = 900GeV@f$ 
721  *
722  * p7741_d4x1y1 - Eur.Phys.J.C68:345-354,2010. 
723  *
724  * @return graph of data 
725  * 
726  * @ingroup pwglf_forward_otherdata
727  */
728 TGraphAsymmErrors* AliceCentralInelGt900()
729 {  
730 #if 0
731   // INEL>0 - p7741_d4x1y1 - Eur.Phys.J.C68:345-354,2010. 
732   double x[] = { -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7, 
733     0.9 };
734   double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
735     0.1 };
736   double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
737     0.1 };
738   double y[] = { 4.0, 3.87, 3.8, 3.7, 3.67, 3.73, 3.72, 3.77, 3.92, 
739     4.01 };
740   double eym[] = { 0.07615773105863909, 0.07615773105863909, 
741                    0.07615773105863909, 0.06324555320336758, 
742                    0.06324555320336758, 0.06324555320336758, 
743                    0.0670820393249937, 0.07615773105863909, 
744                    0.07615773105863909, 0.07615773105863909 };
745   double eyp[] = { 0.08544003745317531, 0.07615773105863909, 
746                    0.07615773105863909, 0.07280109889280519, 
747                    0.07280109889280519, 0.07280109889280519, 
748                    0.07615773105863909, 0.07615773105863909, 
749                    0.08544003745317531, 0.08544003745317531 };
750   const int np = 10;
751   for (int i = 0; i < np; i++) { 
752     double stat = (i >= 3  && i<=5) ? 0.02 : 0.03;
753     eym[i] += stat;
754     eyp[i] += stat;
755   }
756
757   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
758 #else
759   // These are from JFGO
760   TGraphAsymmErrors *g = new TGraphAsymmErrors(15);
761   g->SetPoint(0,-1.5,4.12575);
762   g->SetPointError(0,0.1,0.1,0.0742967,0.0814571);
763   g->SetPoint(1,-1.3,3.91209);
764   g->SetPointError(1,0.1,0.1,0.0697701,0.0766199);
765   g->SetPoint(2,-1.1,3.98377);
766   g->SetPointError(2,0.1,0.1,0.0704503,0.0774795);
767   g->SetPoint(3,-0.9,4.00035);
768   g->SetPointError(3,0.1,0.1,0.0702388,0.0773433);
769   g->SetPoint(4,-0.7,3.87228);
770   g->SetPointError(4,0.1,0.1,0.067597,0.0745103);
771   g->SetPoint(5,-0.5,3.79613);
772   g->SetPointError(5,0.1,0.1,0.0659771,0.0727816);
773   g->SetPoint(6,-0.3,3.70489);
774   g->SetPointError(6,0.1,0.1,0.0642016,0.0708603);
775   g->SetPoint(7,-0.1,3.67423);
776   g->SetPointError(7,0.1,0.1,0.0635759,0.0701884);
777   g->SetPoint(8,0.1,3.72765);
778   g->SetPointError(8,0.1,0.1,0.0645004,0.071209);
779   g->SetPoint(9,0.3,3.72171);
780   g->SetPointError(9,0.1,0.1,0.064493,0.071182);
781   g->SetPoint(10,0.5,3.77428);
782   g->SetPointError(10,0.1,0.1,0.0655974,0.0723627);
783   g->SetPoint(11,0.7,3.91704);
784   g->SetPointError(11,0.1,0.1,0.0683783,0.0753716);
785   g->SetPoint(12,0.9,4.00674);
786   g->SetPointError(12,0.1,0.1,0.0703511,0.0774669);
787   g->SetPoint(13,1.1,3.97948);
788   g->SetPointError(13,0.1,0.1,0.0703744,0.077396);
789   g->SetPoint(14,1.3,3.99165);
790   g->SetPointError(14,0.1,0.1,0.0711888,0.078178);
791 #endif
792   SetGraphAttributes(g, INELGt0, ALICE, false, "alice_inelgt900", 
793                      "ALICE INEL>0 (publ.)");
794   return g;
795 }
796
797 //____________________________________________________________________
798 /** 
799  * Get the ALICE INEL>0 data in @f$ |\eta|<0.9@f$ for pp at @f$
800  * \sqrt{s} = 2.36TeV@f$ 
801  *
802  * p7741_d5x1y1 - Eur.Phys.J.C68:345-354,2010. 
803  *
804  * @return graph of data 
805  * 
806  * @ingroup pwglf_forward_otherdata
807  */
808 TGraphAsymmErrors* AliceCentralInelGt2360()
809 {  
810 #if 0
811   // INEL>0 - p7741_d5x1y1 - Eur.Phys.J.C68:345-354,2010. 
812   double x[] = { -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7, 0.9 };
813   double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
814   double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
815   double y[] = { 4.91, 4.76, 4.63, 4.64, 4.55, 4.55, 4.64, 4.66, 4.82, 4.88 };
816   double eym[] = { 0.08544003745317531, 0.08544003745317531, 
817                    0.08544003745317531, 0.08544003745317531, 
818                    0.08544003745317531, 0.08544003745317531, 
819                    0.08544003745317531, 0.08544003745317531, 
820                    0.08544003745317531, 0.08544003745317531 };
821   double eyp[] = { 0.11401754250991379, 0.11401754250991379, 
822                    0.1044030650891055, 0.1044030650891055, 
823                    0.1044030650891055, 0.1044030650891055, 
824                    0.1044030650891055, 0.1044030650891055, 
825                    0.11401754250991379, 0.11401754250991379 };
826   const int np = 10;
827   for (int i = 0; i < np; i++) { 
828     double stat = 0.3;
829     eym[i] += stat;
830     eyp[i] += stat;
831   }
832
833   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
834 #else 
835   // These are from JFGO
836   TGraphAsymmErrors* g = new TGraphAsymmErrors(15);
837   g->SetPoint(0,-1.5,4.79047);
838   g->SetPointError(0,0.1,0.1,0.0844278,0.109947);
839   g->SetPoint(1,-1.3,4.91068);
840   g->SetPointError(1,0.1,0.1,0.0856751,0.112038);
841   g->SetPoint(2,-1.1,4.87386);
842   g->SetPointError(2,0.1,0.1,0.0842846,0.110628);
843   g->SetPoint(3,-0.9,4.91365);
844   g->SetPointError(3,0.1,0.1,0.084339,0.111049);
845   g->SetPoint(4,-0.7,4.7601);
846   g->SetPointError(4,0.1,0.1,0.0812087,0.107203);
847   g->SetPoint(5,-0.5,4.63355);
848   g->SetPointError(5,0.1,0.1,0.078687,0.104079);
849   g->SetPoint(6,-0.3,4.63885);
850   g->SetPointError(6,0.1,0.1,0.0785337,0.104014);
851   g->SetPoint(7,-0.1,4.55439);
852   g->SetPointError(7,0.1,0.1,0.0769842,0.10203);
853   g->SetPoint(8,0.1,4.55087);
854   g->SetPointError(8,0.1,0.1,0.0769246,0.101951);
855   g->SetPoint(9,0.3,4.64118);
856   g->SetPointError(9,0.1,0.1,0.0785732,0.104066);
857   g->SetPoint(10,0.5,4.66172);
858   g->SetPointError(10,0.1,0.1,0.0791652,0.104711);
859   g->SetPoint(11,0.7,4.81871);
860   g->SetPointError(11,0.1,0.1,0.0822086,0.108523);
861   g->SetPoint(12,0.9,4.88193);
862   g->SetPointError(12,0.1,0.1,0.0837944,0.110332);
863   g->SetPoint(13,1.1,4.89068);
864   g->SetPointError(13,0.1,0.1,0.0845754,0.111009);
865   g->SetPoint(14,1.3,5.05663);
866   g->SetPointError(14,0.1,0.1,0.0882216,0.115368);
867 #endif
868
869   SetGraphAttributes(g, INELGt0, ALICE, false, "alice_inelgt2360", 
870                      "ALICE INEL>0 (publ.)");
871   return g;
872 }
873
874 //____________________________________________________________________
875 /** 
876  * Get the ALICE INEL>0 data in @f$ |\eta|<0.9@f$ for pp at @f$
877  * \sqrt{s} = 7TeV@f$ 
878  *
879  * p7741_d6x1y1 - Eur.Phys.J.C68:345-354,2010. 
880  *
881  * @return graph of data 
882  * 
883  * @ingroup pwglf_forward_otherdata
884  */
885 TGraphAsymmErrors* AliceCentralInelGt7000()
886 {  
887 #if 0
888   // INEL>0 - p7741_d6x1y1 - Eur.Phys.J.C68:345-354,2010. 
889 // Plot: p7741_d6x1y1
890   double x[] = { -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7, 0.9 };
891   double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
892   double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
893   double y[] = { 6.22, 6.07, 6.01, 5.84, 5.85, 5.85, 5.91, 6.01, 6.17, 6.26 };
894   double eym[] = { 0.1216552506059644, 0.1216552506059644, 
895                    0.1216552506059644, 0.11180339887498948, 
896                    0.11180339887498948, 0.11180339887498948, 
897                    0.11180339887498948, 0.1216552506059644, 
898                    0.1216552506059644, 0.1216552506059644 };
899   double eyp[] = { 0.21095023109728983, 0.21095023109728983, 
900                    0.2009975124224178, 0.2009975124224178, 
901                    0.2009975124224178, 0.2009975124224178, 
902                    0.2009975124224178, 0.2009975124224178, 
903                    0.21095023109728983, 0.21095023109728983 };
904   const int np = 10;
905   for (int i = 0; i < np; i++) { 
906     double stat = 0.2;
907     eym[i] += stat;
908     eyp[i] += stat;
909   }
910
911   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
912 #else 
913   // These are from JFGO
914   TGraphAsymmErrors* g = new TGraphAsymmErrors(15);
915   g->SetPoint(0,-1.5,6.28573);
916   g->SetPointError(0,0.1,0.1,0.125928,0.215392);
917   g->SetPoint(1,-1.3,6.25573);
918   g->SetPointError(1,0.1,0.1,0.124352,0.213795);
919   g->SetPoint(2,-1.1,6.28779);
920   g->SetPointError(2,0.1,0.1,0.124143,0.214399);
921   g->SetPoint(3,-0.9,6.21881);
922   g->SetPointError(3,0.1,0.1,0.122079,0.211642);
923   g->SetPoint(4,-0.7,6.0728);
924   g->SetPointError(4,0.1,0.1,0.118661,0.206355);
925   g->SetPoint(5,-0.5,6.011);
926   g->SetPointError(5,0.1,0.1,0.117043,0.204019);
927   g->SetPoint(6,-0.3,5.84071);
928   g->SetPointError(6,0.1,0.1,0.11346,0.198086);
929   g->SetPoint(7,-0.1,5.8532);
930   g->SetPointError(7,0.1,0.1,0.113569,0.198433);
931   g->SetPoint(8,0.1,5.84811);
932   g->SetPointError(8,0.1,0.1,0.11347,0.198261);
933   g->SetPoint(9,0.3,5.91022);
934   g->SetPointError(9,0.1,0.1,0.11481,0.200444);
935   g->SetPoint(10,0.5,6.00649);
936   g->SetPointError(10,0.1,0.1,0.116955,0.203866);
937   g->SetPoint(11,0.7,6.17115);
938   g->SetPointError(11,0.1,0.1,0.120583,0.209697);
939   g->SetPoint(12,0.9,6.2645);
940   g->SetPointError(12,0.1,0.1,0.122976,0.213197);
941   g->SetPoint(13,1.1,6.36448);
942   g->SetPointError(13,0.1,0.1,0.125657,0.217014);
943   g->SetPoint(14,1.3,6.39489);
944   g->SetPointError(14,0.1,0.1,0.127118,0.218551);
945 #endif
946   SetGraphAttributes(g, INELGt0, ALICE, false, "alice_inelgt7000", 
947                      "ALICE INEL>0 (publ.)");
948   return g;
949 }
950
951 //____________________________________________________________________
952 /** 
953  * Get the ALICE NSD data in @f$ |\eta|<1.3@f$ for pp at @f$
954  * \sqrt{s} = 900GeV@f$ 
955  *
956  * p7742_d2x1y1 - Eur.Phys.J.C68:89-108,2010. 
957  *
958  * @return graph of data 
959  * 
960  * @ingroup pwglf_forward_otherdata
961  */
962 TGraphAsymmErrors* AliceCentralNsd900()
963 {
964   //NSD - p7742_d2x1y1 - Eur.Phys.J.C68:89-108,2010. 
965   double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 
966                  0.5, 0.7, 0.9, 1.1, 1.3 };
967   double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
968                    0.1, 0.1, 0.1, 0.1, 0.1 };
969   double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
970                    0.1, 0.1, 0.1, 0.1, 0.1 };
971   double y[] = { 3.9, 3.89, 3.81, 3.7, 3.64, 3.59, 3.53, 3.58, 3.59, 
972                  3.61, 3.74, 3.8, 3.87, 3.95 };
973   double eym[] = { 0.13341664064126335, 0.13152946437965907, 
974                    0.13152946437965907, 0.1216552506059644, 
975                    0.1216552506059644, 0.1216552506059644, 
976                    0.1216552506059644, 0.1216552506059644, 
977                    0.1216552506059644, 0.1216552506059644, 
978                    0.1216552506059644, 0.13152946437965907, 
979                    0.13152946437965907, 0.13341664064126335 };
980   double eyp[] = { 0.13341664064126335, 0.13152946437965907, 
981                    0.13152946437965907, 0.1216552506059644, 
982                    0.1216552506059644, 0.1216552506059644, 
983                    0.1216552506059644, 0.1216552506059644, 
984                    0.1216552506059644, 0.1216552506059644, 
985                    0.1216552506059644, 0.13152946437965907, 
986                    0.13152946437965907, 0.13341664064126335 };
987   const int np = 14;
988   for (int i = 0; i < np; i++) { 
989     double stat = (i == 0 || i == np-1) ? 0.03 : 0.02;
990     eym[i] += stat;
991     eyp[i] += stat;
992   }
993
994   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
995   SetGraphAttributes(g, NSD, ALICE, false, "alice_nsd", "ALICE NSD (publ.)");
996
997   return g;
998 }
999
1000 //____________________________________________________________________
1001 /** 
1002  * Get the ALICE INEL data in @f$ |\eta|<1.3@f$ for pp at @f$
1003  * \sqrt{s} = 2.36TeV@f$ 
1004  *
1005  * p7742_d3x1y1 - Eur.Phys.J.C68:89-108,2010. 
1006  *
1007  * @return graph of data 
1008  * 
1009  * @ingroup pwglf_forward_otherdata
1010  */
1011 TGraphAsymmErrors* AliceCentralInel2360()
1012 {  
1013   // INEL - p7742_d3x1y1 - Eur.Phys.J.C68:89-108,2010. 
1014   double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 
1015                  0.5, 0.7, 0.9, 1.1, 1.3 };
1016   double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
1017                    0.1, 0.1, 0.1, 0.1, 0.1 };
1018   double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
1019                    0.1, 0.1, 0.1, 0.1, 0.1 };
1020   double y[] = { 4.08, 4.01, 4.0, 3.88, 3.77, 3.8, 3.73, 3.71, 3.79, 
1021                  3.82, 3.94, 4.02, 4.05, 4.16 };
1022   double eym[] = { 0.13341664064126335, 0.12369316876852982, 
1023                    0.12369316876852982, 0.1216552506059644, 
1024                    0.1216552506059644, 0.1216552506059644, 
1025                    0.1216552506059644, 0.11180339887498948, 
1026                    0.1216552506059644, 0.1216552506059644, 
1027                    0.12369316876852982, 0.12369316876852982, 
1028                    0.13341664064126335, 0.13341664064126335 };
1029   double eyp[] = { 0.2716615541441225, 0.2716615541441225, 
1030                    0.2716615541441225, 0.260768096208106, 
1031                    0.25079872407968906, 0.25079872407968906, 
1032                    0.25079872407968906, 0.25079872407968906, 
1033                    0.25079872407968906, 0.260768096208106, 
1034                    0.261725046566048, 0.2716615541441225, 
1035                    0.2716615541441225, 0.2816025568065745 };
1036   const int np = 14;
1037   for (int i = 0; i < np; i++) { 
1038     double stat = (i < 3  || i > np-1-4) ? 0.03 : 0.02;
1039     eym[i] += stat;
1040     eyp[i] += stat;
1041   }
1042
1043   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
1044   SetGraphAttributes(g, NSD, ALICE, false, "alice_inel2360", 
1045                      "ALICE INEL (publ.)");
1046   return g;
1047 }
1048
1049 //____________________________________________________________________
1050 /** 
1051  * Get the ALICE NSD data in @f$ |\eta|<1.3@f$ for pp at @f$
1052  * \sqrt{s} = 2.36TeV@f$ 
1053  *
1054  * p7742_d4x1y1 - Eur.Phys.J.C68:89-108,2010. 
1055  *
1056  * @return graph of data 
1057  * 
1058  * @ingroup pwglf_forward_otherdata
1059  */
1060 TGraphAsymmErrors* AliceCentralNsd2360()
1061 {  
1062   // NSD - p7742_d4x1y1 - Eur.Phys.J.C68:89-108,2010. 
1063   double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 
1064                  0.5, 0.7, 0.9, 1.1, 1.3 };
1065   double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
1066                    0.1, 0.1, 0.1, 0.1, 0.1 };
1067   double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
1068                    0.1, 0.1, 0.1, 0.1, 0.1 };
1069   double y[] = { 4.79, 4.72, 4.7, 4.56, 4.44, 4.47, 4.39, 4.37, 4.47, 
1070     4.5, 4.64, 4.73, 4.76, 4.9 };
1071   double eym[] = { 0.13601470508735444, 0.13341664064126335, 
1072                    0.13341664064126335, 0.12369316876852982, 
1073                    0.12369316876852982, 0.12369316876852982, 
1074                    0.12369316876852982, 0.12369316876852982, 
1075                    0.12369316876852982, 0.12369316876852982,
1076                    0.12369316876852982, 0.13341664064126335,
1077                    0.13341664064126335, 0.13341664064126335 };
1078   double eyp[] = { 0.18439088914585774, 0.18248287590894657,
1079                    0.18248287590894657, 0.1726267650163207,
1080                    0.1726267650163207, 0.1726267650163207, 
1081                    0.16278820596099708, 0.16278820596099708, 
1082                    0.1726267650163207, 0.1726267650163207, 
1083                    0.1726267650163207, 0.18248287590894657, 
1084                    0.18248287590894657, 0.18248287590894657 };
1085   const int np = 14;
1086   
1087   for (int i = 0; i < np; i++) { 
1088     double stat = (i < 1) ? 0.03 : 0.02;
1089     eym[i] += stat;
1090     eyp[i] += stat;
1091   }
1092
1093   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
1094   SetGraphAttributes(g, NSD, ALICE, false, "alice_nsd2360", 
1095                      "ALICE NSD (publ.)");
1096   return g;
1097 }
1098
1099 //____________________________________________________________________
1100 /** 
1101  * Get the ALICE MB (CINT5, V0AND) data in @f$ |\eta|<2@f$ for pPb at 
1102  * @f$ \sqrt{s} = 5.023TeV@f$ 
1103  *
1104  * arXiv:1210.3615 [nucl-ex]
1105  *
1106  * @return graph of data 
1107  * 
1108  * @ingroup pwglf_forward_otherdata
1109  */
1110 TGraphAsymmErrors* AliceCentralpPb5023()
1111 {  
1112   TGraphAsymmErrors *g = new TGraphAsymmErrors(43);
1113   g->SetName("");
1114   g->SetTitle("");
1115   g->SetFillColor(1);
1116   g->SetMarkerStyle(24);
1117   g->SetMarkerSize(1.3);
1118   g->SetPoint(0,-2.05,16.1757);
1119   g->SetPointError(0,0.05,0.05,0.360241,0.360241);
1120   g->SetPoint(1,-1.95,16.8454);
1121   g->SetPointError(1,0.05,0.05,0.184436,0.184436);
1122   g->SetPoint(2,-1.85,16.9748);
1123   g->SetPointError(2,0.05,0.05,0.112833,0.112833);
1124   g->SetPoint(3,-1.75,17.2504);
1125   g->SetPointError(3,0.05,0.05,0.0851792,0.0851792);
1126   g->SetPoint(4,-1.65,17.336);
1127   g->SetPointError(4,0.05,0.05,0.0674453,0.0674453);
1128   g->SetPoint(5,-1.55,17.4649);
1129   g->SetPointError(5,0.05,0.05,0.0558537,0.0558537);
1130   g->SetPoint(6,-1.45,17.5884);
1131   g->SetPointError(6,0.05,0.05,0.0481065,0.0481065);
1132   g->SetPoint(7,-1.35,17.7509);
1133   g->SetPointError(7,0.05,0.05,0.0448122,0.0448122);
1134   g->SetPoint(8,-1.25,17.8052);
1135   g->SetPointError(8,0.05,0.05,0.0403298,0.0403298);
1136   g->SetPoint(9,-1.15,17.8357);
1137   g->SetPointError(9,0.05,0.05,0.0383174,0.0383174);
1138   g->SetPoint(10,-1.05,17.7547);
1139   g->SetPointError(10,0.05,0.05,0.0356689,0.0356689);
1140   g->SetPoint(11,-0.95,17.6859);
1141   g->SetPointError(11,0.05,0.05,0.034326,0.034326);
1142   g->SetPoint(12,-0.85,17.6665);
1143   g->SetPointError(12,0.05,0.05,0.0333449,0.0333449);
1144   g->SetPoint(13,-0.75,17.6044);
1145   g->SetPointError(13,0.05,0.05,0.0325356,0.0325356);
1146   g->SetPoint(14,-0.65,17.4815);
1147   g->SetPointError(14,0.05,0.05,0.0318004,0.0318004);
1148   g->SetPoint(15,-0.55,17.4);
1149   g->SetPointError(15,0.05,0.05,0.0312675,0.0312675);
1150   g->SetPoint(16,-0.45,17.3425);
1151   g->SetPointError(16,0.05,0.05,0.0310344,0.0310344);
1152   g->SetPoint(17,-0.35,17.2885);
1153   g->SetPointError(17,0.05,0.05,0.0306043,0.0306043);
1154   g->SetPoint(18,-0.25,17.2646);
1155   g->SetPointError(18,0.05,0.05,0.0303226,0.0303226);
1156   g->SetPoint(19,-0.15,17.316);
1157   g->SetPointError(19,0.05,0.05,0.0302368,0.0302368);
1158   g->SetPoint(20,-0.05,17.312);
1159   g->SetPointError(20,0.05,0.05,0.0301444,0.0301444);
1160   g->SetPoint(21,0.05,17.4418);
1161   g->SetPointError(21,0.05,0.05,0.0301526,0.0301526);
1162   g->SetPoint(22,0.15,17.4944);
1163   g->SetPointError(22,0.05,0.05,0.0303199,0.0303199);
1164   g->SetPoint(23,0.25,17.642);
1165   g->SetPointError(23,0.05,0.05,0.0303867,0.0303867);
1166   g->SetPoint(24,0.35,17.8153);
1167   g->SetPointError(24,0.05,0.05,0.0306752,0.0306752);
1168   g->SetPoint(25,0.45,18.0244);
1169   g->SetPointError(25,0.05,0.05,0.0310274,0.0310274);
1170   g->SetPoint(26,0.55,18.1993);
1171   g->SetPointError(26,0.05,0.05,0.0314353,0.0314353);
1172   g->SetPoint(27,0.65,18.349);
1173   g->SetPointError(27,0.05,0.05,0.0316803,0.0316803);
1174   g->SetPoint(28,0.75,18.5976);
1175   g->SetPointError(28,0.05,0.05,0.0322819,0.0322819);
1176   g->SetPoint(29,0.85,18.8045);
1177   g->SetPointError(29,0.05,0.05,0.0329447,0.0329447);
1178   g->SetPoint(30,0.95,18.9865);
1179   g->SetPointError(30,0.05,0.05,0.0337513,0.0337513);
1180   g->SetPoint(31,1.05,19.2313);
1181   g->SetPointError(31,0.05,0.05,0.0354009,0.0354009);
1182   g->SetPoint(32,1.15,19.4055);
1183   g->SetPointError(32,0.05,0.05,0.0367366,0.0367366);
1184   g->SetPoint(33,1.25,19.5893);
1185   g->SetPointError(33,0.05,0.05,0.0385048,0.0385048);
1186   g->SetPoint(34,1.35,19.8196);
1187   g->SetPointError(34,0.05,0.05,0.0421699,0.0421699);
1188   g->SetPoint(35,1.45,19.9476);
1189   g->SetPointError(35,0.05,0.05,0.0451541,0.0451541);
1190   g->SetPoint(36,1.55,20.1012);
1191   g->SetPointError(36,0.05,0.05,0.0513641,0.0513641);
1192   g->SetPoint(37,1.65,20.1082);
1193   g->SetPointError(37,0.05,0.05,0.060302,0.060302);
1194   g->SetPoint(38,1.75,20.1732);
1195   g->SetPointError(38,0.05,0.05,0.0739969,0.0739969);
1196   g->SetPoint(39,1.85,20.1964);
1197   g->SetPointError(39,0.05,0.05,0.0953757,0.0953757);
1198   g->SetPoint(40,1.95,20.0509);
1199   g->SetPointError(40,0.05,0.05,0.147212,0.147212);
1200   g->SetPoint(41,2.05,20.3151);
1201   g->SetPointError(41,0.05,0.05,0.272151,0.272151);
1202   g->SetPoint(42,2.15,20.1319);
1203   g->SetPointError(42,0.05,0.05,0.802706,0.802706);
1204
1205
1206   SetGraphAttributes(g, INEL, ALICE, false, "alice_ppb50230", 
1207                      "ALICE arXiv:1210.3615");
1208   return g;
1209 }
1210   
1211 //____________________________________________________________________
1212 /** 
1213  * Get the CMS NSD data in @f$ |\eta|<2.25@f$ for pp at @f$
1214  * \sqrt{s} = 900GeV@f$ 
1215  *
1216  * p7743_d8x1y1
1217  *
1218  * @return graph of data 
1219  * 
1220  * @ingroup pwglf_forward_otherdata
1221  */
1222 TGraphAsymmErrors* CMSNsd900()
1223 {
1224   // CMS published NSD data - p7743_d8x1y1
1225   double x[] = { -2.25, -1.75, -1.25, -0.75, -0.25, 0.25, 0.75, 1.25, 1.75, 
1226     2.25 };
1227   double exm[] = { 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 };
1228   double exp[] = { 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 };
1229   double y[] = { 3.6, 3.73, 3.62, 3.54, 3.48, 3.48, 3.54, 3.62, 3.73,  3.6 };
1230   double eym[] = { 0.13, 0.14, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.14,0.13 };
1231   double eyp[] = { 0.13, 0.14, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.14, 0.13 };
1232   const int np = 10;
1233   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
1234   SetGraphAttributes(g, NSD, CMS, false, "cms_nsd900", "CMS NSD");
1235
1236   return g;
1237 }
1238
1239
1240 //____________________________________________________________________
1241 /** 
1242  * Get the CMS NSD data in @f$ |\eta|<2.25@f$ for pp at @f$
1243  * \sqrt{s} = 2.36GeV@f$ 
1244  *
1245  * p7743_d8x1y2
1246  *
1247  * @return graph of data 
1248  * 
1249  * @ingroup pwglf_forward_otherdata
1250  */
1251 TGraphAsymmErrors* CMSNsd2360()
1252 {
1253   // CMS NSD 2360 - p7743_d8x1y2
1254   double x[] = { -2.25, -1.75, -1.25, -0.75, -0.25, 0.25, 0.75,1.25,1.75,2.25 };
1255   double exm[] = { 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 };
1256   double exp[] = { 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 };
1257   double y[] = { 4.78, 4.81, 4.66, 4.61, 4.47, 4.47, 4.61, 4.66, 4.81,  4.78 };
1258   double eym[] = { 0.17, 0.18, 0.17, 0.17, 0.16, 0.16, 0.17, 0.17, 0.18, 0.17 };
1259   double eyp[] = { 0.17, 0.18, 0.17, 0.17, 0.16, 0.16, 0.17, 0.17, 0.18, 0.17 };
1260   const int np = 10;
1261   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
1262   SetGraphAttributes(g, NSD, CMS, false, "cms_nsd2360", "CMS NSD");
1263   return g;
1264 }
1265
1266
1267 //____________________________________________________________________
1268 /** 
1269  * Get the CMS NSD data in @f$ |\eta|<2.25@f$ for pp at @f$
1270  * \sqrt{s} = 7TeV@f$ 
1271  *
1272  * p7838_d5x1y1
1273  *
1274  * @return graph of data 
1275  * 
1276  * @ingroup pwglf_forward_otherdata
1277  */
1278 TGraphAsymmErrors* CMSNsd7000()
1279 {
1280   // CMS NSD 7000 - Plot: p7838_d5x1y1
1281   double x[] = { -2.25, -1.75, -1.25, -0.75, -0.25, 0.25, 0.75,1.25,1.75,2.25 };
1282   double exm[] = { 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 };
1283   double exp[] = { 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 };
1284   double y[] = { 6.18, 6.26, 6.14, 6.01, 5.78, 5.78, 6.01, 6.14, 6.26,  6.18 };
1285   double eym[] = { 0.25, 0.25, 0.24, 0.24, 0.23, 0.23, 0.24, 0.24, 0.25, 0.25 };
1286   double eyp[] = { 0.25, 0.25, 0.24, 0.24, 0.23, 0.23, 0.24, 0.24, 0.25, 0.25 };
1287   const int np = 10;
1288   TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
1289   SetGraphAttributes(g, NSD, CMS, false, "cms_nsd7000", "CMS NSD");
1290   return g;
1291 }
1292
1293 //____________________________________________________________________
1294 /** 
1295  * Get a single data graph 
1296  * 
1297  * @param which    Which type
1298  * @param sys      Collisition system
1299  * @param energy   Collision energy
1300  * @param type     Trigger type 
1301  * @param centLow  Low cut on centrality 
1302  * @param centHigh Up cut on centraltiy
1303  * 
1304  * @return Data graph 
1305  */
1306 TGraphAsymmErrors*
1307 GetSingle(UShort_t which, 
1308           UShort_t sys, 
1309           UShort_t energy, 
1310           UShort_t type=0x1, 
1311           UShort_t centLow=0, 
1312           UShort_t centHigh=0) 
1313 {
1314   TGraphAsymmErrors* ret = 0;
1315   if (sys == 1) { 
1316     if (TMath::Abs(energy-900) < 10) {
1317       switch (type) { 
1318       case 1: // INEL 
1319         switch (which) { 
1320         case PYTHIA: ret = Pythia900INEL(); break;
1321         case UA5:    ret = UA5Inel(false);  break;
1322         case UA5+10: ret = UA5Inel(true);   break;
1323         case ALICE:  ret = AliceCentralInel900(); break;
1324         }      
1325         break;
1326       case 2: // INEL>0
1327         switch (which) { 
1328         case ALICE: ret = AliceCentralInelGt900(); break;
1329         }
1330         break;
1331       case 4:  // NSD 
1332         switch (which) { 
1333         case PYTHIA: ret = Pythia900NSD(); break;
1334         case UA5:    ret = UA5Nsd(false);  break;
1335         case UA5+10: ret = UA5Nsd(true);   break;
1336         case ALICE:  ret = AliceCentralNsd900(); break;
1337         case CMS:    ret = CMSNsd900();          break;
1338         }
1339         break;
1340       } // type 
1341     }
1342     else if (TMath::Abs(energy-2360) < 10) {
1343       switch (type) { 
1344       case 1: // INEL 
1345         switch (which) { 
1346         case ALICE: ret = AliceCentralInel2360(); break;
1347         }
1348         break;
1349       case 2: // INEL > 0
1350         switch (which) {
1351         case ALICE: ret = AliceCentralInelGt2360(); break;
1352         }
1353         break;
1354       case 4: // NSD 
1355         switch (which) { 
1356         case ALICE: ret = AliceCentralNsd2360(); break;
1357         case CMS:   ret = CMSNsd2360(); break;
1358         }
1359         break;
1360       }
1361     }
1362     else if (TMath::Abs(energy-7000) < 10) {
1363       switch (type) { 
1364       case 1: ret = 0;  break;
1365       case 2: // INEL > 0
1366         switch (which) { 
1367         case ALICE: ret = AliceCentralInelGt7000(); break;
1368         }
1369         break;
1370       case 4: // NSD 
1371         switch (which) { 
1372         case CMS: ret = CMSNsd7000(); break;
1373         }
1374         break;
1375       }
1376     }
1377   }
1378   else if (sys == 3) { // pPb 
1379     if (TMath::Abs(energy - 5023) < 10) {
1380       switch (which) { 
1381       case ALICE: ret = AliceCentralpPb5023(); break;
1382       }
1383     }
1384   }
1385 #if 0
1386   if (ret) {
1387     if (!wn.IsNull()) wn.Append(",");
1388     switch (which) { 
1389     case PYTHIA: wn.Append("Pythia"); break;
1390     case UA5:    wn.Append("UA5");    break;
1391     case CMS:    wn.Append("CMS");    break;
1392     case ALICE:  wn.Append("ALICE");  break;
1393     }      
1394   }
1395 #endif
1396   return ret;
1397 }
1398
1399 //____________________________________________________________________
1400 /** 
1401  * Append an item to a list 
1402  * 
1403  * @param s      List to append to 
1404  * @param delim  Delimiter 
1405  * @param what   What to append 
1406  * 
1407  * @return New string value 
1408  */
1409 TString&
1410 AppendItem(TString& s, char delim, const char* what)      
1411 {
1412   if (!s.IsNull()) s.Append(Form("%c", delim));
1413   s.Append(what);
1414   return s;
1415 }
1416
1417 //____________________________________________________________________
1418 /** 
1419  * Get a multi graph of data for a given energy and trigger type 
1420  * 
1421  * @param sys    Collision system (1: pp, 2: PbPb)
1422  * @param energy Energy in GeV (900, 2360, 7000)
1423  * @param type   Bit pattern of trigger type 
1424  *   - 0x1 INEL 
1425  *   - 0x2 INEL>0
1426  *   - 0x4 NSD 
1427  * @param centLow   Low centrality cut (only for PbPB)
1428  * @param centHigh  High centrality cut (only for PbPB)
1429  * @param which     What to get
1430  * 
1431  * @return A multi graph with the selected data. 
1432  * 
1433  * @ingroup pwglf_forward_otherdata
1434  */
1435 TMultiGraph* 
1436 GetData(UShort_t sys, 
1437         UShort_t energy,
1438         UShort_t type=0x1, 
1439         UShort_t centLow=0, 
1440         UShort_t centHigh=0, 
1441         UShort_t which=0x7)
1442 {
1443   TMultiGraph* mp = new TMultiGraph(Form("dndeta_%dGeV_%d_%03d_%03d", 
1444                                          energy, type, centLow, centHigh),"");
1445   TString tn;
1446   TString en;
1447   TString sn;
1448   TString cn;
1449   bool    ua5    = (which & (1 << UA5));      // 0x1
1450   bool    cms    = (which & (1 << CMS));      // 0x2
1451   bool    alice  = (which & (1 << ALICE));    // 0x4
1452   bool    pythia = (which & (1 << PYTHIA));   // 0x8
1453   
1454   en.Append(Form(", #sqrt{s%s}=", sys == 1 ? "" : "_{NN}"));
1455   if (energy < 1000) 
1456     en.Append(Form("%dGeV", energy));
1457   else {
1458     if (energy % 1000 == 0) 
1459       en.Append(Form("%dTeV", energy/1000));
1460     else 
1461       en.Append(Form("%4.2fTeV", float(energy)/1000));
1462   }
1463
1464   if (sys == 1) { 
1465     if (!(type & 0x7)) 
1466       Warning("GetData", "Unknown trigger mask 0x%x", type);
1467
1468     if (TMath::Abs(energy-2750) < 11) {
1469       Warning("GetData", "Using 2360GeV data for %dGeV comparison", energy);
1470       energy = 2360;
1471     }
1472     if (!(TMath::Abs(energy-900) < 10 || 
1473           TMath::Abs(energy-2360) < 10 || 
1474           TMath::Abs(energy-7000) < 10)) {
1475       Warning("GetData", "No other results for sys=%d, energy=%d",
1476               sys, energy);
1477       return 0;
1478     }
1479     
1480     sn = "pp";
1481
1482     if (type & 0x1) AppendItem(tn, '|', "INEL");
1483     if (type & 0x2) AppendItem(tn, '|', "INEL>0");
1484     if (type & 0x4) AppendItem(tn, '|', "NSD");
1485
1486     Bool_t seenUA5 = false;
1487     for (Int_t i = 0; i < 3; i++) { 
1488       UShort_t mask = (1 << i);
1489       if ((type & mask) == 0) continue;
1490       TGraphAsymmErrors* gUAp =(ua5   ?GetSingle(UA5,   sys,energy,mask):0);
1491       TGraphAsymmErrors* gUAn =(ua5   ?GetSingle(UA5+10,sys,energy,mask):0);
1492       TGraphAsymmErrors* gCMS =(cms   ?GetSingle(CMS,   sys,energy,mask):0);
1493       TGraphAsymmErrors* gALI =(alice ?GetSingle(ALICE, sys,energy,mask):0);
1494       TGraphAsymmErrors* gPYT =(pythia?GetSingle(PYTHIA,sys,energy,mask):0);
1495       if (gUAp) mp->Add(gUAp);
1496       if (gUAn) mp->Add(gUAn);
1497       if (gCMS) mp->Add(gCMS);
1498       if (gALI) mp->Add(gALI);
1499       if (gPYT) mp->Add(gPYT);
1500       if (gUAp || gUAn) seenUA5 = true;
1501     }
1502     if (seenUA5) sn.Append("(p#bar{p})");
1503   }
1504   else if (sys == 2) { 
1505     // Nothing for PbPb so far 
1506     cn = Form(", %d%%-%d%% central", centLow, centHigh);
1507     sn = "PbPb";
1508     // Warning("GetData", "No other data for PbPb yet");
1509   }
1510   else if (sys == 3) {
1511     if (!(TMath::Abs(energy-5023) < 10)) {
1512       Warning("GetData", "No other results for sys=%d, energy=%d",
1513               sys, energy);
1514       return 0;
1515     }
1516     
1517     Info("GetData", "Getting ALICE pPb data");
1518     sn = "pPb";
1519     TGraphAsymmErrors* gALI =(alice ?GetSingle(ALICE, sys,energy, 0):0);
1520     if (gALI) mp->Add(gALI);
1521     Info("GetData", "Got %p", gALI);
1522     // Warning("GetData", "Unknown system %d", sys);
1523   }
1524
1525   if (!mp->GetListOfGraphs() || mp->GetListOfGraphs()->GetEntries() <= 0) {
1526     delete mp;
1527     mp = 0;
1528     return 0;
1529   }
1530   TString tit(Form("%s%s, %s%s", 
1531                    sn.Data(), en.Data(), tn.Data(), cn.Data()));
1532   mp->SetTitle(tit.Data());
1533   return mp;
1534 }
1535
1536 //____________________________________________________________________
1537 /** 
1538  * Plot external data for a given selection of energy and trigger type
1539  * (see GetData)
1540  * 
1541  * @param sys    Collision system (1: pp, 2: PbPb)
1542  * @param energy Energy in GeV (900, 2360, 7000)
1543  * @param type   Bit pattern of trigger type 
1544  *   - 0x1 INEL 
1545  *   - 0x2 INEL>0
1546  *   - 0x4 NSD 
1547  * @param centLow   Low centrality cut (only for PbPB)
1548  * @param centHigh  High centrality cut (only for PbPB)
1549  * @param which     Which data to show 
1550  * 
1551  * @ingroup pwglf_forward_otherdata
1552  */
1553 void
1554 OtherData(UShort_t sys=1, 
1555           UShort_t energy=900, 
1556           UShort_t type=0x1, 
1557           UShort_t centLow=0, 
1558           UShort_t centHigh=5, 
1559           UShort_t which=0x7)
1560 {
1561   TMultiGraph* mp = GetData(sys, energy, type, centLow, centHigh, which);
1562   if (!mp) return;
1563
1564   gStyle->SetTitleX(0.1);
1565   gStyle->SetTitleY(1.0);
1566   gStyle->SetTitleW(0.85);
1567   gStyle->SetTitleH(0.05);
1568   gStyle->SetTitleBorderSize(0);
1569   gStyle->SetTitleTextColor(kWhite);
1570   gStyle->SetTitleFillColor(kBlack);
1571   gStyle->SetTitleFontSize(0.02);
1572   
1573   gStyle->SetOptTitle(0);
1574   gStyle->SetOptStat(0);
1575   
1576   TCanvas* c = new TCanvas("c", "dN/deta", 800, 600);
1577   c->SetFillColor(0);
1578   c->SetBorderSize(0);
1579   c->SetBorderMode(0);
1580   c->SetRightMargin(0.02);
1581   c->SetTopMargin(0.02);
1582   
1583
1584   mp->SetMinimum(0);
1585   mp->Draw("ap");
1586   if (mp->GetXaxis()) {
1587     mp->GetXaxis()->SetTitle("#eta");
1588     mp->GetXaxis()->SetTitleFont(12);
1589     mp->GetXaxis()->SetLabelFont(132);
1590   }
1591   if (mp->GetYaxis()) {
1592     mp->GetYaxis()->SetTitle("#frac{1}{N} #frac{dN_{#font[132]{ch}}}{d#eta}");
1593     mp->GetYaxis()->SetTitleFont(12);
1594     mp->GetYaxis()->SetLabelFont(132);
1595   }
1596   TLegend* l = c->BuildLegend(0.3, 0.15, 0.7, 0.5, 
1597                               mp->GetTitle());
1598   l->SetFillColor(0);
1599   l->SetTextFont(132);
1600   l->SetBorderSize(0);
1601   TLegendEntry* h = static_cast<TLegendEntry*>(l->GetListOfPrimitives()->At(0));
1602   if (h) { 
1603     h->SetTextFont(22);
1604   }
1605   c->cd();
1606 }
1607
1608 //____________________________________________________________________
1609 //
1610 // EOF
1611 //