]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
DrawdNdeta.C AliceLogo.C OtherData.C DrawdNDetaSummary
authorcholm <cholm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 5 Jul 2013 10:04:09 +0000 (10:04 +0000)
committercholm <cholm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 5 Jul 2013 10:04:09 +0000 (10:04 +0000)
scripts/SummarydNdetaDrawer.C:
Some fixes.  OtherData.C now defines the class
   RefData so we can test if the script has been
loaded.  The new script AliceLogo.C will draw
the ALICE logo on a plot - using ROOT primitives
(vector graphics!).

MakedNdetaTrain.C:
  Updates for new DrawdNdeta.C

AliBasedNdetaTask.cxx:
When the trigger efficieny has been set externally
  do not try to override it, and protect against
0 trigger efficiencies.

liteAnalysis.sh:
Various updates and flexilibity as to wheter
one has MC/real data.  Should be tested.

PWGLF/FORWARD/analysis2/AliBasedNdetaTask.cxx
PWGLF/FORWARD/analysis2/DrawMultDistsSummary.C
PWGLF/FORWARD/analysis2/DrawdNdeta.C
PWGLF/FORWARD/analysis2/DrawdNdetaSummary.C
PWGLF/FORWARD/analysis2/OtherData.C
PWGLF/FORWARD/analysis2/liteAnalysis.sh
PWGLF/FORWARD/analysis2/scripts/AliceLogo.C [new file with mode: 0644]
PWGLF/FORWARD/analysis2/scripts/SummarydNdetaDrawer.C
PWGLF/FORWARD/analysis2/trains/MakedNdetaTrain.C

index 55d271a897f53e2f5096bd72984a59f70e5f7039..4ef1af9f8377fce49256300e00a7b3bb83fd1082 100644 (file)
@@ -919,21 +919,32 @@ AliBasedNdetaTask::LoadNormalizationData(UShort_t sys, UShort_t energy)
   if(energy == 7000) snn.Form("7000");
   if(energy == 2750) snn.Form("2750"); 
   
-  if(fShapeCorr &&  (fTriggerEff != 1)) {
+  // Check if shape correction/trigger efficiency was requsted and not
+  // already set
+  Bool_t needShape = ((fNormalizationScheme & kShape) && !fShapeCorr);
+  Bool_t needEff   = ((fNormalizationScheme & kTriggerEfficiency) && 
+                     ((1 - fTriggerEff) < 1e-6) && fTriggerEff > 0);
+  if (needShape) AliInfo("Will load shape correction");
+  if (needEff)   AliInfoF("Will load trigger efficiency, was=%f, %f",
+                         fTriggerEff, fTriggerEff0);
+  if(!needShape && !needShape) {
     AliInfo("Objects already set for normalization - no action taken"); 
     return; 
   }
-  
-  TFile* fin = TFile::Open(Form("$ALICE_ROOT/PWGLF/FORWARD/corrections/"
-                               "Normalization/normalizationHists_%s_%s.root",
-                               type.Data(),snn.Data()));
+
+  TString fname(Form("$ALICE_ROOT/PWGLF/FORWARD/corrections/"
+                    "Normalization/normalizationHists_%s_%s.root",
+                    type.Data(),snn.Data()));
+  AliWarningF("Using old-style corrections from %s", fname.Data());
+  TFile* fin = TFile::Open(fname, "READ");
   if(!fin) {
-    AliWarning(Form("no file for normalization of %d/%d", sys, energy));
+    AliWarningF("no file for normalization of %d/%d (%s)", 
+               sys, energy, fname.Data());
     return;
   }
 
   // Shape correction
-  if ((fNormalizationScheme & kShape) && !fShapeCorr) {
+  if (needShape) {
     TString trigName("All");
     if (fTriggerMask == AliAODForwardMult::kInel || 
        fTriggerMask == AliAODForwardMult::kNClusterGt0) 
@@ -956,42 +967,44 @@ AliBasedNdetaTask::LoadNormalizationData(UShort_t sys, UShort_t energy)
   }
 
   // Trigger efficiency
-  TString effName(Form("%sTriggerEff", 
-                      fTriggerMask == AliAODForwardMult::kInel ? "inel" :
-                      fTriggerMask == AliAODForwardMult::kNSD ? "nsd" :
-                      fTriggerMask == AliAODForwardMult::kInelGt0 ?
-                      "inelgt0" : "all"));
-
-  Double_t trigEff = 1; 
-  if (fNormalizationScheme & kTriggerEfficiency) { 
+  if (needEff) { 
+    TString effName(Form("%sTriggerEff", 
+                        fTriggerMask == AliAODForwardMult::kInel ? "inel" :
+                        fTriggerMask == AliAODForwardMult::kNSD ? "nsd" :
+                        fTriggerMask == AliAODForwardMult::kInelGt0 ?
+                        "inelgt0" : "all"));
+    Double_t trigEff = 1;
     TObject* eff = fin->Get(effName);
     if (eff) AliForwardUtil::GetParameter(eff, trigEff);
-  }
-  if (fTriggerEff != 1) SetTriggerEff(trigEff);
-  if (fTriggerEff < 0)  fTriggerEff = 1;
-
-  // Trigger efficiency
-  TString eff0Name(Form("%sTriggerEff0", 
-                      fTriggerMask == AliAODForwardMult::kInel ? "inel" :
-                      fTriggerMask == AliAODForwardMult::kNSD ? "nsd" :
-                      fTriggerMask == AliAODForwardMult::kInelGt0 ?
-                      "inelgt0" : "all"));
 
-  Double_t trigEff0 = 1; 
-  if (fNormalizationScheme & kTriggerEfficiency) { 
-    TObject* eff = fin->Get(eff0Name);
-    if (eff) AliForwardUtil::GetParameter(eff, trigEff0);
+    if (trigEff <= 0) 
+      AliWarningF("Retrieved trigger efficiency %s is %f<=0, ignoring", 
+                 effName.Data(), trigEff);
+    else 
+      SetTriggerEff(trigEff);
+    
+    // Trigger efficiency
+    TString eff0Name(effName);
+    eff0Name.Append("0");
+
+    Double_t trigEff0 = 1; 
+    TObject* eff0 = fin->Get(eff0Name);
+    if (eff0) AliForwardUtil::GetParameter(eff, trigEff0);
+    if (trigEff0 < 0) 
+      AliWarningF("Retrieved trigger efficiency %s is %f<0, ignoring", 
+                 eff0Name.Data(), trigEff0);
+    else 
+      SetTriggerEff0(trigEff0);
   }
-  if (fTriggerEff0 != 1) SetTriggerEff0(trigEff0);
-  if (fTriggerEff0 < 0)  fTriggerEff0 = 1;
-
+  
   // TEMPORARY FIX
   // Rescale the shape correction by the trigger efficiency 
   if (fShapeCorr) {
     AliWarning(Form("Rescaling shape correction by trigger efficiency: "
-                   "1/E_X=1/%f", trigEff));
-    fShapeCorr->Scale(1. / trigEff);
+                   "1/E_X=1/%f", fTriggerEff));
+    fShapeCorr->Scale(1. / fTriggerEff);
   }
+  if (fin) fin->Close();
 
   // Print - out
   if (fShapeCorr && fTriggerEff) AliInfo("Loaded objects for normalization.");
@@ -2165,7 +2178,7 @@ AliBasedNdetaTask::CentralityBin::End(TList*      sums,
   // --- Get normalization scaler ------------------------------------
   Double_t epsilonT  = trigEff;
   Double_t epsilonT0 = trigEff0;
-  AliInfoF("Using epsilonT=%f, epsilonT0=%f for %d", 
+  AliInfoF("Using epsilonT=%f, epsilonT0=%f for 0x%x", 
           epsilonT, epsilonT0, triggerMask);
 #if 0
   // These hard-coded trigger efficiencies are not used anymore, and
index c2122cc72f1b5eb582194915f3ee9fde35985719..7734f68d4aa608f2985ce6fa7c5abe5b84b42365 100644 (file)
@@ -11,7 +11,7 @@
 void DrawMultDistsSummary(const char* fname="forward_multdists.root",
                       UShort_t what=0xf)
 {
-  gROOT->SetMacroPath(Form("%s:$ALICE_ROOT/../trunk/PWGLF/FORWARD/analysis2/scripts",
+  gROOT->SetMacroPath(Form("%s:$ALICE_ROOT/PWGLF/FORWARD/analysis2/scripts",
                           gROOT->GetMacroPath()));
   gROOT->LoadMacro("SummaryMultDistsDrawer.C++g");
   
index b21d609b257ff7f6aec2e1dccdeec73fe975bd33..f245037c365d734bd34f93269bf23e2b34dd2ad2 100644 (file)
@@ -80,11 +80,16 @@ struct dNdetaDrawer
     fMirror(false), 
     fForceMB(false),    
     fAddExec(false),
+    fSaveAsPDF(false), 
+    fSaveAsPNG(false), 
+    fSaveAsROOT(false),
+    fSaveAsScript(false),
     // Settings 
     fRebin(0),             // Rebinning factor 
     fFwdSysErr(0.076),     // Systematic error in forward range
     fCenSysErr(0),         // Systematic error in central range 
     fTitle(""),            // Title on plot
+    fBase(""),             // Optional base name of output files
     fClusterScale(""),     // Scaling of clusters to tracklets      
     // Read (or set) information 
     fTrigString(0),        // Trigger string (read, or set)
@@ -94,6 +99,7 @@ struct dNdetaDrawer
     fVtxAxis(0),           // Vertex cuts (read or set)
     fCentAxis(0),          // Centrality axis
     fTriggerEff(1),        // Trigger efficency 
+    fExtTriggerEff(false), // True if fTriggerEff was read 
     // Resulting plots 
     fResults(0),           // Stack of results 
     fRatios(0),            // Stack of ratios 
@@ -207,6 +213,17 @@ struct dNdetaDrawer
    */
   void SetTitle(TString x)        { fTitle = x; }
   //__________________________________________________________________
+  /** 
+   * Set the base name of the output files 
+   * 
+   * @param x Base name 
+   */
+  void SetBase(TString x) { fBase = x; }
+  void SetSaveAsPNG(Bool_t x) { fSaveAsPNG = x; }
+  void SetSaveAsPDF(Bool_t x) { fSaveAsPDF = x; }
+  void SetSaveAsROOT(Bool_t x) { fSaveAsROOT = x; }
+  void SetSaveAsScript(Bool_t x) { fSaveAsScript = x; }
+  //__________________________________________________________________
   /** 
    * Set the systematic error in the forward region
    * 
@@ -322,7 +339,11 @@ struct dNdetaDrawer
    * 
    * @param eff @f$\varepsilon_{T}@f$ 
    */
-  void SetTriggerEfficiency(Float_t eff)  { fTriggerEff = eff; }
+  void SetTriggerEfficiency(Float_t eff)  
+  { 
+    fTriggerEff = eff; 
+    fExtTriggerEff = false;
+  }
 
   //==================================================================
   /** 
@@ -385,8 +406,7 @@ struct dNdetaDrawer
         "   Title on plot:                    %s\n"
         "   Scaling of clusters to tracklets: %s\n"
         "   Final MC correction file:         %s\n"
-        "   Empirical correction file:        %s\n"
-        "   Trigger efficiency:               %6.4f",
+        "   Empirical correction file:        %s",
         (fShowRatios    ? "yes" : "no"), 
         (fShowLeftRight ? "yes" : "no"),
         (fShowRings     ? "yes" : "no"),
@@ -397,13 +417,16 @@ struct dNdetaDrawer
         (fForceMB       ? "yes" : "no"),
         fShowOthers, fRebin, (100*fFwdSysErr), (100*fCenSysErr), 
         fTitle.Data(), fClusterScale.Data(), fFinalMC.Data(), 
-        fEmpirical.Data(), fTriggerEff);
+        fEmpirical.Data());
 
     // --- Set the macro pathand load other data script --------------
+    TString savPath(gROOT->GetMacroPath());
     gROOT->SetMacroPath(Form("%s:$(ALICE_ROOT)/PWGLF/FORWARD/analysis2",
                             gROOT->GetMacroPath()));
     // Always recompile 
-    gROOT->LoadMacro("OtherData.C++");
+    if (!gROOT->GetClass("RefData"))
+      gROOT->LoadMacro("OtherData.C++");
+    gROOT->SetMacroPath(savPath);
 
     // --- Get the central results -----------------------------------
     TList* clusters = static_cast<TList*>(file->Get("CentralResults"));
@@ -582,6 +605,15 @@ struct dNdetaDrawer
       fVtxAxis    = static_cast<TAxis*>(results->FindObject("vtxAxis"));
     if (!fCentAxis) 
       fCentAxis   = static_cast<TAxis*>(results->FindObject("centAxis"));
+    if (fTriggerEff <= 0 || (1-fTriggerEff)<1e-6) {
+      TParameter<double>* eff = 
+       static_cast<TParameter<double>*>(results->FindObject("triggerEff"));
+      if (eff) {
+       fTriggerEff = eff->GetVal();
+       fExtTriggerEff = true;
+      }
+      if (fTriggerEff <= 0) SetTriggerEfficiency(1);
+    }
 
     TNamed* options = static_cast<TAxis*>(results->FindObject("options"));
     if (!fTrigString) fTrigString = new TNamed("trigger", "unknown");
@@ -605,6 +637,7 @@ struct dNdetaDrawer
     Info("FetchInformation", 
         "Initialized for\n"
         "   Trigger:       %-30s  (0x%x)\n"
+        "   Efficiency:    %-6.4f\n"
         "   sqrt(sNN):     %-30s  (%dGeV)\n"
         "   System:        %-30s  (%d)\n"
         "   Vz range:      %-30s  (%f,%f)\n"
@@ -612,6 +645,7 @@ struct dNdetaDrawer
         "   Centrality:    %s\n"
         "   Options:       %s",
         fTrigString->GetTitle(), fTrigString->GetUniqueID(), 
+        fTriggerEff,
         fSNNString->GetTitle(),  fSNNString->GetUniqueID(), 
         fSysString->GetTitle(),  fSysString->GetUniqueID(), 
         fVtxAxis->GetTitle(), fVtxAxis->GetXmin(), fVtxAxis->GetXmax(),
@@ -635,10 +669,9 @@ struct dNdetaDrawer
     UShort_t sys   = (fSysString  ? fSysString->GetUniqueID() : 0);
     UShort_t trg   = (fTrigString ? fTrigString->GetUniqueID() : 0);
     UShort_t snn   = (fSNNString  ? fSNNString->GetUniqueID() : 0);
-    Long_t   ret   = gROOT->ProcessLine(Form("GetData(%d,%d,%d,%d,%d,%d);",
-                                            sys,snn,trg,
-                                            centLow,centHigh,
-                                            fShowOthers));
+    Long_t   ret   = 
+      gROOT->ProcessLine(Form("RefData::GetData(%d,%d,%d,%d,%d,%d);",
+                             sys,snn,trg,centLow,centHigh,fShowOthers));
     if (!ret) return 0;
 
     thisOther = reinterpret_cast<TMultiGraph*>(ret);    
@@ -982,6 +1015,7 @@ struct dNdetaDrawer
   //__________________________________________________________________
   void CorrectTriggerEff(TH1* dndeta)
   {
+    if (fExtTriggerEff) return;
     if (!dndeta) return;
     if (fTriggerEff <= 0 || fTriggerEff >= 1) return;
     dndeta->Scale(fTriggerEff);
@@ -998,8 +1032,8 @@ struct dNdetaDrawer
            Double_t     amax)
   {
     gStyle->SetOptTitle(0);
-    gStyle->SetTitleFont(132, "xyz");
-    gStyle->SetLabelFont(132, "xyz");
+    gStyle->SetTitleFont(kFont, "xyz");
+    gStyle->SetLabelFont(kFont, "xyz");
     
     Int_t    h  = 800;
     Int_t    w  = 800; // h / TMath::Sqrt(2);
@@ -1039,19 +1073,21 @@ struct dNdetaDrawer
     trg.ReplaceAll(">", "Gt");
     trg.ReplaceAll("&", "AND");
     trg.ReplaceAll("|", "OR");
-    TString base(Form("dndeta_%s_%s_%s_%c%02d%c%02dcm_%09dev",
-                     fSysString->GetTitle(), 
-                     fSNNString->GetTitle(), 
-                     trg.Data(),
-                     vMin < 0 ? 'm' : 'p',  TMath::Abs(vMin),
-                     vMax < 0 ? 'm' : 'p',  TMath::Abs(vMax),
-                     nev));
-    c->SaveAs(Form("%s.png",  base.Data()));
-    c->SaveAs(Form("%s.root", base.Data()));
-    c->SaveAs(Form("%s.C",    base.Data()));
-    c->SaveAs(Form("%s.pdf",  base.Data()));
-    base.ReplaceAll("dndeta", "export");
-    Export(base);
+    if (fBase.IsNull()) 
+      fBase = "dndeta_<sys>_<snn>_<trig>_<ipmin><ipmax>cm_<nev>ev";
+    fBase.ReplaceAll("<sys>",   fSysString->GetTitle());
+    fBase.ReplaceAll("<snn>",   fSNNString->GetTitle());
+    fBase.ReplaceAll("<trig>",  trg.Data());
+    fBase.ReplaceAll("<ipmin>", Form("%c%02d",vMin<0?'m':'p',TMath::Abs(vMin)));
+    fBase.ReplaceAll("<ipmax>", Form("%c%02d",vMax<0?'m':'p',TMath::Abs(vMax)));
+    fBase.ReplaceAll("<nev>",   Form("%09d",  nev));
+    if (fSaveAsPNG)   c->SaveAs(Form("%s.png",  fBase.Data()));
+    if (fSaveAsROOT)  c->SaveAs(Form("%s.root", fBase.Data()));
+    if (fSaveAsScript)c->SaveAs(Form("%s.C",    fBase.Data()));
+    if (fSaveAsPDF)   c->SaveAs(Form("%s.pdf",  fBase.Data()));
+    TString exp(fBase);
+    exp.ReplaceAll("dndeta", "export");
+    Export(exp);
   }
   //__________________________________________________________________
   /** 
@@ -1076,7 +1112,8 @@ struct dNdetaDrawer
     l->SetFillColor(0);
     l->SetFillStyle(0);
     l->SetBorderSize(0);
-    l->SetTextFont(132);
+    l->SetTextFont(kFont);
+    l->SetTextColor(kAliceBlue);
 
     // Loop over items in stack and get unique items, while ignoring
     // mirrored data and systematic error bands 
@@ -1185,7 +1222,8 @@ struct dNdetaDrawer
     l->SetFillColor(0);
     l->SetFillStyle(0);
     l->SetBorderSize(0);
-    l->SetTextFont(132);
+    l->SetTextFont(kFont);
+    l->SetTextColor(kAliceBlue);
 
     Int_t n = fCentAxis->GetNbins();
     for (Int_t i = 1; i <= n; i++) { 
@@ -1213,7 +1251,7 @@ struct dNdetaDrawer
     p1->SetBorderSize(0);
     p1->SetBorderMode(0);
     p1->SetBottomMargin(yd > 0.001 ? 0.001 : 0.1);
-    p1->SetRightMargin(0.03);
+    p1->SetRightMargin(kRightMargin);
     if (fShowLeftRight || fShowRatios) p1->SetGridx();
     p1->SetTicks(1,1);
     p1->SetNumber(1);
@@ -1254,14 +1292,16 @@ struct dNdetaDrawer
 
     // Put a title on top
     fTitle.ReplaceAll("@", " ");
-    TLatex* tit = new TLatex(0.10, 0.95, fTitle.Data());
+    TLatex* tit = new TLatex(0.10, .99, fTitle.Data());
     tit->SetNDC();
-    tit->SetTextFont(132);
-    tit->SetTextSize(0.05);
+    tit->SetTextFont(kFont);
+    tit->SetTextAlign(13);
+    tit->SetTextSize(0.045);
+    tit->SetTextColor(kAlicePurple);
     tit->Draw();
 
-    Int_t    aliceBlue = TColor::GetColor(41,73,156);
-    Double_t x         = .93;
+    // TColor::GetColor(41,73,156);
+    Double_t x         = .95;
     Double_t y         = .93;
     // Put a nice label in the plot
     TString     eS;
@@ -1276,9 +1316,9 @@ struct dNdetaDrawer
                                       eS.Data(), 
                                       HasCent() ? "by centrality" : 
                                       fTrigString->GetTitle()));
-    tt->SetTextColor(aliceBlue);
+    tt->SetTextColor(kAliceBlue);
     tt->SetNDC();
-    tt->SetTextFont(132);
+    tt->SetTextFont(kFont);
     tt->SetTextAlign(33);
     tt->Draw();
     y -= tt->GetTextSize() + .01;
@@ -1287,9 +1327,9 @@ struct dNdetaDrawer
     Int_t nev = 0;
     if (fTriggers) nev = fTriggers->GetBinContent(1);
     TLatex* et = new TLatex(x, y, Form("%d events", nev));
-    et->SetTextColor(aliceBlue);
+    et->SetTextColor(kAliceBlue);
     et->SetNDC();
-    et->SetTextFont(132);
+    et->SetTextFont(kFont);
     et->SetTextAlign(33);
     et->Draw();
     y -= et->GetTextSize() + .01;
@@ -1298,9 +1338,9 @@ struct dNdetaDrawer
     if (fVtxAxis) { 
       TLatex* vt = new TLatex(x, y, fVtxAxis->GetTitle());
       vt->SetNDC();
-      vt->SetTextFont(132);
+      vt->SetTextFont(kFont);
       vt->SetTextAlign(33);
-      vt->SetTextColor(aliceBlue);
+      vt->SetTextColor(kAliceBlue);
       vt->Draw();
       y -= vt->GetTextSize() + .01;
     }
@@ -1318,9 +1358,9 @@ struct dNdetaDrawer
       if (corrs.Index("+") != kNPOS) corrs.Append("s");
       TLatex* em = new TLatex(x, y, corrs);
       em->SetNDC();
-      em->SetTextFont(132);
+      em->SetTextFont(kFont);
       em->SetTextAlign(33);
-      em->SetTextColor(aliceBlue);
+      em->SetTextColor(kAliceBlue);
       em->Draw();
       y -= em->GetTextSize() + .01;
     }
@@ -1330,9 +1370,9 @@ struct dNdetaDrawer
                                         fTrigString->GetTitle(), 
                                         fTriggerEff));
       ef->SetNDC();
-      ef->SetTextFont(132);
+      ef->SetTextFont(kFont);
       ef->SetTextAlign(33);
-      ef->SetTextColor(aliceBlue);
+      ef->SetTextColor(kAliceBlue);
       ef->Draw();
       y -= ef->GetTextSize() + .01;
     }
@@ -1344,27 +1384,33 @@ struct dNdetaDrawer
     // Mark the plot as preliminary
     TLatex* pt = new TLatex(.12, .93, "Work in progress");
     pt->SetNDC();
-    pt->SetTextFont(22);
+    pt->SetTextFont(62);
     // pt->SetTextSize();
-    pt->SetTextColor(TColor::GetColor(234,26,46));
+    pt->SetTextColor(kAliceRed);
     pt->SetTextAlign(13);
     pt->Draw();
+    TDatime now;
+    TLatex* dt = new TLatex(.12, .88, now.AsSQLString());
+    dt->SetNDC();
+    dt->SetTextFont(42);
+    dt->SetTextSize(0.04);
+    dt->SetTextColor(kAliceBlue); // kAliceRed);
+    dt->SetTextAlign(13);
+    dt->Draw();
+
+    TString savPath(gROOT->GetMacroPath());
+    gROOT->SetMacroPath(Form("%s:$(ALICE_ROOT)/PWGLF/FORWARD/analysis2/scripts",
+                            gROOT->GetMacroPath()));
+    // Always recompile 
+    if (!gROOT->GetClass("AliceLogo"))
+      gROOT->LoadMacro("AliceLogo.C++");
+    gROOT->SetMacroPath(savPath);
 
-    const char*  logos[] = { "ALICE.png", "FMD.png", 0 };
-    const char** logo    = logos;
-    while (*logo) {
-      if (gSystem->AccessPathName(*logo)) {
-       logo++;
-       continue;
-      }
-      TPad* pad = new TPad("logo", "logo", .12, .7, .25, .9, 0, 0, 0);
-      pad->SetFillStyle(0);
-      pad->Draw();
-      pad->cd();
-      TImage* i = TImage::Create();
-      i->ReadImage(*logo);
-      i->Draw();
-      break;
+    if (gROOT->GetClass("AliceLogo")) {
+      p1->cd();
+      p1->Range(0,0,1,1);
+      gROOT->ProcessLine("AliceLogo* al = new AliceLogo();");
+      gROOT->ProcessLine("al->Draw(0,.88,.5,.2, 0, 0);");
     }
     p1->cd();
   }
@@ -1385,7 +1431,7 @@ struct dNdetaDrawer
     // Make a sub-pad for the result itself
     TPad* p2 = new TPad("p2", "p2", 0, y1, 1.0, y2, 0, 0, 0);
     p2->SetTopMargin(0.001);
-    p2->SetRightMargin(0.03);
+    p2->SetRightMargin(kRightMargin);
     p2->SetBottomMargin(isBottom ? 1/yd * 0.07 : 0.0001);
     p2->SetGridx();
     p2->SetTicks(1,1);
@@ -1412,7 +1458,7 @@ struct dNdetaDrawer
     l2->SetFillColor(0);
     l2->SetFillStyle(0);
     l2->SetBorderSize(0);
-    l2->SetTextFont(132);
+    l2->SetTextFont(kFont);
 #endif
     // Make a nice band from 0.9 to 1.1
     TGraphErrors* band = new TGraphErrors(2);
@@ -1459,7 +1505,7 @@ struct dNdetaDrawer
     // Make a sub-pad for the result itself
     TPad* p3 = new TPad("p3", "p3", 0, y1, 1.0, y2, 0, 0, 0);
     p3->SetTopMargin(0.001);
-    p3->SetRightMargin(0.03);
+    p3->SetRightMargin(kRightMargin);
     p3->SetBottomMargin(isBottom ? 1/yd * 0.07 : 0.0001);
     p3->SetGridx();
     p3->SetTicks(1,1);
@@ -2047,7 +2093,7 @@ struct dNdetaDrawer
     Double_t s = 1/yd/1.2;
     // Info("FixAxis", "for %s, s=1/%f=%f", stack->GetName(), yd, s);
 
-    h->SetXTitle("#font[152]{#eta}");
+    h->SetXTitle("#it{#eta}");
     h->SetYTitle(ytitle);
     TAxis* xa = h->GetXaxis();
     TAxis* ya = h->GetYaxis();
@@ -2075,7 +2121,7 @@ struct dNdetaDrawer
       // ya->SetTicks("+-");
       ya->SetNdivisions(ynDiv);
       ya->SetTitleSize(s*ya->GetTitleSize());
-      ya->SetTitleOffset(ya->GetTitleOffset()/s);
+      ya->SetTitleOffset(1.15*ya->GetTitleOffset()/s);
       ya->SetLabelSize(s*ya->GetLabelSize());
     }
   }
@@ -2304,6 +2350,10 @@ struct dNdetaDrawer
   Bool_t       fMirror;       // Whether to mirror 
   Bool_t       fForceMB;      // Force min-bias
   Bool_t       fAddExec;      // Add code to do combined zooms
+  Bool_t       fSaveAsPDF;    // Flag whether to save as PDF
+  Bool_t       fSaveAsPNG;    // Flag whether to save as PNG
+  Bool_t       fSaveAsROOT;   // Flag whether to save as ROOT file
+  Bool_t       fSaveAsScript; // Flag whether to save as ROOT script
   /* @} */
   /** 
    * @{ 
@@ -2313,6 +2363,7 @@ struct dNdetaDrawer
   Double_t     fFwdSysErr;    // Systematic error in forward range
   Double_t     fCenSysErr;    // Systematic error in central range 
   TString      fTitle;        // Title on plot
+  TString      fBase;         // Base name of output 
   TString      fClusterScale; // Scaling of clusters to tracklets      
   TString      fFinalMC;      // Final MC correction file name
   TString      fEmpirical;    // Empirical correction file name
@@ -2328,6 +2379,7 @@ struct dNdetaDrawer
   TAxis*       fVtxAxis;      // Vertex cuts (read or set)
   TAxis*       fCentAxis;     // Centrality axis
   Float_t      fTriggerEff;   // Trigger efficiency 
+  Bool_t       fExtTriggerEff;// True if read externally 
   /* @} */
   /** 
    * @{ 
@@ -2342,8 +2394,23 @@ struct dNdetaDrawer
   /* @} */
   RangeParam*  fRangeParam;   // Parameter object for range zoom 
   Bool_t       fOld;
+
+  static const Float_t kRightMargin;
+  static const Int_t   kFont;
+  static const Int_t   kAliceBlue;
+  static const Int_t   kAliceRed;
+  static const Int_t   kAlicePurple;
+  static const Int_t   kAliceYellow;
 };
 
+const Float_t dNdetaDrawer::kRightMargin = 0.02;
+const Int_t   dNdetaDrawer::kFont        = 42; // 132 for serif
+const Int_t   dNdetaDrawer::kAliceBlue   = TColor::GetColor(40,   58, 68);
+const Int_t   dNdetaDrawer::kAliceRed    = TColor::GetColor(226,   0, 26);
+const Int_t   dNdetaDrawer::kAlicePurple = TColor::GetColor(202,  71, 67);
+const Int_t   dNdetaDrawer::kAliceYellow = TColor::GetColor(238, 125, 17);
+
+
 //____________________________________________________________________
 /** 
  * Function to calculate 
@@ -2443,7 +2510,7 @@ void
 Usage()
 {
   printf("Usage: DrawdNdeta(FILE,TITLE,REBIN,OTHERS,FLAGS,"
-        "SNN,SYS,TRIG,IPZMIN,IPZMAX)\n\n"
+        "SNN,SYS,TRIG,IPZMIN,IPZMAX,BASE,FMT)\n"
         "  const char* FILE   File name to open (\"forward_dndeta.root\")\n"
         "  const char* TITLE  Title to put on plot (\"\")\n"
         "  UShort_t    REBIN  Rebinning factor (1)\n"
@@ -2454,13 +2521,17 @@ Usage()
         "  UShort_t    TRIG   (optional) 1: INEL, 2: INEL>0, 4: NSD, ...\n"
         "  Float_t     EFF    (optional) Trigger efficiency\n"
         "  Float_t     IPZMIN (optional) Least z coordinate of IP\n"
-        "  Float_t     IPZMAX (optional) Largest z coordinate of IP\n\n"
-        " OTHERS is a bit mask of\n\n"
+        "  Float_t     IPZMAX (optional) Largest z coordinate of IP\n"
+        "  const char* BASE   (optional) base name of output files\n"
+        "  UShort_t    FMT    (optional) Output formats\n"
+        "\n"
+        " OTHERS is a bit mask of\n"
         "  0x1     Show UA5 data (INEL,NSD, ppbar, 900GeV)\n"
         "  0x2     Show CMS data (NSD, pp)\n"
         "  0x4     Show published ALICE data (INEL,INEL>0,NSD, pp)\n"
-        "  0x8     Show event genertor data\n\n"
-        " FLAGS is a bit mask of\n\n"
+        "  0x8     Show event genertor data\n"
+        "\n"
+        " FLAGS is a bit mask of\n"
         "  0x1     Show ratios of data to other data and possibly MC\n"
         "  0x2     Show left-right asymmetry\n"
         "  0x4     Show systematic error band\n"
@@ -2474,7 +2545,14 @@ Usage()
         "  0x400   Apply `Emperical' correction\n"
         "  0x800   Export results to script\n"
         "  0x1000  Add code to do combined zooms on eta axis\n"
-        "  0x2000  Assume old-style input\n\n"
+        "  0x2000  Assume old-style input\n"
+        "\n"
+        " FMD is a bit mask of\n"
+        "  0x1     Make PNG output\n"
+        "  0x2     Make PDF output\n"
+        "  0x4     Make ROOT file output\n"
+        "  0x8     Make ROOT script output\n"
+        "\n"
         "0x200 requires the file forward_dndetamc.root\n"
         "0x400 requires the file EmpiricalCorrection.root\n"
         "To specify that you want ratios, force MB, apply empirical "
@@ -2511,7 +2589,9 @@ DrawdNdeta(const char* filename="forward_dndeta.root",
           UShort_t    trg=0,
           Float_t     eff=0,
           Float_t     vzMin=999, 
-          Float_t     vzMax=-999)
+          Float_t     vzMax=-999,
+          const char* base="", 
+          UShort_t    outflg=0xf)
 {
   TString fname(filename);
   fname.ToLower();
@@ -2539,6 +2619,11 @@ DrawdNdeta(const char* filename="forward_dndeta.root",
   d.SetExport(flags & 0x800);
   d.SetAddExec(flags & 0x1000);
   d.SetOld(flags & 0x2000);
+  d.SetBase(base);
+  d.SetSaveAsPNG(outflg & 0x1);
+  d.SetSaveAsPDF(outflg & 0x2);
+  d.SetSaveAsROOT(outflg & 0x4);
+  d.SetSaveAsScript(outflg & 0x8);
   // d.fClusterScale = "1.06 -0.003*x +0.0119*x*x";
   // Do the below if your input data does not contain these settings 
   if (sNN > 0) d.SetSNN(sNN);     // Collision energy per nucleon pair (GeV)
index cce49df8acaeb1d407ba21b990d974d1c6eddb75..d77d01ecbc140cd5f50476a0fb28963534a12996 100644 (file)
@@ -11,7 +11,7 @@
 void DrawdNdetaSummary(const char* fname="forward_dndeta.root",
                       UShort_t what=0xf)
 {
-  gROOT->SetMacroPath(Form("%s:$ALICE_ROOT/../trunk/PWGLF/FORWARD/analysis2/scripts",
+  gROOT->SetMacroPath(Form("%s:$ALICE_ROOT/PWGLF/FORWARD/analysis2/scripts",
                           gROOT->GetMacroPath()));
   gROOT->LoadMacro("SummarydNdetaDrawer.C++g");
   
index a11dfb36bdf0380a99f99e1f3bc85c7d7f5f3940..a1a3d9c0e33b27b94a0f712d00f28cc0d1e5ace5 100644 (file)
@@ -35,2042 +35,2046 @@ class TH1F;
 class TGraph;
 #endif
 
-//____________________________________________________________________
-/**
- * Values used 
- * 
- * @ingroup pwglf_forward_otherdata 
- */
-enum { 
-  UA5, 
-  CMS, 
-  ALICE, 
-  WIP,
-  PYTHIA,
-  INEL, 
-  INELGt0, 
-  NSD
-};
-enum { 
-  /** Style used for UA5 data */
-  UA5Style   = 21, 
-  /** Style used for CMS data */
-  CMSStyle   = 29, 
-  /** Style used for ALICE published data */
-  ALICEStyle = 27,
-  /** Color used for ALICE work-in-progress data */
-  WIPStyle = 33,
-  /** Style used for Pythia data */
-  PYTHIAStyle = 28,
-  /** Color used for UA5 data */
-  UA5Color   = kBlue+1,
-  /** Color used for Pytia data */
-  PYTHIAColor = kGray+2,
-  /** Color used for CMS data */
-  CMSColor   = kGreen+1,
-  /** Color used for ALICE data */
-  ALICEColor = kMagenta+1,
-  /** Color used for ALICE work-in-progress data */
-  WIPColor = kMagenta+3
-}; 
-enum { 
-  /** Marker style INEL data */
-  INELStyle   = 22,
-  /** Marker style INEL>0 data */
-  INELGt0Style= 29,
-  /** Marker style NSD data */
-  NSDStyle    = 23,
-  /** Color used for UA5 data */
-  INELColor   = kBlue+1,
-  /** Color used for CMS data */
-  INELGt0Color = kGreen+1,
-  /** Color used for ALICE data */
-  NSDColor     = kMagenta+1
-};
-enum {
-  /** Style offset for mirror data */
-  MirrorOff  = 4
-};
-
-//____________________________________________________________________
-/** 
- * Set graph attributes based on trigger type and experiment. 
- * 
- * @param g        Graph
- * @param exp      Experiment 
- * @param mirror   True if mirrored data 
- * @param name     Name of graph 
- * @param title    Title of graph 
- * 
- * @ingroup pwglf_forward_otherdata
- */
-void
-SetGraphAttributes(TGraph* g, Int_t trig, Int_t exp, bool mirror,
-                  const Char_t* name, const Char_t* title)
+struct RefData
 {
-  Int_t color = 0;
-  switch (exp) { 
-  case UA5:       color = UA5Color;       break;
-  case CMS:       color = CMSColor;       break;
-  case ALICE:     color = ALICEColor;     break;
-  case WIP:       color = WIPColor;       break;
-  case PYTHIA:    color = PYTHIAColor;    break;
-  }
-  Int_t style = 0;
-  switch (exp) { 
-  case UA5:       style = UA5Style;        break;
-  case CMS:       style = CMSStyle;        break;
-  case ALICE:     style = ALICEStyle;      break;
-  case WIP:       style = WIPStyle;        break;
-  case PYTHIA:    style = PYTHIAStyle;     break;
-  }
-  Float_t size = g->GetMarkerSize();
-  switch (style) {
-  case 21: 
-  case 25: size *= 0.8; break;
-  case 27: size *= 1.4; break;
-  case 33: size *= 1.4; break;
-  }
+  //____________________________________________________________________
+  /**
+   * Values used 
+   * 
+   * @ingroup pwglf_forward_otherdata 
+   */
+  enum { 
+    UA5, 
+    CMS, 
+    ALICE, 
+    WIP,
+    PYTHIA,
+    INEL, 
+    INELGt0, 
+    NSD
+  };
+  enum { 
+    /** Style used for UA5 data */
+    UA5Style   = 21, 
+    /** Style used for CMS data */
+    CMSStyle   = 29, 
+    /** Style used for ALICE published data */
+    ALICEStyle = 27,
+    /** Color used for ALICE work-in-progress data */
+    WIPStyle = 33,
+    /** Style used for Pythia data */
+    PYTHIAStyle = 28,
+    /** Color used for UA5 data */
+    UA5Color   = kBlue+1,
+    /** Color used for Pytia data */
+    PYTHIAColor = kGray+2,
+    /** Color used for CMS data */
+    CMSColor   = kGreen+1,
+    /** Color used for ALICE data */
+    ALICEColor = kMagenta+1,
+    /** Color used for ALICE work-in-progress data */
+    WIPColor = kMagenta+3
+  }; 
+  enum { 
+    /** Marker style INEL data */
+    INELStyle   = 22,
+    /** Marker style INEL>0 data */
+    INELGt0Style= 29,
+    /** Marker style NSD data */
+    NSDStyle    = 23,
+    /** Color used for UA5 data */
+    INELColor   = kBlue+1,
+    /** Color used for CMS data */
+    INELGt0Color = kGreen+1,
+    /** Color used for ALICE data */
+    NSDColor     = kMagenta+1
+  };
+  enum {
+    /** Style offset for mirror data */
+    MirrorOff  = 4
+  };
+
+  //____________________________________________________________________
+  /** 
+   * Set graph attributes based on trigger type and experiment. 
+   * 
+   * @param g        Graph
+   * @param exp      Experiment 
+   * @param mirror   True if mirrored data 
+   * @param name     Name of graph 
+   * @param title    Title of graph 
+   * 
+   * @ingroup pwglf_forward_otherdata
+   */
+  static void SetGraphAttributes(TGraph* g, 
+                                Int_t /*trig*/, 
+                                Int_t exp, 
+                                bool mirror,
+                                const Char_t* name, 
+                                const Char_t* title)
+  {
+    Int_t color = 0;
+    switch (exp) { 
+    case UA5:       color = UA5Color;       break;
+    case CMS:       color = CMSColor;       break;
+    case ALICE:     color = ALICEColor;     break;
+    case WIP:       color = WIPColor;       break;
+    case PYTHIA:    color = PYTHIAColor;    break;
+    }
+    Int_t style = 0;
+    switch (exp) { 
+    case UA5:       style = UA5Style;        break;
+    case CMS:       style = CMSStyle;        break;
+    case ALICE:     style = ALICEStyle;      break;
+    case WIP:       style = WIPStyle;        break;
+    case PYTHIA:    style = PYTHIAStyle;     break;
+    }
+    Float_t size = g->GetMarkerSize();
+    switch (style) {
+    case 21: 
+    case 25: size *= 0.8; break;
+    case 27: size *= 1.4; break;
+    case 33: size *= 1.4; break;
+    }
     
-  if (mirror) style += MirrorOff;
+    if (mirror) style += MirrorOff;
 
-  g->SetName(name);
-  g->SetTitle(title);
-  g->SetMarkerStyle(style);
-  g->SetMarkerSize(size);
-  g->SetMarkerColor(color);
-  g->SetLineColor(color);
-  g->SetFillColor(0);
-  g->SetFillStyle(0);
-  g->GetHistogram()->SetStats(kFALSE);
-  g->GetHistogram()->SetXTitle("#eta");
-  g->GetHistogram()->SetYTitle("#frac{1}{N} #frac{dN_{ch}}{#eta}");
-}
+    g->SetName(name);
+    g->SetTitle(title);
+    g->SetMarkerStyle(style);
+    g->SetMarkerSize(size);
+    g->SetMarkerColor(color);
+    g->SetLineColor(color);
+    g->SetFillColor(0);
+    g->SetFillStyle(0);
+    g->GetHistogram()->SetStats(kFALSE);
+    g->GetHistogram()->SetXTitle("#eta");
+    g->GetHistogram()->SetYTitle("#frac{1}{N} #frac{dN_{ch}}{#eta}");
+  }
 
-//____________________________________________________________________
-/** 
- * Get PYTHIA 900GeV INEL data 
- * 
- * 
- * @return Data graph
- */
-TGraphAsymmErrors*
-Pythia900INEL()
-{
+  //____________________________________________________________________
+  /** 
+   * Get PYTHIA 900GeV INEL data 
+   * 
+   * 
+   * @return Data graph
+   */
+  static TGraphAsymmErrors* Pythia900INEL()
+  {
    
-  TGraphAsymmErrors *gre = new TGraphAsymmErrors(100);
-  SetGraphAttributes(gre, INEL, PYTHIA, false, "pythia900Inel",
-                    "Pythia INEL");
-  gre->SetPoint(0,-3.95,1.78199);
-  gre->SetPointError(0, 0, 0, 0.0145305, 0.0145305);
-  gre->SetPoint(1,-3.85,1.85486);
-  gre->SetPointError(1,0,0,0.0148246,0.0148246);
-  gre->SetPoint(2,-3.75,1.93886);
-  gre->SetPointError(2,0,0,0.0151566,0.0151566);
-  gre->SetPoint(3,-3.65,1.96055);
-  gre->SetPointError(3,0,0,0.0152411,0.0152411);
-  gre->SetPoint(4,-3.55,1.98756);
-  gre->SetPointError(4,0,0,0.0153458,0.0153458);
-  gre->SetPoint(5,-3.45,2.02844);
-  gre->SetPointError(5,0,0,0.0155028,0.0155028);
-  gre->SetPoint(6,-3.35,2.09585);
-  gre->SetPointError(6,0,0,0.0157583,0.0157583);
-  gre->SetPoint(7,-3.25,2.13732);
-  gre->SetPointError(7,0,0,0.0159134,0.0159134);
-  gre->SetPoint(8,-3.15,2.1686);
-  gre->SetPointError(8,0,0,0.0160295,0.0160295);
-  gre->SetPoint(9,-3.05,2.25296);
-  gre->SetPointError(9,0,0,0.0163383,0.0163383);
-  gre->SetPoint(10,-2.95,2.29265);
-  gre->SetPointError(10,0,0,0.0164815,0.0164815);
-  gre->SetPoint(11,-2.85,2.34799);
-  gre->SetPointError(11,0,0,0.0166792,0.0166792);
-  gre->SetPoint(12,-2.75,2.35652);
-  gre->SetPointError(12,0,0,0.0167095,0.0167095);
-  gre->SetPoint(13,-2.65,2.40545);
-  gre->SetPointError(13,0,0,0.0168821,0.0168821);
-  gre->SetPoint(14,-2.55,2.43934);
-  gre->SetPointError(14,0,0,0.0170006,0.0170006);
-  gre->SetPoint(15,-2.45,2.45735);
-  gre->SetPointError(15,0,0,0.0170633,0.0170633);
-  gre->SetPoint(16,-2.35,2.48945);
-  gre->SetPointError(16,0,0,0.0171744,0.0171744);
-  gre->SetPoint(17,-2.25,2.51635);
-  gre->SetPointError(17,0,0,0.0172669,0.0172669);
-  gre->SetPoint(18,-2.15,2.55047);
-  gre->SetPointError(18,0,0,0.0173836,0.0173836);
-  gre->SetPoint(19,-2.05,2.58021);
-  gre->SetPointError(19,0,0,0.0174846,0.0174846);
-  gre->SetPoint(20,-1.95,2.58732);
-  gre->SetPointError(20,0,0,0.0175087,0.0175087);
-  gre->SetPoint(21,-1.85,2.60095);
-  gre->SetPointError(21,0,0,0.0175547,0.0175547);
-  gre->SetPoint(22,-1.75,2.59941);
-  gre->SetPointError(22,0,0,0.0175495,0.0175495);
-  gre->SetPoint(23,-1.65,2.63021);
-  gre->SetPointError(23,0,0,0.0176532,0.0176532);
-  gre->SetPoint(24,-1.55,2.61043);
-  gre->SetPointError(24,0,0,0.0175867,0.0175867);
-  gre->SetPoint(25,-1.45,2.61363);
-  gre->SetPointError(25,0,0,0.0175975,0.0175975);
-  gre->SetPoint(26,-1.35,2.60829);
-  gre->SetPointError(26,0,0,0.0175795,0.0175795);
-  gre->SetPoint(27,-1.25,2.61434);
-  gre->SetPointError(27,0,0,0.0175999,0.0175999);
-  gre->SetPoint(28,-1.15,2.61327);
-  gre->SetPointError(28,0,0,0.0175963,0.0175963);
-  gre->SetPoint(29,-1.05,2.57145);
-  gre->SetPointError(29,0,0,0.0174549,0.0174549);
-  gre->SetPoint(30,-0.95,2.55723);
-  gre->SetPointError(30,0,0,0.0174066,0.0174066);
-  gre->SetPoint(31,-0.85,2.57879);
-  gre->SetPointError(31,0,0,0.0174798,0.0174798);
-  gre->SetPoint(32,-0.75,2.516);
-  gre->SetPointError(32,0,0,0.0172657,0.0172657);
-  gre->SetPoint(33,-0.65,2.53709);
-  gre->SetPointError(33,0,0,0.0173379,0.0173379);
-  gre->SetPoint(34,-0.55,2.51197);
-  gre->SetPointError(34,0,0,0.0172519,0.0172519);
-  gre->SetPoint(35,-0.45,2.44052);
-  gre->SetPointError(35,0,0,0.0170047,0.0170047);
-  gre->SetPoint(36,-0.35,2.44882);
-  gre->SetPointError(36,0,0,0.0170336,0.0170336);
-  gre->SetPoint(37,-0.25,2.45308);
-  gre->SetPointError(37,0,0,0.0170484,0.0170484);
-  gre->SetPoint(38,-0.15,2.4622);
-  gre->SetPointError(38,0,0,0.0170801,0.0170801);
-  gre->SetPoint(39,-0.05,2.45735);
-  gre->SetPointError(39,0,0,0.0170633,0.0170633);
-  gre->SetPoint(40,0.05,2.49254);
-  gre->SetPointError(40,0,0,0.017185,0.017185);
-  gre->SetPoint(41,0.15,2.49479);
-  gre->SetPointError(41,0,0,0.0171928,0.0171928);
-  gre->SetPoint(42,0.25,2.49289);
-  gre->SetPointError(42,0,0,0.0171862,0.0171862);
-  gre->SetPoint(43,0.35,2.4628);
-  gre->SetPointError(43,0,0,0.0170822,0.0170822);
-  gre->SetPoint(44,0.45,2.51422);
-  gre->SetPointError(44,0,0,0.0172596,0.0172596);
-  gre->SetPoint(45,0.55,2.51268);
-  gre->SetPointError(45,0,0,0.0172543,0.0172543);
-  gre->SetPoint(46,0.65,2.51066);
-  gre->SetPointError(46,0,0,0.0172474,0.0172474);
-  gre->SetPoint(47,0.75,2.53661);
-  gre->SetPointError(47,0,0,0.0173363,0.0173363);
-  gre->SetPoint(48,0.85,2.54479);
-  gre->SetPointError(48,0,0,0.0173642,0.0173642);
-  gre->SetPoint(49,0.95,2.55391);
-  gre->SetPointError(49,0,0,0.0173953,0.0173953);
-  gre->SetPoint(50,1.05,2.5872);
-  gre->SetPointError(50,0,0,0.0175083,0.0175083);
-  gre->SetPoint(51,1.15,2.60344);
-  gre->SetPointError(51,0,0,0.0175631,0.0175631);
-  gre->SetPoint(52,1.25,2.60616);
-  gre->SetPointError(52,0,0,0.0175723,0.0175723);
-  gre->SetPoint(53,1.35,2.62156);
-  gre->SetPointError(53,0,0,0.0176242,0.0176242);
-  gre->SetPoint(54,1.45,2.61173);
-  gre->SetPointError(54,0,0,0.0175911,0.0175911);
-  gre->SetPoint(55,1.55,2.60415);
-  gre->SetPointError(55,0,0,0.0175655,0.0175655);
-  gre->SetPoint(56,1.65,2.60723);
-  gre->SetPointError(56,0,0,0.0175759,0.0175759);
-  gre->SetPoint(57,1.75,2.60427);
-  gre->SetPointError(57,0,0,0.0175659,0.0175659);
-  gre->SetPoint(58,1.85,2.56765);
-  gre->SetPointError(58,0,0,0.017442,0.017442);
-  gre->SetPoint(59,1.95,2.58602);
-  gre->SetPointError(59,0,0,0.0175043,0.0175043);
-  gre->SetPoint(60,2.05,2.55936);
-  gre->SetPointError(60,0,0,0.0174138,0.0174138);
-  gre->SetPoint(61,2.15,2.54858);
-  gre->SetPointError(61,0,0,0.0173771,0.0173771);
-  gre->SetPoint(62,2.25,2.5205);
-  gre->SetPointError(62,0,0,0.0172811,0.0172811);
-  gre->SetPoint(63,2.35,2.49491);
-  gre->SetPointError(63,0,0,0.0171932,0.0171932);
-  gre->SetPoint(64,2.45,2.42773);
-  gre->SetPointError(64,0,0,0.0169601,0.0169601);
-  gre->SetPoint(65,2.55,2.42879);
-  gre->SetPointError(65,0,0,0.0169638,0.0169638);
-  gre->SetPoint(66,2.65,2.39372);
-  gre->SetPointError(66,0,0,0.0168409,0.0168409);
-  gre->SetPoint(67,2.75,2.38412);
-  gre->SetPointError(67,0,0,0.0168071,0.0168071);
-  gre->SetPoint(68,2.85,2.31896);
-  gre->SetPointError(68,0,0,0.0165758,0.0165758);
-  gre->SetPoint(69,2.95,2.26209);
-  gre->SetPointError(69,0,0,0.0163713,0.0163713);
-  gre->SetPoint(70,3.05,2.24313);
-  gre->SetPointError(70,0,0,0.0163026,0.0163026);
-  gre->SetPoint(71,3.15,2.20403);
-  gre->SetPointError(71,0,0,0.0161599,0.0161599);
-  gre->SetPoint(72,3.25,2.12855);
-  gre->SetPointError(72,0,0,0.0158808,0.0158808);
-  gre->SetPoint(73,3.35,2.13104);
-  gre->SetPointError(73,0,0,0.01589,0.01589);
-  gre->SetPoint(74,3.45,2.06339);
-  gre->SetPointError(74,0,0,0.0156358,0.0156358);
-  gre->SetPoint(75,3.55,1.9846);
-  gre->SetPointError(75,0,0,0.0153343,0.0153343);
-  gre->SetPoint(76,3.65,1.95391);
-  gre->SetPointError(76,0,0,0.0152153,0.0152153);
-  gre->SetPoint(77,3.75,1.87998);
-  gre->SetPointError(77,0,0,0.0149247,0.0149247);
-  gre->SetPoint(78,3.85,1.86256);
-  gre->SetPointError(78,0,0,0.0148554,0.0148554);
-  gre->SetPoint(79,3.95,1.77239);
-  gre->SetPointError(79,0,0,0.0144913,0.0144913);
-  gre->SetPoint(80,4.05,1.72855);
-  gre->SetPointError(80,0,0,0.014311,0.014311);
-  gre->SetPoint(81,4.15,1.69479);
-  gre->SetPointError(81,0,0,0.0141705,0.0141705);
-  gre->SetPoint(82,4.25,1.64147);
-  gre->SetPointError(82,0,0,0.0139459,0.0139459);
-  gre->SetPoint(83,4.35,1.58116);
-  gre->SetPointError(83,0,0,0.0136873,0.0136873);
-  gre->SetPoint(84,4.45,1.55735);
-  gre->SetPointError(84,0,0,0.0135838,0.0135838);
-  gre->SetPoint(85,4.55,1.48815);
-  gre->SetPointError(85,0,0,0.0132786,0.0132786);
-  gre->SetPoint(86,4.65,1.40853);
-  gre->SetPointError(86,0,0,0.0129185,0.0129185);
-  gre->SetPoint(87,4.75,1.36979);
-  gre->SetPointError(87,0,0,0.0127396,0.0127396);
-  gre->SetPoint(88,4.85,1.32666);
-  gre->SetPointError(88,0,0,0.0125374,0.0125374);
-  gre->SetPoint(89,4.95,1.29763);
-  gre->SetPointError(89,0,0,0.0123995,0.0123995);
-  gre->SetPoint(90,5.05,1.25533);
-  gre->SetPointError(90,0,0,0.0121957,0.0121957);
-  gre->SetPoint(91,5.15,1.20912);
-  gre->SetPointError(91,0,0,0.0119692,0.0119692);
-  gre->SetPoint(92,5.25,1.18839);
-  gre->SetPointError(92,0,0,0.0118661,0.0118661);
-  gre->SetPoint(93,5.35,1.15948);
-  gre->SetPointError(93,0,0,0.0117209,0.0117209);
-  gre->SetPoint(94,5.45,1.1141);
-  gre->SetPointError(94,0,0,0.0114892,0.0114892);
-  gre->SetPoint(95,5.55,1.06315);
-  gre->SetPointError(95,0,0,0.0112235,0.0112235);
-  gre->SetPoint(96,5.65,1.05213);
-  gre->SetPointError(96,0,0,0.0111651,0.0111651);
-  gre->SetPoint(97,5.75,1.02476);
-  gre->SetPointError(97,0,0,0.011019,0.011019);
-  gre->SetPoint(98,5.85,0.984834);
-  gre->SetPointError(98,0,0,0.0108022,0.0108022);
-  gre->SetPoint(99,5.95,0.952844);
-  gre->SetPointError(99,0,0,0.0106253,0.0106253);
+    TGraphAsymmErrors *gre = new TGraphAsymmErrors(100);
+    SetGraphAttributes(gre, INEL, PYTHIA, false, "pythia900Inel",
+                      "Pythia");
+    gre->SetPoint(0,-3.95,1.78199);
+    gre->SetPointError(0, 0, 0, 0.0145305, 0.0145305);
+    gre->SetPoint(1,-3.85,1.85486);
+    gre->SetPointError(1,0,0,0.0148246,0.0148246);
+    gre->SetPoint(2,-3.75,1.93886);
+    gre->SetPointError(2,0,0,0.0151566,0.0151566);
+    gre->SetPoint(3,-3.65,1.96055);
+    gre->SetPointError(3,0,0,0.0152411,0.0152411);
+    gre->SetPoint(4,-3.55,1.98756);
+    gre->SetPointError(4,0,0,0.0153458,0.0153458);
+    gre->SetPoint(5,-3.45,2.02844);
+    gre->SetPointError(5,0,0,0.0155028,0.0155028);
+    gre->SetPoint(6,-3.35,2.09585);
+    gre->SetPointError(6,0,0,0.0157583,0.0157583);
+    gre->SetPoint(7,-3.25,2.13732);
+    gre->SetPointError(7,0,0,0.0159134,0.0159134);
+    gre->SetPoint(8,-3.15,2.1686);
+    gre->SetPointError(8,0,0,0.0160295,0.0160295);
+    gre->SetPoint(9,-3.05,2.25296);
+    gre->SetPointError(9,0,0,0.0163383,0.0163383);
+    gre->SetPoint(10,-2.95,2.29265);
+    gre->SetPointError(10,0,0,0.0164815,0.0164815);
+    gre->SetPoint(11,-2.85,2.34799);
+    gre->SetPointError(11,0,0,0.0166792,0.0166792);
+    gre->SetPoint(12,-2.75,2.35652);
+    gre->SetPointError(12,0,0,0.0167095,0.0167095);
+    gre->SetPoint(13,-2.65,2.40545);
+    gre->SetPointError(13,0,0,0.0168821,0.0168821);
+    gre->SetPoint(14,-2.55,2.43934);
+    gre->SetPointError(14,0,0,0.0170006,0.0170006);
+    gre->SetPoint(15,-2.45,2.45735);
+    gre->SetPointError(15,0,0,0.0170633,0.0170633);
+    gre->SetPoint(16,-2.35,2.48945);
+    gre->SetPointError(16,0,0,0.0171744,0.0171744);
+    gre->SetPoint(17,-2.25,2.51635);
+    gre->SetPointError(17,0,0,0.0172669,0.0172669);
+    gre->SetPoint(18,-2.15,2.55047);
+    gre->SetPointError(18,0,0,0.0173836,0.0173836);
+    gre->SetPoint(19,-2.05,2.58021);
+    gre->SetPointError(19,0,0,0.0174846,0.0174846);
+    gre->SetPoint(20,-1.95,2.58732);
+    gre->SetPointError(20,0,0,0.0175087,0.0175087);
+    gre->SetPoint(21,-1.85,2.60095);
+    gre->SetPointError(21,0,0,0.0175547,0.0175547);
+    gre->SetPoint(22,-1.75,2.59941);
+    gre->SetPointError(22,0,0,0.0175495,0.0175495);
+    gre->SetPoint(23,-1.65,2.63021);
+    gre->SetPointError(23,0,0,0.0176532,0.0176532);
+    gre->SetPoint(24,-1.55,2.61043);
+    gre->SetPointError(24,0,0,0.0175867,0.0175867);
+    gre->SetPoint(25,-1.45,2.61363);
+    gre->SetPointError(25,0,0,0.0175975,0.0175975);
+    gre->SetPoint(26,-1.35,2.60829);
+    gre->SetPointError(26,0,0,0.0175795,0.0175795);
+    gre->SetPoint(27,-1.25,2.61434);
+    gre->SetPointError(27,0,0,0.0175999,0.0175999);
+    gre->SetPoint(28,-1.15,2.61327);
+    gre->SetPointError(28,0,0,0.0175963,0.0175963);
+    gre->SetPoint(29,-1.05,2.57145);
+    gre->SetPointError(29,0,0,0.0174549,0.0174549);
+    gre->SetPoint(30,-0.95,2.55723);
+    gre->SetPointError(30,0,0,0.0174066,0.0174066);
+    gre->SetPoint(31,-0.85,2.57879);
+    gre->SetPointError(31,0,0,0.0174798,0.0174798);
+    gre->SetPoint(32,-0.75,2.516);
+    gre->SetPointError(32,0,0,0.0172657,0.0172657);
+    gre->SetPoint(33,-0.65,2.53709);
+    gre->SetPointError(33,0,0,0.0173379,0.0173379);
+    gre->SetPoint(34,-0.55,2.51197);
+    gre->SetPointError(34,0,0,0.0172519,0.0172519);
+    gre->SetPoint(35,-0.45,2.44052);
+    gre->SetPointError(35,0,0,0.0170047,0.0170047);
+    gre->SetPoint(36,-0.35,2.44882);
+    gre->SetPointError(36,0,0,0.0170336,0.0170336);
+    gre->SetPoint(37,-0.25,2.45308);
+    gre->SetPointError(37,0,0,0.0170484,0.0170484);
+    gre->SetPoint(38,-0.15,2.4622);
+    gre->SetPointError(38,0,0,0.0170801,0.0170801);
+    gre->SetPoint(39,-0.05,2.45735);
+    gre->SetPointError(39,0,0,0.0170633,0.0170633);
+    gre->SetPoint(40,0.05,2.49254);
+    gre->SetPointError(40,0,0,0.017185,0.017185);
+    gre->SetPoint(41,0.15,2.49479);
+    gre->SetPointError(41,0,0,0.0171928,0.0171928);
+    gre->SetPoint(42,0.25,2.49289);
+    gre->SetPointError(42,0,0,0.0171862,0.0171862);
+    gre->SetPoint(43,0.35,2.4628);
+    gre->SetPointError(43,0,0,0.0170822,0.0170822);
+    gre->SetPoint(44,0.45,2.51422);
+    gre->SetPointError(44,0,0,0.0172596,0.0172596);
+    gre->SetPoint(45,0.55,2.51268);
+    gre->SetPointError(45,0,0,0.0172543,0.0172543);
+    gre->SetPoint(46,0.65,2.51066);
+    gre->SetPointError(46,0,0,0.0172474,0.0172474);
+    gre->SetPoint(47,0.75,2.53661);
+    gre->SetPointError(47,0,0,0.0173363,0.0173363);
+    gre->SetPoint(48,0.85,2.54479);
+    gre->SetPointError(48,0,0,0.0173642,0.0173642);
+    gre->SetPoint(49,0.95,2.55391);
+    gre->SetPointError(49,0,0,0.0173953,0.0173953);
+    gre->SetPoint(50,1.05,2.5872);
+    gre->SetPointError(50,0,0,0.0175083,0.0175083);
+    gre->SetPoint(51,1.15,2.60344);
+    gre->SetPointError(51,0,0,0.0175631,0.0175631);
+    gre->SetPoint(52,1.25,2.60616);
+    gre->SetPointError(52,0,0,0.0175723,0.0175723);
+    gre->SetPoint(53,1.35,2.62156);
+    gre->SetPointError(53,0,0,0.0176242,0.0176242);
+    gre->SetPoint(54,1.45,2.61173);
+    gre->SetPointError(54,0,0,0.0175911,0.0175911);
+    gre->SetPoint(55,1.55,2.60415);
+    gre->SetPointError(55,0,0,0.0175655,0.0175655);
+    gre->SetPoint(56,1.65,2.60723);
+    gre->SetPointError(56,0,0,0.0175759,0.0175759);
+    gre->SetPoint(57,1.75,2.60427);
+    gre->SetPointError(57,0,0,0.0175659,0.0175659);
+    gre->SetPoint(58,1.85,2.56765);
+    gre->SetPointError(58,0,0,0.017442,0.017442);
+    gre->SetPoint(59,1.95,2.58602);
+    gre->SetPointError(59,0,0,0.0175043,0.0175043);
+    gre->SetPoint(60,2.05,2.55936);
+    gre->SetPointError(60,0,0,0.0174138,0.0174138);
+    gre->SetPoint(61,2.15,2.54858);
+    gre->SetPointError(61,0,0,0.0173771,0.0173771);
+    gre->SetPoint(62,2.25,2.5205);
+    gre->SetPointError(62,0,0,0.0172811,0.0172811);
+    gre->SetPoint(63,2.35,2.49491);
+    gre->SetPointError(63,0,0,0.0171932,0.0171932);
+    gre->SetPoint(64,2.45,2.42773);
+    gre->SetPointError(64,0,0,0.0169601,0.0169601);
+    gre->SetPoint(65,2.55,2.42879);
+    gre->SetPointError(65,0,0,0.0169638,0.0169638);
+    gre->SetPoint(66,2.65,2.39372);
+    gre->SetPointError(66,0,0,0.0168409,0.0168409);
+    gre->SetPoint(67,2.75,2.38412);
+    gre->SetPointError(67,0,0,0.0168071,0.0168071);
+    gre->SetPoint(68,2.85,2.31896);
+    gre->SetPointError(68,0,0,0.0165758,0.0165758);
+    gre->SetPoint(69,2.95,2.26209);
+    gre->SetPointError(69,0,0,0.0163713,0.0163713);
+    gre->SetPoint(70,3.05,2.24313);
+    gre->SetPointError(70,0,0,0.0163026,0.0163026);
+    gre->SetPoint(71,3.15,2.20403);
+    gre->SetPointError(71,0,0,0.0161599,0.0161599);
+    gre->SetPoint(72,3.25,2.12855);
+    gre->SetPointError(72,0,0,0.0158808,0.0158808);
+    gre->SetPoint(73,3.35,2.13104);
+    gre->SetPointError(73,0,0,0.01589,0.01589);
+    gre->SetPoint(74,3.45,2.06339);
+    gre->SetPointError(74,0,0,0.0156358,0.0156358);
+    gre->SetPoint(75,3.55,1.9846);
+    gre->SetPointError(75,0,0,0.0153343,0.0153343);
+    gre->SetPoint(76,3.65,1.95391);
+    gre->SetPointError(76,0,0,0.0152153,0.0152153);
+    gre->SetPoint(77,3.75,1.87998);
+    gre->SetPointError(77,0,0,0.0149247,0.0149247);
+    gre->SetPoint(78,3.85,1.86256);
+    gre->SetPointError(78,0,0,0.0148554,0.0148554);
+    gre->SetPoint(79,3.95,1.77239);
+    gre->SetPointError(79,0,0,0.0144913,0.0144913);
+    gre->SetPoint(80,4.05,1.72855);
+    gre->SetPointError(80,0,0,0.014311,0.014311);
+    gre->SetPoint(81,4.15,1.69479);
+    gre->SetPointError(81,0,0,0.0141705,0.0141705);
+    gre->SetPoint(82,4.25,1.64147);
+    gre->SetPointError(82,0,0,0.0139459,0.0139459);
+    gre->SetPoint(83,4.35,1.58116);
+    gre->SetPointError(83,0,0,0.0136873,0.0136873);
+    gre->SetPoint(84,4.45,1.55735);
+    gre->SetPointError(84,0,0,0.0135838,0.0135838);
+    gre->SetPoint(85,4.55,1.48815);
+    gre->SetPointError(85,0,0,0.0132786,0.0132786);
+    gre->SetPoint(86,4.65,1.40853);
+    gre->SetPointError(86,0,0,0.0129185,0.0129185);
+    gre->SetPoint(87,4.75,1.36979);
+    gre->SetPointError(87,0,0,0.0127396,0.0127396);
+    gre->SetPoint(88,4.85,1.32666);
+    gre->SetPointError(88,0,0,0.0125374,0.0125374);
+    gre->SetPoint(89,4.95,1.29763);
+    gre->SetPointError(89,0,0,0.0123995,0.0123995);
+    gre->SetPoint(90,5.05,1.25533);
+    gre->SetPointError(90,0,0,0.0121957,0.0121957);
+    gre->SetPoint(91,5.15,1.20912);
+    gre->SetPointError(91,0,0,0.0119692,0.0119692);
+    gre->SetPoint(92,5.25,1.18839);
+    gre->SetPointError(92,0,0,0.0118661,0.0118661);
+    gre->SetPoint(93,5.35,1.15948);
+    gre->SetPointError(93,0,0,0.0117209,0.0117209);
+    gre->SetPoint(94,5.45,1.1141);
+    gre->SetPointError(94,0,0,0.0114892,0.0114892);
+    gre->SetPoint(95,5.55,1.06315);
+    gre->SetPointError(95,0,0,0.0112235,0.0112235);
+    gre->SetPoint(96,5.65,1.05213);
+    gre->SetPointError(96,0,0,0.0111651,0.0111651);
+    gre->SetPoint(97,5.75,1.02476);
+    gre->SetPointError(97,0,0,0.011019,0.011019);
+    gre->SetPoint(98,5.85,0.984834);
+    gre->SetPointError(98,0,0,0.0108022,0.0108022);
+    gre->SetPoint(99,5.95,0.952844);
+    gre->SetPointError(99,0,0,0.0106253,0.0106253);
 
-  return gre;
-}
+    return gre;
+  }
 
-//____________________________________________________________________
-/** 
- * Get PYTHIA 900GeV NSD data 
- * 
- * 
- * @return Data graph
- */
-TGraphAsymmErrors*
-Pythia900NSD()
-{
+  //____________________________________________________________________
+  /** 
+   * Get PYTHIA 900GeV NSD data 
+   * 
+   * 
+   * @return Data graph
+   */
+  static TGraphAsymmErrors* Pythia900NSD()
+  {
    
-  TGraphAsymmErrors *gre = new TGraphAsymmErrors(100);
-  SetGraphAttributes(gre, NSD, PYTHIA, false, "pythia900NSD",
-                    "Pythia NSD");
+    TGraphAsymmErrors *gre = new TGraphAsymmErrors(100);
+    SetGraphAttributes(gre, NSD, PYTHIA, false, "pythia900NSD",
+                      "Pythia");
 
-  gre->SetPoint(0,-3.95,2.11766);
-  gre->SetPointError(0,0,0,0.0179417,0.0179417);
-  gre->SetPoint(1,-3.85,2.20415);
-  gre->SetPointError(1,0,0,0.0183045,0.0183045);
-  gre->SetPoint(2,-3.75,2.30949);
-  gre->SetPointError(2,0,0,0.0187368,0.0187368);
-  gre->SetPoint(3,-3.65,2.34582);
-  gre->SetPointError(3,0,0,0.0188836,0.0188836);
-  gre->SetPoint(4,-3.55,2.38322);
-  gre->SetPointError(4,0,0,0.0190335,0.0190335);
-  gre->SetPoint(5,-3.45,2.43353);
-  gre->SetPointError(5,0,0,0.0192334,0.0192334);
-  gre->SetPoint(6,-3.35,2.51106);
-  gre->SetPointError(6,0,0,0.0195373,0.0195373);
-  gre->SetPoint(7,-3.25,2.56578);
-  gre->SetPointError(7,0,0,0.0197491,0.0197491);
-  gre->SetPoint(8,-3.15,2.60515);
-  gre->SetPointError(8,0,0,0.0199,0.0199);
-  gre->SetPoint(9,-3.05,2.7105);
-  gre->SetPointError(9,0,0,0.0202984,0.0202984);
-  gre->SetPoint(10,-2.95,2.77008);
-  gre->SetPointError(10,0,0,0.0205203,0.0205203);
-  gre->SetPoint(11,-2.85,2.83332);
-  gre->SetPointError(11,0,0,0.0207532,0.0207532);
-  gre->SetPoint(12,-2.75,2.84715);
-  gre->SetPointError(12,0,0,0.0208038,0.0208038);
-  gre->SetPoint(13,-2.65,2.91693);
-  gre->SetPointError(13,0,0,0.0210571,0.0210571);
-  gre->SetPoint(14,-2.55,2.95797);
-  gre->SetPointError(14,0,0,0.0212048,0.0212048);
-  gre->SetPoint(15,-2.45,2.97499);
-  gre->SetPointError(15,0,0,0.0212657,0.0212657);
-  gre->SetPoint(16,-2.35,3.01345);
-  gre->SetPointError(16,0,0,0.0214027,0.0214027);
-  gre->SetPoint(17,-2.25,3.04659);
-  gre->SetPointError(17,0,0,0.0215201,0.0215201);
-  gre->SetPoint(18,-2.15,3.09341);
-  gre->SetPointError(18,0,0,0.0216848,0.0216848);
-  gre->SetPoint(19,-2.05,3.13187);
-  gre->SetPointError(19,0,0,0.0218192,0.0218192);
-  gre->SetPoint(20,-1.95,3.13917);
-  gre->SetPointError(20,0,0,0.0218446,0.0218446);
-  gre->SetPoint(21,-1.85,3.16911);
-  gre->SetPointError(21,0,0,0.0219485,0.0219485);
-  gre->SetPoint(22,-1.75,3.15665);
-  gre->SetPointError(22,0,0,0.0219053,0.0219053);
-  gre->SetPoint(23,-1.65,3.19693);
-  gre->SetPointError(23,0,0,0.0220446,0.0220446);
-  gre->SetPoint(24,-1.55,3.17002);
-  gre->SetPointError(24,0,0,0.0219517,0.0219517);
-  gre->SetPoint(25,-1.45,3.18538);
-  gre->SetPointError(25,0,0,0.0220048,0.0220048);
-  gre->SetPoint(26,-1.35,3.18066);
-  gre->SetPointError(26,0,0,0.0219885,0.0219885);
-  gre->SetPoint(27,-1.25,3.19754);
-  gre->SetPointError(27,0,0,0.0220467,0.0220467);
-  gre->SetPoint(28,-1.15,3.18021);
-  gre->SetPointError(28,0,0,0.0219869,0.0219869);
-  gre->SetPoint(29,-1.05,3.13111);
-  gre->SetPointError(29,0,0,0.0218165,0.0218165);
-  gre->SetPoint(30,-0.95,3.12153);
-  gre->SetPointError(30,0,0,0.0217831,0.0217831);
-  gre->SetPoint(31,-0.85,3.14798);
-  gre->SetPointError(31,0,0,0.0218752,0.0218752);
-  gre->SetPoint(32,-0.75,3.07912);
-  gre->SetPointError(32,0,0,0.0216347,0.0216347);
-  gre->SetPoint(33,-0.65,3.10207);
-  gre->SetPointError(33,0,0,0.0217151,0.0217151);
-  gre->SetPoint(34,-0.55,3.06346);
-  gre->SetPointError(34,0,0,0.0215796,0.0215796);
-  gre->SetPoint(35,-0.45,2.97651);
-  gre->SetPointError(35,0,0,0.0212711,0.0212711);
-  gre->SetPoint(36,-0.35,2.98715);
-  gre->SetPointError(36,0,0,0.0213091,0.0213091);
-  gre->SetPoint(37,-0.25,2.98548);
-  gre->SetPointError(37,0,0,0.0213032,0.0213032);
-  gre->SetPoint(38,-0.15,3.00555);
-  gre->SetPointError(38,0,0,0.0213746,0.0213746);
-  gre->SetPoint(39,-0.05,3.01193);
-  gre->SetPointError(39,0,0,0.0213973,0.0213973);
-  gre->SetPoint(40,0.05,3.04385);
-  gre->SetPointError(40,0,0,0.0215104,0.0215104);
-  gre->SetPoint(41,0.15,3.04933);
-  gre->SetPointError(41,0,0,0.0215297,0.0215297);
-  gre->SetPoint(42,0.25,3.04659);
-  gre->SetPointError(42,0,0,0.0215201,0.0215201);
-  gre->SetPoint(43,0.35,3.00813);
-  gre->SetPointError(43,0,0,0.0213838,0.0213838);
-  gre->SetPoint(44,0.45,3.06666);
-  gre->SetPointError(44,0,0,0.0215908,0.0215908);
-  gre->SetPoint(45,0.55,3.07167);
-  gre->SetPointError(45,0,0,0.0216085,0.0216085);
-  gre->SetPoint(46,0.65,3.0659);
-  gre->SetPointError(46,0,0,0.0215881,0.0215881);
-  gre->SetPoint(47,0.75,3.09159);
-  gre->SetPointError(47,0,0,0.0216784,0.0216784);
-  gre->SetPoint(48,0.85,3.10846);
-  gre->SetPointError(48,0,0,0.0217375,0.0217375);
-  gre->SetPoint(49,0.95,3.11925);
-  gre->SetPointError(49,0,0,0.0217752,0.0217752);
-  gre->SetPoint(50,1.05,3.15558);
-  gre->SetPointError(50,0,0,0.0219016,0.0219016);
-  gre->SetPoint(51,1.15,3.16911);
-  gre->SetPointError(51,0,0,0.0219485,0.0219485);
-  gre->SetPoint(52,1.25,3.17246);
-  gre->SetPointError(52,0,0,0.0219601,0.0219601);
-  gre->SetPoint(53,1.35,3.19146);
-  gre->SetPointError(53,0,0,0.0220258,0.0220258);
-  gre->SetPoint(54,1.45,3.17458);
-  gre->SetPointError(54,0,0,0.0219675,0.0219675);
-  gre->SetPoint(55,1.55,3.16866);
-  gre->SetPointError(55,0,0,0.0219469,0.0219469);
-  gre->SetPoint(56,1.65,3.16592);
-  gre->SetPointError(56,0,0,0.0219375,0.0219375);
-  gre->SetPoint(57,1.75,3.16394);
-  gre->SetPointError(57,0,0,0.0219306,0.0219306);
-  gre->SetPoint(58,1.85,3.11956);
-  gre->SetPointError(58,0,0,0.0217762,0.0217762);
-  gre->SetPoint(59,1.95,3.14646);
-  gre->SetPointError(59,0,0,0.02187,0.02187);
-  gre->SetPoint(60,2.05,3.10147);
-  gre->SetPointError(60,0,0,0.021713,0.021713);
-  gre->SetPoint(61,2.15,3.09356);
-  gre->SetPointError(61,0,0,0.0216853,0.0216853);
-  gre->SetPoint(62,2.25,3.05328);
-  gre->SetPointError(62,0,0,0.0215437,0.0215437);
-  gre->SetPoint(63,2.35,3.01953);
-  gre->SetPointError(63,0,0,0.0214243,0.0214243);
-  gre->SetPoint(64,2.45,2.9373);
-  gre->SetPointError(64,0,0,0.0211305,0.0211305);
-  gre->SetPoint(65,2.55,2.92772);
-  gre->SetPointError(65,0,0,0.0210961,0.0210961);
-  gre->SetPoint(66,2.65,2.89154);
-  gre->SetPointError(66,0,0,0.0209653,0.0209653);
-  gre->SetPoint(67,2.75,2.87619);
-  gre->SetPointError(67,0,0,0.0209096,0.0209096);
-  gre->SetPoint(68,2.85,2.78924);
-  gre->SetPointError(68,0,0,0.0205911,0.0205911);
-  gre->SetPoint(69,2.95,2.72159);
-  gre->SetPointError(69,0,0,0.0203399,0.0203399);
-  gre->SetPoint(70,3.05,2.69089);
-  gre->SetPointError(70,0,0,0.0202248,0.0202248);
-  gre->SetPoint(71,3.15,2.64939);
-  gre->SetPointError(71,0,0,0.0200682,0.0200682);
-  gre->SetPoint(72,3.25,2.55545);
-  gre->SetPointError(72,0,0,0.0197092,0.0197092);
-  gre->SetPoint(73,3.35,2.56745);
-  gre->SetPointError(73,0,0,0.0197555,0.0197555);
-  gre->SetPoint(74,3.45,2.47503);
-  gre->SetPointError(74,0,0,0.0193967,0.0193967);
-  gre->SetPoint(75,3.55,2.36741);
-  gre->SetPointError(75,0,0,0.0189703,0.0189703);
-  gre->SetPoint(76,3.65,2.33412);
-  gre->SetPointError(76,0,0,0.0188364,0.0188364);
-  gre->SetPoint(77,3.75,2.2385);
-  gre->SetPointError(77,0,0,0.0184466,0.0184466);
-  gre->SetPoint(78,3.85,2.21768);
-  gre->SetPointError(78,0,0,0.0183606,0.0183606);
-  gre->SetPoint(79,3.95,2.1055);
-  gre->SetPointError(79,0,0,0.0178901,0.0178901);
-  gre->SetPoint(80,4.05,2.05047);
-  gre->SetPointError(80,0,0,0.0176548,0.0176548);
-  gre->SetPoint(81,4.15,2.00486);
-  gre->SetPointError(81,0,0,0.0174574,0.0174574);
-  gre->SetPoint(82,4.25,1.94573);
-  gre->SetPointError(82,0,0,0.017198,0.017198);
-  gre->SetPoint(83,4.35,1.87064);
-  gre->SetPointError(83,0,0,0.0168629,0.0168629);
-  gre->SetPoint(84,4.45,1.83735);
-  gre->SetPointError(84,0,0,0.0167122,0.0167122);
-  gre->SetPoint(85,4.55,1.75314);
-  gre->SetPointError(85,0,0,0.0163247,0.0163247);
-  gre->SetPoint(86,4.65,1.65828);
-  gre->SetPointError(86,0,0,0.0158769,0.0158769);
-  gre->SetPoint(87,4.75,1.60751);
-  gre->SetPointError(87,0,0,0.015632,0.015632);
-  gre->SetPoint(88,4.85,1.56312);
-  gre->SetPointError(88,0,0,0.0154146,0.0154146);
-  gre->SetPoint(89,4.95,1.52117);
-  gre->SetPointError(89,0,0,0.0152064,0.0152064);
-  gre->SetPoint(90,5.05,1.46553);
-  gre->SetPointError(90,0,0,0.0149257,0.0149257);
-  gre->SetPoint(91,5.15,1.42038);
-  gre->SetPointError(91,0,0,0.014694,0.014694);
-  gre->SetPoint(92,5.25,1.38816);
-  gre->SetPointError(92,0,0,0.0145263,0.0145263);
-  gre->SetPoint(93,5.35,1.35046);
-  gre->SetPointError(93,0,0,0.0143277,0.0143277);
-  gre->SetPoint(94,5.45,1.30075);
-  gre->SetPointError(94,0,0,0.0140616,0.0140616);
-  gre->SetPoint(95,5.55,1.24025);
-  gre->SetPointError(95,0,0,0.0137307,0.0137307);
-  gre->SetPoint(96,5.65,1.21806);
-  gre->SetPointError(96,0,0,0.0136073,0.0136073);
-  gre->SetPoint(97,5.75,1.19435);
-  gre->SetPointError(97,0,0,0.0134742,0.0134742);
-  gre->SetPoint(98,5.85,1.14175);
-  gre->SetPointError(98,0,0,0.0131741,0.0131741);
-  gre->SetPoint(99,5.95,1.09235);
-  gre->SetPointError(99,0,0,0.012886,0.012886);
+    gre->SetPoint(0,-3.95,2.11766);
+    gre->SetPointError(0,0,0,0.0179417,0.0179417);
+    gre->SetPoint(1,-3.85,2.20415);
+    gre->SetPointError(1,0,0,0.0183045,0.0183045);
+    gre->SetPoint(2,-3.75,2.30949);
+    gre->SetPointError(2,0,0,0.0187368,0.0187368);
+    gre->SetPoint(3,-3.65,2.34582);
+    gre->SetPointError(3,0,0,0.0188836,0.0188836);
+    gre->SetPoint(4,-3.55,2.38322);
+    gre->SetPointError(4,0,0,0.0190335,0.0190335);
+    gre->SetPoint(5,-3.45,2.43353);
+    gre->SetPointError(5,0,0,0.0192334,0.0192334);
+    gre->SetPoint(6,-3.35,2.51106);
+    gre->SetPointError(6,0,0,0.0195373,0.0195373);
+    gre->SetPoint(7,-3.25,2.56578);
+    gre->SetPointError(7,0,0,0.0197491,0.0197491);
+    gre->SetPoint(8,-3.15,2.60515);
+    gre->SetPointError(8,0,0,0.0199,0.0199);
+    gre->SetPoint(9,-3.05,2.7105);
+    gre->SetPointError(9,0,0,0.0202984,0.0202984);
+    gre->SetPoint(10,-2.95,2.77008);
+    gre->SetPointError(10,0,0,0.0205203,0.0205203);
+    gre->SetPoint(11,-2.85,2.83332);
+    gre->SetPointError(11,0,0,0.0207532,0.0207532);
+    gre->SetPoint(12,-2.75,2.84715);
+    gre->SetPointError(12,0,0,0.0208038,0.0208038);
+    gre->SetPoint(13,-2.65,2.91693);
+    gre->SetPointError(13,0,0,0.0210571,0.0210571);
+    gre->SetPoint(14,-2.55,2.95797);
+    gre->SetPointError(14,0,0,0.0212048,0.0212048);
+    gre->SetPoint(15,-2.45,2.97499);
+    gre->SetPointError(15,0,0,0.0212657,0.0212657);
+    gre->SetPoint(16,-2.35,3.01345);
+    gre->SetPointError(16,0,0,0.0214027,0.0214027);
+    gre->SetPoint(17,-2.25,3.04659);
+    gre->SetPointError(17,0,0,0.0215201,0.0215201);
+    gre->SetPoint(18,-2.15,3.09341);
+    gre->SetPointError(18,0,0,0.0216848,0.0216848);
+    gre->SetPoint(19,-2.05,3.13187);
+    gre->SetPointError(19,0,0,0.0218192,0.0218192);
+    gre->SetPoint(20,-1.95,3.13917);
+    gre->SetPointError(20,0,0,0.0218446,0.0218446);
+    gre->SetPoint(21,-1.85,3.16911);
+    gre->SetPointError(21,0,0,0.0219485,0.0219485);
+    gre->SetPoint(22,-1.75,3.15665);
+    gre->SetPointError(22,0,0,0.0219053,0.0219053);
+    gre->SetPoint(23,-1.65,3.19693);
+    gre->SetPointError(23,0,0,0.0220446,0.0220446);
+    gre->SetPoint(24,-1.55,3.17002);
+    gre->SetPointError(24,0,0,0.0219517,0.0219517);
+    gre->SetPoint(25,-1.45,3.18538);
+    gre->SetPointError(25,0,0,0.0220048,0.0220048);
+    gre->SetPoint(26,-1.35,3.18066);
+    gre->SetPointError(26,0,0,0.0219885,0.0219885);
+    gre->SetPoint(27,-1.25,3.19754);
+    gre->SetPointError(27,0,0,0.0220467,0.0220467);
+    gre->SetPoint(28,-1.15,3.18021);
+    gre->SetPointError(28,0,0,0.0219869,0.0219869);
+    gre->SetPoint(29,-1.05,3.13111);
+    gre->SetPointError(29,0,0,0.0218165,0.0218165);
+    gre->SetPoint(30,-0.95,3.12153);
+    gre->SetPointError(30,0,0,0.0217831,0.0217831);
+    gre->SetPoint(31,-0.85,3.14798);
+    gre->SetPointError(31,0,0,0.0218752,0.0218752);
+    gre->SetPoint(32,-0.75,3.07912);
+    gre->SetPointError(32,0,0,0.0216347,0.0216347);
+    gre->SetPoint(33,-0.65,3.10207);
+    gre->SetPointError(33,0,0,0.0217151,0.0217151);
+    gre->SetPoint(34,-0.55,3.06346);
+    gre->SetPointError(34,0,0,0.0215796,0.0215796);
+    gre->SetPoint(35,-0.45,2.97651);
+    gre->SetPointError(35,0,0,0.0212711,0.0212711);
+    gre->SetPoint(36,-0.35,2.98715);
+    gre->SetPointError(36,0,0,0.0213091,0.0213091);
+    gre->SetPoint(37,-0.25,2.98548);
+    gre->SetPointError(37,0,0,0.0213032,0.0213032);
+    gre->SetPoint(38,-0.15,3.00555);
+    gre->SetPointError(38,0,0,0.0213746,0.0213746);
+    gre->SetPoint(39,-0.05,3.01193);
+    gre->SetPointError(39,0,0,0.0213973,0.0213973);
+    gre->SetPoint(40,0.05,3.04385);
+    gre->SetPointError(40,0,0,0.0215104,0.0215104);
+    gre->SetPoint(41,0.15,3.04933);
+    gre->SetPointError(41,0,0,0.0215297,0.0215297);
+    gre->SetPoint(42,0.25,3.04659);
+    gre->SetPointError(42,0,0,0.0215201,0.0215201);
+    gre->SetPoint(43,0.35,3.00813);
+    gre->SetPointError(43,0,0,0.0213838,0.0213838);
+    gre->SetPoint(44,0.45,3.06666);
+    gre->SetPointError(44,0,0,0.0215908,0.0215908);
+    gre->SetPoint(45,0.55,3.07167);
+    gre->SetPointError(45,0,0,0.0216085,0.0216085);
+    gre->SetPoint(46,0.65,3.0659);
+    gre->SetPointError(46,0,0,0.0215881,0.0215881);
+    gre->SetPoint(47,0.75,3.09159);
+    gre->SetPointError(47,0,0,0.0216784,0.0216784);
+    gre->SetPoint(48,0.85,3.10846);
+    gre->SetPointError(48,0,0,0.0217375,0.0217375);
+    gre->SetPoint(49,0.95,3.11925);
+    gre->SetPointError(49,0,0,0.0217752,0.0217752);
+    gre->SetPoint(50,1.05,3.15558);
+    gre->SetPointError(50,0,0,0.0219016,0.0219016);
+    gre->SetPoint(51,1.15,3.16911);
+    gre->SetPointError(51,0,0,0.0219485,0.0219485);
+    gre->SetPoint(52,1.25,3.17246);
+    gre->SetPointError(52,0,0,0.0219601,0.0219601);
+    gre->SetPoint(53,1.35,3.19146);
+    gre->SetPointError(53,0,0,0.0220258,0.0220258);
+    gre->SetPoint(54,1.45,3.17458);
+    gre->SetPointError(54,0,0,0.0219675,0.0219675);
+    gre->SetPoint(55,1.55,3.16866);
+    gre->SetPointError(55,0,0,0.0219469,0.0219469);
+    gre->SetPoint(56,1.65,3.16592);
+    gre->SetPointError(56,0,0,0.0219375,0.0219375);
+    gre->SetPoint(57,1.75,3.16394);
+    gre->SetPointError(57,0,0,0.0219306,0.0219306);
+    gre->SetPoint(58,1.85,3.11956);
+    gre->SetPointError(58,0,0,0.0217762,0.0217762);
+    gre->SetPoint(59,1.95,3.14646);
+    gre->SetPointError(59,0,0,0.02187,0.02187);
+    gre->SetPoint(60,2.05,3.10147);
+    gre->SetPointError(60,0,0,0.021713,0.021713);
+    gre->SetPoint(61,2.15,3.09356);
+    gre->SetPointError(61,0,0,0.0216853,0.0216853);
+    gre->SetPoint(62,2.25,3.05328);
+    gre->SetPointError(62,0,0,0.0215437,0.0215437);
+    gre->SetPoint(63,2.35,3.01953);
+    gre->SetPointError(63,0,0,0.0214243,0.0214243);
+    gre->SetPoint(64,2.45,2.9373);
+    gre->SetPointError(64,0,0,0.0211305,0.0211305);
+    gre->SetPoint(65,2.55,2.92772);
+    gre->SetPointError(65,0,0,0.0210961,0.0210961);
+    gre->SetPoint(66,2.65,2.89154);
+    gre->SetPointError(66,0,0,0.0209653,0.0209653);
+    gre->SetPoint(67,2.75,2.87619);
+    gre->SetPointError(67,0,0,0.0209096,0.0209096);
+    gre->SetPoint(68,2.85,2.78924);
+    gre->SetPointError(68,0,0,0.0205911,0.0205911);
+    gre->SetPoint(69,2.95,2.72159);
+    gre->SetPointError(69,0,0,0.0203399,0.0203399);
+    gre->SetPoint(70,3.05,2.69089);
+    gre->SetPointError(70,0,0,0.0202248,0.0202248);
+    gre->SetPoint(71,3.15,2.64939);
+    gre->SetPointError(71,0,0,0.0200682,0.0200682);
+    gre->SetPoint(72,3.25,2.55545);
+    gre->SetPointError(72,0,0,0.0197092,0.0197092);
+    gre->SetPoint(73,3.35,2.56745);
+    gre->SetPointError(73,0,0,0.0197555,0.0197555);
+    gre->SetPoint(74,3.45,2.47503);
+    gre->SetPointError(74,0,0,0.0193967,0.0193967);
+    gre->SetPoint(75,3.55,2.36741);
+    gre->SetPointError(75,0,0,0.0189703,0.0189703);
+    gre->SetPoint(76,3.65,2.33412);
+    gre->SetPointError(76,0,0,0.0188364,0.0188364);
+    gre->SetPoint(77,3.75,2.2385);
+    gre->SetPointError(77,0,0,0.0184466,0.0184466);
+    gre->SetPoint(78,3.85,2.21768);
+    gre->SetPointError(78,0,0,0.0183606,0.0183606);
+    gre->SetPoint(79,3.95,2.1055);
+    gre->SetPointError(79,0,0,0.0178901,0.0178901);
+    gre->SetPoint(80,4.05,2.05047);
+    gre->SetPointError(80,0,0,0.0176548,0.0176548);
+    gre->SetPoint(81,4.15,2.00486);
+    gre->SetPointError(81,0,0,0.0174574,0.0174574);
+    gre->SetPoint(82,4.25,1.94573);
+    gre->SetPointError(82,0,0,0.017198,0.017198);
+    gre->SetPoint(83,4.35,1.87064);
+    gre->SetPointError(83,0,0,0.0168629,0.0168629);
+    gre->SetPoint(84,4.45,1.83735);
+    gre->SetPointError(84,0,0,0.0167122,0.0167122);
+    gre->SetPoint(85,4.55,1.75314);
+    gre->SetPointError(85,0,0,0.0163247,0.0163247);
+    gre->SetPoint(86,4.65,1.65828);
+    gre->SetPointError(86,0,0,0.0158769,0.0158769);
+    gre->SetPoint(87,4.75,1.60751);
+    gre->SetPointError(87,0,0,0.015632,0.015632);
+    gre->SetPoint(88,4.85,1.56312);
+    gre->SetPointError(88,0,0,0.0154146,0.0154146);
+    gre->SetPoint(89,4.95,1.52117);
+    gre->SetPointError(89,0,0,0.0152064,0.0152064);
+    gre->SetPoint(90,5.05,1.46553);
+    gre->SetPointError(90,0,0,0.0149257,0.0149257);
+    gre->SetPoint(91,5.15,1.42038);
+    gre->SetPointError(91,0,0,0.014694,0.014694);
+    gre->SetPoint(92,5.25,1.38816);
+    gre->SetPointError(92,0,0,0.0145263,0.0145263);
+    gre->SetPoint(93,5.35,1.35046);
+    gre->SetPointError(93,0,0,0.0143277,0.0143277);
+    gre->SetPoint(94,5.45,1.30075);
+    gre->SetPointError(94,0,0,0.0140616,0.0140616);
+    gre->SetPoint(95,5.55,1.24025);
+    gre->SetPointError(95,0,0,0.0137307,0.0137307);
+    gre->SetPoint(96,5.65,1.21806);
+    gre->SetPointError(96,0,0,0.0136073,0.0136073);
+    gre->SetPoint(97,5.75,1.19435);
+    gre->SetPointError(97,0,0,0.0134742,0.0134742);
+    gre->SetPoint(98,5.85,1.14175);
+    gre->SetPointError(98,0,0,0.0131741,0.0131741);
+    gre->SetPoint(99,5.95,1.09235);
+    gre->SetPointError(99,0,0,0.012886,0.012886);
 
-  return gre;
-}   
+    return gre;
+  }   
   
-//____________________________________________________________________
-/** 
- * Get the UA5 NSD data for pp at @f$ \sqrt{s} = 900GeV@f$
- * p7886_d1x1y4 - Z.Phys.C33:1-6,1986.
- *
- * @param mirrored Wether to produce the mirrored plot 
- * 
- * @return graph of data 
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* UA5Nsd(Bool_t mirrored=false) 
-{
-  //UA5 data NSD - p7886_d1x1y4 - Z.Phys.C33:1-6,1986.
-  double x[] = { 0.125, 0.375, 0.625, 0.875, 1.125, 1.375, 1.625, 1.875, 2.125, 
-                2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.125, 4.375,
-                4.625 };
-  double exm[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
-                  0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
-  double exp[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
-                  0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
-  double y[] = { 3.48, 3.38, 3.52, 3.68, 3.71, 3.86, 3.76, 3.66, 3.72, 
-                3.69, 3.56, 3.41, 3.15, 3.09, 2.74, 2.73, 2.32, 1.99, 1.69 };
-  double eym[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 
-                  0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 0.13 };
-  double eyp[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 
-                  0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 0.13 };
-  const int np = 19;
-  double xm[np]; 
-  double exmm[np];
-  double expm[np];
-  double ym[np];
-  double eymm[np];
-  double eypm[np];
-  for (int i = 0; i < np; i++) {
-    int j = np-1-i;
-    xm[i]   = -x[j];
-    exmm[i] = exm[j];
-    expm[i] = exp[j];
-    ym[i]   = y[j];
-    eymm[i] = eym[j];
-    eypm[i] = eyp[j];
-  }
-
-  TGraphAsymmErrors* g  = new TGraphAsymmErrors(19,x, y, exm, exp, eym, eyp);
-  TGraphAsymmErrors* gm = new TGraphAsymmErrors(19,xm,ym,exmm,expm,eymm,eypm);
-  SetGraphAttributes(g,  NSD, UA5, false,"ua5_nsd",         "UA5 NSD");
-  SetGraphAttributes(gm, NSD, UA5, true,"ua5_nsd_mirrored",
-                    "UA5 NSD (mirrored)");
+  //____________________________________________________________________
+  /** 
+   * Get the UA5 NSD data for pp at @f$ \sqrt{s} = 900GeV@f$
+   * p7886_d1x1y4 - Z.Phys.C33:1-6,1986.
+   *
+   * @param mirrored Wether to produce the mirrored plot 
+   * 
+   * @return graph of data 
+   * 
+   * @ingroup pwglf_forward_otherdata
+   */
+  static TGraphAsymmErrors* UA5Nsd(Bool_t mirrored=false) 
+  {
+    //UA5 data NSD - p7886_d1x1y4 - Z.Phys.C33:1-6,1986.
+    double x[] = { 0.125, 0.375, 0.625, 0.875, 1.125, 1.375, 1.625, 1.875,2.125,
+                  2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.125,4.375,
+                  4.625 };
+    double exm[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
+                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
+    double exp[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
+                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
+    double y[] = { 3.48, 3.38, 3.52, 3.68, 3.71, 3.86, 3.76, 3.66, 3.72, 
+                  3.69, 3.56, 3.41, 3.15, 3.09, 2.74, 2.73, 2.32, 1.99, 1.69 };
+    double eym[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 
+                    0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 
+                    0.13 };
+    double eyp[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 
+                    0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 
+                    0.13 };
+    const int np = 19;
+    double xm[np]; 
+    double exmm[np];
+    double expm[np];
+    double ym[np];
+    double eymm[np];
+    double eypm[np];
+    for (int i = 0; i < np; i++) {
+      int j = np-1-i;
+      xm[i]   = -x[j];
+      exmm[i] = exm[j];
+      expm[i] = exp[j];
+      ym[i]   = y[j];
+      eymm[i] = eym[j];
+      eypm[i] = eyp[j];
+    }
 
-  return (mirrored ? gm : g);
-}
+    TGraphAsymmErrors* g  = new TGraphAsymmErrors(19,x, y, exm, exp, eym, eyp);
+    TGraphAsymmErrors* gm = new TGraphAsymmErrors(19,xm,ym,exmm,expm,eymm,eypm);
+    SetGraphAttributes(g,  NSD, UA5, false,"ua5_nsd",         "UA5");
+    SetGraphAttributes(gm, NSD, UA5, true,"ua5_nsd_mirrored",
+                      "UA5 (mirrored)");
 
-//____________________________________________________________________
-/** 
- * Get the UA5 INEL data for pp at @f$ \sqrt{s} = 900GeV@f$
- * p7886_d2x1y2 - Z.Phys.C33:1-6,1986.
- *
- * @param mirrored Wether to produce the mirrored plot 
- * 
- * @return graph of data 
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* UA5Inel(Bool_t mirrored=false) 
-{
-  //UA5 data INEL - p7886_d2x1y2 - Z.Phys.C33:1-6,1986.
-  double x[] = { 0.125, 0.375, 0.625, 0.875, 1.125, 1.375, 1.625, 1.875, 2.125, 
-                2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.125, 4.375,
-                4.625 };
-  double exm[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
-                  0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
-  double exp[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
-                  0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
-  double y[] = { 3.14, 3.04, 3.17, 3.33, 3.33, 3.53, 3.46, 3.41, 3.45, 
-                3.39, 3.07, 3.07, 2.93, 2.93, 2.55, 2.48, 2.18, 1.91, 1.52 };
-  double eym[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 
-                  0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 0.13 };
-  double eyp[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 
-                  0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 0.13 };
-  const int np = 19;
-  double xm[np]; 
-  double exmm[np];
-  double expm[np];
-  double ym[np];
-  double eymm[np];
-  double eypm[np];
-  for (int i = 0; i < np; i++) {
-    int j = np-1-i;
-    xm[i]   = -x[j];
-    exmm[i] = exm[j];
-    expm[i] = exp[j];
-    ym[i]   = y[j];
-    eymm[i] = eym[j];
-    eypm[i] = eyp[j];
+    return (mirrored ? gm : g);
   }
-  TGraphAsymmErrors* g  = new TGraphAsymmErrors(np,x, y, exm, exp, eym, eyp);
-  TGraphAsymmErrors* gm = new TGraphAsymmErrors(np,xm,ym,exmm,expm,eymm,eypm);
 
-  SetGraphAttributes(g,  INEL, UA5, false, "ua5_inel", "UA5 INEL");
-  SetGraphAttributes(gm, INEL, UA5, true, "ua5_inel_mirrored", 
-                    "UA5 INEL (mirrored)");
-  
-  return (mirrored ? gm : g);
-}
+  //____________________________________________________________________
+  /** 
+   * Get the UA5 INEL data for pp at @f$ \sqrt{s} = 900GeV@f$
+   * p7886_d2x1y2 - Z.Phys.C33:1-6,1986.
+   *
+   * @param mirrored Wether to produce the mirrored plot 
+   * 
+   * @return graph of data 
+   * 
+   * @ingroup pwglf_forward_otherdata
+   */
+  static TGraphAsymmErrors* UA5Inel(Bool_t mirrored=false) 
+  {
+    //UA5 data INEL - p7886_d2x1y2 - Z.Phys.C33:1-6,1986.
+    double x[] = { 0.125, 0.375, 0.625, 0.875, 1.125, 1.375, 1.625, 1.875,2.125,
+                  2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.125,4.375,
+                  4.625 };
+    double exm[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
+                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
+    double exp[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
+                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
+    double y[] = { 3.14, 3.04, 3.17, 3.33, 3.33, 3.53, 3.46, 3.41, 3.45, 
+                  3.39, 3.07, 3.07, 2.93, 2.93, 2.55, 2.48, 2.18, 1.91, 1.52 };
+    double eym[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 
+                    0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 
+                    0.13 };
+    double eyp[] = { 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 
+                    0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 
+                    0.13 };
+    const int np = 19;
+    double xm[np]; 
+    double exmm[np];
+    double expm[np];
+    double ym[np];
+    double eymm[np];
+    double eypm[np];
+    for (int i = 0; i < np; i++) {
+      int j = np-1-i;
+      xm[i]   = -x[j];
+      exmm[i] = exm[j];
+      expm[i] = exp[j];
+      ym[i]   = y[j];
+      eymm[i] = eym[j];
+      eypm[i] = eyp[j];
+    }
+    TGraphAsymmErrors* g  = new TGraphAsymmErrors(np,x, y, exm, exp, eym, eyp);
+    TGraphAsymmErrors* gm = new TGraphAsymmErrors(np,xm,ym,exmm,expm,eymm,eypm);
 
-//____________________________________________________________________
-/** 
- * Get the ALICE INEL data in @f$ |\eta|<1.3@f$ for pp at @f$ \sqrt{s}
- * = 900GeV@f$ 
- * p7742_d1x1y1 - Eur.Phys.J.C68:89-108,2010. 
- *
- * @return graph of data 
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralInel900()
-{  
-  // INEL - p7742_d1x1y1 - Eur.Phys.J.C68:89-108,2010. 
-  TGraphAsymmErrors* g = 0;
-  double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, 
-                                -0.1, 0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3 };
-  double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
-                  0.1, 0.1, 0.1, 0.1, 0.1 };
-  double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
-                  0.1, 0.1, 0.1, 0.1, 0.1 };
-  double y[] = { 3.28, 3.28, 3.22, 3.12, 3.06, 3.02, 2.98, 3.02, 3.02, 
-                3.05, 3.15, 3.21, 3.26, 3.33 };
-  double eym[] = { 0.06324555320336758, 0.06324555320336758, 
-                  0.06324555320336758, 0.06324555320336758, 
-                  0.06324555320336758, 0.05385164807134505, 
-                  0.05385164807134505, 0.05385164807134505, 
-                  0.05385164807134505, 0.06324555320336758, 
-                  0.06324555320336758, 0.06324555320336758, 
-                  0.06324555320336758, 0.06324555320336758 };
-  double eyp[] = { 0.08246211251235322, 0.08246211251235322, 
-                  0.08246211251235322, 0.08246211251235322, 
-                  0.08246211251235322, 0.08246211251235322, 
-                  0.07280109889280519, 0.08246211251235322, 
-                  0.08246211251235322, 0.08246211251235322, 
-                  0.08246211251235322, 0.08246211251235322, 
-                  0.08246211251235322, 0.08246211251235322 };
-  const int np = 14;
-  for (int i = 0; i < np; i++) { 
-    eym[i] += 0.02;
-    eyp[i] += 0.02;
+    SetGraphAttributes(g,  INEL, UA5, false, "ua5_inel", "UA5");
+    SetGraphAttributes(gm, INEL, UA5, true, "ua5_inel_mirrored", 
+                      "UA5 (mirrored)");
+  
+    return (mirrored ? gm : g);
   }
-  g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-  SetGraphAttributes(g, INEL, ALICE, false, "alice_inel", 
-                    "INEL - Eur.Phys.J.C68:89-108,2010"
-                    /* "ALICE INEL (publ.)" */);
 
-  return g;
-}
+  //____________________________________________________________________
+  /** 
+   * Get the ALICE INEL data in @f$ |\eta|<1.3@f$ for pp at @f$ \sqrt{s}
+   * = 900GeV@f$ 
+   * p7742_d1x1y1 - Eur.Phys.J.C68:89-108,2010. 
+   *
+   * @return graph of data 
+   * 
+   * @ingroup pwglf_forward_otherdata
+   */
+  static TGraphAsymmErrors* AliceCentralInel900()
+  {  
+    // INEL - p7742_d1x1y1 - Eur.Phys.J.C68:89-108,2010. 
+    TGraphAsymmErrors* g = 0;
+    double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, 
+                  -0.1, 0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3 };
+    double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
+                    0.1, 0.1, 0.1, 0.1, 0.1 };
+    double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
+                    0.1, 0.1, 0.1, 0.1, 0.1 };
+    double y[] = { 3.28, 3.28, 3.22, 3.12, 3.06, 3.02, 2.98, 3.02, 3.02, 
+                  3.05, 3.15, 3.21, 3.26, 3.33 };
+    double eym[] = { 0.06324555320336758, 0.06324555320336758, 
+                    0.06324555320336758, 0.06324555320336758, 
+                    0.06324555320336758, 0.05385164807134505, 
+                    0.05385164807134505, 0.05385164807134505, 
+                    0.05385164807134505, 0.06324555320336758, 
+                    0.06324555320336758, 0.06324555320336758, 
+                    0.06324555320336758, 0.06324555320336758 };
+    double eyp[] = { 0.08246211251235322, 0.08246211251235322, 
+                    0.08246211251235322, 0.08246211251235322, 
+                    0.08246211251235322, 0.08246211251235322, 
+                    0.07280109889280519, 0.08246211251235322, 
+                    0.08246211251235322, 0.08246211251235322, 
+                    0.08246211251235322, 0.08246211251235322, 
+                    0.08246211251235322, 0.08246211251235322 };
+    const int np = 14;
+    for (int i = 0; i < np; i++) { 
+      eym[i] += 0.02;
+      eyp[i] += 0.02;
+    }
+    g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
+    SetGraphAttributes(g, INEL, ALICE, false, "alice_inel", 
+                      "#it{Eur.Phys.J}.#bf{C68}:89-108,2010"
+                      /* "ALICE INEL (publ.)" */);
 
-//____________________________________________________________________
-/** 
- * Get the ALICE INEL>0 data in @f$ |\eta|<1.3@f$ for pp at @f$
- * \sqrt{s} = 900GeV@f$ 
- *
- * p7741_d4x1y1 - Eur.Phys.J.C68:345-354,2010. 
- *
- * @return graph of data 
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralInelGt900()
-{  
-#if 0
-  // INEL>0 - p7741_d4x1y1 - Eur.Phys.J.C68:345-354,2010. 
-  double x[] = { -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7, 
-    0.9 };
-  double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
-    0.1 };
-  double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
-    0.1 };
-  double y[] = { 4.0, 3.87, 3.8, 3.7, 3.67, 3.73, 3.72, 3.77, 3.92, 
-    4.01 };
-  double eym[] = { 0.07615773105863909, 0.07615773105863909, 
-                  0.07615773105863909, 0.06324555320336758, 
-                  0.06324555320336758, 0.06324555320336758, 
-                  0.0670820393249937, 0.07615773105863909, 
-                  0.07615773105863909, 0.07615773105863909 };
-  double eyp[] = { 0.08544003745317531, 0.07615773105863909, 
-                  0.07615773105863909, 0.07280109889280519, 
-                  0.07280109889280519, 0.07280109889280519, 
-                  0.07615773105863909, 0.07615773105863909, 
-                  0.08544003745317531, 0.08544003745317531 };
-  const int np = 10;
-  for (int i = 0; i < np; i++) { 
-    double stat = (i >= 3  && i<=5) ? 0.02 : 0.03;
-    eym[i] += stat;
-    eyp[i] += stat;
+    return g;
   }
 
-  TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
+  //____________________________________________________________________
+  /** 
+   * Get the ALICE INEL>0 data in @f$ |\eta|<1.3@f$ for pp at @f$
+   * \sqrt{s} = 900GeV@f$ 
+   *
+   * p7741_d4x1y1 - Eur.Phys.J.C68:345-354,2010. 
+   *
+   * @return graph of data 
+   * 
+   * @ingroup pwglf_forward_otherdata
+   */
+  static TGraphAsymmErrors* AliceCentralInelGt900()
+  {  
+#if 0
+    // INEL>0 - p7741_d4x1y1 - Eur.Phys.J.C68:345-354,2010. 
+    double x[] = { -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7, 
+                  0.9 };
+    double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
+                    0.1 };
+    double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
+                    0.1 };
+    double y[] = { 4.0, 3.87, 3.8, 3.7, 3.67, 3.73, 3.72, 3.77, 3.92, 
+                  4.01 };
+    double eym[] = { 0.07615773105863909, 0.07615773105863909, 
+                    0.07615773105863909, 0.06324555320336758, 
+                    0.06324555320336758, 0.06324555320336758, 
+                    0.0670820393249937, 0.07615773105863909, 
+                    0.07615773105863909, 0.07615773105863909 };
+    double eyp[] = { 0.08544003745317531, 0.07615773105863909, 
+                    0.07615773105863909, 0.07280109889280519, 
+                    0.07280109889280519, 0.07280109889280519, 
+                    0.07615773105863909, 0.07615773105863909, 
+                    0.08544003745317531, 0.08544003745317531 };
+    const int np = 10;
+    for (int i = 0; i < np; i++) { 
+      double stat = (i >= 3  && i<=5) ? 0.02 : 0.03;
+      eym[i] += stat;
+      eyp[i] += stat;
+    }
+
+    TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
 #else
-  // These are from JFGO
-  TGraphAsymmErrors *g = new TGraphAsymmErrors(15);
-  g->SetPoint(0,-1.5,4.12575);
-  g->SetPointError(0,0.1,0.1,0.0742967,0.0814571);
-  g->SetPoint(1,-1.3,3.91209);
-  g->SetPointError(1,0.1,0.1,0.0697701,0.0766199);
-  g->SetPoint(2,-1.1,3.98377);
-  g->SetPointError(2,0.1,0.1,0.0704503,0.0774795);
-  g->SetPoint(3,-0.9,4.00035);
-  g->SetPointError(3,0.1,0.1,0.0702388,0.0773433);
-  g->SetPoint(4,-0.7,3.87228);
-  g->SetPointError(4,0.1,0.1,0.067597,0.0745103);
-  g->SetPoint(5,-0.5,3.79613);
-  g->SetPointError(5,0.1,0.1,0.0659771,0.0727816);
-  g->SetPoint(6,-0.3,3.70489);
-  g->SetPointError(6,0.1,0.1,0.0642016,0.0708603);
-  g->SetPoint(7,-0.1,3.67423);
-  g->SetPointError(7,0.1,0.1,0.0635759,0.0701884);
-  g->SetPoint(8,0.1,3.72765);
-  g->SetPointError(8,0.1,0.1,0.0645004,0.071209);
-  g->SetPoint(9,0.3,3.72171);
-  g->SetPointError(9,0.1,0.1,0.064493,0.071182);
-  g->SetPoint(10,0.5,3.77428);
-  g->SetPointError(10,0.1,0.1,0.0655974,0.0723627);
-  g->SetPoint(11,0.7,3.91704);
-  g->SetPointError(11,0.1,0.1,0.0683783,0.0753716);
-  g->SetPoint(12,0.9,4.00674);
-  g->SetPointError(12,0.1,0.1,0.0703511,0.0774669);
-  g->SetPoint(13,1.1,3.97948);
-  g->SetPointError(13,0.1,0.1,0.0703744,0.077396);
-  g->SetPoint(14,1.3,3.99165);
-  g->SetPointError(14,0.1,0.1,0.0711888,0.078178);
+    // These are from JFGO
+    TGraphAsymmErrors *g = new TGraphAsymmErrors(15);
+    g->SetPoint(0,-1.5,4.12575);
+    g->SetPointError(0,0.1,0.1,0.0742967,0.0814571);
+    g->SetPoint(1,-1.3,3.91209);
+    g->SetPointError(1,0.1,0.1,0.0697701,0.0766199);
+    g->SetPoint(2,-1.1,3.98377);
+    g->SetPointError(2,0.1,0.1,0.0704503,0.0774795);
+    g->SetPoint(3,-0.9,4.00035);
+    g->SetPointError(3,0.1,0.1,0.0702388,0.0773433);
+    g->SetPoint(4,-0.7,3.87228);
+    g->SetPointError(4,0.1,0.1,0.067597,0.0745103);
+    g->SetPoint(5,-0.5,3.79613);
+    g->SetPointError(5,0.1,0.1,0.0659771,0.0727816);
+    g->SetPoint(6,-0.3,3.70489);
+    g->SetPointError(6,0.1,0.1,0.0642016,0.0708603);
+    g->SetPoint(7,-0.1,3.67423);
+    g->SetPointError(7,0.1,0.1,0.0635759,0.0701884);
+    g->SetPoint(8,0.1,3.72765);
+    g->SetPointError(8,0.1,0.1,0.0645004,0.071209);
+    g->SetPoint(9,0.3,3.72171);
+    g->SetPointError(9,0.1,0.1,0.064493,0.071182);
+    g->SetPoint(10,0.5,3.77428);
+    g->SetPointError(10,0.1,0.1,0.0655974,0.0723627);
+    g->SetPoint(11,0.7,3.91704);
+    g->SetPointError(11,0.1,0.1,0.0683783,0.0753716);
+    g->SetPoint(12,0.9,4.00674);
+    g->SetPointError(12,0.1,0.1,0.0703511,0.0774669);
+    g->SetPoint(13,1.1,3.97948);
+    g->SetPointError(13,0.1,0.1,0.0703744,0.077396);
+    g->SetPoint(14,1.3,3.99165);
+    g->SetPointError(14,0.1,0.1,0.0711888,0.078178);
 #endif
-  SetGraphAttributes(g, INELGt0, ALICE, false, "alice_inelgt900", 
-                    // "ALICE INEL>0 (publ.)"
-                    "INEL>0 - Eur.Phys.J.C68:345-354,2010");
-  return g;
-}
+    SetGraphAttributes(g, INELGt0, ALICE, false, "alice_inelgt900", 
+                      // "ALICE INEL>0 (publ.)"
+                      "#it{Eur.Phys.J}.#bf{C68}:345-354,2010");
+    return g;
+  }
 
-//____________________________________________________________________
-/** 
- * Get the ALICE INEL>0 data in @f$ |\eta|<0.9@f$ for pp at @f$
- * \sqrt{s} = 2.36TeV@f$ 
- *
- * p7741_d5x1y1 - Eur.Phys.J.C68:345-354,2010. 
- *
- * @return graph of data 
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralInelGt2360()
-{  
+  //____________________________________________________________________
+  /** 
  * Get the ALICE INEL>0 data in @f$ |\eta|<0.9@f$ for pp at @f$
  * \sqrt{s} = 2.36TeV@f$ 
  *
  * p7741_d5x1y1 - Eur.Phys.J.C68:345-354,2010. 
  *
  * @return graph of data 
  
  * @ingroup pwglf_forward_otherdata
  */
+  static TGraphAsymmErrors* AliceCentralInelGt2360()
+  {  
 #if 0
-  // INEL>0 - p7741_d5x1y1 - Eur.Phys.J.C68:345-354,2010. 
-  double x[] = { -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7, 0.9 };
-  double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
-  double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
-  double y[] = { 4.91, 4.76, 4.63, 4.64, 4.55, 4.55, 4.64, 4.66, 4.82, 4.88 };
-  double eym[] = { 0.08544003745317531, 0.08544003745317531, 
-                  0.08544003745317531, 0.08544003745317531, 
-                  0.08544003745317531, 0.08544003745317531, 
-                  0.08544003745317531, 0.08544003745317531, 
-                  0.08544003745317531, 0.08544003745317531 };
-  double eyp[] = { 0.11401754250991379, 0.11401754250991379, 
-                  0.1044030650891055, 0.1044030650891055, 
-                  0.1044030650891055, 0.1044030650891055, 
-                  0.1044030650891055, 0.1044030650891055, 
-                  0.11401754250991379, 0.11401754250991379 };
-  const int np = 10;
-  for (int i = 0; i < np; i++) { 
-    double stat = 0.3;
-    eym[i] += stat;
-    eyp[i] += stat;
-  }
+    // INEL>0 - p7741_d5x1y1 - Eur.Phys.J.C68:345-354,2010. 
+    double x[] = { -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7, 0.9 };
+    double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
+    double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
+    double y[] = { 4.91, 4.76, 4.63, 4.64, 4.55, 4.55, 4.64, 4.66, 4.82, 4.88 };
+    double eym[] = { 0.08544003745317531, 0.08544003745317531, 
+                    0.08544003745317531, 0.08544003745317531, 
+                    0.08544003745317531, 0.08544003745317531, 
+                    0.08544003745317531, 0.08544003745317531, 
+                    0.08544003745317531, 0.08544003745317531 };
+    double eyp[] = { 0.11401754250991379, 0.11401754250991379, 
+                    0.1044030650891055, 0.1044030650891055, 
+                    0.1044030650891055, 0.1044030650891055, 
+                    0.1044030650891055, 0.1044030650891055, 
+                    0.11401754250991379, 0.11401754250991379 };
+    const int np = 10;
+    for (int i = 0; i < np; i++) { 
+      double stat = 0.3;
+      eym[i] += stat;
+      eyp[i] += stat;
+    }
 
-  TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
+    TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
 #else 
-  // These are from JFGO
-  TGraphAsymmErrors* g = new TGraphAsymmErrors(15);
-  g->SetPoint(0,-1.5,4.79047);
-  g->SetPointError(0,0.1,0.1,0.0844278,0.109947);
-  g->SetPoint(1,-1.3,4.91068);
-  g->SetPointError(1,0.1,0.1,0.0856751,0.112038);
-  g->SetPoint(2,-1.1,4.87386);
-  g->SetPointError(2,0.1,0.1,0.0842846,0.110628);
-  g->SetPoint(3,-0.9,4.91365);
-  g->SetPointError(3,0.1,0.1,0.084339,0.111049);
-  g->SetPoint(4,-0.7,4.7601);
-  g->SetPointError(4,0.1,0.1,0.0812087,0.107203);
-  g->SetPoint(5,-0.5,4.63355);
-  g->SetPointError(5,0.1,0.1,0.078687,0.104079);
-  g->SetPoint(6,-0.3,4.63885);
-  g->SetPointError(6,0.1,0.1,0.0785337,0.104014);
-  g->SetPoint(7,-0.1,4.55439);
-  g->SetPointError(7,0.1,0.1,0.0769842,0.10203);
-  g->SetPoint(8,0.1,4.55087);
-  g->SetPointError(8,0.1,0.1,0.0769246,0.101951);
-  g->SetPoint(9,0.3,4.64118);
-  g->SetPointError(9,0.1,0.1,0.0785732,0.104066);
-  g->SetPoint(10,0.5,4.66172);
-  g->SetPointError(10,0.1,0.1,0.0791652,0.104711);
-  g->SetPoint(11,0.7,4.81871);
-  g->SetPointError(11,0.1,0.1,0.0822086,0.108523);
-  g->SetPoint(12,0.9,4.88193);
-  g->SetPointError(12,0.1,0.1,0.0837944,0.110332);
-  g->SetPoint(13,1.1,4.89068);
-  g->SetPointError(13,0.1,0.1,0.0845754,0.111009);
-  g->SetPoint(14,1.3,5.05663);
-  g->SetPointError(14,0.1,0.1,0.0882216,0.115368);
+    // These are from JFGO
+    TGraphAsymmErrors* g = new TGraphAsymmErrors(15);
+    g->SetPoint(0,-1.5,4.79047);
+    g->SetPointError(0,0.1,0.1,0.0844278,0.109947);
+    g->SetPoint(1,-1.3,4.91068);
+    g->SetPointError(1,0.1,0.1,0.0856751,0.112038);
+    g->SetPoint(2,-1.1,4.87386);
+    g->SetPointError(2,0.1,0.1,0.0842846,0.110628);
+    g->SetPoint(3,-0.9,4.91365);
+    g->SetPointError(3,0.1,0.1,0.084339,0.111049);
+    g->SetPoint(4,-0.7,4.7601);
+    g->SetPointError(4,0.1,0.1,0.0812087,0.107203);
+    g->SetPoint(5,-0.5,4.63355);
+    g->SetPointError(5,0.1,0.1,0.078687,0.104079);
+    g->SetPoint(6,-0.3,4.63885);
+    g->SetPointError(6,0.1,0.1,0.0785337,0.104014);
+    g->SetPoint(7,-0.1,4.55439);
+    g->SetPointError(7,0.1,0.1,0.0769842,0.10203);
+    g->SetPoint(8,0.1,4.55087);
+    g->SetPointError(8,0.1,0.1,0.0769246,0.101951);
+    g->SetPoint(9,0.3,4.64118);
+    g->SetPointError(9,0.1,0.1,0.0785732,0.104066);
+    g->SetPoint(10,0.5,4.66172);
+    g->SetPointError(10,0.1,0.1,0.0791652,0.104711);
+    g->SetPoint(11,0.7,4.81871);
+    g->SetPointError(11,0.1,0.1,0.0822086,0.108523);
+    g->SetPoint(12,0.9,4.88193);
+    g->SetPointError(12,0.1,0.1,0.0837944,0.110332);
+    g->SetPoint(13,1.1,4.89068);
+    g->SetPointError(13,0.1,0.1,0.0845754,0.111009);
+    g->SetPoint(14,1.3,5.05663);
+    g->SetPointError(14,0.1,0.1,0.0882216,0.115368);
 #endif
 
-  SetGraphAttributes(g, INELGt0, ALICE, false, "alice_inelgt2360", 
-                    // "ALICE INEL>0 (publ.)"
-                    "INEL>0 - Eur.Phys.J.C68:345-354,2010");
-  return g;
-}
+    SetGraphAttributes(g, INELGt0, ALICE, false, "alice_inelgt2360", 
+                      // "ALICE INEL>0 (publ.)"
+                      "#it{Eur.Phys.J}.#bf{C68}:345-354,2010");
+    return g;
+  }
 
-//____________________________________________________________________
-/** 
- * Get the ALICE INEL>0 data in @f$ |\eta|<0.9@f$ for pp at @f$
- * \sqrt{s} = 7TeV@f$ 
- *
- * p7741_d6x1y1 - Eur.Phys.J.C68:345-354,2010. 
- *
- * @return graph of data 
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralInelGt7000()
-{  
+  //____________________________________________________________________
+  /** 
  * Get the ALICE INEL>0 data in @f$ |\eta|<0.9@f$ for pp at @f$
  * \sqrt{s} = 7TeV@f$ 
  *
  * p7741_d6x1y1 - Eur.Phys.J.C68:345-354,2010. 
  *
  * @return graph of data 
  
  * @ingroup pwglf_forward_otherdata
  */
+  static TGraphAsymmErrors* AliceCentralInelGt7000()
+  {  
 #if 0
-  // INEL>0 - p7741_d6x1y1 - Eur.Phys.J.C68:345-354,2010. 
-// Plot: p7741_d6x1y1
-  double x[] = { -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7, 0.9 };
-  double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
-  double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
-  double y[] = { 6.22, 6.07, 6.01, 5.84, 5.85, 5.85, 5.91, 6.01, 6.17, 6.26 };
-  double eym[] = { 0.1216552506059644, 0.1216552506059644, 
-                  0.1216552506059644, 0.11180339887498948, 
-                  0.11180339887498948, 0.11180339887498948, 
-                  0.11180339887498948, 0.1216552506059644, 
-                  0.1216552506059644, 0.1216552506059644 };
-  double eyp[] = { 0.21095023109728983, 0.21095023109728983, 
-                  0.2009975124224178, 0.2009975124224178, 
-                  0.2009975124224178, 0.2009975124224178, 
-                  0.2009975124224178, 0.2009975124224178, 
-                  0.21095023109728983, 0.21095023109728983 };
-  const int np = 10;
-  for (int i = 0; i < np; i++) { 
-    double stat = 0.2;
-    eym[i] += stat;
-    eyp[i] += stat;
-  }
+    // INEL>0 - p7741_d6x1y1 - Eur.Phys.J.C68:345-354,2010. 
+    // Plot: p7741_d6x1y1
+    double x[] = { -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 0.7, 0.9 };
+    double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
+    double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
+    double y[] = { 6.22, 6.07, 6.01, 5.84, 5.85, 5.85, 5.91, 6.01, 6.17, 6.26 };
+    double eym[] = { 0.1216552506059644, 0.1216552506059644, 
+                    0.1216552506059644, 0.11180339887498948, 
+                    0.11180339887498948, 0.11180339887498948, 
+                    0.11180339887498948, 0.1216552506059644, 
+                    0.1216552506059644, 0.1216552506059644 };
+    double eyp[] = { 0.21095023109728983, 0.21095023109728983, 
+                    0.2009975124224178, 0.2009975124224178, 
+                    0.2009975124224178, 0.2009975124224178, 
+                    0.2009975124224178, 0.2009975124224178, 
+                    0.21095023109728983, 0.21095023109728983 };
+    const int np = 10;
+    for (int i = 0; i < np; i++) { 
+      double stat = 0.2;
+      eym[i] += stat;
+      eyp[i] += stat;
+    }
 
-  TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
+    TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
 #else 
-  // These are from JFGO
-  TGraphAsymmErrors* g = new TGraphAsymmErrors(15);
-  g->SetPoint(0,-1.5,6.28573);
-  g->SetPointError(0,0.1,0.1,0.125928,0.215392);
-  g->SetPoint(1,-1.3,6.25573);
-  g->SetPointError(1,0.1,0.1,0.124352,0.213795);
-  g->SetPoint(2,-1.1,6.28779);
-  g->SetPointError(2,0.1,0.1,0.124143,0.214399);
-  g->SetPoint(3,-0.9,6.21881);
-  g->SetPointError(3,0.1,0.1,0.122079,0.211642);
-  g->SetPoint(4,-0.7,6.0728);
-  g->SetPointError(4,0.1,0.1,0.118661,0.206355);
-  g->SetPoint(5,-0.5,6.011);
-  g->SetPointError(5,0.1,0.1,0.117043,0.204019);
-  g->SetPoint(6,-0.3,5.84071);
-  g->SetPointError(6,0.1,0.1,0.11346,0.198086);
-  g->SetPoint(7,-0.1,5.8532);
-  g->SetPointError(7,0.1,0.1,0.113569,0.198433);
-  g->SetPoint(8,0.1,5.84811);
-  g->SetPointError(8,0.1,0.1,0.11347,0.198261);
-  g->SetPoint(9,0.3,5.91022);
-  g->SetPointError(9,0.1,0.1,0.11481,0.200444);
-  g->SetPoint(10,0.5,6.00649);
-  g->SetPointError(10,0.1,0.1,0.116955,0.203866);
-  g->SetPoint(11,0.7,6.17115);
-  g->SetPointError(11,0.1,0.1,0.120583,0.209697);
-  g->SetPoint(12,0.9,6.2645);
-  g->SetPointError(12,0.1,0.1,0.122976,0.213197);
-  g->SetPoint(13,1.1,6.36448);
-  g->SetPointError(13,0.1,0.1,0.125657,0.217014);
-  g->SetPoint(14,1.3,6.39489);
-  g->SetPointError(14,0.1,0.1,0.127118,0.218551);
+    // These are from JFGO
+    TGraphAsymmErrors* g = new TGraphAsymmErrors(15);
+    g->SetPoint(0,-1.5,6.28573);
+    g->SetPointError(0,0.1,0.1,0.125928,0.215392);
+    g->SetPoint(1,-1.3,6.25573);
+    g->SetPointError(1,0.1,0.1,0.124352,0.213795);
+    g->SetPoint(2,-1.1,6.28779);
+    g->SetPointError(2,0.1,0.1,0.124143,0.214399);
+    g->SetPoint(3,-0.9,6.21881);
+    g->SetPointError(3,0.1,0.1,0.122079,0.211642);
+    g->SetPoint(4,-0.7,6.0728);
+    g->SetPointError(4,0.1,0.1,0.118661,0.206355);
+    g->SetPoint(5,-0.5,6.011);
+    g->SetPointError(5,0.1,0.1,0.117043,0.204019);
+    g->SetPoint(6,-0.3,5.84071);
+    g->SetPointError(6,0.1,0.1,0.11346,0.198086);
+    g->SetPoint(7,-0.1,5.8532);
+    g->SetPointError(7,0.1,0.1,0.113569,0.198433);
+    g->SetPoint(8,0.1,5.84811);
+    g->SetPointError(8,0.1,0.1,0.11347,0.198261);
+    g->SetPoint(9,0.3,5.91022);
+    g->SetPointError(9,0.1,0.1,0.11481,0.200444);
+    g->SetPoint(10,0.5,6.00649);
+    g->SetPointError(10,0.1,0.1,0.116955,0.203866);
+    g->SetPoint(11,0.7,6.17115);
+    g->SetPointError(11,0.1,0.1,0.120583,0.209697);
+    g->SetPoint(12,0.9,6.2645);
+    g->SetPointError(12,0.1,0.1,0.122976,0.213197);
+    g->SetPoint(13,1.1,6.36448);
+    g->SetPointError(13,0.1,0.1,0.125657,0.217014);
+    g->SetPoint(14,1.3,6.39489);
+    g->SetPointError(14,0.1,0.1,0.127118,0.218551);
 #endif
-  SetGraphAttributes(g, INELGt0, ALICE, false, "alice_inelgt7000", 
-                    // "ALICE INEL>0 (publ.)"
-                    "INEL > 0 - Eur.Phys.J.C68:345-354,2010");
-  return g;
-}
-
-//____________________________________________________________________
-/** 
- * Get the ALICE NSD data in @f$ |\eta|<1.3@f$ for pp at @f$
- * \sqrt{s} = 900GeV@f$ 
- *
- * p7742_d2x1y1 - Eur.Phys.J.C68:89-108,2010. 
- *
- * @return graph of data 
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralNsd900()
-{
-  //NSD - p7742_d2x1y1 - Eur.Phys.J.C68:89-108,2010. 
-  double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 
-                0.5, 0.7, 0.9, 1.1, 1.3 };
-  double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
-                  0.1, 0.1, 0.1, 0.1, 0.1 };
-  double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
-                  0.1, 0.1, 0.1, 0.1, 0.1 };
-  double y[] = { 3.9, 3.89, 3.81, 3.7, 3.64, 3.59, 3.53, 3.58, 3.59, 
-                3.61, 3.74, 3.8, 3.87, 3.95 };
-  double eym[] = { 0.13341664064126335, 0.13152946437965907, 
-                  0.13152946437965907, 0.1216552506059644, 
-                  0.1216552506059644, 0.1216552506059644, 
-                  0.1216552506059644, 0.1216552506059644, 
-                  0.1216552506059644, 0.1216552506059644, 
-                  0.1216552506059644, 0.13152946437965907, 
-                  0.13152946437965907, 0.13341664064126335 };
-  double eyp[] = { 0.13341664064126335, 0.13152946437965907, 
-                  0.13152946437965907, 0.1216552506059644, 
-                  0.1216552506059644, 0.1216552506059644, 
-                  0.1216552506059644, 0.1216552506059644, 
-                  0.1216552506059644, 0.1216552506059644, 
-                  0.1216552506059644, 0.13152946437965907, 
-                  0.13152946437965907, 0.13341664064126335 };
-  const int np = 14;
-  for (int i = 0; i < np; i++) { 
-    double stat = (i == 0 || i == np-1) ? 0.03 : 0.02;
-    eym[i] += stat;
-    eyp[i] += stat;
+    SetGraphAttributes(g, INELGt0, ALICE, false, "alice_inelgt7000", 
+                      // "ALICE INEL>0 (publ.)"
+                      "#it{Eur.Phys.J}.#bf{C68}:345-354,2010");
+    return g;
   }
 
-  TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-  SetGraphAttributes(g, NSD, ALICE, false, "alice_nsd", 
-                    //"ALICE NSD (publ.)"
-                    "NSD - Eur.Phys.J.C68:89-108,2010");
+  //____________________________________________________________________
+  /** 
+   * Get the ALICE NSD data in @f$ |\eta|<1.3@f$ for pp at @f$
+   * \sqrt{s} = 900GeV@f$ 
+   *
+   * p7742_d2x1y1 - Eur.Phys.J.C68:89-108,2010. 
+   *
+   * @return graph of data 
+   * 
+   * @ingroup pwglf_forward_otherdata
+   */
+  static TGraphAsymmErrors* AliceCentralNsd900()
+  {
+    //NSD - p7742_d2x1y1 - Eur.Phys.J.C68:89-108,2010. 
+    double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 
+                  0.5, 0.7, 0.9, 1.1, 1.3 };
+    double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
+                    0.1, 0.1, 0.1, 0.1, 0.1 };
+    double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
+                    0.1, 0.1, 0.1, 0.1, 0.1 };
+    double y[] = { 3.9, 3.89, 3.81, 3.7, 3.64, 3.59, 3.53, 3.58, 3.59, 
+                  3.61, 3.74, 3.8, 3.87, 3.95 };
+    double eym[] = { 0.13341664064126335, 0.13152946437965907, 
+                    0.13152946437965907, 0.1216552506059644, 
+                    0.1216552506059644, 0.1216552506059644, 
+                    0.1216552506059644, 0.1216552506059644, 
+                    0.1216552506059644, 0.1216552506059644, 
+                    0.1216552506059644, 0.13152946437965907, 
+                    0.13152946437965907, 0.13341664064126335 };
+    double eyp[] = { 0.13341664064126335, 0.13152946437965907, 
+                    0.13152946437965907, 0.1216552506059644, 
+                    0.1216552506059644, 0.1216552506059644, 
+                    0.1216552506059644, 0.1216552506059644, 
+                    0.1216552506059644, 0.1216552506059644, 
+                    0.1216552506059644, 0.13152946437965907, 
+                    0.13152946437965907, 0.13341664064126335 };
+    const int np = 14;
+    for (int i = 0; i < np; i++) { 
+      double stat = (i == 0 || i == np-1) ? 0.03 : 0.02;
+      eym[i] += stat;
+      eyp[i] += stat;
+    }
 
-  return g;
-}
+    TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
+    SetGraphAttributes(g, NSD, ALICE, false, "alice_nsd", 
+                      //"ALICE NSD (publ.)"
+                      "#it{Eur.Phys.J}.#bf{C68}:89-108,2010");
 
-//____________________________________________________________________
-/** 
- * Get the ALICE INEL data in @f$ |\eta|<1.3@f$ for pp at @f$
- * \sqrt{s} = 2.36TeV@f$ 
- *
- * p7742_d3x1y1 - Eur.Phys.J.C68:89-108,2010. 
- *
- * @return graph of data 
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralInel2360()
-{  
-  // INEL - p7742_d3x1y1 - Eur.Phys.J.C68:89-108,2010. 
-  double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 
-                0.5, 0.7, 0.9, 1.1, 1.3 };
-  double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
-                  0.1, 0.1, 0.1, 0.1, 0.1 };
-  double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
-                  0.1, 0.1, 0.1, 0.1, 0.1 };
-  double y[] = { 4.08, 4.01, 4.0, 3.88, 3.77, 3.8, 3.73, 3.71, 3.79, 
-                3.82, 3.94, 4.02, 4.05, 4.16 };
-  double eym[] = { 0.13341664064126335, 0.12369316876852982, 
-                  0.12369316876852982, 0.1216552506059644, 
-                  0.1216552506059644, 0.1216552506059644, 
-                  0.1216552506059644, 0.11180339887498948, 
-                  0.1216552506059644, 0.1216552506059644, 
-                  0.12369316876852982, 0.12369316876852982, 
-                  0.13341664064126335, 0.13341664064126335 };
-  double eyp[] = { 0.2716615541441225, 0.2716615541441225, 
-                  0.2716615541441225, 0.260768096208106, 
-                  0.25079872407968906, 0.25079872407968906, 
-                  0.25079872407968906, 0.25079872407968906, 
-                  0.25079872407968906, 0.260768096208106, 
-                  0.261725046566048, 0.2716615541441225, 
-                  0.2716615541441225, 0.2816025568065745 };
-  const int np = 14;
-  for (int i = 0; i < np; i++) { 
-    double stat = (i < 3  || i > np-1-4) ? 0.03 : 0.02;
-    eym[i] += stat;
-    eyp[i] += stat;
+    return g;
   }
 
-  TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-  SetGraphAttributes(g, NSD, ALICE, false, "alice_inel2360", 
-                    // "ALICE INEL (publ.)"
-                    "INEL - Eur.Phys.J.C68:89-108,2010");
-  return g;
-}
+  //____________________________________________________________________
+  /** 
+   * Get the ALICE INEL data in @f$ |\eta|<1.3@f$ for pp at @f$
+   * \sqrt{s} = 2.36TeV@f$ 
+   *
+   * p7742_d3x1y1 - Eur.Phys.J.C68:89-108,2010. 
+   *
+   * @return graph of data 
+   * 
+   * @ingroup pwglf_forward_otherdata
+   */
+  static TGraphAsymmErrors* AliceCentralInel2360()
+  {  
+    // INEL - p7742_d3x1y1 - Eur.Phys.J.C68:89-108,2010. 
+    double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 
+                  0.5, 0.7, 0.9, 1.1, 1.3 };
+    double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
+                    0.1, 0.1, 0.1, 0.1, 0.1 };
+    double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
+                    0.1, 0.1, 0.1, 0.1, 0.1 };
+    double y[] = { 4.08, 4.01, 4.0, 3.88, 3.77, 3.8, 3.73, 3.71, 3.79, 
+                  3.82, 3.94, 4.02, 4.05, 4.16 };
+    double eym[] = { 0.13341664064126335, 0.12369316876852982, 
+                    0.12369316876852982, 0.1216552506059644, 
+                    0.1216552506059644, 0.1216552506059644, 
+                    0.1216552506059644, 0.11180339887498948, 
+                    0.1216552506059644, 0.1216552506059644, 
+                    0.12369316876852982, 0.12369316876852982, 
+                    0.13341664064126335, 0.13341664064126335 };
+    double eyp[] = { 0.2716615541441225, 0.2716615541441225, 
+                    0.2716615541441225, 0.260768096208106, 
+                    0.25079872407968906, 0.25079872407968906, 
+                    0.25079872407968906, 0.25079872407968906, 
+                    0.25079872407968906, 0.260768096208106, 
+                    0.261725046566048, 0.2716615541441225, 
+                    0.2716615541441225, 0.2816025568065745 };
+    const int np = 14;
+    for (int i = 0; i < np; i++) { 
+      double stat = (i < 3  || i > np-1-4) ? 0.03 : 0.02;
+      eym[i] += stat;
+      eyp[i] += stat;
+    }
 
-//____________________________________________________________________
-/** 
- * Get the ALICE NSD data in @f$ |\eta|<1.3@f$ for pp at @f$
- * \sqrt{s} = 2.36TeV@f$ 
- *
- * p7742_d4x1y1 - Eur.Phys.J.C68:89-108,2010. 
- *
- * @return graph of data 
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralNsd2360()
-{  
-  // NSD - p7742_d4x1y1 - Eur.Phys.J.C68:89-108,2010. 
-  double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 
-                0.5, 0.7, 0.9, 1.1, 1.3 };
-  double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
-                  0.1, 0.1, 0.1, 0.1, 0.1 };
-  double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
-                  0.1, 0.1, 0.1, 0.1, 0.1 };
-  double y[] = { 4.79, 4.72, 4.7, 4.56, 4.44, 4.47, 4.39, 4.37, 4.47, 
-    4.5, 4.64, 4.73, 4.76, 4.9 };
-  double eym[] = { 0.13601470508735444, 0.13341664064126335, 
-                  0.13341664064126335, 0.12369316876852982, 
-                  0.12369316876852982, 0.12369316876852982, 
-                  0.12369316876852982, 0.12369316876852982, 
-                  0.12369316876852982, 0.12369316876852982,
-                  0.12369316876852982, 0.13341664064126335,
-                  0.13341664064126335, 0.13341664064126335 };
-  double eyp[] = { 0.18439088914585774, 0.18248287590894657,
-                  0.18248287590894657, 0.1726267650163207,
-                  0.1726267650163207, 0.1726267650163207, 
-                  0.16278820596099708, 0.16278820596099708, 
-                  0.1726267650163207, 0.1726267650163207, 
-                  0.1726267650163207, 0.18248287590894657, 
-                  0.18248287590894657, 0.18248287590894657 };
-  const int np = 14;
-  
-  for (int i = 0; i < np; i++) { 
-    double stat = (i < 1) ? 0.03 : 0.02;
-    eym[i] += stat;
-    eyp[i] += stat;
+    TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
+    SetGraphAttributes(g, NSD, ALICE, false, "alice_inel2360", 
+                      // "ALICE INEL (publ.)"
+                      "#it{Eur.Phys.J}.#bf{C68}:89-108,2010");
+    return g;
   }
 
-  TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-  SetGraphAttributes(g, NSD, ALICE, false, "alice_nsd2360", 
-                    // "ALICE NSD (publ.)"
-                    "NSD - Eur.Phys.J.C68:89-108,2010");
-  return g;
-}
+  //____________________________________________________________________
+  /** 
+   * Get the ALICE NSD data in @f$ |\eta|<1.3@f$ for pp at @f$
+   * \sqrt{s} = 2.36TeV@f$ 
+   *
+   * p7742_d4x1y1 - Eur.Phys.J.C68:89-108,2010. 
+   *
+   * @return graph of data 
+   * 
+   * @ingroup pwglf_forward_otherdata
+   */
+  static TGraphAsymmErrors* AliceCentralNsd2360()
+  {  
+    // NSD - p7742_d4x1y1 - Eur.Phys.J.C68:89-108,2010. 
+    double x[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, 
+                  0.5, 0.7, 0.9, 1.1, 1.3 };
+    double exm[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
+                    0.1, 0.1, 0.1, 0.1, 0.1 };
+    double exp[] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 
+                    0.1, 0.1, 0.1, 0.1, 0.1 };
+    double y[] = { 4.79, 4.72, 4.7, 4.56, 4.44, 4.47, 4.39, 4.37, 4.47, 
+                  4.5, 4.64, 4.73, 4.76, 4.9 };
+    double eym[] = { 0.13601470508735444, 0.13341664064126335, 
+                    0.13341664064126335, 0.12369316876852982, 
+                    0.12369316876852982, 0.12369316876852982, 
+                    0.12369316876852982, 0.12369316876852982, 
+                    0.12369316876852982, 0.12369316876852982,
+                    0.12369316876852982, 0.13341664064126335,
+                    0.13341664064126335, 0.13341664064126335 };
+    double eyp[] = { 0.18439088914585774, 0.18248287590894657,
+                    0.18248287590894657, 0.1726267650163207,
+                    0.1726267650163207, 0.1726267650163207, 
+                    0.16278820596099708, 0.16278820596099708, 
+                    0.1726267650163207, 0.1726267650163207, 
+                    0.1726267650163207, 0.18248287590894657, 
+                    0.18248287590894657, 0.18248287590894657 };
+    const int np = 14;
+  
+    for (int i = 0; i < np; i++) { 
+      double stat = (i < 1) ? 0.03 : 0.02;
+      eym[i] += stat;
+      eyp[i] += stat;
+    }
 
-//____________________________________________________________________
-/** 
- * Get the ALICE MB (CINT5, V0AND) data in @f$ |\eta|<2@f$ for pPb at 
- * @f$ \sqrt{s} = 5.023TeV@f$ 
- *
- * arXiv:1210.3615 [nucl-ex]
- *
- * @return graph of data 
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralpPb5023()
-{  
-  TGraphAsymmErrors *g = new TGraphAsymmErrors(43);
-  g->SetName("");
-  g->SetTitle("");
-  g->SetFillColor(1);
-  g->SetMarkerStyle(24);
-  g->SetMarkerSize(1.3);
-  g->SetPoint(0,-2.05,16.1757);
-  g->SetPointError(0,0.05,0.05,0.360241,0.360241);
-  g->SetPoint(1,-1.95,16.8454);
-  g->SetPointError(1,0.05,0.05,0.184436,0.184436);
-  g->SetPoint(2,-1.85,16.9748);
-  g->SetPointError(2,0.05,0.05,0.112833,0.112833);
-  g->SetPoint(3,-1.75,17.2504);
-  g->SetPointError(3,0.05,0.05,0.0851792,0.0851792);
-  g->SetPoint(4,-1.65,17.336);
-  g->SetPointError(4,0.05,0.05,0.0674453,0.0674453);
-  g->SetPoint(5,-1.55,17.4649);
-  g->SetPointError(5,0.05,0.05,0.0558537,0.0558537);
-  g->SetPoint(6,-1.45,17.5884);
-  g->SetPointError(6,0.05,0.05,0.0481065,0.0481065);
-  g->SetPoint(7,-1.35,17.7509);
-  g->SetPointError(7,0.05,0.05,0.0448122,0.0448122);
-  g->SetPoint(8,-1.25,17.8052);
-  g->SetPointError(8,0.05,0.05,0.0403298,0.0403298);
-  g->SetPoint(9,-1.15,17.8357);
-  g->SetPointError(9,0.05,0.05,0.0383174,0.0383174);
-  g->SetPoint(10,-1.05,17.7547);
-  g->SetPointError(10,0.05,0.05,0.0356689,0.0356689);
-  g->SetPoint(11,-0.95,17.6859);
-  g->SetPointError(11,0.05,0.05,0.034326,0.034326);
-  g->SetPoint(12,-0.85,17.6665);
-  g->SetPointError(12,0.05,0.05,0.0333449,0.0333449);
-  g->SetPoint(13,-0.75,17.6044);
-  g->SetPointError(13,0.05,0.05,0.0325356,0.0325356);
-  g->SetPoint(14,-0.65,17.4815);
-  g->SetPointError(14,0.05,0.05,0.0318004,0.0318004);
-  g->SetPoint(15,-0.55,17.4);
-  g->SetPointError(15,0.05,0.05,0.0312675,0.0312675);
-  g->SetPoint(16,-0.45,17.3425);
-  g->SetPointError(16,0.05,0.05,0.0310344,0.0310344);
-  g->SetPoint(17,-0.35,17.2885);
-  g->SetPointError(17,0.05,0.05,0.0306043,0.0306043);
-  g->SetPoint(18,-0.25,17.2646);
-  g->SetPointError(18,0.05,0.05,0.0303226,0.0303226);
-  g->SetPoint(19,-0.15,17.316);
-  g->SetPointError(19,0.05,0.05,0.0302368,0.0302368);
-  g->SetPoint(20,-0.05,17.312);
-  g->SetPointError(20,0.05,0.05,0.0301444,0.0301444);
-  g->SetPoint(21,0.05,17.4418);
-  g->SetPointError(21,0.05,0.05,0.0301526,0.0301526);
-  g->SetPoint(22,0.15,17.4944);
-  g->SetPointError(22,0.05,0.05,0.0303199,0.0303199);
-  g->SetPoint(23,0.25,17.642);
-  g->SetPointError(23,0.05,0.05,0.0303867,0.0303867);
-  g->SetPoint(24,0.35,17.8153);
-  g->SetPointError(24,0.05,0.05,0.0306752,0.0306752);
-  g->SetPoint(25,0.45,18.0244);
-  g->SetPointError(25,0.05,0.05,0.0310274,0.0310274);
-  g->SetPoint(26,0.55,18.1993);
-  g->SetPointError(26,0.05,0.05,0.0314353,0.0314353);
-  g->SetPoint(27,0.65,18.349);
-  g->SetPointError(27,0.05,0.05,0.0316803,0.0316803);
-  g->SetPoint(28,0.75,18.5976);
-  g->SetPointError(28,0.05,0.05,0.0322819,0.0322819);
-  g->SetPoint(29,0.85,18.8045);
-  g->SetPointError(29,0.05,0.05,0.0329447,0.0329447);
-  g->SetPoint(30,0.95,18.9865);
-  g->SetPointError(30,0.05,0.05,0.0337513,0.0337513);
-  g->SetPoint(31,1.05,19.2313);
-  g->SetPointError(31,0.05,0.05,0.0354009,0.0354009);
-  g->SetPoint(32,1.15,19.4055);
-  g->SetPointError(32,0.05,0.05,0.0367366,0.0367366);
-  g->SetPoint(33,1.25,19.5893);
-  g->SetPointError(33,0.05,0.05,0.0385048,0.0385048);
-  g->SetPoint(34,1.35,19.8196);
-  g->SetPointError(34,0.05,0.05,0.0421699,0.0421699);
-  g->SetPoint(35,1.45,19.9476);
-  g->SetPointError(35,0.05,0.05,0.0451541,0.0451541);
-  g->SetPoint(36,1.55,20.1012);
-  g->SetPointError(36,0.05,0.05,0.0513641,0.0513641);
-  g->SetPoint(37,1.65,20.1082);
-  g->SetPointError(37,0.05,0.05,0.060302,0.060302);
-  g->SetPoint(38,1.75,20.1732);
-  g->SetPointError(38,0.05,0.05,0.0739969,0.0739969);
-  g->SetPoint(39,1.85,20.1964);
-  g->SetPointError(39,0.05,0.05,0.0953757,0.0953757);
-  g->SetPoint(40,1.95,20.0509);
-  g->SetPointError(40,0.05,0.05,0.147212,0.147212);
-  g->SetPoint(41,2.05,20.3151);
-  g->SetPointError(41,0.05,0.05,0.272151,0.272151);
-  g->SetPoint(42,2.15,20.1319);
-  g->SetPointError(42,0.05,0.05,0.802706,0.802706);
+    TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
+    SetGraphAttributes(g, NSD, ALICE, false, "alice_nsd2360", 
+                      // "ALICE NSD (publ.)"
+                      "#it{Eur.Phys.J}.#bf{C68}:89-108,2010");
+    return g;
+  }
 
+  //____________________________________________________________________
+  /** 
+   * Get the ALICE MB (CINT5, V0AND) data in @f$ |\eta|<2@f$ for pPb at 
+   * @f$ \sqrt{s} = 5.023TeV@f$ 
+   *
+   * arXiv:1210.3615 [nucl-ex]
+   *
+   * @return graph of data 
+   * 
+   * @ingroup pwglf_forward_otherdata
+   */
+  static TGraphAsymmErrors* AliceCentralpPb5023()
+  {  
+    TGraphAsymmErrors *g = new TGraphAsymmErrors(43);
+    g->SetName("");
+    g->SetTitle("");
+    g->SetFillColor(1);
+    g->SetMarkerStyle(24);
+    g->SetMarkerSize(1.3);
+    g->SetPoint(0,-2.05,16.1757);
+    g->SetPointError(0,0.05,0.05,0.360241,0.360241);
+    g->SetPoint(1,-1.95,16.8454);
+    g->SetPointError(1,0.05,0.05,0.184436,0.184436);
+    g->SetPoint(2,-1.85,16.9748);
+    g->SetPointError(2,0.05,0.05,0.112833,0.112833);
+    g->SetPoint(3,-1.75,17.2504);
+    g->SetPointError(3,0.05,0.05,0.0851792,0.0851792);
+    g->SetPoint(4,-1.65,17.336);
+    g->SetPointError(4,0.05,0.05,0.0674453,0.0674453);
+    g->SetPoint(5,-1.55,17.4649);
+    g->SetPointError(5,0.05,0.05,0.0558537,0.0558537);
+    g->SetPoint(6,-1.45,17.5884);
+    g->SetPointError(6,0.05,0.05,0.0481065,0.0481065);
+    g->SetPoint(7,-1.35,17.7509);
+    g->SetPointError(7,0.05,0.05,0.0448122,0.0448122);
+    g->SetPoint(8,-1.25,17.8052);
+    g->SetPointError(8,0.05,0.05,0.0403298,0.0403298);
+    g->SetPoint(9,-1.15,17.8357);
+    g->SetPointError(9,0.05,0.05,0.0383174,0.0383174);
+    g->SetPoint(10,-1.05,17.7547);
+    g->SetPointError(10,0.05,0.05,0.0356689,0.0356689);
+    g->SetPoint(11,-0.95,17.6859);
+    g->SetPointError(11,0.05,0.05,0.034326,0.034326);
+    g->SetPoint(12,-0.85,17.6665);
+    g->SetPointError(12,0.05,0.05,0.0333449,0.0333449);
+    g->SetPoint(13,-0.75,17.6044);
+    g->SetPointError(13,0.05,0.05,0.0325356,0.0325356);
+    g->SetPoint(14,-0.65,17.4815);
+    g->SetPointError(14,0.05,0.05,0.0318004,0.0318004);
+    g->SetPoint(15,-0.55,17.4);
+    g->SetPointError(15,0.05,0.05,0.0312675,0.0312675);
+    g->SetPoint(16,-0.45,17.3425);
+    g->SetPointError(16,0.05,0.05,0.0310344,0.0310344);
+    g->SetPoint(17,-0.35,17.2885);
+    g->SetPointError(17,0.05,0.05,0.0306043,0.0306043);
+    g->SetPoint(18,-0.25,17.2646);
+    g->SetPointError(18,0.05,0.05,0.0303226,0.0303226);
+    g->SetPoint(19,-0.15,17.316);
+    g->SetPointError(19,0.05,0.05,0.0302368,0.0302368);
+    g->SetPoint(20,-0.05,17.312);
+    g->SetPointError(20,0.05,0.05,0.0301444,0.0301444);
+    g->SetPoint(21,0.05,17.4418);
+    g->SetPointError(21,0.05,0.05,0.0301526,0.0301526);
+    g->SetPoint(22,0.15,17.4944);
+    g->SetPointError(22,0.05,0.05,0.0303199,0.0303199);
+    g->SetPoint(23,0.25,17.642);
+    g->SetPointError(23,0.05,0.05,0.0303867,0.0303867);
+    g->SetPoint(24,0.35,17.8153);
+    g->SetPointError(24,0.05,0.05,0.0306752,0.0306752);
+    g->SetPoint(25,0.45,18.0244);
+    g->SetPointError(25,0.05,0.05,0.0310274,0.0310274);
+    g->SetPoint(26,0.55,18.1993);
+    g->SetPointError(26,0.05,0.05,0.0314353,0.0314353);
+    g->SetPoint(27,0.65,18.349);
+    g->SetPointError(27,0.05,0.05,0.0316803,0.0316803);
+    g->SetPoint(28,0.75,18.5976);
+    g->SetPointError(28,0.05,0.05,0.0322819,0.0322819);
+    g->SetPoint(29,0.85,18.8045);
+    g->SetPointError(29,0.05,0.05,0.0329447,0.0329447);
+    g->SetPoint(30,0.95,18.9865);
+    g->SetPointError(30,0.05,0.05,0.0337513,0.0337513);
+    g->SetPoint(31,1.05,19.2313);
+    g->SetPointError(31,0.05,0.05,0.0354009,0.0354009);
+    g->SetPoint(32,1.15,19.4055);
+    g->SetPointError(32,0.05,0.05,0.0367366,0.0367366);
+    g->SetPoint(33,1.25,19.5893);
+    g->SetPointError(33,0.05,0.05,0.0385048,0.0385048);
+    g->SetPoint(34,1.35,19.8196);
+    g->SetPointError(34,0.05,0.05,0.0421699,0.0421699);
+    g->SetPoint(35,1.45,19.9476);
+    g->SetPointError(35,0.05,0.05,0.0451541,0.0451541);
+    g->SetPoint(36,1.55,20.1012);
+    g->SetPointError(36,0.05,0.05,0.0513641,0.0513641);
+    g->SetPoint(37,1.65,20.1082);
+    g->SetPointError(37,0.05,0.05,0.060302,0.060302);
+    g->SetPoint(38,1.75,20.1732);
+    g->SetPointError(38,0.05,0.05,0.0739969,0.0739969);
+    g->SetPoint(39,1.85,20.1964);
+    g->SetPointError(39,0.05,0.05,0.0953757,0.0953757);
+    g->SetPoint(40,1.95,20.0509);
+    g->SetPointError(40,0.05,0.05,0.147212,0.147212);
+    g->SetPoint(41,2.05,20.3151);
+    g->SetPointError(41,0.05,0.05,0.272151,0.272151);
+    g->SetPoint(42,2.15,20.1319);
+    g->SetPointError(42,0.05,0.05,0.802706,0.802706);
 
-  SetGraphAttributes(g, NSD, ALICE, false, "alice_ppb50230", 
-                    "NSD arXiv:1210.3615");
-  return g;
-}
 
-//____________________________________________________________________
-/** 
- * Get the ALICE INEL data in @f$ |\eta|<1.8@f$ for pp at @f$ \sqrt{s}
- * = 900GeV@f$ 
- * Work in progress
- *
- * @return graph of data 
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralInel900Work()
-{
-  TGraphAsymmErrors *g = new TGraphAsymmErrors(18);
-  // g->SetPoint(0,-1.9,0);   g->SetPointError(0,0.1,0.1,0,0);
-  g->SetPoint(0,-1.7,3.13935); g->SetPointError(0,0.1,0.1,0.0726186,0.0525276);
-  g->SetPoint(1,-1.5,3.15634); g->SetPointError(1,0.1,0.1,0.0338547,0.0380273);
-  g->SetPoint(2,-1.3,3.13683); g->SetPointError(2,0.1,0.1,0.0295176,0.0295638);
-  g->SetPoint(3,-1.1,3.10618); g->SetPointError(3,0.1,0.1,0.0306925,0.0329387);
-  g->SetPoint(4,-0.9,3.05921); g->SetPointError(4,0.1,0.1,0.0224684,0.025408);
-  g->SetPoint(5,-0.7,3.00303); g->SetPointError(5,0.1,0.1,0.0389278,0.0238328);
-  g->SetPoint(6,-0.5,2.94604); g->SetPointError(6,0.1,0.1,0.0211986,0.0322219);
-  g->SetPoint(7,-0.3,2.91507); g->SetPointError(7,0.1,0.1,0.030029,0.0209573);
-  g->SetPoint(8,-0.1,2.88965); g->SetPointError(8,0.1,0.1,0.0286516,0.0253694);
-  g->SetPoint(9,0.1,2.89731);   g->SetPointError(9,0.1,0.1,0.0334615,0.0192116);
-  g->SetPoint(10,0.3,2.91188); g->SetPointError(10,0.1,0.1,0.0503868,0.0249106);
-  g->SetPoint(11,0.5,2.96295); g->SetPointError(11,0.1,0.1,0.030009,0.0284692);
-  g->SetPoint(12,0.7,3.0089);  g->SetPointError(12,0.1,0.1,0.0189095,0.026319);
-  g->SetPoint(13,0.9,3.07028); g->SetPointError(13,0.1,0.1,0.0449128,0.0307375);
-  g->SetPoint(14,1.1,3.10215); g->SetPointError(14,0.1,0.1,0.0288688,0.0263013);
-  g->SetPoint(15,1.3,3.12946); g->SetPointError(15,0.1,0.1,0.0431495,0.026355);
-  g->SetPoint(16,1.5,3.14549); g->SetPointError(16,0.1,0.1,0.0322482,0.0336111);
-  g->SetPoint(17,1.7,3.15729);  g->SetPointError(17,0.1,0.1,0.105509,0.0523796);
-  // g->SetPoint(19,1.9,0);    g->SetPointError(19,0.1,0.1,0,0);
+    SetGraphAttributes(g, NSD, ALICE, false, "alice_ppb50230", 
+                      "arXiv:1210.3615");
+    return g;
+  }
 
-  SetGraphAttributes(g, INEL, WIP, false, "alice_pp900work", 
-                    "ALICE INEL - work in progress");
-  return g;
-}
+  //____________________________________________________________________
+  /** 
+   * Get the ALICE INEL data in @f$ |\eta|<1.8@f$ for pp at @f$ \sqrt{s}
+   * = 900GeV@f$ 
+   * Work in progress
+   *
+   * @return graph of data 
+   * 
+   * @ingroup pwglf_forward_otherdata
+   */
+  static TGraphAsymmErrors* AliceCentralInel900Work()
+  {
+    TGraphAsymmErrors *g = new TGraphAsymmErrors(18);
+    // g->SetPoint(0,-1.9,0);   g->SetPointError(0,0.1,0.1,0,0);
+    g->SetPoint(0,-1.7,3.13935);g->SetPointError(0,0.1,0.1,0.0726186,0.0525276);
+    g->SetPoint(1,-1.5,3.15634);g->SetPointError(1,0.1,0.1,0.0338547,0.0380273);
+    g->SetPoint(2,-1.3,3.13683);g->SetPointError(2,0.1,0.1,0.0295176,0.0295638);
+    g->SetPoint(3,-1.1,3.10618);g->SetPointError(3,0.1,0.1,0.0306925,0.0329387);
+    g->SetPoint(4,-0.9,3.05921);g->SetPointError(4,0.1,0.1,0.0224684,0.025408);
+    g->SetPoint(5,-0.7,3.00303);g->SetPointError(5,0.1,0.1,0.0389278,0.0238328);
+    g->SetPoint(6,-0.5,2.94604);g->SetPointError(6,0.1,0.1,0.0211986,0.0322219);
+    g->SetPoint(7,-0.3,2.91507);g->SetPointError(7,0.1,0.1,0.030029,0.0209573);
+    g->SetPoint(8,-0.1,2.88965);g->SetPointError(8,0.1,0.1,0.0286516,0.0253694);
+    g->SetPoint(9,0.1,2.89731); g->SetPointError(9,0.1,0.1,0.0334615,0.0192116);
+    g->SetPoint(10,0.3,2.91188);g->SetPointError(10,0.1,0.1,0.0503868,0.024911);
+    g->SetPoint(11,0.5,2.96295);g->SetPointError(11,0.1,0.1,0.030009,0.0284692);
+    g->SetPoint(12,0.7,3.0089);        g->SetPointError(12,0.1,0.1,0.0189095,0.026319);
+    g->SetPoint(13,0.9,3.07028);g->SetPointError(13,0.1,0.1,0.0449128,0.030738);
+    g->SetPoint(14,1.1,3.10215);g->SetPointError(14,0.1,0.1,0.0288688,0.026301);
+    g->SetPoint(15,1.3,3.12946);g->SetPointError(15,0.1,0.1,0.0431495,0.026355);
+    g->SetPoint(16,1.5,3.14549);g->SetPointError(16,0.1,0.1,0.0322482,0.033611);
+    g->SetPoint(17,1.7,3.15729);g->SetPointError(17,0.1,0.1,0.105509,0.0523796);
+    // g->SetPoint(19,1.9,0);  g->SetPointError(19,0.1,0.1,0,0);
 
-//____________________________________________________________________
-/** 
- * Get the ALICE NSD data in @f$ |\eta|<1.8@f$ for pp at @f$ \sqrt{s} 
- * = 900GeV@f$  
- * Work in progress
- *
- * @return graph of data 
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralNsd900Work()
-{
-  TGraphAsymmErrors *g = new TGraphAsymmErrors(18);
+    SetGraphAttributes(g, INEL, WIP, false, "alice_pp900work", 
+                      "PWG-UD/MULT - work in progress");
+    return g;
+  }
+
+  //____________________________________________________________________
+  /** 
+   * Get the ALICE NSD data in @f$ |\eta|<1.8@f$ for pp at @f$ \sqrt{s} 
+   * = 900GeV@f$  
+   * Work in progress
+   *
+   * @return graph of data 
+   * 
+   * @ingroup pwglf_forward_otherdata
+   */
+  static TGraphAsymmErrors* AliceCentralNsd900Work()
+  {
+    TGraphAsymmErrors *g = new TGraphAsymmErrors(18);
   
-  g->SetPoint(0,-1.7,3.84726);  g->SetPointError(0,0.1,0.1,0.114853,0.118974);
-  g->SetPoint(1,-1.5,3.87094);  g->SetPointError(1,0.1,0.1,0.10574,0.108613);
-  g->SetPoint(2,-1.3,3.84769);  g->SetPointError(2,0.1,0.1,0.105942,0.107644);
-  g->SetPoint(3,-1.1,3.8122);   g->SetPointError(3,0.1,0.1,0.100838,0.101818);
-  g->SetPoint(4,-0.9,3.75388);  g->SetPointError(4,0.1,0.1,0.0967073,0.0972099);
-  g->SetPoint(5,-0.7,3.68733);  g->SetPointError(5,0.1,0.1,0.0923424,0.0925662);
-  g->SetPoint(6,-0.5,3.61874);  g->SetPointError(6,0.1,0.1,0.0904027,0.090477);
-  g->SetPoint(7,-0.3,3.58091);  g->SetPointError(7,0.1,0.1,0.0875915,0.0875992);
-  g->SetPoint(8,-0.1,3.54905);  g->SetPointError(8,0.1,0.1,0.086046,0.0860293);
-  g->SetPoint(9,0.1,3.55968);   g->SetPointError(9,0.1,0.1,0.0884776,0.0884612);
-  g->SetPoint(10,0.3,3.57729); g->SetPointError(10,0.1,0.1,0.0857614,0.0857693);
-  g->SetPoint(11,0.5,3.63879); g->SetPointError(11,0.1,0.1,0.0879787,0.0880559);
-  g->SetPoint(12,0.7,3.69422); g->SetPointError(12,0.1,0.1,0.0931736,0.0933962);
-  g->SetPoint(13,0.9,3.76835); g->SetPointError(13,0.1,0.1,0.0928833,0.0934106);
-  g->SetPoint(14,1.1,3.80647);  g->SetPointError(14,0.1,0.1,0.0998124,0.100799);
-  g->SetPoint(15,1.3,3.83824);  g->SetPointError(15,0.1,0.1,0.102549,0.104298);
-  g->SetPoint(16,1.5,3.85778);  g->SetPointError(16,0.1,0.1,0.10267,0.105607);
-  g->SetPoint(17,1.7,3.87075);  g->SetPointError(17,0.1,0.1,0.114093,0.11829);
+    g->SetPoint(0,-1.7,3.84726);g->SetPointError(0,0.1,0.1,0.114853,0.118974);
+    g->SetPoint(1,-1.5,3.87094);g->SetPointError(1,0.1,0.1,0.10574,0.108613);
+    g->SetPoint(2,-1.3,3.84769);g->SetPointError(2,0.1,0.1,0.105942,0.107644);
+    g->SetPoint(3,-1.1,3.8122); g->SetPointError(3,0.1,0.1,0.100838,0.101818);
+    g->SetPoint(4,-0.9,3.75388);g->SetPointError(4,0.1,0.1,0.0967073,0.0972099);
+    g->SetPoint(5,-0.7,3.68733);g->SetPointError(5,0.1,0.1,0.0923424,0.0925662);
+    g->SetPoint(6,-0.5,3.61874);g->SetPointError(6,0.1,0.1,0.0904027,0.090477);
+    g->SetPoint(7,-0.3,3.58091);g->SetPointError(7,0.1,0.1,0.0875915,0.0875992);
+    g->SetPoint(8,-0.1,3.54905);g->SetPointError(8,0.1,0.1,0.086046,0.0860293);
+    g->SetPoint(9,0.1,3.55968); g->SetPointError(9,0.1,0.1,0.0884776,0.0884612);
+    g->SetPoint(10,0.3,3.57729);g->SetPointError(10,0.1,0.1,0.0857614,0.085769);
+    g->SetPoint(11,0.5,3.63879);g->SetPointError(11,0.1,0.1,0.0879787,0.088056);
+    g->SetPoint(12,0.7,3.69422);g->SetPointError(12,0.1,0.1,0.0931736,0.093396);
+    g->SetPoint(13,0.9,3.76835);g->SetPointError(13,0.1,0.1,0.0928833,0.093410);
+    g->SetPoint(14,1.1,3.80647);g->SetPointError(14,0.1,0.1,0.0998124,0.100799);
+    g->SetPoint(15,1.3,3.83824);g->SetPointError(15,0.1,0.1,0.102549,0.104298);
+    g->SetPoint(16,1.5,3.85778);g->SetPointError(16,0.1,0.1,0.10267,0.105607);
+    g->SetPoint(17,1.7,3.87075);g->SetPointError(17,0.1,0.1,0.114093,0.11829);
 
-  SetGraphAttributes(g, NSD, WIP, false, "alice_pp900nsdwork", 
-                    "ALICE NSD - work in progress");
-  return g;
-}
+    SetGraphAttributes(g, NSD, WIP, false, "alice_pp900nsdwork", 
+                      "PWG-UD/MULT - work in progress");
+    return g;
+  }
 
-//____________________________________________________________________
-/** 
- * Get the ALICE INEL>0 data in @f$ |\eta|<1.8@f$ for pp at @f$ \sqrt{s}
- * = 900GeV@f$ 
- * Work in progress
- *
- * @return graph of data 
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralInelGt900Work()
-{
-  TGraphAsymmErrors *g = new TGraphAsymmErrors(10);
+  //____________________________________________________________________
+  /** 
  * Get the ALICE INEL>0 data in @f$ |\eta|<1.8@f$ for pp at @f$ \sqrt{s}
  * = 900GeV@f$ 
  * Work in progress
  *
  * @return graph of data 
  
  * @ingroup pwglf_forward_otherdata
  */
+  static TGraphAsymmErrors* AliceCentralInelGt900Work()
+  {
+    TGraphAsymmErrors *g = new TGraphAsymmErrors(10);
      
-  g->SetPoint(0,-0.9,3.90755); g->SetPointError(0,0.1,0.1,0.0377085,0.0355101);
-  g->SetPoint(1,-0.7,3.8357);  g->SetPointError(1,0.1,0.1,0.0477674,0.0349303);
-  g->SetPoint(2,-0.5,3.76291); g->SetPointError(2,0.1,0.1,0.0277709,0.040401);
-  g->SetPoint(3,-0.3,3.72336); g->SetPointError(3,0.1,0.1,0.0343553,0.0250805);
-  g->SetPoint(4,-0.1,3.69098); g->SetPointError(4,0.1,0.1,0.0324842,0.0324248);
-  g->SetPoint(5,0.1,3.70076);  g->SetPointError(5,0.1,0.1,0.0390932,0.0246738);
-  g->SetPoint(6,0.3,3.71924);  g->SetPointError(6,0.1,0.1,0.0576054,0.0287106);
-  g->SetPoint(7,0.5,3.7844);   g->SetPointError(7,0.1,0.1,0.0316759,0.0295124);
-  g->SetPoint(8,0.7,3.84319);  g->SetPointError(8,0.1,0.1,0.0293134,0.0332125);
-  g->SetPoint(9,0.9,3.92163);  g->SetPointError(9,0.1,0.1,0.0558339,0.0394925);
+    g->SetPoint(0,-0.9,3.90755);g->SetPointError(0,0.1,0.1,0.0377085,0.0355101);
+    g->SetPoint(1,-0.7,3.8357); g->SetPointError(1,0.1,0.1,0.0477674,0.0349303);
+    g->SetPoint(2,-0.5,3.76291);g->SetPointError(2,0.1,0.1,0.0277709,0.040401);
+    g->SetPoint(3,-0.3,3.72336);g->SetPointError(3,0.1,0.1,0.0343553,0.0250805);
+    g->SetPoint(4,-0.1,3.69098);g->SetPointError(4,0.1,0.1,0.0324842,0.0324248);
+    g->SetPoint(5,0.1,3.70076); g->SetPointError(5,0.1,0.1,0.0390932,0.0246738);
+    g->SetPoint(6,0.3,3.71924); g->SetPointError(6,0.1,0.1,0.0576054,0.0287106);
+    g->SetPoint(7,0.5,3.7844);  g->SetPointError(7,0.1,0.1,0.0316759,0.0295124);
+    g->SetPoint(8,0.7,3.84319); g->SetPointError(8,0.1,0.1,0.0293134,0.0332125);
+    g->SetPoint(9,0.9,3.92163); g->SetPointError(9,0.1,0.1,0.0558339,0.0394925);
 
-  SetGraphAttributes(g, INELGt0, WIP, false, "alice_pp900inelgtwork", 
-                    "ALICE INEL>0 - work in progress");
-  return g;
-}
+    SetGraphAttributes(g, INELGt0, WIP, false, "alice_pp900inelgtwork", 
+                      "PWG-UD/MULT - work in progress");
+    return g;
+  }
 
-//____________________________________________________________________
-/**
- * Get the ALICE INEL data in @f$ |\eta|<1.8@f$ for pp
- * at @f$ \sqrt{s} = 2760GeV@f$
- * Work in progress
- * 
- * @return graph of data
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralInel2760Work()
-{
-  TGraphAsymmErrors*    g = new TGraphAsymmErrors(18);
-  g->SetPoint(0,-1.7,4.0313);  g->SetPointError(0,0.1,0.1,0.100951,0.104678);
-  g->SetPoint(1,-1.5,4.0431);  g->SetPointError(1,0.1,0.1,0.10129,0.103883);
-  g->SetPoint(2,-1.3,4.01251); g->SetPointError(2,0.1,0.1,0.10847,0.110089);
-  g->SetPoint(3,-1.1,3.96799); g->SetPointError(3,0.1,0.1,0.105543,0.106623);
-  g->SetPoint(4,-0.9,3.89669); g->SetPointError(4,0.1,0.1,0.110974,0.111625);
-  g->SetPoint(5,-0.7,3.81051); g->SetPointError(5,0.1,0.1,0.108463,0.108882);
-  g->SetPoint(6,-0.5,3.76537); g->SetPointError(6,0.1,0.1,0.105488,0.105773);
-  g->SetPoint(7,-0.3,3.69733); g->SetPointError(7,0.1,0.1,0.110156,0.11035);
-  g->SetPoint(8,-0.1,3.68148); g->SetPointError(8,0.1,0.1,0.105564,0.105733);
-  g->SetPoint(9,0.1,3.67386);  g->SetPointError(9,0.1,0.1,0.1058,0.105968);
-  g->SetPoint(10,0.3,3.69873); g->SetPointError(10,0.1,0.1,0.107167,0.107367);
-  g->SetPoint(11,0.5,3.76377); g->SetPointError(11,0.1,0.1,0.111177,0.111448);
-  g->SetPoint(12,0.7,3.81956); g->SetPointError(12,0.1,0.1,0.107198,0.107623);
-  g->SetPoint(13,0.9,3.89506); g->SetPointError(13,0.1,0.1,0.105617,0.1063);
-  g->SetPoint(14,1.1,3.95888); g->SetPointError(14,0.1,0.1,0.111316,0.112336);
-  g->SetPoint(15,1.3,4.00176); g->SetPointError(15,0.1,0.1,0.111751,0.113315);
-  g->SetPoint(16,1.5,4.03247); g->SetPointError(16,0.1,0.1,0.114383,0.116674);
-  g->SetPoint(17,1.7,4.061);   g->SetPointError(17,0.1,0.1,0.107094,0.110665);
+  //____________________________________________________________________
+  /**
  * Get the ALICE INEL data in @f$ |\eta|<1.8@f$ for pp
  * at @f$ \sqrt{s} = 2760GeV@f$
  * Work in progress
  
  * @return graph of data
  
  * @ingroup pwglf_forward_otherdata
  */
+  static TGraphAsymmErrors* AliceCentralInel2760Work()
+  {
+    TGraphAsymmErrors*    g = new TGraphAsymmErrors(18);
+    g->SetPoint(0,-1.7,4.0313);  g->SetPointError(0,0.1,0.1,0.100951,0.104678);
+    g->SetPoint(1,-1.5,4.0431);  g->SetPointError(1,0.1,0.1,0.10129,0.103883);
+    g->SetPoint(2,-1.3,4.01251); g->SetPointError(2,0.1,0.1,0.10847,0.110089);
+    g->SetPoint(3,-1.1,3.96799); g->SetPointError(3,0.1,0.1,0.105543,0.106623);
+    g->SetPoint(4,-0.9,3.89669); g->SetPointError(4,0.1,0.1,0.110974,0.111625);
+    g->SetPoint(5,-0.7,3.81051); g->SetPointError(5,0.1,0.1,0.108463,0.108882);
+    g->SetPoint(6,-0.5,3.76537); g->SetPointError(6,0.1,0.1,0.105488,0.105773);
+    g->SetPoint(7,-0.3,3.69733); g->SetPointError(7,0.1,0.1,0.110156,0.11035);
+    g->SetPoint(8,-0.1,3.68148); g->SetPointError(8,0.1,0.1,0.105564,0.105733);
+    g->SetPoint(9,0.1,3.67386);  g->SetPointError(9,0.1,0.1,0.1058,0.105968);
+    g->SetPoint(10,0.3,3.69873); g->SetPointError(10,0.1,0.1,0.107167,0.107367);
+    g->SetPoint(11,0.5,3.76377); g->SetPointError(11,0.1,0.1,0.111177,0.111448);
+    g->SetPoint(12,0.7,3.81956); g->SetPointError(12,0.1,0.1,0.107198,0.107623);
+    g->SetPoint(13,0.9,3.89506); g->SetPointError(13,0.1,0.1,0.105617,0.1063);
+    g->SetPoint(14,1.1,3.95888); g->SetPointError(14,0.1,0.1,0.111316,0.112336);
+    g->SetPoint(15,1.3,4.00176); g->SetPointError(15,0.1,0.1,0.111751,0.113315);
+    g->SetPoint(16,1.5,4.03247); g->SetPointError(16,0.1,0.1,0.114383,0.116674);
+    g->SetPoint(17,1.7,4.061);   g->SetPointError(17,0.1,0.1,0.107094,0.110665);
   
-  SetGraphAttributes(g, INEL, WIP, false,
-                     "alice_ppInel2760Work",
-                     "ALICE INEL - work in progress");
-  return g;
-}
-//____________________________________________________________________
-/**
- * Get the ALICE NSD data in @f$ |\eta|<1.8@f$ for pp
- * at @f$ \sqrt{s} = 2760GeV@f$
- * Work in progress
- * 
- * @return graph of data
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralNsd2760Work()
-{
-  TGraphAsymmErrors*    g = new TGraphAsymmErrors(18);
-  g->SetPoint(0,-1.7,4.8704);  g->SetPointError(0,0.1,0.1,0.221293,0.224755);
-  g->SetPoint(1,-1.5,4.88859); g->SetPointError(1,0.1,0.1,0.221269,0.223478);
-  g->SetPoint(2,-1.3,4.85326); g->SetPointError(2,0.1,0.1,0.21109,0.212455);
-  g->SetPoint(3,-1.1,4.80085); g->SetPointError(3,0.1,0.1,0.21041,0.211157);
-  g->SetPoint(4,-0.9,4.71513); g->SetPointError(4,0.1,0.1,0.198361,0.198749);
-  g->SetPoint(5,-0.7,4.61153); g->SetPointError(5,0.1,0.1,0.194009,0.194176);
-  g->SetPoint(6,-0.5,4.55715); g->SetPointError(6,0.1,0.1,0.193226,0.193281);
-  g->SetPoint(7,-0.3,4.47508); g->SetPointError(7,0.1,0.1,0.182433,0.182439);
-  g->SetPoint(8,-0.1,4.45709); g->SetPointError(8,0.1,0.1,0.186518,0.186506);
-  g->SetPoint(9,0.1,4.44707);  g->SetPointError(9,0.1,0.1,0.185747,0.185735);
-  g->SetPoint(10,0.3,4.47734); g->SetPointError(10,0.1,0.1,0.185835,0.185841);
-  g->SetPoint(11,0.5,4.55477); g->SetPointError(11,0.1,0.1,0.186934,0.186991);
-  g->SetPoint(12,0.7,4.62236); g->SetPointError(12,0.1,0.1,0.196631,0.196796);
-  g->SetPoint(13,0.9,4.71277); g->SetPointError(13,0.1,0.1,0.204034,0.20441);
-  g->SetPoint(14,1.1,4.78902); g->SetPointError(14,0.1,0.1,0.20317,0.20394);
-  g->SetPoint(15,1.3,4.84008); g->SetPointError(15,0.1,0.1,0.205573,0.206967);
-  g->SetPoint(16,1.5,4.87453); g->SetPointError(16,0.1,0.1,0.206314,0.208667);
-  g->SetPoint(17,1.7,4.90614); g->SetPointError(17,0.1,0.1,0.218996,0.222545);
+    SetGraphAttributes(g, INEL, WIP, false,
+                      "alice_ppInel2760Work",
+                      "PWG-UD/MULT - work in progress");
+    return g;
+  }
+  //____________________________________________________________________
+  /**
  * Get the ALICE NSD data in @f$ |\eta|<1.8@f$ for pp
  * at @f$ \sqrt{s} = 2760GeV@f$
  * Work in progress
  
  * @return graph of data
  
  * @ingroup pwglf_forward_otherdata
  */
+  static TGraphAsymmErrors* AliceCentralNsd2760Work()
+  {
+    TGraphAsymmErrors*    g = new TGraphAsymmErrors(18);
+    g->SetPoint(0,-1.7,4.8704);  g->SetPointError(0,0.1,0.1,0.221293,0.224755);
+    g->SetPoint(1,-1.5,4.88859); g->SetPointError(1,0.1,0.1,0.221269,0.223478);
+    g->SetPoint(2,-1.3,4.85326); g->SetPointError(2,0.1,0.1,0.21109,0.212455);
+    g->SetPoint(3,-1.1,4.80085); g->SetPointError(3,0.1,0.1,0.21041,0.211157);
+    g->SetPoint(4,-0.9,4.71513); g->SetPointError(4,0.1,0.1,0.198361,0.198749);
+    g->SetPoint(5,-0.7,4.61153); g->SetPointError(5,0.1,0.1,0.194009,0.194176);
+    g->SetPoint(6,-0.5,4.55715); g->SetPointError(6,0.1,0.1,0.193226,0.193281);
+    g->SetPoint(7,-0.3,4.47508); g->SetPointError(7,0.1,0.1,0.182433,0.182439);
+    g->SetPoint(8,-0.1,4.45709); g->SetPointError(8,0.1,0.1,0.186518,0.186506);
+    g->SetPoint(9,0.1,4.44707);  g->SetPointError(9,0.1,0.1,0.185747,0.185735);
+    g->SetPoint(10,0.3,4.47734); g->SetPointError(10,0.1,0.1,0.185835,0.185841);
+    g->SetPoint(11,0.5,4.55477); g->SetPointError(11,0.1,0.1,0.186934,0.186991);
+    g->SetPoint(12,0.7,4.62236); g->SetPointError(12,0.1,0.1,0.196631,0.196796);
+    g->SetPoint(13,0.9,4.71277); g->SetPointError(13,0.1,0.1,0.204034,0.20441);
+    g->SetPoint(14,1.1,4.78902); g->SetPointError(14,0.1,0.1,0.20317,0.20394);
+    g->SetPoint(15,1.3,4.84008); g->SetPointError(15,0.1,0.1,0.205573,0.206967);
+    g->SetPoint(16,1.5,4.87453); g->SetPointError(16,0.1,0.1,0.206314,0.208667);
+    g->SetPoint(17,1.7,4.90614); g->SetPointError(17,0.1,0.1,0.218996,0.222545);
   
-  SetGraphAttributes(g, NSD, WIP, false,
-                     "alice_ppNsd2760Work",
-                     "ALICE NSD - work in progress");
-  return g;
-}
-//____________________________________________________________________
-/**
- * Get the ALICE INELGt0 data in @f$ |\eta|<1.8@f$ for pp
- * at @f$ \sqrt{s} = 2760GeV@f$
- * Work in progress
- * 
- * @return graph of data
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralInelGt2760Work()
-{
-  TGraphAsymmErrors*    g = new TGraphAsymmErrors(10);
-  g->SetPoint(0,-0.9,4.96315); g->SetPointError(0,0.1,0.1,0.0439746,0.0440108);
-  g->SetPoint(1,-0.7,4.8532);  g->SetPointError(1,0.1,0.1,0.0426373,0.0600727);
-  g->SetPoint(2,-0.5,4.79582); g->SetPointError(2,0.1,0.1,0.0475367,0.0466255);
-  g->SetPoint(3,-0.3,4.70907); g->SetPointError(3,0.1,0.1,0.0313084,0.0468084);
-  g->SetPoint(4,-0.1,4.68906); g->SetPointError(4,0.1,0.1,0.0413149,0.0397909);
-  g->SetPoint(5,0.1,4.67937);  g->SetPointError(5,0.1,0.1,0.0346151,0.0450248);
-  g->SetPoint(6,0.3,4.7109);   g->SetPointError(6,0.1,0.1,0.0408403,0.0839992);
-  g->SetPoint(7,0.5,4.79359);  g->SetPointError(7,0.1,0.1,0.0324516,0.0357053);
-  g->SetPoint(8,0.7,4.86469);  g->SetPointError(8,0.1,0.1,0.0452175,0.0477304);
-  g->SetPoint(9,0.9,4.96078);  g->SetPointError(9,0.1,0.1,0.0566798,0.0804077);
+    SetGraphAttributes(g, NSD, WIP, false,
+                      "alice_ppNsd2760Work",
+                      "PWG-UD/MULT - work in progress");
+    return g;
+  }
+  //____________________________________________________________________
+  /**
  * Get the ALICE INELGt0 data in @f$ |\eta|<1.8@f$ for pp
  * at @f$ \sqrt{s} = 2760GeV@f$
  * Work in progress
  
  * @return graph of data
  
  * @ingroup pwglf_forward_otherdata
  */
+  static TGraphAsymmErrors* AliceCentralInelGt2760Work()
+  {
+    TGraphAsymmErrors*    g = new TGraphAsymmErrors(10);
+    g->SetPoint(0,-0.9,4.96315); g->SetPointError(0,0.1,0.1,0.0439746,0.0440108);
+    g->SetPoint(1,-0.7,4.8532); g->SetPointError(1,0.1,0.1,0.0426373,0.0600727);
+    g->SetPoint(2,-0.5,4.79582);g->SetPointError(2,0.1,0.1,0.0475367,0.0466255);
+    g->SetPoint(3,-0.3,4.70907);g->SetPointError(3,0.1,0.1,0.0313084,0.0468084);
+    g->SetPoint(4,-0.1,4.68906);g->SetPointError(4,0.1,0.1,0.0413149,0.0397909);
+    g->SetPoint(5,0.1,4.67937); g->SetPointError(5,0.1,0.1,0.0346151,0.0450248);
+    g->SetPoint(6,0.3,4.7109);  g->SetPointError(6,0.1,0.1,0.0408403,0.0839992);
+    g->SetPoint(7,0.5,4.79359); g->SetPointError(7,0.1,0.1,0.0324516,0.0357053);
+    g->SetPoint(8,0.7,4.86469); g->SetPointError(8,0.1,0.1,0.0452175,0.0477304);
+    g->SetPoint(9,0.9,4.96078); g->SetPointError(9,0.1,0.1,0.0566798,0.0804077);
   
-  SetGraphAttributes(g, INELGt0, WIP, false,
-                     "alice_ppInelGt2760Work",
-                     "ALICE INELGt0 - work in progress");
-  return g;
-}
+    SetGraphAttributes(g, INELGt0, WIP, false,
+                      "alice_ppInelGt2760Work",
+                      "PWG-UD/MULT - work in progress");
+    return g;
+  }
 
-//____________________________________________________________________
-/**
- * Get the ALICE INEL data in @f$ |\eta|<1.8@f$ for pp
- * at @f$ \sqrt{s} = 7000GeV@f$
- * Work in progress
- * 
- * @return graph of data
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralInel7000Work()
-{
-  TGraphAsymmErrors* g = new TGraphAsymmErrors(18);
-  g->SetPoint(0,-1.7,4.97541);  g->SetPointError(0,0.1,0.1,0.187526,0.162049);
-  g->SetPoint(1,-1.5,4.98161);  g->SetPointError(1,0.1,0.1,0.128353,0.149085);
-  g->SetPoint(2,-1.3,4.94853);  g->SetPointError(2,0.1,0.1,0.129841,0.144762);
-  g->SetPoint(3,-1.1,4.88924);  g->SetPointError(3,0.1,0.1,0.137866,0.157862);
-  g->SetPoint(4,-0.9,4.79998);  g->SetPointError(4,0.1,0.1,0.144492,0.158783);
-  g->SetPoint(5,-0.7,4.71399);  g->SetPointError(5,0.1,0.1,0.132703,0.156135);
-  g->SetPoint(6,-0.5,4.63098);  g->SetPointError(6,0.1,0.1,0.129938,0.147085);
-  g->SetPoint(7,-0.3,4.56815);  g->SetPointError(7,0.1,0.1,0.129424,0.145485);
-  g->SetPoint(8,-0.1,4.52372);  g->SetPointError(8,0.1,0.1,0.129049,0.145285);
-  g->SetPoint(9,0.1,4.52946);   g->SetPointError(9,0.1,0.1,0.131266,0.144285);
-  g->SetPoint(10,0.3,4.56411);  g->SetPointError(10,0.1,0.1,0.130652,0.149019);
-  g->SetPoint(11,0.5,4.63554);  g->SetPointError(11,0.1,0.1,0.133415,0.144298);
-  g->SetPoint(12,0.7,4.71592);  g->SetPointError(12,0.1,0.1,0.136436,0.151768);
-  g->SetPoint(13,0.9,4.8059);   g->SetPointError(13,0.1,0.1,0.136996,0.142551);
-  g->SetPoint(14,1.1,4.88457);  g->SetPointError(14,0.1,0.1,0.134237,0.142764);
-  g->SetPoint(15,1.3,4.92903);  g->SetPointError(15,0.1,0.1,0.131933,0.152767);
-  g->SetPoint(16,1.5,4.96487);  g->SetPointError(16,0.1,0.1,0.140214,0.147354);
-  g->SetPoint(17,1.7,4.95502);  g->SetPointError(17,0.1,0.1,0.156906,0.14759);
+  //____________________________________________________________________
+  /**
  * Get the ALICE INEL data in @f$ |\eta|<1.8@f$ for pp
  * at @f$ \sqrt{s} = 7000GeV@f$
  * Work in progress
  
  * @return graph of data
  
  * @ingroup pwglf_forward_otherdata
  */
+  static TGraphAsymmErrors* AliceCentralInel7000Work()
+  {
+    TGraphAsymmErrors* g = new TGraphAsymmErrors(18);
+    g->SetPoint(0,-1.7,4.97541); g->SetPointError(0,0.1,0.1,0.187526,0.162049);
+    g->SetPoint(1,-1.5,4.98161); g->SetPointError(1,0.1,0.1,0.128353,0.149085);
+    g->SetPoint(2,-1.3,4.94853); g->SetPointError(2,0.1,0.1,0.129841,0.144762);
+    g->SetPoint(3,-1.1,4.88924); g->SetPointError(3,0.1,0.1,0.137866,0.157862);
+    g->SetPoint(4,-0.9,4.79998); g->SetPointError(4,0.1,0.1,0.144492,0.158783);
+    g->SetPoint(5,-0.7,4.71399); g->SetPointError(5,0.1,0.1,0.132703,0.156135);
+    g->SetPoint(6,-0.5,4.63098); g->SetPointError(6,0.1,0.1,0.129938,0.147085);
+    g->SetPoint(7,-0.3,4.56815); g->SetPointError(7,0.1,0.1,0.129424,0.145485);
+    g->SetPoint(8,-0.1,4.52372); g->SetPointError(8,0.1,0.1,0.129049,0.145285);
+    g->SetPoint(9,0.1,4.52946);  g->SetPointError(9,0.1,0.1,0.131266,0.144285);
+    g->SetPoint(10,0.3,4.56411); g->SetPointError(10,0.1,0.1,0.130652,0.149019);
+    g->SetPoint(11,0.5,4.63554); g->SetPointError(11,0.1,0.1,0.133415,0.144298);
+    g->SetPoint(12,0.7,4.71592); g->SetPointError(12,0.1,0.1,0.136436,0.151768);
+    g->SetPoint(13,0.9,4.8059);  g->SetPointError(13,0.1,0.1,0.136996,0.142551);
+    g->SetPoint(14,1.1,4.88457); g->SetPointError(14,0.1,0.1,0.134237,0.142764);
+    g->SetPoint(15,1.3,4.92903); g->SetPointError(15,0.1,0.1,0.131933,0.152767);
+    g->SetPoint(16,1.5,4.96487); g->SetPointError(16,0.1,0.1,0.140214,0.147354);
+    g->SetPoint(17,1.7,4.95502); g->SetPointError(17,0.1,0.1,0.156906,0.14759);
   
-  SetGraphAttributes(g, INEL, WIP, false,
-                     "alice_ppInel7000Work",
-                     "ALICE INEL - work in progress");
-  return g;
-}
-//____________________________________________________________________
-/**
- * Get the ALICE NSD data in @f$ |\eta|<1.8@f$ for pp
- * at @f$ \sqrt{s} = 7000GeV@f$
- * Work in progress
- * 
- * @return graph of data
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralNsd7000Work()
-{
-  TGraphAsymmErrors* g = new TGraphAsymmErrors(18);
-  g->SetPoint(0,-1.7,6.12747);  g->SetPointError(0,0.1,0.1,0.157334,0.164918);
-  g->SetPoint(1,-1.5,6.1353);   g->SetPointError(1,0.1,0.1,0.146834,0.152011);
-  g->SetPoint(2,-1.3,6.09648);  g->SetPointError(2,0.1,0.1,0.140067,0.143287);
-  g->SetPoint(3,-1.1,6.02552);  g->SetPointError(3,0.1,0.1,0.133435,0.135281);
-  g->SetPoint(4,-0.9,5.91705);  g->SetPointError(4,0.1,0.1,0.129449,0.130381);
-  g->SetPoint(5,-0.7,5.81246);  g->SetPointError(5,0.1,0.1,0.126477,0.126883);
-  g->SetPoint(6,-0.5,5.71104);  g->SetPointError(6,0.1,0.1,0.124521,0.124655);
-  g->SetPoint(7,-0.3,5.63422);  g->SetPointError(7,0.1,0.1,0.120116,0.12013);
-  g->SetPoint(8,-0.1,5.57977);  g->SetPointError(8,0.1,0.1,0.119286,0.119256);
-  g->SetPoint(9,0.1,5.58662);   g->SetPointError(9,0.1,0.1,0.119331,0.119301);
-  g->SetPoint(10,0.3,5.6291);   g->SetPointError(10,0.1,0.1,0.120683,0.120697);
-  g->SetPoint(11,0.5,5.7166);   g->SetPointError(11,0.1,0.1,0.122787,0.122923);
-  g->SetPoint(12,0.7,5.81463);  g->SetPointError(12,0.1,0.1,0.126293,0.1267);
-  g->SetPoint(13,0.9,5.92404);  g->SetPointError(13,0.1,0.1,0.129522,0.130456);
-  g->SetPoint(14,1.1,6.01958);  g->SetPointError(14,0.1,0.1,0.134505,0.136333);
-  g->SetPoint(15,1.3,6.07232);  g->SetPointError(15,0.1,0.1,0.140728,0.143909);
-  g->SetPoint(16,1.5,6.11596);  g->SetPointError(16,0.1,0.1,0.14756,0.15268);
-  g->SetPoint(17,1.7,6.10155);  g->SetPointError(17,0.1,0.1,0.151731,0.159518);
+    SetGraphAttributes(g, INEL, WIP, false,
+                      "alice_ppInel7000Work",
+                      "PWG-UD/MULT - work in progress");
+    return g;
+  }
+  //____________________________________________________________________
+  /**
  * Get the ALICE NSD data in @f$ |\eta|<1.8@f$ for pp
  * at @f$ \sqrt{s} = 7000GeV@f$
  * Work in progress
  
  * @return graph of data
  
  * @ingroup pwglf_forward_otherdata
  */
+  static TGraphAsymmErrors* AliceCentralNsd7000Work()
+  {
+    TGraphAsymmErrors* g = new TGraphAsymmErrors(18);
+    g->SetPoint(0,-1.7,6.12747);g->SetPointError(0,0.1,0.1,0.157334,0.164918);
+    g->SetPoint(1,-1.5,6.1353); g->SetPointError(1,0.1,0.1,0.146834,0.152011);
+    g->SetPoint(2,-1.3,6.09648);g->SetPointError(2,0.1,0.1,0.140067,0.143287);
+    g->SetPoint(3,-1.1,6.02552);g->SetPointError(3,0.1,0.1,0.133435,0.135281);
+    g->SetPoint(4,-0.9,5.91705);g->SetPointError(4,0.1,0.1,0.129449,0.130381);
+    g->SetPoint(5,-0.7,5.81246);g->SetPointError(5,0.1,0.1,0.126477,0.126883);
+    g->SetPoint(6,-0.5,5.71104);g->SetPointError(6,0.1,0.1,0.124521,0.124655);
+    g->SetPoint(7,-0.3,5.63422);g->SetPointError(7,0.1,0.1,0.120116,0.12013);
+    g->SetPoint(8,-0.1,5.57977);g->SetPointError(8,0.1,0.1,0.119286,0.119256);
+    g->SetPoint(9,0.1,5.58662); g->SetPointError(9,0.1,0.1,0.119331,0.119301);
+    g->SetPoint(10,0.3,5.6291); g->SetPointError(10,0.1,0.1,0.120683,0.120697);
+    g->SetPoint(11,0.5,5.7166); g->SetPointError(11,0.1,0.1,0.122787,0.122923);
+    g->SetPoint(12,0.7,5.81463);g->SetPointError(12,0.1,0.1,0.126293,0.1267);
+    g->SetPoint(13,0.9,5.92404);g->SetPointError(13,0.1,0.1,0.129522,0.130456);
+    g->SetPoint(14,1.1,6.01958);g->SetPointError(14,0.1,0.1,0.134505,0.136333);
+    g->SetPoint(15,1.3,6.07232);g->SetPointError(15,0.1,0.1,0.140728,0.143909);
+    g->SetPoint(16,1.5,6.11596);g->SetPointError(16,0.1,0.1,0.14756,0.15268);
+    g->SetPoint(17,1.7,6.10155);g->SetPointError(17,0.1,0.1,0.151731,0.159518);
   
-  SetGraphAttributes(g, NSD, WIP, false,
-                     "alice_ppNsd7000Work",
-                     "ALICE NSD - work in progress");
-  return g;
-}
+    SetGraphAttributes(g, NSD, WIP, false,
+                      "alice_ppNsd7000Work",
+                      "PWG-UD/MULT - work in progress");
+    return g;
+  }
 
-//____________________________________________________________________
-/**
- * Get the ALICE INELGt0 data in @f$ |\eta|<1.8@f$ for pp
- * at @f$ \sqrt{s} = 7000GeV@f$
- * Work in progress
- * 
- * @return graph of data
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralInelGt7000Work()
-{
-  TGraphAsymmErrors* g = new TGraphAsymmErrors(10);
-  g->SetPoint(0,-0.9,6.22689);  g->SetPointError(0,0.1,0.1,0.0959094,0.10395);
-  g->SetPoint(1,-0.7,6.11603);  g->SetPointError(1,0.1,0.1,0.0609242,0.0984269);
-  g->SetPoint(2,-0.5,6.00881);  g->SetPointError(2,0.1,0.1,0.0595691,0.0842045);
-  g->SetPoint(3,-0.3,5.9274);   g->SetPointError(3,0.1,0.1,0.0560837,0.0780806);
-  g->SetPoint(4,-0.1,5.86988);  g->SetPointError(4,0.1,0.1,0.0552611,0.0798584);
-  g->SetPoint(5,0.1,5.8773);    g->SetPointError(5,0.1,0.1,0.062512,0.077947);
-  g->SetPoint(6,0.3,5.92215);   g->SetPointError(6,0.1,0.1,0.0535152,0.0863595);
-  g->SetPoint(7,0.5,6.01458);   g->SetPointError(7,0.1,0.1,0.0578218,0.0745799);
-  g->SetPoint(8,0.7,6.1186);    g->SetPointError(8,0.1,0.1,0.0767397,0.0899574);
-  g->SetPoint(9,0.9,6.23468);   g->SetPointError(9,0.1,0.1,0.0786932,0.073295);
+  //____________________________________________________________________
+  /**
  * Get the ALICE INELGt0 data in @f$ |\eta|<1.8@f$ for pp
  * at @f$ \sqrt{s} = 7000GeV@f$
  * Work in progress
  
  * @return graph of data
  
  * @ingroup pwglf_forward_otherdata
  */
+  static TGraphAsymmErrors* AliceCentralInelGt7000Work()
+  {
+    TGraphAsymmErrors* g = new TGraphAsymmErrors(10);
+    g->SetPoint(0,-0.9,6.22689);g->SetPointError(0,0.1,0.1,0.0959094,0.10395);
+    g->SetPoint(1,-0.7,6.11603);g->SetPointError(1,0.1,0.1,0.0609242,0.0984269);
+    g->SetPoint(2,-0.5,6.00881);g->SetPointError(2,0.1,0.1,0.0595691,0.0842045);
+    g->SetPoint(3,-0.3,5.9274); g->SetPointError(3,0.1,0.1,0.0560837,0.0780806);
+    g->SetPoint(4,-0.1,5.86988);g->SetPointError(4,0.1,0.1,0.0552611,0.0798584);
+    g->SetPoint(5,0.1,5.8773);  g->SetPointError(5,0.1,0.1,0.062512,0.077947);
+    g->SetPoint(6,0.3,5.92215); g->SetPointError(6,0.1,0.1,0.0535152,0.0863595);
+    g->SetPoint(7,0.5,6.01458); g->SetPointError(7,0.1,0.1,0.0578218,0.0745799);
+    g->SetPoint(8,0.7,6.1186);  g->SetPointError(8,0.1,0.1,0.0767397,0.0899574);
+    g->SetPoint(9,0.9,6.23468); g->SetPointError(9,0.1,0.1,0.0786932,0.073295);
   
-  SetGraphAttributes(g, INELGt0, WIP, false,
-                     "alice_ppInelGt7000Work",
-                     "ALICE INELGt0 - work in progress");
-  return g;
-}
-//____________________________________________________________________
-/**
- * Get the ALICE INEL data in @f$ |\eta|<1.8@f$ for pp
- * at @f$ \sqrt{s} = 8000GeV@f$
- * Work in progress
- * 
- * @return graph of data
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralInel8000Work()
-{
-  TGraphAsymmErrors*  g = new TGraphAsymmErrors(18);
-  g->SetPoint(0,-1.7,5.1333);  g->SetPointError(0,0.1,0.1,0.0613865,0.0707879);
-  g->SetPoint(1,-1.5,5.14341); g->SetPointError(1,0.1,0.1,0.117829,0.121428);
-  g->SetPoint(2,-1.3,5.13589); g->SetPointError(2,0.1,0.1,0.110807,0.113393);
-  g->SetPoint(3,-1.1,5.06167); g->SetPointError(3,0.1,0.1,0.120091,0.121635);
-  g->SetPoint(4,-0.9,4.97796); g->SetPointError(4,0.1,0.1,0.116141,0.117154);
-  g->SetPoint(5,-0.7,4.88431); g->SetPointError(5,0.1,0.1,0.11944,0.120064);
-  g->SetPoint(6,-0.5,4.81236); g->SetPointError(6,0.1,0.1,0.11049,0.110936);
-  g->SetPoint(7,-0.3,4.72239); g->SetPointError(7,0.1,0.1,0.110969,0.111284);
-  g->SetPoint(8,-0.1,4.66962); g->SetPointError(8,0.1,0.1,0.125108,0.125337);
-  g->SetPoint(9,0.1,4.69441);  g->SetPointError(9,0.1,0.1,0.113766,0.114021);
-  g->SetPoint(10,0.3,4.7335);  g->SetPointError(10,0.1,0.1,0.104531,0.104866);
-  g->SetPoint(11,0.5,4.79917); g->SetPointError(11,0.1,0.1,0.107076,0.107534);
-  g->SetPoint(12,0.7,4.88713); g->SetPointError(12,0.1,0.1,0.106124,0.106827);
-  g->SetPoint(13,0.9,4.98035); g->SetPointError(13,0.1,0.1,0.120107,0.121087);
-  g->SetPoint(14,1.1,5.05366); g->SetPointError(14,0.1,0.1,0.115795,0.11739);
-  g->SetPoint(15,1.3,5.11276); g->SetPointError(15,0.1,0.1,0.123574,0.125877);
-  g->SetPoint(16,1.5,5.16105); g->SetPointError(16,0.1,0.1,0.0979751,0.102305);
-  g->SetPoint(17,1.7,5.16477); g->SetPointError(17,0.1,0.1,0.116096,0.121392);
+    SetGraphAttributes(g, INELGt0, WIP, false,
+                      "alice_ppInelGt7000Work",
+                      "PWG-UD/MULT - work in progress");
+    return g;
+  }
+  //____________________________________________________________________
+  /**
  * Get the ALICE INEL data in @f$ |\eta|<1.8@f$ for pp
  * at @f$ \sqrt{s} = 8000GeV@f$
  * Work in progress
  
  * @return graph of data
  
  * @ingroup pwglf_forward_otherdata
  */
+  static TGraphAsymmErrors* AliceCentralInel8000Work()
+  {
+    TGraphAsymmErrors*  g = new TGraphAsymmErrors(18);
+    g->SetPoint(0,-1.7,5.1333); g->SetPointError(0,0.1,0.1,0.0613865,0.0707879);
+    g->SetPoint(1,-1.5,5.14341);g->SetPointError(1,0.1,0.1,0.117829,0.121428);
+    g->SetPoint(2,-1.3,5.13589);g->SetPointError(2,0.1,0.1,0.110807,0.113393);
+    g->SetPoint(3,-1.1,5.06167);g->SetPointError(3,0.1,0.1,0.120091,0.121635);
+    g->SetPoint(4,-0.9,4.97796);g->SetPointError(4,0.1,0.1,0.116141,0.117154);
+    g->SetPoint(5,-0.7,4.88431);g->SetPointError(5,0.1,0.1,0.11944,0.120064);
+    g->SetPoint(6,-0.5,4.81236);g->SetPointError(6,0.1,0.1,0.11049,0.110936);
+    g->SetPoint(7,-0.3,4.72239);g->SetPointError(7,0.1,0.1,0.110969,0.111284);
+    g->SetPoint(8,-0.1,4.66962);g->SetPointError(8,0.1,0.1,0.125108,0.125337);
+    g->SetPoint(9,0.1,4.69441); g->SetPointError(9,0.1,0.1,0.113766,0.114021);
+    g->SetPoint(10,0.3,4.7335); g->SetPointError(10,0.1,0.1,0.104531,0.104866);
+    g->SetPoint(11,0.5,4.79917);g->SetPointError(11,0.1,0.1,0.107076,0.107534);
+    g->SetPoint(12,0.7,4.88713);g->SetPointError(12,0.1,0.1,0.106124,0.106827);
+    g->SetPoint(13,0.9,4.98035);g->SetPointError(13,0.1,0.1,0.120107,0.121087);
+    g->SetPoint(14,1.1,5.05366);g->SetPointError(14,0.1,0.1,0.115795,0.11739);
+    g->SetPoint(15,1.3,5.11276);g->SetPointError(15,0.1,0.1,0.123574,0.125877);
+    g->SetPoint(16,1.5,5.16105);g->SetPointError(16,0.1,0.1,0.0979751,0.102305);
+    g->SetPoint(17,1.7,5.16477);g->SetPointError(17,0.1,0.1,0.116096,0.121392);
   
-  SetGraphAttributes(g, INEL, WIP, false,
-                     "alice_ppInel8000Work",
-                     "ALICE INEL - work in progress");
-  return g;
-}
+    SetGraphAttributes(g, INEL, WIP, false,
+                      "alice_ppInel8000Work",
+                      "PWG-UD/MULT - work in progress");
+    return g;
+  }
 
-//____________________________________________________________________
-/**
- * Get the ALICE NSD data in @f$ |\eta|<1.8@f$ for pp
- * at @f$ \sqrt{s} = 8000GeV@f$
- * Work in progress
- * 
- * @return graph of data
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralNsd8000Work()
-{
-  TGraphAsymmErrors* g = new TGraphAsymmErrors(18);
-  g->SetPoint(0,-1.7,6.28722);  g->SetPointError(0,0.1,0.1,0.220541,0.2263);
-  g->SetPoint(1,-1.5,6.29211);  g->SetPointError(1,0.1,0.1,0.126653,0.132922);
-  g->SetPoint(2,-1.3,6.29313);  g->SetPointError(2,0.1,0.1,0.142432,0.145805);
-  g->SetPoint(3,-1.1,6.1944);   g->SetPointError(3,0.1,0.1,0.116871,0.119093);
-  g->SetPoint(4,-0.9,6.09529);  g->SetPointError(4,0.1,0.1,0.121064,0.122121);
-  g->SetPoint(5,-0.7,5.97811);  g->SetPointError(5,0.1,0.1,0.111525,0.112012);
-  g->SetPoint(6,-0.5,5.88992);  g->SetPointError(6,0.1,0.1,0.119488,0.119637);
-  g->SetPoint(7,-0.3,5.78296);  g->SetPointError(7,0.1,0.1,0.114947,0.114962);
-  g->SetPoint(8,-0.1,5.71633);  g->SetPointError(8,0.1,0.1,0.0933,0.09326);
-  g->SetPoint(9,0.1,5.74663);   g->SetPointError(9,0.1,0.1,0.109892,0.109857);
-  g->SetPoint(10,0.3,5.79472);  g->SetPointError(10,0.1,0.1,0.123704,0.123718);
-  g->SetPoint(11,0.5,5.87545);  g->SetPointError(11,0.1,0.1,0.122522,0.122667);
-  g->SetPoint(12,0.7,5.98273);  g->SetPointError(12,0.1,0.1,0.128316,0.128739);
-  g->SetPoint(13,0.9,6.09037);  g->SetPointError(13,0.1,0.1,0.114321,0.115437);
-  g->SetPoint(14,1.1,6.18105);  g->SetPointError(14,0.1,0.1,0.125412,0.127476);
-  g->SetPoint(15,1.3,6.24275);  g->SetPointError(15,0.1,0.1,0.118631,0.122597);
-  g->SetPoint(16,1.5,6.28916);  g->SetPointError(16,0.1,0.1,0.144205,0.149736);
-  g->SetPoint(17,1.7,6.28878);  g->SetPointError(17,0.1,0.1,0.134438,0.143695);
+  //____________________________________________________________________
+  /**
  * Get the ALICE NSD data in @f$ |\eta|<1.8@f$ for pp
  * at @f$ \sqrt{s} = 8000GeV@f$
  * Work in progress
  
  * @return graph of data
  
  * @ingroup pwglf_forward_otherdata
  */
+  static TGraphAsymmErrors* AliceCentralNsd8000Work()
+  {
+    TGraphAsymmErrors* g = new TGraphAsymmErrors(18);
+    g->SetPoint(0,-1.7,6.28722);g->SetPointError(0,0.1,0.1,0.220541,0.2263);
+    g->SetPoint(1,-1.5,6.29211);g->SetPointError(1,0.1,0.1,0.126653,0.132922);
+    g->SetPoint(2,-1.3,6.29313);g->SetPointError(2,0.1,0.1,0.142432,0.145805);
+    g->SetPoint(3,-1.1,6.1944); g->SetPointError(3,0.1,0.1,0.116871,0.119093);
+    g->SetPoint(4,-0.9,6.09529);g->SetPointError(4,0.1,0.1,0.121064,0.122121);
+    g->SetPoint(5,-0.7,5.97811);g->SetPointError(5,0.1,0.1,0.111525,0.112012);
+    g->SetPoint(6,-0.5,5.88992);g->SetPointError(6,0.1,0.1,0.119488,0.119637);
+    g->SetPoint(7,-0.3,5.78296);g->SetPointError(7,0.1,0.1,0.114947,0.114962);
+    g->SetPoint(8,-0.1,5.71633);g->SetPointError(8,0.1,0.1,0.0933,0.09326);
+    g->SetPoint(9,0.1,5.74663); g->SetPointError(9,0.1,0.1,0.109892,0.109857);
+    g->SetPoint(10,0.3,5.79472);g->SetPointError(10,0.1,0.1,0.123704,0.123718);
+    g->SetPoint(11,0.5,5.87545);g->SetPointError(11,0.1,0.1,0.122522,0.122667);
+    g->SetPoint(12,0.7,5.98273);g->SetPointError(12,0.1,0.1,0.128316,0.128739);
+    g->SetPoint(13,0.9,6.09037);g->SetPointError(13,0.1,0.1,0.114321,0.115437);
+    g->SetPoint(14,1.1,6.18105);g->SetPointError(14,0.1,0.1,0.125412,0.127476);
+    g->SetPoint(15,1.3,6.24275);g->SetPointError(15,0.1,0.1,0.118631,0.122597);
+    g->SetPoint(16,1.5,6.28916);g->SetPointError(16,0.1,0.1,0.144205,0.149736);
+    g->SetPoint(17,1.7,6.28878);g->SetPointError(17,0.1,0.1,0.134438,0.143695);
   
-  SetGraphAttributes(g, NSD, WIP, false,
-                     "alice_ppNsd8000Work",
-                     "ALICE NSD - work in progress");
-  return g;
-}
-//____________________________________________________________________
-/**
- * Get the ALICE INELGt0 data in @f$ |\eta|<1.8@f$ for pp
- * at @f$ \sqrt{s} = 8000GeV@f$
- * Work in progress
- * 
- * @return graph of data
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* AliceCentralInelGt8000Work()
-{
-  TGraphAsymmErrors*  g = new TGraphAsymmErrors(10);
-  g->SetPoint(0,-0.9,6.38567);  g->SetPointError(0,0.1,0.1,0.0436571,0.0436571);
-  g->SetPoint(1,-0.7,6.26363);  g->SetPointError(1,0.1,0.1,0.0312036,0.0312036);
-  g->SetPoint(2,-0.5,6.17205);  g->SetPointError(2,0.1,0.1,0.0351509,0.0351509);
-  g->SetPoint(3,-0.3,6.05629);  g->SetPointError(3,0.1,0.1,0.0302028,0.0302028);
-  g->SetPoint(4,-0.1,5.98823);  g->SetPointError(4,0.1,0.1,0.0141541,0.0141541);
-  g->SetPoint(5,0.1,6.02043);   g->SetPointError(5,0.1,0.1,0.0256893,0.0256893);
-  g->SetPoint(6,0.3,6.07111);   g->SetPointError(6,0.1,0.1,0.0380304,0.0380304);
-  g->SetPoint(7,0.5,6.15492);   g->SetPointError(7,0.1,0.1,0.0384435,0.0384435);
-  g->SetPoint(8,0.7,6.26781);   g->SetPointError(8,0.1,0.1,0.0450579,0.0450579);
-  g->SetPoint(9,0.9,6.38491);   g->SetPointError(9,0.1,0.1,0.0396431,0.0396431);
+    SetGraphAttributes(g, NSD, WIP, false,
+                      "alice_ppNsd8000Work",
+                      "PWG-UD/MULT - work in progress");
+    return g;
+  }
+  //____________________________________________________________________
+  /**
  * Get the ALICE INELGt0 data in @f$ |\eta|<1.8@f$ for pp
  * at @f$ \sqrt{s} = 8000GeV@f$
  * Work in progress
  
  * @return graph of data
  
  * @ingroup pwglf_forward_otherdata
  */
+  static TGraphAsymmErrors* AliceCentralInelGt8000Work()
+  {
+    TGraphAsymmErrors*  g = new TGraphAsymmErrors(10);
+    g->SetPoint(0,-0.9,6.38567);g->SetPointError(0,0.1,0.1,0.0436571,0.0436571);
+    g->SetPoint(1,-0.7,6.26363);g->SetPointError(1,0.1,0.1,0.0312036,0.0312036);
+    g->SetPoint(2,-0.5,6.17205);g->SetPointError(2,0.1,0.1,0.0351509,0.0351509);
+    g->SetPoint(3,-0.3,6.05629);g->SetPointError(3,0.1,0.1,0.0302028,0.0302028);
+    g->SetPoint(4,-0.1,5.98823);g->SetPointError(4,0.1,0.1,0.0141541,0.0141541);
+    g->SetPoint(5,0.1,6.02043); g->SetPointError(5,0.1,0.1,0.0256893,0.0256893);
+    g->SetPoint(6,0.3,6.07111); g->SetPointError(6,0.1,0.1,0.0380304,0.0380304);
+    g->SetPoint(7,0.5,6.15492); g->SetPointError(7,0.1,0.1,0.0384435,0.0384435);
+    g->SetPoint(8,0.7,6.26781); g->SetPointError(8,0.1,0.1,0.0450579,0.0450579);
+    g->SetPoint(9,0.9,6.38491); g->SetPointError(9,0.1,0.1,0.0396431,0.0396431);
   
-  SetGraphAttributes(g, INELGt0, WIP, false,
-                     "alice_ppInelGt8000Work",
-                     "ALICE INELGt0 - work in progress");
-  return g;
-}
+    SetGraphAttributes(g, INELGt0, WIP, false,
+                      "alice_ppInelGt8000Work",
+                      "PWG-UD/MULT - work in progress");
+    return g;
+  }
   
-//____________________________________________________________________
-/** 
- * Get the CMS NSD data in @f$ |\eta|<2.25@f$ for pp at @f$
- * \sqrt{s} = 900GeV@f$ 
- *
- * p7743_d8x1y1
- *
- * @return graph of data 
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* CMSNsd900()
-{
-  // CMS published NSD data - p7743_d8x1y1
-  double x[] = { -2.25, -1.75, -1.25, -0.75, -0.25, 0.25, 0.75, 1.25, 1.75, 
-    2.25 };
-  double exm[] = { 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 };
-  double exp[] = { 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 };
-  double y[] = { 3.6, 3.73, 3.62, 3.54, 3.48, 3.48, 3.54, 3.62, 3.73,  3.6 };
-  double eym[] = { 0.13, 0.14, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.14,0.13 };
-  double eyp[] = { 0.13, 0.14, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.14, 0.13 };
-  const int np = 10;
-  TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-  SetGraphAttributes(g, NSD, CMS, false, "cms_nsd900", "CMS NSD");
+  //____________________________________________________________________
+  /** 
+   * Get the CMS NSD data in @f$ |\eta|<2.25@f$ for pp at @f$
+   * \sqrt{s} = 900GeV@f$ 
+   *
+   * p7743_d8x1y1
+   *
+   * @return graph of data 
+   * 
+   * @ingroup pwglf_forward_otherdata
+   */
+  static TGraphAsymmErrors* CMSNsd900()
+  {
+    // CMS published NSD data - p7743_d8x1y1
+    double x[] ={ -2.25, -1.75, -1.25, -0.75, -0.25, 0.25, 0.75,1.25,1.75,2.25};
+    double exm[] ={ 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25};
+    double exp[] ={ 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25};
+    double y[] = { 3.6, 3.73, 3.62, 3.54, 3.48, 3.48, 3.54, 3.62, 3.73,  3.6 };
+    double eym[] ={ 0.13, 0.14, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.14,0.13 };
+    double eyp[] ={ 0.13, 0.14, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.14,0.13 };
+    const int np = 10;
+    TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
+    SetGraphAttributes(g, NSD, CMS, false, "cms_nsd900", "CMS");
 
-  return g;
-}
+    return g;
+  }
 
 
-//____________________________________________________________________
-/** 
- * Get the CMS NSD data in @f$ |\eta|<2.25@f$ for pp at @f$
- * \sqrt{s} = 2.36GeV@f$ 
- *
- * p7743_d8x1y2
- *
- * @return graph of data 
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* CMSNsd2360()
-{
-  // CMS NSD 2360 - p7743_d8x1y2
-  double x[] = { -2.25, -1.75, -1.25, -0.75, -0.25, 0.25, 0.75,1.25,1.75,2.25 };
-  double exm[] = { 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 };
-  double exp[] = { 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 };
-  double y[] = { 4.78, 4.81, 4.66, 4.61, 4.47, 4.47, 4.61, 4.66, 4.81,  4.78 };
-  double eym[] = { 0.17, 0.18, 0.17, 0.17, 0.16, 0.16, 0.17, 0.17, 0.18, 0.17 };
-  double eyp[] = { 0.17, 0.18, 0.17, 0.17, 0.16, 0.16, 0.17, 0.17, 0.18, 0.17 };
-  const int np = 10;
-  TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-  SetGraphAttributes(g, NSD, CMS, false, "cms_nsd2360", "CMS NSD");
-  return g;
-}
+  //____________________________________________________________________
+  /** 
  * Get the CMS NSD data in @f$ |\eta|<2.25@f$ for pp at @f$
  * \sqrt{s} = 2.36GeV@f$ 
  *
  * p7743_d8x1y2
  *
  * @return graph of data 
  
  * @ingroup pwglf_forward_otherdata
  */
+  static TGraphAsymmErrors* CMSNsd2360()
+  {
+    // CMS NSD 2360 - p7743_d8x1y2
+    double x[] ={ -2.25, -1.75, -1.25, -0.75, -0.25, 0.25, 0.75,1.25,1.75,2.25};
+    double exm[] ={ 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25};
+    double exp[] ={ 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25};
+    double y[] = { 4.78, 4.81, 4.66, 4.61, 4.47, 4.47, 4.61, 4.66, 4.81,  4.78};
+    double eym[] ={ 0.17, 0.18, 0.17, 0.17, 0.16, 0.16, 0.17, 0.17, 0.18, 0.17};
+    double eyp[] ={ 0.17, 0.18, 0.17, 0.17, 0.16, 0.16, 0.17, 0.17, 0.18, 0.17};
+    const int np = 10;
+    TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
+    SetGraphAttributes(g, NSD, CMS, false, "cms_nsd2360", "CMS");
+    return g;
+  }
 
 
-//____________________________________________________________________
-/** 
- * Get the CMS NSD data in @f$ |\eta|<2.25@f$ for pp at @f$
- * \sqrt{s} = 7TeV@f$ 
- *
- * p7838_d5x1y1
- *
- * @return graph of data 
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TGraphAsymmErrors* CMSNsd7000()
-{
-  // CMS NSD 7000 - Plot: p7838_d5x1y1
-  double x[] = { -2.25, -1.75, -1.25, -0.75, -0.25, 0.25, 0.75,1.25,1.75,2.25 };
-  double exm[] = { 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 };
-  double exp[] = { 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25 };
-  double y[] = { 6.18, 6.26, 6.14, 6.01, 5.78, 5.78, 6.01, 6.14, 6.26,  6.18 };
-  double eym[] = { 0.25, 0.25, 0.24, 0.24, 0.23, 0.23, 0.24, 0.24, 0.25, 0.25 };
-  double eyp[] = { 0.25, 0.25, 0.24, 0.24, 0.23, 0.23, 0.24, 0.24, 0.25, 0.25 };
-  const int np = 10;
-  TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
-  SetGraphAttributes(g, NSD, CMS, false, "cms_nsd7000", "CMS NSD");
-  return g;
-}
+  //____________________________________________________________________
+  /** 
  * Get the CMS NSD data in @f$ |\eta|<2.25@f$ for pp at @f$
  * \sqrt{s} = 7TeV@f$ 
  *
  * p7838_d5x1y1
  *
  * @return graph of data 
  
  * @ingroup pwglf_forward_otherdata
  */
+  static TGraphAsymmErrors* CMSNsd7000()
+  {
+    // CMS NSD 7000 - Plot: p7838_d5x1y1
+    double x[] ={ -2.25, -1.75, -1.25, -0.75, -0.25, 0.25, 0.75,1.25,1.75,2.25};
+    double exm[] ={ 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25};
+    double exp[] ={ 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25};
+    double y[] ={ 6.18, 6.26, 6.14, 6.01, 5.78, 5.78, 6.01, 6.14, 6.26,  6.18 };
+    double eym[] ={ 0.25, 0.25, 0.24, 0.24, 0.23, 0.23, 0.24, 0.24, 0.25, 0.25};
+    double eyp[] ={ 0.25, 0.25, 0.24, 0.24, 0.23, 0.23, 0.24, 0.24, 0.25, 0.25};
+    const int np = 10;
+    TGraphAsymmErrors* g = new TGraphAsymmErrors(np, x, y, exm, exp, eym, eyp);
+    SetGraphAttributes(g, NSD, CMS, false, "cms_nsd7000", "CMS");
+    return g;
+  }
 
-//____________________________________________________________________
-/** 
- * Get a single data graph 
- * 
- * @param which    Which type
- * @param sys      Collisition system
- * @param energy   Collision energy
- * @param type     Trigger type 
- * @param centLow  Low cut on centrality 
- * @param centHigh Up cut on centraltiy
- * 
- * @return Data graph 
- */
-TGraphAsymmErrors*
-GetSingle(UShort_t which, 
-         UShort_t sys, 
-         UShort_t energy, 
-         UShort_t type=0x1, 
-         UShort_t centLow=0,
-         UShort_t centHigh=0) 
-{
-  TGraphAsymmErrors* ret = 0;
-  if (sys == 1) { 
-    if (TMath::Abs(energy-900) < 10) {
-      switch (type) { 
-      case 1: // INEL 
-       switch (which) { 
-       case PYTHIA:    ret = Pythia900INEL(); break;
-       case UA5:       ret = UA5Inel(false);  break;
-       case UA5+10:    ret = UA5Inel(true);   break;
-       case ALICE:     ret = AliceCentralInel900(); break;
-       case WIP:       ret = AliceCentralInel900Work(); break;
-       }      
-       break;
-      case 2: // INEL>0
-       switch (which) { 
-       case ALICE: ret = AliceCentralInelGt900(); break;
-       case WIP:   ret = AliceCentralInelGt900Work(); break;
-       }
-       break;
-      case 4:  // NSD 
-       switch (which) { 
-       case PYTHIA: ret = Pythia900NSD(); break;
-       case UA5:    ret = UA5Nsd(false);  break;
-       case UA5+10: ret = UA5Nsd(true);   break;
-       case ALICE:  ret = AliceCentralNsd900(); break;
-       case WIP:    ret = AliceCentralNsd900Work(); break;
-       case CMS:    ret = CMSNsd900();          break;
-       }
-       break;
-      } // type 
-    }
-    else if (TMath::Abs(energy-2360) < 10) {
-      switch (type) { 
-      case 1: // INEL 
-       switch (which) { 
-       case ALICE: ret = AliceCentralInel2360(); break;
-       case WIP: ret = AliceCentralInel2760Work(); break;
-       }
-       break;
-      case 2: // INEL > 0
-       switch (which) {
-       case ALICE: ret = AliceCentralInelGt2360(); break;
-       case WIP: ret = AliceCentralInelGt2760Work(); break;
-       }
-       break;
-      case 4: // NSD 
-       switch (which) { 
-       case ALICE: ret = AliceCentralNsd2360(); break;
-       case CMS:   ret = CMSNsd2360(); break;
-       case WIP:   ret = AliceCentralNsd2760Work(); break;
-       }
-       break;
+  //____________________________________________________________________
+  /** 
+   * Get a single data graph 
+   * 
+   * @param which    Which type
+   * @param sys      Collisition system
+   * @param energy   Collision energy
+   * @param type     Trigger type 
+   * @param centLow  Low cut on centrality 
+   * @param centHigh Up cut on centraltiy
+   * 
+   * @return Data graph 
+   */
+  static TGraphAsymmErrors* GetSingle(UShort_t which, 
+                                     UShort_t sys, 
+                                     UShort_t energy, 
+                                     UShort_t type=0x1, 
+                                     UShort_t centLow=0,
+                                     UShort_t centHigh=0) 
+  {
+    TGraphAsymmErrors* ret = 0;
+    if (sys == 1) { 
+      if (TMath::Abs(energy-900) < 10) {
+       switch (type) { 
+       case 1: // INEL 
+         switch (which) { 
+         case PYTHIA:    ret = Pythia900INEL(); break;
+         case UA5:       ret = UA5Inel(false);  break;
+         case UA5+10:    ret = UA5Inel(true);   break;
+         case ALICE:     ret = AliceCentralInel900(); break;
+         case WIP:       ret = AliceCentralInel900Work(); break;
+         }      
+         break;
+       case 2: // INEL>0
+         switch (which) { 
+         case ALICE: ret = AliceCentralInelGt900(); break;
+         case WIP:   ret = AliceCentralInelGt900Work(); break;
+         }
+         break;
+       case 4:  // NSD 
+         switch (which) { 
+         case PYTHIA: ret = Pythia900NSD(); break;
+         case UA5:    ret = UA5Nsd(false);  break;
+         case UA5+10: ret = UA5Nsd(true);   break;
+         case ALICE:  ret = AliceCentralNsd900(); break;
+         case WIP:    ret = AliceCentralNsd900Work(); break;
+         case CMS:    ret = CMSNsd900();          break;
+         }
+         break;
+       } // type 
       }
-    }
-    else if (TMath::Abs(energy-2760) < 10) {
-      switch (type) { 
-      case 1: // INEL 
-       switch (which) { 
-       case WIP: ret = AliceCentralInel2760Work(); break;
-       }
-       break;
-      case 2: // INEL > 0
-       switch (which) {
-       case WIP: ret = AliceCentralInelGt2760Work(); break;
-       }
-       break;
-      case 4: // NSD 
-       switch (which) { 
-       case WIP: ret = AliceCentralNsd2760Work(); break;
+      else if (TMath::Abs(energy-2360) < 10) {
+       switch (type) { 
+       case 1: // INEL 
+         switch (which) { 
+         case ALICE: ret = AliceCentralInel2360(); break;
+         case WIP: ret = AliceCentralInel2760Work(); break;
+         }
+         break;
+       case 2: // INEL > 0
+         switch (which) {
+         case ALICE: ret = AliceCentralInelGt2360(); break;
+         case WIP: ret = AliceCentralInelGt2760Work(); break;
+         }
+         break;
+       case 4: // NSD 
+         switch (which) { 
+         case ALICE: ret = AliceCentralNsd2360(); break;
+         case CMS:   ret = CMSNsd2360(); break;
+         case WIP:   ret = AliceCentralNsd2760Work(); break;
+         }
+         break;
        }
-       break;
       }
-    }
-    else if (TMath::Abs(energy-7000) < 10) {
-      switch (type) { 
-      case 1: 
-       switch (which) { 
-       case WIP: ret = AliceCentralInel7000Work(); break;
+      else if (TMath::Abs(energy-2760) < 10) {
+       switch (type) { 
+       case 1: // INEL 
+         switch (which) { 
+         case WIP: ret = AliceCentralInel2760Work(); break;
+         }
+         break;
+       case 2: // INEL > 0
+         switch (which) {
+         case WIP: ret = AliceCentralInelGt2760Work(); break;
+         }
+         break;
+       case 4: // NSD 
+         switch (which) { 
+         case WIP: ret = AliceCentralNsd2760Work(); break;
+         }
+         break;
        }
-       break;
-      case 2: // INEL > 0
-       switch (which) { 
-       case ALICE: ret = AliceCentralInelGt7000(); break;
-       case WIP: ret = AliceCentralInelGt7000Work(); break;
+      }
+      else if (TMath::Abs(energy-7000) < 10) {
+       switch (type) { 
+       case 1: 
+         switch (which) { 
+         case WIP: ret = AliceCentralInel7000Work(); break;
+         }
+         break;
+       case 2: // INEL > 0
+         switch (which) { 
+         case ALICE: ret = AliceCentralInelGt7000(); break;
+         case WIP: ret = AliceCentralInelGt7000Work(); break;
+         }
+         break;
+       case 4: // NSD 
+         switch (which) { 
+         case CMS: ret = CMSNsd7000(); break;
+         case WIP: ret = AliceCentralNsd7000Work(); break;
+         }
+         break;
        }
-       break;
-      case 4: // NSD 
-       switch (which) { 
-       case CMS: ret = CMSNsd7000(); break;
-       case WIP: ret = AliceCentralNsd7000Work(); break;
+      }
+      else if (TMath::Abs(energy-8000) < 10) {
+       switch (type) { 
+       case 1: 
+         switch (which) { 
+         case WIP: ret = AliceCentralInel8000Work(); break;
+         }
+         break;
+       case 2: // INEL > 0
+         switch (which) { 
+         case WIP: ret = AliceCentralInelGt8000Work(); break;
+         }
+         break;
+       case 4: // NSD 
+         switch (which) { 
+         case WIP: ret = AliceCentralNsd8000Work(); break;
+         }
+         break;
        }
-       break;
       }
     }
-    else if (TMath::Abs(energy-8000) < 10) {
-      switch (type) { 
-      case 1: 
-       switch (which) { 
-       case WIP: ret = AliceCentralInel8000Work(); break;
-       }
-       break;
-      case 2: // INEL > 0
-       switch (which) { 
-       case WIP: ret = AliceCentralInelGt8000Work(); break;
-       }
-       break;
-      case 4: // NSD 
+    else if (sys == 3) { // pPb 
+      if (TMath::Abs(energy - 5023) < 10 || 
+         TMath::Abs(energy - 8000) < 10) {
        switch (which) { 
-       case WIP: ret = AliceCentralNsd8000Work(); break;
+       case ALICE: ret = AliceCentralpPb5023(); break;
        }
-       break;
       }
     }
-  }
-  else if (sys == 3) { // pPb 
-    if (TMath::Abs(energy - 5023) < 10 || 
-       TMath::Abs(energy - 8000) < 10) {
+    if (!ret) {
+      TString w;
       switch (which) { 
-      case ALICE: ret = AliceCentralpPb5023(); break;
+      case UA5:   w = "UA5";     break;
+      case CMS:   w = "CMS";     break;
+      case ALICE: w = "ALICE";   break;
+      case WIP:   w = "WIP";     break;
+      case PYTHIA:w = "Pyhthia"; break;
+      default: w = Form("unknown(%d)", which);
       }
+      TString sy;
+      switch (sys) { 
+      case 1:  sy = "pp"; break;
+      case 2:  sy = "PbPb"; break;
+      case 3:  sy = "pPb"; break;
+      default: sy = Form("unknown(%d)", sys);
+      }
+      TString tr;
+      switch (type) { 
+      case 1:        tr = "INEL"; break;
+      case 2:        tr = "INEL>0"; break;
+      case 4:      tr = "NSD"; break;
+      default:       tr = Form("unknown(%d)", sys);
+      }
+    
+      Warning("GetSingle", "Nothing to get for "
+             "which=%s, sys=%s, energy=%dGeV, type=%s, "
+             "centLow=%d, centHigh=%d",
+             w.Data(), sy.Data(), energy, tr.Data(), centLow, centHigh);
     }
-  }
-  if (!ret) {
-    TString w;
-    switch (which) { 
-    case UA5:   w = "UA5";     break;
-    case CMS:   w = "CMS";     break;
-    case ALICE: w = "ALICE";   break;
-    case WIP:   w = "WIP";     break;
-    case PYTHIA:w = "Pyhthia"; break;
-    default: w = Form("unknown(%d)", which);
-    }
-    TString sy;
-    switch (sys) { 
-    case 1:  sy = "pp"; break;
-    case 2:  sy = "PbPb"; break;
-    case 3:  sy = "pPb"; break;
-    default: sy = Form("unknown(%d)", sys);
-    }
-    TString tr;
-    switch (type) { 
-    case 1:        tr = "INEL"; break;
-    case 2:        tr = "INEL>0"; break;
-    case 4:      tr = "NSD"; break;
-    default:       tr = Form("unknown(%d)", sys);
+#if 0
+    if (ret) {
+      if (!wn.IsNull()) wn.Append(",");
+      switch (which) { 
+      case PYTHIA: wn.Append("Pythia"); break;
+      case UA5:    wn.Append("UA5");    break;
+      case CMS:    wn.Append("CMS");    break;
+      case ALICE:  wn.Append("ALICE");  break;
+      }      
     }
-    
-    Warning("GetSingle", "Nothing to get for "
-           "which=%s, sys=%s, energy=%dGeV, type=%s, centLow=%d, centHigh=%d",
-           w.Data(), sy.Data(), energy, tr.Data(), centLow, centHigh);
+#endif
+    return ret;
   }
-#if 0
-  if (ret) {
-    if (!wn.IsNull()) wn.Append(",");
-    switch (which) { 
-    case PYTHIA: wn.Append("Pythia"); break;
-    case UA5:    wn.Append("UA5");    break;
-    case CMS:    wn.Append("CMS");    break;
-    case ALICE:  wn.Append("ALICE");  break;
-    }      
+
+  //____________________________________________________________________
+  /** 
+   * Append an item to a list 
+   * 
+   * @param s      List to append to 
+   * @param delim  Delimiter 
+   * @param what   What to append 
+   * 
+   * @return New string value 
+   */
+  static TString&  AppendItem(TString& s, char delim, const char* what)          
+  {
+    if (!s.IsNull()) s.Append(Form("%c", delim));
+    s.Append(what);
+    return s;
   }
-#endif
-  return ret;
-}
 
-//____________________________________________________________________
-/** 
- * Append an item to a list 
- * 
- * @param s      List to append to 
- * @param delim  Delimiter 
- * @param what   What to append 
- * 
- * @return New string value 
- */
-TString&
-AppendItem(TString& s, char delim, const char* what)     
-{
-  if (!s.IsNull()) s.Append(Form("%c", delim));
-  s.Append(what);
-  return s;
-}
+  //____________________________________________________________________
+  /** 
+   * Get a multi graph of data for a given energy and trigger type 
+   * 
+   * @param sys    Collision system (1: pp, 2: PbPb)
+   * @param energy Energy in GeV (900, 2360, 7000)
+   * @param type   Bit pattern of trigger type 
+   *   - 0x1 INEL 
+   *   - 0x2 INEL>0
+   *   - 0x4 NSD 
+   * @param centLow   Low centrality cut (only for PbPB)
+   * @param centHigh  High centrality cut (only for PbPB)
+   * @param which     What to get
+   * 
+   * @return A multi graph with the selected data. 
+   * 
+   * @ingroup pwglf_forward_otherdata
+   */
+  static TMultiGraph* GetData(UShort_t sys, 
+                             UShort_t energy,
+                             UShort_t type=0x1, 
+                             UShort_t centLow=0, 
+                             UShort_t centHigh=0, 
+                             UShort_t which=0x7)
+  {
+    TMultiGraph* mp = new TMultiGraph(Form("dndeta_%dGeV_%d_%03d_%03d", 
+                                          energy, type, centLow, centHigh),"");
+    TString tn;
+    TString en;
+    TString sn;
+    TString cn;
+    bool    ua5       = (which & (1 << UA5));       // 0x1
+    bool    cms       = (which & (1 << CMS));       // 0x2
+    bool    alice     = (which & (1 << ALICE));     // 0x4
+    bool    work      = (which & (1 << WIP)); // 0x8
+    bool    pythia    = (which & (1 << PYTHIA));    // 0x10
+    en.Append(Form(", #sqrt{s%s}=", sys == 1 ? "" : "_{NN}"));
+    if (energy < 1000) 
+      en.Append(Form("%dGeV", energy));
+    else {
+      if (energy % 1000 == 0) 
+       en.Append(Form("%dTeV", energy/1000));
+      else 
+       en.Append(Form("%4.2fTeV", float(energy)/1000));
+    }
 
-//____________________________________________________________________
-/** 
- * Get a multi graph of data for a given energy and trigger type 
- * 
- * @param sys    Collision system (1: pp, 2: PbPb)
- * @param energy Energy in GeV (900, 2360, 7000)
- * @param type   Bit pattern of trigger type 
- *   - 0x1 INEL 
- *   - 0x2 INEL>0
- *   - 0x4 NSD 
- * @param centLow   Low centrality cut (only for PbPB)
- * @param centHigh  High centrality cut (only for PbPB)
- * @param which     What to get
- * 
- * @return A multi graph with the selected data. 
- * 
- * @ingroup pwglf_forward_otherdata
- */
-TMultiGraph* 
-GetData(UShort_t sys, 
-       UShort_t energy,
-       UShort_t type=0x1, 
-       UShort_t centLow=0, 
-       UShort_t centHigh=0, 
-       UShort_t which=0x7)
-{
-  TMultiGraph* mp = new TMultiGraph(Form("dndeta_%dGeV_%d_%03d_%03d", 
-                                        energy, type, centLow, centHigh),"");
-  TString tn;
-  TString en;
-  TString sn;
-  TString cn;
-  bool    ua5       = (which & (1 << UA5));       // 0x1
-  bool    cms       = (which & (1 << CMS));       // 0x2
-  bool    alice     = (which & (1 << ALICE));     // 0x4
-  bool    work      = (which & (1 << WIP)); // 0x8
-  bool    pythia    = (which & (1 << PYTHIA));    // 0x10
-  en.Append(Form(", #sqrt{s%s}=", sys == 1 ? "" : "_{NN}"));
-  if (energy < 1000) 
-    en.Append(Form("%dGeV", energy));
-  else {
-    if (energy % 1000 == 0) 
-      en.Append(Form("%dTeV", energy/1000));
-    else 
-      en.Append(Form("%4.2fTeV", float(energy)/1000));
-  }
+    if (sys == 1) { 
+      if (!(type & 0x7)) 
+       Warning("GetData", "Unknown trigger mask 0x%x", type);
+
+      if (TMath::Abs(energy-2750) < 11) {
+       Warning("GetData", "Using 2360GeV data for %dGeV comparison", energy);
+       energy = 2360;
+      }
+      if (!(TMath::Abs(energy-900) < 10 || 
+           TMath::Abs(energy-2360) < 10 || 
+           TMath::Abs(energy-7000) < 10 || 
+           TMath::Abs(energy-8000) < 10)) {
+       Warning("GetData", "No other results for sys=%d, energy=%d",
+               sys, energy);
+       return 0;
+      }
+    
+      sn = "pp";
 
-  if (sys == 1) { 
-    if (!(type & 0x7)) 
-      Warning("GetData", "Unknown trigger mask 0x%x", type);
+      // Substitute NSD for V0-AND
+      if (type == 0x2000) type = 0x4;
+      if (type & 0x1) AppendItem(tn, '|', "INEL");
+      if (type & 0x2) AppendItem(tn, '|', "INEL>0");
+      if (type & 0x4) AppendItem(tn, '|', "NSD");
 
-    if (TMath::Abs(energy-2750) < 11) {
-      Warning("GetData", "Using 2360GeV data for %dGeV comparison", energy);
-      energy = 2360;
+      Bool_t seenUA5 = false;
+      for (Int_t i = 0; i < 3; i++) { 
+       UShort_t mask = (1 << i);
+       if ((type & mask) == 0) continue;
+       TGraphAsymmErrors* gUAp =(ua5   ?GetSingle(UA5,   sys,energy,mask):0);
+       TGraphAsymmErrors* gUAn =(ua5   ?GetSingle(UA5+10,sys,energy,mask):0);
+       TGraphAsymmErrors* gCMS =(cms   ?GetSingle(CMS,   sys,energy,mask):0);
+       TGraphAsymmErrors* gALI =(alice ?GetSingle(ALICE, sys,energy,mask):0);
+       TGraphAsymmErrors* gPYT =(pythia?GetSingle(PYTHIA,sys,energy,mask):0);
+       TGraphAsymmErrors* gWRK =(work  ?GetSingle(WIP,   sys,energy,mask):0);
+       if (gUAp) mp->Add(gUAp);
+       if (gUAn) mp->Add(gUAn);
+       if (gCMS) mp->Add(gCMS);
+       if (gALI) mp->Add(gALI);
+       if (gPYT) mp->Add(gPYT);
+       if (gWRK) mp->Add(gWRK);
+       if (gUAp || gUAn) seenUA5 = true;
+      }
+      if (seenUA5) sn.Append("(p#bar{p})");
     }
-    if (!(TMath::Abs(energy-900) < 10 || 
-         TMath::Abs(energy-2360) < 10 || 
-         TMath::Abs(energy-7000) < 10 || 
-         TMath::Abs(energy-8000) < 10)) {
-      Warning("GetData", "No other results for sys=%d, energy=%d",
-             sys, energy);
-      return 0;
+    else if (sys == 2) { 
+      // Nothing for PbPb so far 
+      cn = Form(", %d%%-%d%% central", centLow, centHigh);
+      sn = "PbPb";
+      // Warning("GetData", "No other data for PbPb yet");
     }
+    else if (sys == 3) {
+      if (!(TMath::Abs(energy-5023) < 10 ||
+           TMath::Abs(energy-8000) < 10) ) {
+       Warning("GetData", "No other results for sys=%d, energy=%d",
+               sys, energy);
+       return 0;
+      }
     
-    sn = "pp";
-
-    // Substitute NSD for V0-AND
-    if (type == 0x2000) type = 0x4;
-    if (type & 0x1) AppendItem(tn, '|', "INEL");
-    if (type & 0x2) AppendItem(tn, '|', "INEL>0");
-    if (type & 0x4) AppendItem(tn, '|', "NSD");
-
-    Bool_t seenUA5 = false;
-    for (Int_t i = 0; i < 3; i++) { 
-      UShort_t mask = (1 << i);
-      if ((type & mask) == 0) continue;
-      TGraphAsymmErrors* gUAp =(ua5   ?GetSingle(UA5,   sys,energy,mask):0);
-      TGraphAsymmErrors* gUAn =(ua5   ?GetSingle(UA5+10,sys,energy,mask):0);
-      TGraphAsymmErrors* gCMS =(cms   ?GetSingle(CMS,   sys,energy,mask):0);
-      TGraphAsymmErrors* gALI =(alice ?GetSingle(ALICE, sys,energy,mask):0);
-      TGraphAsymmErrors* gPYT =(pythia?GetSingle(PYTHIA,sys,energy,mask):0);
-      TGraphAsymmErrors* gWRK =(work  ?GetSingle(WIP,   sys,energy,mask):0);
-      if (gUAp) mp->Add(gUAp);
-      if (gUAn) mp->Add(gUAn);
-      if (gCMS) mp->Add(gCMS);
+      // Info("GetData", "Getting ALICE pPb data");
+      sn = "pPb";
+      TGraphAsymmErrors* gALI =(alice ?GetSingle(ALICE, sys,energy, 0):0);
       if (gALI) mp->Add(gALI);
-      if (gPYT) mp->Add(gPYT);
-      if (gWRK) mp->Add(gWRK);
-      if (gUAp || gUAn) seenUA5 = true;
+      // Info("GetData", "Got %p", gALI);
+      // Warning("GetData", "Unknown system %d", sys);
     }
-    if (seenUA5) sn.Append("(p#bar{p})");
-  }
-  else if (sys == 2) { 
-    // Nothing for PbPb so far 
-    cn = Form(", %d%%-%d%% central", centLow, centHigh);
-    sn = "PbPb";
-    // Warning("GetData", "No other data for PbPb yet");
-  }
-  else if (sys == 3) {
-    if (!(TMath::Abs(energy-5023) < 10 ||
-         TMath::Abs(energy-8000) < 10) ) {
-      Warning("GetData", "No other results for sys=%d, energy=%d",
-             sys, energy);
+
+    if (!mp->GetListOfGraphs() || mp->GetListOfGraphs()->GetEntries() <= 0) {
+      delete mp;
+      mp = 0;
       return 0;
     }
-    
-    // Info("GetData", "Getting ALICE pPb data");
-    sn = "pPb";
-    TGraphAsymmErrors* gALI =(alice ?GetSingle(ALICE, sys,energy, 0):0);
-    if (gALI) mp->Add(gALI);
-    // Info("GetData", "Got %p", gALI);
-    // Warning("GetData", "Unknown system %d", sys);
+    TString tit(Form("%s%s, %s%s", 
+                    sn.Data(), en.Data(), tn.Data(), cn.Data()));
+    mp->SetTitle(tit.Data());
+    return mp;
   }
-
-  if (!mp->GetListOfGraphs() || mp->GetListOfGraphs()->GetEntries() <= 0) {
-    delete mp;
-    mp = 0;
-    return 0;
-  }
-  TString tit(Form("%s%s, %s%s", 
-                  sn.Data(), en.Data(), tn.Data(), cn.Data()));
-  mp->SetTitle(tit.Data());
-  return mp;
-}
-
+};
 //____________________________________________________________________
 /** 
  * Plot external data for a given selection of energy and trigger type
@@ -2096,7 +2100,8 @@ OtherData(UShort_t sys=1,
          UShort_t centHigh=5, 
          UShort_t which=0xf)
 {
-  TMultiGraph* mp = GetData(sys, energy, type, centLow, centHigh, which);
+  TMultiGraph* mp = 
+    RefData::GetData(sys, energy, type, centLow, centHigh, which);
   if (!mp) return;
 
   gStyle->SetTitleX(0.1);
index 82e22ffaec15454bbb1783e7941ccf6fae5f0736..caadad2cbf320c031f45566575c2104874e4cc26 100755 (executable)
@@ -121,9 +121,9 @@ Options:
   -S,--sys=SYSTEM           Collision system ($sys)
   -E,--snn=ENERGY           Center of mass energy per nuclean pair ($snn)
   -F,--field=FIELD          L3 magnetic field ($field)
-  -d,--real-dir=ALIEN_DIR   Directory holding real data ($real_dir)
+  -d,--real-dir=DIR         Directory holding real data ($real_dir)
   -p,--real-pattern=PATTERN Glob pattern to match when searching ($real_pat)
-  -D,--mc-dir=ALIEN_DIR     Directory holding MC data ($mc_dir)
+  -D,--mc-dir=DIR           Directory holding MC data ($mc_dir)
   -P,--mc-pattern=PATTERN   Glob pattern to match when searching ($mc_pat)
   -s,--step=STEP            Run stage ($step)
   -w,--what=TRAINS          What to do 
@@ -206,6 +206,19 @@ index()
     local p=$1 ; shift 
     local m=$1 ; shift 
 
+    t=real
+    if test $m -gt 0 ; then 
+       t=MC
+    fi
+    if test "x$d" = "x" ;then 
+       echo "No input specified for index for $t data" > /dev/stderr 
+       return;
+    fi
+    if test ! -d $d || test ! -f $d ;then 
+       echo "Specified input for $t data is not a directory or file " \
+           > /dev/stderr 
+       return;
+    fi
     if test $m -gt 0 ; then 
        n="&mc"
     fi
@@ -352,9 +365,11 @@ EOF
    done
 
    # create index - unless there's one in the input directory - then 
-   # take that and link here 
-   if test -f ${real_dir}/index.root ; then 
-       ln -fs ${real_dir}/index.root ${real_idx} 
+   # take that and copy here 
+   # [We'd like to link only, but ChainBuilder needs to be updated for that] 
+   if test "x$real_dir" != x && test -f ${real_dir}/index.root ; then 
+       rm -f ${real_idx}
+       cp ${real_dir}/index.root ${real_idx} 
    else
        if test ! -f ${real_idx} ; then 
           index ${real_idx} ${real_dir} "${real_pat}" 0
@@ -362,9 +377,11 @@ EOF
    fi
 
    # create index - unless there's one in the input directory - then 
-   # take that and link here 
-   if test -f ${mc_dir}/index.root ; then 
-       ln -fs ${mc_dir}/index.root ${mc_idx}
+   # take that and copy here 
+   # [We'd like to link only, but ChainBuilder needs to be updated for that] 
+   if test "x$real_dir" != x && test -f ${mc_dir}/index.root ; then 
+       rm -f ${mc_idx}
+       cp ${mc_dir}/index.root ${mc_idx}
    else
        if test ! -f ${mc_idx} ; then 
           index ${mc_idx} ${mc_dir} "${mc_pat}" 0
@@ -421,7 +438,7 @@ check()
     fi
     if test "x$mc_dir" = "x" ; then 
        echo "No MC data directory specified" > /dev/stderr 
-       exit 1
+       exit 1
     fi
     if test "x$real_pat" = "x" ; then 
        echo "No real data pattern specified" > /dev/stderr 
@@ -429,7 +446,7 @@ check()
     fi
     if test "x$mc_pat" = "x" ; then 
        echo "No MC data pattern specified" > /dev/stderr 
-       exit 1
+       exit 1
     fi
     if test "X$w" != "Xsetup" && test "x$now" = "x" ; then 
        echo "No date/time specified" > /dev/stderr 
@@ -456,9 +473,9 @@ check()
 print_setup()
 {
     cat <<EOF
-Name:                  $name
+Name:                  ${name}
 Run:                   ${run}
-Collision system:      $sys
+Collision system:      ${sys}
 sqrt(s_NN):            ${snn}GeV
 L3 Field:              ${field}kG
 Real input directory:  ${real_dir}
@@ -471,6 +488,10 @@ Use PAR files:             ${par}
 Date & time:            ${now}
 Additional URL options: ${uuopts}
 Number of workers:      ${nwrks}/${ncpu}
+Trigger efficiencies:   
+  INEL:                 ${inel_eff}
+  INEL>0:               ${inelgt0_eff}
+  NSD:                  ${nsd_eff}
 EOF
 }
 
@@ -517,15 +538,15 @@ allAboard()
            case x$trig in 
                xinel)    
                    opts="$opts --scheme=trigger,event,background" 
-                   opts="$opts --trig=INEL" 
+                   opts="$opts --trig=INEL --trigEff=$inel_eff
                    ;;
                xnsd)     
                    opts="$opts --scheme=trigger,event"
-                   opts="$opts --trig=V0AND"
+                   opts="$opts --trig=V0AND --trigEff=$nsd_eff"
                    ;;
                xinelgt0) 
                    opts="$opts --scheme=trigger,event"
-                   opts="$opts --trig=INELGT0"
+                   opts="$opts --trig=INELGT0 --trigEff=$inelgt0_eff"
                    ;;
                x*) trig= ;;
            esac
@@ -550,11 +571,15 @@ allAboard()
            ;;
        *) echo "$0: Unknown type of train: $type" > /dev/stderr ; exit 1 ;;
     esac
+    if test ! -f $inp ; then 
+       echo "No input for $nme, giving up" > /dev/stderr 
+       return 
+    fi
     # add centrality flag if we do not know what collision system we're 
     # looking at, or it's PbPb or pPb. 
     case $sys in 
-       0|2|3) opts="$opts --cent" ;; 
-       1)                         ;;
+       1)                     ;;
+       *) opts="$opts --cent" ;; 
     esac
     if test $mc -gt 0; then 
        uopt="${uopt}&mc"
@@ -601,8 +626,10 @@ corrs()
 }
 corrs_upload() 
 {
-    (cd ${name}_mccorr_${now}  && extract_upload)
-    (cd ${name}_mceloss_${now} && extract_upload)
+    if test "X$mc_dir" != "X" ; then 
+       (cd ${name}_mccorr_${now}  && extract_upload)
+       (cd ${name}_mceloss_${now} && extract_upload)
+    fi
     (cd ${name}_eloss_${now}   && extract_upload)
     rm -f fmd_corrections.root spd_corrections.root 
     ln -s ${name}_corrs_${now}/fmd_corrections.root .
@@ -610,8 +637,10 @@ corrs_upload()
 }
 corrs_draw()
 {
-    (cd ${name}_mccorr_${now}  && draw ${fwd_dir}/DrawMCCorrSummary.C)
-    (cd ${name}_mceloss_${now} && draw ${fwd_dir}/corrs/DrawCorrELoss.C 1)
+    if test "X$mc_dir" != "X" ; then 
+       (cd ${name}_mccorr_${now}  && draw ${fwd_dir}/DrawMCCorrSummary.C)
+       (cd ${name}_mceloss_${now} && draw ${fwd_dir}/corrs/DrawCorrELoss.C 1)
+    fi
     (cd ${name}_eloss_${now}   && draw ${fwd_dir}/corrs/DrawCorrELoss.C 0)
 }
 # --- Run all AOD jobs -----------------------------------------------
@@ -705,7 +734,7 @@ collect()
                corr)      files="forward_mccorr.pdf" ;; 
                eloss)     files="corrs*.pdf" ;; 
                aod)       files="forward.pdf" ;; 
-               dndeta*)   files="forward_dndeta.pdf dndeta*.pdf" ;; 
+               dndeta*)   files="forward_dndeta.pdf dNdeta*.pdf" ;; 
                multdists) files="forward_multdists.pdf" ;;
                *) echo "Unknown directory type: $d" > /dev/stder 
                    continue 
@@ -720,7 +749,7 @@ collect()
                    */forward_dndeta.pdf)    tgt=summary_${d}_${M}.pdf ;; 
                    */forward_multdists.pdf) tgt=summary_${d}_${M}.pdf ;; 
                    */corr*.pdf)             tgt=summary_${d}_${M}.pdf ;; 
-                   */dndeta*.pdf)           tgt=${d}_${M}.pdf ;;
+                   */dNdeta*.pdf)           tgt=${d}_${M}.pdf ;;
                    *) echo "Don't know how to deal with $ff" >/dev/stderr 
                        continue
                        ;;
@@ -787,6 +816,9 @@ while test $# -gt 0 ; do
        -u|--url-opts)     uuopts="$opt" ;;
        -h|--help)         usage         ; exit 0 ;; 
        -H|--manual)       manual        ; exit 0 ;;
+       -i|--inel-eff)     inel_eff=$opt ;;
+       -0|--inelgt0-eff)  inelgt0_eff=$opt ;;
+       -v|--nsd-eff)      nsd_eff=$opt ;;
         --)                break ;;
        *) echo "$0: Unknown option $arg"  ; exit 1 ;; 
     esac
diff --git a/PWGLF/FORWARD/analysis2/scripts/AliceLogo.C b/PWGLF/FORWARD/analysis2/scripts/AliceLogo.C
new file mode 100644 (file)
index 0000000..1625c20
--- /dev/null
@@ -0,0 +1,1044 @@
+#ifndef ALICELOGO_C
+#define ALICELOGO_C
+#include <TGraph.h>
+#include <TBox.h>
+#include <TEllipse.h>
+#include <TPad.h>
+#include <TCanvas.h>
+#include <TMath.h>
+#include <TString.h>
+#include <TImage.h>
+#include <TH1.h>
+#include <TLine.h>
+#include <TColor.h>
+
+/** 
+ * Structure to draw the ALICE logo on a pad (canvas).  The logo and
+ * text is drawn using ROOT primitives and the result is somewhat
+ * scalable.
+ *
+ * Note, you can save the logo as a PNG, PDF, or SVG to include it in
+ * some other document or the like.  
+ *
+ * How to use
+ * 
+ * @code 
+ * {
+ *   TH1* h = new TH1F("h", "h", 60, -3, 3);
+ *   h->SetFillColor(kRed+1);
+ *   h->SetFillStyle(3001);
+ *   h->FillRandom("gaus");
+ *   h->Draw();
+ *   
+ *   gROOT->LoadMacro("AliceLogo.C");
+ *   AliceLogo* al = new AliceLogo();
+ *   // al->Draw(0, .75, .4, .25, "preliminary");
+ *   // al->Draw(0, .75, .4, .25, "performance");
+ *   // al->Draw(0, .75, .4, .25, "","text l3 many particles");
+ *   al->Draw(0, .75, .4, .25, "preliminary", "text l3 many particles");
+ * }
+ * @endcode
+ *
+ * There are many options for colours and options for preliminary,
+ * performance and just the logo.
+ *
+ * The logo produced does not exactly match the logos found on the
+ * ALICE web-site 
+ *
+ *   https://aliceinfo.cern.ch/Figure/alice_logo
+ *
+ * In particular, the 'C' was hard to get right.  However, the logo
+ * does follow the charter as described in 
+ * 
+ *   http://aliweb.cern.ch/system/files/documents/charter/charte_A5_120628.pdf
+ *
+ * Use the static member function(s) AliceLogo::Check to see how well
+ * this code reproduces the logos.  Note, you need the official logos
+ * in PNG format for this.  Here's a list of places to get them:
+ *
+ * - https://aliceinfo.cern.ch/Figure/sites/aliceinfo.cern.ch.Figure/files/Figures/General/elopez/2012-Jul-04-Preliminary_Logo.png
+ * - https://aliceinfo.cern.ch/Figure/sites/aliceinfo.cern.ch.Figure/files/Figures/General/elopez/2012-Jul-04-Performance_Logo.png
+ * - https://aliceinfo.cern.ch/Figure/sites/aliceinfo.cern.ch.Figure/files/Figures/General/elopez/2012-Jul-04-4_Color_Logo_CB.png
+ *
+ * @author Christian Holm Christensen <cholm@nbi.dk>
+ */
+struct AliceLogo 
+{
+  /** 
+   * Tags
+   */
+  enum ETag {
+    kNone = 0, 
+    kPreliminary, 
+    kPerformance
+  };
+  /** 
+   * Colour options 
+   */
+  enum {
+    kBW          = 0,    // Black and white only 
+    kText        = 0x1,  // Text is coloured dark-blue
+    kL3          = 0x2,  // Colour L3 red
+    kParticles   = 0x4,  // Particles coloured red
+    kMany        = 0x8,  // Many particles in many colours
+    kPad         = 0x10, // BAckground from pad 
+    kReverse     = 0x20  // Text is white 
+  };
+  /**
+   * Constructor 
+   */
+  AliceLogo(Bool_t debug=false)
+    : fPad(0), 
+      fAspect(1),
+      fL3Thick(.05),
+      fL3Height(.63), 
+      fL3Width(0),
+      fDebug(debug)
+  {
+    fRed    = TColor::GetColor(226,   0, 26);
+    fYellow = TColor::GetColor(238, 125, 17);
+    fPink   = TColor::GetColor(202,  71, 67);
+    fBlue   = TColor::GetColor(40,   58, 68);
+  }
+  /** 
+   * Parse a string with colour options 
+   * 
+   * @param what 
+   * 
+   * @return Colour flags 
+   */
+  static UInt_t ParseColors(const TString& what)
+  {
+    UInt_t col = AliceLogo::kBW;
+    if (what.Contains("l3",    TString::kIgnoreCase)) col |= kL3;
+    if (what.Contains("text",  TString::kIgnoreCase)) col |= kText;
+    if (what.Contains("part",  TString::kIgnoreCase)) col |= kParticles;
+    if (what.Contains("many",  TString::kIgnoreCase)) col |= kMany;
+    if (what.Contains("pad",   TString::kIgnoreCase)) col |= kPad;
+    if (what.Contains("rever", TString::kIgnoreCase)) col |= kReverse;
+    return col;
+  }
+  /** 
+   * Parse a tag string 
+   * 
+   * @param what String to parse 
+   * 
+   * @return Tag 
+   */
+  static UShort_t ParseTag(const TString& what)
+  {
+    UShort_t tag = AliceLogo::kNone;
+    if      (what.BeginsWith("pre", TString::kIgnoreCase)) tag = kPreliminary;
+    else if (what.BeginsWith("per", TString::kIgnoreCase)) tag = kPerformance;
+    return tag;
+  }
+  /**
+   * Draw everything 
+   * 
+   * @param p      Pad to draw in
+   * @param x      Starting X position
+   * @param y      Starting Y position
+   * @param h      Relative height 
+   * @param tag    Tag 
+   * @param colors Color options
+   */
+  void Draw(TVirtualPad* p, Double_t x=.77, Double_t y=.35, Double_t h=.25, 
+           const TString& tag="", const TString& colors="")
+  {
+    Draw(p, x, y, h, ParseTag(tag), ParseColors(colors));
+  }
+  /** 
+   * Draw everything 
+   * 
+   * @param p      Pad to draw in 
+   * @param x      Starting X position
+   * @param y      Starting Y position
+   * @param h      Relative height 
+   * @param tag    Tag 
+   * @param colors Color options
+   */
+  void Draw(TVirtualPad* p, Double_t x, Double_t y, Double_t h,
+           UShort_t tag, UInt_t color)
+  {
+    if (!p) p = gPad;
+    if (!p) { 
+      Error("AliceLogo::Draw", "No pad to draw in");
+      return;
+    }
+    if (fDebug) 
+      Printf("Pad to draw logo in: %s", p->GetName());
+    // p->SetFixedAspectRatio(true);
+    Int_t    pH  = p->YtoPixel(0);
+    if (fDebug) {
+      Int_t    pW  = p->XtoPixel(1);
+      Double_t pA  = Double_t(pW) / pH;
+      Printf("pA=%d/%d=%lf", pW, pH, pA);
+    }
+
+
+    if (tag == 0) { 
+      fAspect   =  1437. / 1933. ;
+      fL3Height = .75;
+      fL3Thick  *= 1.1;
+    }
+    else { 
+      fAspect   = 1835. / 2272. ;
+      fL3Height = .63;
+    }
+    fL3Width   = fL3Height / fAspect;
+    Int_t    hP   = Int_t(h * pH+.5); // Height in pixels 
+    Int_t    wP   = Int_t(fAspect * hP + .5); // Width in pixels 
+    Int_t    xP   = p->XtoPixel(x); // X pos in pixels 
+    Int_t    rP   = xP + wP; // Right in pixels; 
+    Double_t topX = p->PixeltoX(rP);
+    Double_t topY = y + h; // p->PixeltoY(tP); // y + h;
+    if (fDebug){
+      Int_t    yP   = p->YtoPixel(y); // X pos in pixels 
+      Int_t    tP   = yP - hP; // Top in pixels
+      Printf("(x,y)=(%d,%d) hP=%d wP=%d xP=%d yP=%d rP=%d tP=%d", 
+            xP, yP, hP, wP, xP, yP, rP, tP);
+    }
+    if (topX > 1 || topY > 1) { 
+      Warning("AliceLogo::Draw", "with (x,y)=(%f,%f) and h=%f -> top=(%f,%f)",
+             x, y, h, topX, topY);
+      topX = TMath::Min(topX, 1.);
+      topY = TMath::Min(topY, 1.);
+    }
+
+    p->cd();
+    fPad = new TPad("logo", "logo", x, y, topX, topY);
+    fPad->SetFixedAspectRatio(true);
+    fPad->SetFillColor(fDebug ? kGreen-4 : 0);
+    fPad->SetFillStyle(fDebug ? 4030     : 0);
+    fPad->SetBorderSize(fDebug ? 1 : 0);
+    fPad->SetBorderMode(fDebug ? 1 : 0);
+    fPad->SetLineColor(fDebug ? kBlue+1 : 0);
+    fPad->SetLineWidth(fDebug ? 1 : 0);
+    fPad->SetTopMargin(0);
+    fPad->SetBottomMargin(0);
+    fPad->SetLeftMargin(0);
+    fPad->SetRightMargin(0);
+    fPad->Draw();
+    Printf("(x,y)=(%f,%f) (tx,ty)=(%f,%f) (x1,y1)=(%f,%f) (x2,y2)=(%f,%f)", 
+          x, y, topX, topY, GetX1(), GetY1(), GetX2(), GetY2());
+
+    if (fDebug) {
+      Int_t    ppH  = fPad->YtoPixel(0);
+      Int_t    ppW  = fPad->XtoPixel(1);
+      Double_t ppA  = Double_t(ppW) / ppH;
+      Printf("ppA=%d/%d=%lf A=%lf",ppW, ppH, ppA, fAspect);      
+      // Printf("ppA/A=%lf/%lf=%lf", ppA, fAspect, ppA/fAspect);
+    }
+
+    Int_t bg = (color & kPad) ? p->GetFillColor() : Int_t(kWhite);
+
+    DrawL3(color, (color & kReverse && !(color & kL3) ? bg : kWhite));
+
+    Int_t txtFg = kBlack;
+    if (color & kText)
+      txtFg = (color & kReverse ? kWhite : fBlue);
+    DrawALICE(txtFg, bg);
+    if      (tag == kPreliminary) DrawLabel(txtFg, bg, true);
+    else if (tag == kPerformance) DrawLabel(txtFg, bg, false);
+   
+    p->cd();
+  }
+  /** 
+   * Draw the L3 outline.  Note, this is put in a sub-pad of it's own. 
+   * 
+   * @param color Colour flags
+   * @param bg    Background color 
+   */
+  void DrawL3(UInt_t color, Int_t bg)
+  {
+    printf("Drawing L3 image ");
+    fPad->cd();
+    Double_t       o = TMath::Max((1-fL3Width)/2,0.);
+    TVirtualPad* pad = new TPad("l3","L3",o, 1-fL3Height, 
+                               TMath::Min(fL3Width+o,1.), 1);
+    pad->SetFixedAspectRatio(true);
+    pad->SetFillColor(fDebug ? kGreen-4 : 0);
+    pad->SetFillStyle(fDebug ? 4030     : 0);
+    pad->SetBorderSize(fDebug ? 1 : 0);
+    pad->SetBorderMode(fDebug ? 1 : 0);
+    pad->SetLineColor(fDebug ? kRed+1 : 0);
+    pad->SetLineWidth(fDebug ? 1 : 0);
+    pad->SetTopMargin(0);
+    pad->SetBottomMargin(0);
+    pad->SetLeftMargin(0);
+    pad->SetRightMargin(0);
+    pad->Draw();
+    
+    Int_t lcol = (color & kL3 ? fRed : kBlack);
+    if (color & kReverse && lcol == kBlack) lcol = kWhite;
+
+    Double_t dA = 2 * TMath::Pi() / 8;
+    Double_t ro = .5 + .5 * (1 -  TMath::Cos(dA/2));
+    Double_t ri = ro - 1. / fL3Height * fL3Thick;
+    Double_t x0 = .5;
+    Double_t y0 = .5;
+    TGraph*  gi = new TGraph(9);
+    TGraph*  go = new TGraph(9);
+    gi->SetName("L3_inner");
+    go->SetName("L3_outer");
+    SetAttr(gi, gi, bg);
+    SetAttr(go, go, lcol);
+    for (Int_t i = 0; i < 9; i++) { 
+      Double_t a = (i + .5) * dA;
+      go->SetPoint(i, x0 + ro * TMath::Cos(a), y0 + ro * TMath::Sin(a));
+      gi->SetPoint(i, x0 + ri * TMath::Cos(a), y0 + ri * TMath::Sin(a));
+    }
+    pad->cd();
+    printf(".");
+    go->Draw("lf same");
+    printf(".");
+    gi->Draw("lf same");
+
+    Double_t len = .26;
+    if (color & kMany) {
+      Double_t w = 0.02;
+      for (Int_t i = 0; i < 36; i++) {
+       Int_t col = fYellow;
+       switch (i) { 
+       case 1: case 5: case 10: case 20: case 24: case 27: case 33: case 34:
+         col = fBlue; break;
+       case 3: case 4: case 8: case 16: case 19: case 23: case 29: case 30: 
+       case 32: 
+         col = fPink; break;
+       case 9: case 12: case 14: case 18: case 25: case 28: case 35:
+         col = fRed; break;
+       default:
+         break;
+       }
+       double l = len;
+       switch (i) { 
+       case 1: case 9: case 8: case 10: case 19: case 21: case 33:
+         l += 0.005; break; 
+       case 2: case 7:  case 11: case 12: case 15: case 16: case 20: case 34:
+         l += 0.02;  break;
+       case 3:  case 6: case 13: case 17: case 25: case 29:
+         l += 0.01;  break;
+       case 23: case 27: case 28: 
+         l -= 0.005;
+       default:      break;
+       }
+
+       printf(".");
+       DrawSpoke(i * 360/36, w, l, col);
+      }
+    }
+    else {
+      Double_t w  = .015;
+      Int_t col = (color & kParticles ? fRed : kBlack);
+      if (bg != kWhite) col = kWhite;
+      for (Int_t i = 0; i < 18; i++) {
+       double l = len;
+       switch (i) { 
+       case 0: case 2:                     
+         break;
+       case 1:  case 6:  case 8:         
+       case 10: case 17:
+         l += .02; break;
+       case 3: case 4: case 5: case 7: case 12: 
+         l += .01; break;
+       case 15: 
+         l += .005; break;
+       case 16:
+         l -= .005; break;
+       default:
+         break;
+       }
+       printf(".");
+       DrawSpoke(i * 360/18, w, l, col);
+      }
+    }
+    fPad->cd();
+    printf("\n");
+  }
+  /** 
+   * Draw a spoke in the L3 outline. 
+   * 
+   * @param ang Rotation angle in degrees. 
+   * @param len Length of spoke 
+   * @param fg  Foreground colour 
+   */
+  void DrawSpoke(Int_t ang, Double_t w, Double_t len, Int_t fg)
+  {
+    Double_t r1 = .12;
+
+    Double_t xx = r1;
+    Double_t yy = w/2;
+    Double_t xl = r1+len;
+
+    Double_t rad = TMath::Pi() / 180 * ang;
+    Double_t xtl  = .5 + xx * TMath::Cos(rad) - yy * TMath::Sin(rad);
+    Double_t ytl  = .5 + xx * TMath::Sin(rad) + yy * TMath::Cos(rad);
+    Double_t xbl  = .5 + xx * TMath::Cos(rad) + yy * TMath::Sin(rad);
+    Double_t ybl  = .5 + xx * TMath::Sin(rad) - yy * TMath::Cos(rad);
+    Double_t xtr  = .5 + xl * TMath::Cos(rad) - yy * TMath::Sin(rad);
+    Double_t ytr  = .5 + xl * TMath::Sin(rad) + yy * TMath::Cos(rad);
+    Double_t xbr  = .5 + xl * TMath::Cos(rad) + yy * TMath::Sin(rad);
+    Double_t ybr  = .5 + xl * TMath::Sin(rad) - yy * TMath::Cos(rad);
+
+    TGraph* tri = new TGraph(4);
+    SetAttr(tri, tri, fg);
+    tri->SetName(Form("spoke_tr_%03d", ang));
+    tri->SetPoint(0, 0.5,0.5);
+    tri->SetPoint(3, 0.5,0.5);
+    tri->SetPoint(1, xtl, ytl);
+    tri->SetPoint(2, xbl, ybl);
+    tri->Draw("same lf");
+
+    TGraph* lne = new TGraph(4);
+    SetAttr(lne, lne, fg);
+    lne->SetName(Form("spoke_ln_%03d", ang));
+    lne->SetPoint(0, xtl, ytl);
+    lne->SetPoint(1, xbl, ybl);
+    lne->SetPoint(2, xbr, ybr);
+    lne->SetPoint(3, xtr, ytr);
+    lne->SetPoint(4, xtl, ytl);
+    lne->Draw("same lf");
+    
+  }
+  /** 
+   * Draw the text ALICE in a separate pad 
+   * 
+   */
+  void DrawALICE(Int_t fg, Int_t bg)
+  {
+    printf("Drawing ALICE title ");
+    fPad->cd();
+    Double_t o  = TMath::Max((1-fL3Width)/2,0.);
+    Double_t r  = fL3Width/2;
+    Double_t t  = r*TMath::Sin(TMath::Pi()/8-.05);
+    Double_t t2 = r*TMath::Sin(TMath::Pi()/8+.05);
+    // Middle-bottom-left point is 
+    Double_t mblX = o;
+    Double_t mblY = (1-fL3Height/2) - t;
+    // Bottom-left point is 
+    Double_t blY = (1-fL3Height);
+    Double_t blX = .5 - t2;
+    // Slope
+    Double_t a = (blY - mblY) / (blX - mblX);
+    // Y is then, using y  = y1 + a (x - x1)
+    Double_t b = mblY + a * (.5 - mblX);
+
+    Double_t top = 1-fL3Height-fL3Thick;
+    Double_t hh  = 2 * (top - b);
+    Double_t bot = TMath::Max(top - hh,0.);
+    TVirtualPad* pad = new TPad("alice", "alice", o, bot+.005, 
+                               TMath::Min(o+fL3Width,1.), top+.005);
+    pad->SetFixedAspectRatio(true);
+    pad->SetFillColor(fDebug ? kGreen-4 : 0);
+    pad->SetFillStyle(fDebug ? 4030     : 0);
+    pad->SetBorderSize(fDebug ? 1 : 0);
+    pad->SetBorderMode(fDebug ? 1 : 0);
+    pad->SetLineColor(fDebug ? kMagenta+1 : 0);
+    pad->SetLineWidth(fDebug ? 1 : 0);
+    pad->SetTopMargin(0);
+    pad->SetBottomMargin(0);
+    pad->SetLeftMargin(0);
+    pad->SetRightMargin(0);
+    pad->Draw();
+    pad->cd();
+
+    Double_t wp = pad->XtoPixel(1);
+    Double_t hp = pad->YtoPixel(0);
+    a           = hp / wp;
+    
+    Double_t w = .15;
+    printf(".");
+    DrawA(0,            0.01, w, a, fg, bg);
+    printf(".");
+    DrawL(.5 - 5.8*a*w, 0.01, w, a, fg);
+    printf(".");
+    DrawI(.5 - 1.5*a*w, 0.01, w, a, fg);
+    printf(".");
+    DrawC(.5 + 2.6*a*w, 0.00, /*w,*/ a, fg, bg);
+    printf(".");
+    DrawE(1  - 3.5*a*w, 0.01, w, a, fg);
+    fPad->cd();
+
+    printf("\n");
+  }
+  /** 
+   * Draw the letter A 
+   * 
+   * @param x    Base X coordinate 
+   * @param y    Base Y coordinate 
+   * @param w    Line width 
+   * @param a    Aspect ratio of pad 
+   * @param fg   Foreground colour
+   * @param bg   Background colour
+   */
+  void DrawA(Double_t x, Double_t y, Double_t w, Double_t a,
+            Int_t fg, Int_t bg)
+  {
+    Double_t u = 4.5 * w;
+    Double_t r = u / 2;
+    TBox* b1 = new TBox(x, y, x + a * w, y + 1 - r);
+    SetAttr(b1, b1, fg);
+    b1->Draw();
+    b1->DrawBox(x + (u-w) * a, y,         x + u * a, y + 1 - r);
+    b1->DrawBox(x,             y+1-r-2*w, x + u * a,     y + 1 - r -w);
+    TEllipse* a1 = new TEllipse(x+u*a/2, y+1-r-.01, (r-.005)*a, r, 0, 180);
+    SetAttr(a1, a1, fg);
+    a1->Draw("only");
+    TEllipse* a2 = new TEllipse(x+u*a/2, y+1-r-.01, (r-w-.005)*a, r-w, 0, 180);
+    SetAttr(a2, a2, bg);
+    a2->Draw("only");
+
+#if 0
+    // To draw as lines - note line width does not scale 
+    Int_t lw = w*gPad->YtoPixel(0);
+    Double_t x1 = x+a*w/2;
+    Double_t x2 = x+a*(u-w/2);
+    Double_t y1 = y + 1 - r - 1.5*w;
+    TLine*    l1 = new TLine(x1, y, x1, y+1-r);
+    l1->SetLineWidth(lw);
+    l1->SetLineColor(kBlue);
+    l1->Draw();
+    l1->DrawLine(x2, y,x2, y+1-r);
+    l1->DrawLine(x1, y1,x2, y1);
+    
+    TEllipse* a3 = new TEllipse(x+u*a/2, y+1-r-.01, 
+                               (r-w/2-.005)*a, r-w/2, 0, 180);
+    a3->SetFillStyle(0);
+    a3->SetFillColor(0);
+    // Int_t lw = w*gPad->YtoPixel(0);
+    Printf("Setting line width to %d", lw);
+    a3->SetLineWidth(lw);
+    a3->SetLineColor(kBlue);
+    a3->Draw("only");
+#endif
+  }
+  /** 
+   * Draw the letter L
+   * 
+   * @param x    Base X coordinate 
+   * @param y    Base Y coordinate 
+   * @param w    Line width 
+   * @param a    Aspect ratio of pad 
+   * @param fg   Foreground colour
+   * @param bg   Background colour
+   */
+  void DrawL(Double_t x, Double_t y, Double_t w, Double_t a, Int_t fg)
+  {
+    TBox* b1 = new TBox(x, y, x+3.1 * a * w, y + w);
+    SetAttr(b1, b1, fg);
+    b1->Draw();
+    b1->DrawBox(x, y , x + a * w,y+.99);
+  }
+  /** 
+   * Draw the letter I
+   * 
+   * @param x    Base X coordinate 
+   * @param y    Base Y coordinate 
+   * @param w    Line width 
+   * @param a    Aspect ratio of pad 
+   * @param fg   Foreground colour
+   * @param bg   Background colour
+   */
+  void DrawI(Double_t x, Double_t y, Double_t w, Double_t a, Int_t fg)
+  {    
+    TBox* b1 = new TBox(x, y, x+3 * a * w, y + w);
+    SetAttr(b1, b1, fg);
+    b1->Draw();
+    b1->DrawBox(x+a*w,y,x+2*a*w,y+.99);
+    b1->DrawBox(x,y+1-w,x+3*a*w,y+.99);
+  }
+  /** 
+   * Draw the letter C
+   * 
+   * @param x    Base X coordinate 
+   * @param y    Base Y coordinate 
+   * @param w    Line width - not used 
+   * @param a    Aspect ratio of pad 
+   * @param fg   Foreground colour
+   * @param bg   Background colour
+   */
+  void DrawC(Double_t x, Double_t y, Double_t a, Int_t fg, Int_t bg)
+  {
+    Int_t    nO   = 13;
+    Double_t dx   = 0; 
+    Double_t pO[] = { 
+      /* 0 */  0.698245  +dx, 0.271355,
+      /* 1 */  0.590204  +dx, 0.0755058,
+      /* 2 */  0.424947  +dx, 0.00,
+      /* 3 */  0.220343  +dx, 0.015668+.005,
+      /* 4 */  0.0629551 +dx, 0.15668,
+      /* 5 */  0.00786939+dx, 0.329027,
+      /* 6 */  -0.005,        0.564046,
+      /* 7 */  0.00786939+dx, 1-0.329027,
+      /* 8 */  0.0629551 +dx, 1-0.15668,
+      /* 9 */  0.220343  +dx, 1-0.015668-.005,
+      /* 10 */ 0.424947  +dx, .99,
+      /* 11 */ 0.590204  +dx, 1-0.0755058,
+      /* 12 */ 0.6982450 +dx, 1-0.271355, 0 };
+    TGraph* gO = new TGraph(nO);
+    gO->SetName("c_ext");
+    gO->SetLineColor(fDebug ? kGreen+1 : fg);
+    gO->SetLineWidth(fDebug ? 1        : 0);
+    gO->SetFillColor(fDebug ? kGreen+1 : fg);
+    gO->SetFillStyle(fDebug ? 0 : 1001);
+    for (Int_t i = 0; i < nO; i++) 
+      gO->SetPoint(i, x+pO[2*i]*a,y+pO[2*i+1]);
+    gO->Draw("fc same");
+    Int_t    nI   = 11;
+    Double_t pI[] = { 
+      /* 0 */ 0.551869, 1-0.713617,
+      /* 1 */ 0.481045, 1-0.821127,
+      /* 2 */ 0.363004, 1-0.853799,
+      /* 3 */ 0.213486, 1-0.783625,
+      /* 4 */ 0.158508, 1-0.635277,
+      /* 4 */ 0.158,    0.5, // 1-0.635277,
+      /* 5 */ 0.158508, 0.635277,
+      /* 6 */ 0.213486, 0.773625,
+      /* 7 */ 0.363004, 0.853799,
+      /* 8 */ 0.481045, 0.821127,
+      /* 9 */ 0.551869, 0.713617, 0 };
+    TGraph* gI = new TGraph(nI);
+    gI->SetName("c_int");
+    gI->SetLineColor(fDebug ? kGreen+1 : bg);
+    gI->SetLineWidth(fDebug ? 1        : 0);
+    gI->SetFillColor(fDebug ? kGreen+1 : bg);
+    gI->SetFillStyle(fDebug ? 0 : 1001);
+    for (Int_t i = 0; i < nI; i++) 
+      gI->SetPoint(i, x+pI[2*i]*a,y+pI[2*i+1]);
+    gI->Draw("fc same");
+
+
+    TGraph* gC = new TGraph(5);
+    gC->SetName("c_cut");
+    SetAttr(gC, gC, bg);
+    gC->SetPoint(0, gO->GetX()[0],    gO->GetY()[0]);
+    gC->SetPoint(1, gI->GetX()[0],    gI->GetY()[0]);
+    gC->SetPoint(2, gI->GetX()[nI-1], gI->GetY()[nI-1]);
+    gC->SetPoint(3, gO->GetX()[nO-1], gO->GetY()[nO-1]);
+    gC->SetPoint(4, gO->GetX()[0],    gO->GetY()[0]);
+    gC->Draw("fl same");
+  }
+  /** 
+   * Draw the letter E 
+   * 
+   * @param x    Base X coordinate 
+   * @param y    Base Y coordinate 
+   * @param w    Line width 
+   * @param a    Aspect ratio of pad 
+   * @param fg   Foreground colour
+   */
+  void DrawE(Double_t x, Double_t y, Double_t w, Double_t a, Int_t fg)
+  {
+    Double_t u = 3.5;
+    TBox* b1 = new TBox(x, y, x + a * w, y + .99);
+    SetAttr(b1, b1, fg);
+    b1->Draw();
+    b1->DrawBox(x, y,            x + u*a*w,      y+w);
+    b1->DrawBox(x, y+.99-w,      x + u*a*w,      y+.99);
+    b1->DrawBox(x, y+.5-w/2+.02, x + (u-.1)*a*w, y+.5+w/2+.02);
+  }
+  /** 
+   * Draw the letter F 
+   * 
+   * @param x    Base X coordinate 
+   * @param y    Base Y coordinate 
+   * @param w    Line width 
+   * @param a    Aspect ratio of pad 
+   * @param fg   Foreground colour
+   */
+  void DrawF(Double_t x, Double_t y, Double_t w, Double_t a, Int_t fg)
+  {
+    Double_t u = 3.5;
+    TBox* b1 = new TBox(x, y, x + a * w, y + .99);
+    SetAttr(b1, b1, fg);
+    b1->Draw();
+    b1->DrawBox(x, y+.99-w,      x + u*a*w,      y+.99);
+    b1->DrawBox(x, y+.5-w/2+.02, x + (u-.1)*a*w, y+.5+w/2+.02);
+  }
+  /** 
+   * Draw the label text ("Preliminary" or "Performance") in it's own pad 
+   * 
+   * @param fg Foreground colour 
+   * @param bg Background colour 
+   */
+  void DrawLabel(Int_t fg, Int_t bg, bool preliminary=true)
+  {
+    printf("Drawing stamp ");
+    fPad->cd();
+
+    Double_t top = .08;
+    Double_t bot = 0;
+    TVirtualPad* pad = new TPad("label", "label", 0, bot, 1, top);
+    pad->SetFixedAspectRatio(true);
+    pad->SetFillColor(fDebug ? kGreen-4 : 0);
+    pad->SetFillStyle(fDebug ? 4030     : 0);
+    pad->SetBorderSize(fDebug ? 1 : 0);
+    pad->SetBorderMode(fDebug ? 1 : 0);
+    pad->SetLineColor(fDebug ? kCyan+2 : 0);
+    pad->SetLineWidth(fDebug ? 1 : 0);
+    pad->SetTopMargin(0);
+    pad->SetBottomMargin(0);
+    pad->SetLeftMargin(0);
+    pad->SetRightMargin(0);
+    pad->Draw();
+    pad->cd();
+
+    Double_t wp = pad->XtoPixel(1);
+    Double_t hp = pad->YtoPixel(0);
+    Double_t a  = hp / wp;
+    
+    Double_t w = .15;
+    if (preliminary) {
+      printf("."); DrawP(0,            0.01, w, a, fg, bg);
+      printf("."); DrawR(6.3  * w * a, 0.01, w, a, fg, bg);
+      printf("."); DrawE(13   * w * a, 0.01, w, a, fg);
+      printf("."); DrawL(18.7 * w * a, 0.01, w, a, fg);
+      printf("."); DrawI(23.3 * w * a, 0.01, w, a, fg);
+      printf("."); DrawM(29   * w * a, 0.01, w, a, fg);
+      printf("."); DrawI(37.2 * w * a, 0.01, w, a, fg);
+      printf("."); DrawN(42.5 * w * a, 0.01, w, a, fg);
+      printf("."); DrawA(49.4 * w * a, 0.01, w, a, fg, bg);
+      printf("."); DrawR(56.4 * w * a, 0.01, w, a, fg, bg);
+      printf("."); DrawY(62.3 * w * a, 0.01, w, a, fg);
+    }
+    else { 
+      printf("."); DrawP(0,            0.01, w, a, fg, bg);
+      printf("."); DrawE(6.3  * w * a, 0.01, w, a, fg);
+      printf("."); DrawR(12   * w * a, 0.01, w, a, fg, bg);
+      printf("."); DrawF(18.7 * w * a, 0.01, w, a, fg);
+      printf("."); DrawO(24   * w * a, 0.01, w, a, fg, bg);
+      printf("."); DrawR(30.7 * w * a, 0.01, w, a, fg, bg);
+      printf("."); DrawM(37.5 * w * a, 0.01, w, a, fg);
+      printf("."); DrawA(45.5 * w * a, 0.01, w, a, fg, bg);
+      printf("."); DrawN(52.4 * w * a, 0.01, w, a, fg);
+      printf("."); DrawC(58.7 * w * a, 0.01, /*w,*/ a, fg, bg);
+      printf("."); DrawE(64.8 * w * a, 0.01, w, a, fg);
+    }
+
+    fPad->cd();
+    printf("\n"); 
+  }    
+  /** 
+   * Draw the letter O
+   * 
+   * @param x    Base X coordinate 
+   * @param y    Base Y coordinate 
+   * @param w    Line width 
+   * @param a    Aspect ratio of pad 
+   * @param fg   Foreground colour
+   * @param bg   Background colour
+   */
+  void DrawO(Double_t x, Double_t y, Double_t w, Double_t a, Int_t fg, Int_t bg)
+  {
+    Double_t fw = 4.8;
+
+    TEllipse* a1 = new TEllipse(x+fw/2*a*w, y + .495, a*w*fw/2, .495, 0, 360);
+    SetAttr(a1, a1, fg);
+    a1->Draw("only");
+    TEllipse* a2 = new TEllipse(x+fw/2*a*w, y + .495, a*w*(fw/2-1), .495-w);
+    SetAttr(a2, a2, bg);
+    a2->Draw("only");
+  }
+  /** 
+   * Draw the letter P 
+   * 
+   * @param x    Base X coordinate 
+   * @param y    Base Y coordinate 
+   * @param w    Line width 
+   * @param a    Aspect ratio of pad 
+   * @param fg   Foreground colour
+   * @param bg   Background colour
+   */
+  void DrawP(Double_t x, Double_t y, Double_t w, Double_t a, Int_t fg, Int_t bg)
+  {
+    Double_t u  = 4.3 * w;
+    Double_t r  = 4.3 * w / 2;
+
+    TBox* b1 = new TBox(x, y, x + a * w, y + .99);
+    SetAttr(b1, b1, fg);
+    b1->Draw();
+    b1->DrawBox(x + a * w, y + .99 - w, x + 2.5 * a * w, y + .99);
+    b1->DrawBox(x + a * w, y + .99 - u, x + 2.5 * a * w, y + .99 - u + w);
+    TEllipse* a1 = new TEllipse(x+2.5*a*w, y + .99 - r, a*r, r-.01, -90, 90);
+    SetAttr(a1, a1, fg);
+    a1->Draw("only");
+    TEllipse* a2 = new TEllipse(x+2.5*a*w, y + .99 - r, a*(r-w), r-w-.01, 
+                               -90, 90);
+    SetAttr(a2, a2, bg);
+    a2->Draw("only");
+  }
+  /** 
+   * Draw the letter R
+   * 
+   * @param x    Base X coordinate 
+   * @param y    Base Y coordinate 
+   * @param w    Line width 
+   * @param a    Aspect ratio of pad 
+   * @param fg   Foreground colour
+   * @param bg   Background colour
+   */
+  void DrawR(Double_t x, Double_t y, Double_t w, Double_t a, Int_t fg, Int_t bg)
+  {
+    DrawP(x, y, w, a, fg, bg);
+
+    Double_t u   = 4.3 * w;
+    Double_t fw  = 2.5 + 4.3 / 2;
+    Double_t ang = 60 * TMath::Pi() / 180;
+    Double_t o   = w / TMath::Sin(ang);
+
+    TGraph* g = new TGraph(5);
+    SetAttr(g, g, fg);
+    // Top right
+    g->SetPoint(0, x+a*(2*w+o), y+1-u+.01);
+    // Top left 
+    g->SetPoint(1, x+a*2*w,     y+1-u+.01);
+    // Bottom left 
+    g->SetPoint(2, x+a*(fw*w-o+.06), y);
+    // Bottom right
+    g->SetPoint(3, x+a*(fw*w+.06),     y);
+    g->SetPoint(4, g->GetX()[0], g->GetY()[0]);
+    g->Draw("same lf");
+  }
+  /** 
+   * Draw the letter M
+   * 
+   * @param x    Base X coordinate 
+   * @param y    Base Y coordinate 
+   * @param w    Line width 
+   * @param a    Aspect ratio of pad 
+   * @param fg   Foreground colour
+   */
+  void DrawM(Double_t x, Double_t y, Double_t w, Double_t a, Int_t fg) 
+  {
+    TBox* b1 = new TBox(x, y, x + a * w, y + 1);
+    SetAttr(b1, b1, fg);
+    b1->Draw();
+    b1->DrawBox(x+4.8*a*w, y, x+5.8*a*w, y+1);
+    
+    Double_t ang = 28 * TMath::Pi() / 180;
+    Double_t o = w / TMath::Sin(ang);
+
+    TGraph* gl = new TGraph(7);
+    SetAttr(gl, gl, fg);
+    gl->SetPoint(0, x+a*w, y+1);
+    gl->SetPoint(1, x+a*w, y+1-o);
+    gl->SetPoint(2, x+a*w*(1+3.8/2), y+w);
+    gl->SetPoint(3, x+a*w*4.8, y+1-o);
+    gl->SetPoint(4, x+a*w*4.8, y+1);
+    gl->SetPoint(5, x+a*w*(1+3.8/2), y+w+o);
+    gl->SetPoint(6, x+a*w, y+1);
+    gl->Draw("same lf");
+
+  }
+  /** 
+   * Draw the letter N 
+   * 
+   * @param x    Base X coordinate 
+   * @param y    Base Y coordinate 
+   * @param w    Line width 
+   * @param a    Aspect ratio of pad 
+   * @param fg   Foreground colour
+   */
+  void DrawN(Double_t x, Double_t y, Double_t w, Double_t a, Int_t fg) 
+  {
+    Double_t fw = 4.6;
+    TBox* b1 = new TBox(x, y, x + a * w, y + 1);
+    SetAttr(b1, b1, fg);
+    b1->Draw();
+    b1->DrawBox(x+a*w*(fw-1), y, x+a*w*(fw), y+1);
+    
+    Double_t ang = 28 * TMath::Pi() / 180;
+    Double_t o = w / TMath::Sin(ang);
+
+    TGraph* gl = new TGraph(5);
+    gl->SetLineColor(fDebug ? kGreen+1 : fg);
+    gl->SetLineWidth(fDebug ? 1        : 0);
+    gl->SetFillColor(fDebug ? kGreen+1 : fg);
+    gl->SetFillStyle(fDebug ? 0 : 1001);
+    gl->SetPoint(0, x+a*w, y+1);
+    gl->SetPoint(1, x+a*w, y+1-o);
+    gl->SetPoint(2, x+a*w*(fw-1), y);
+    gl->SetPoint(3, x+a*w*(fw-1), y+o);
+    gl->SetPoint(4, x+a*w, y+1);
+    gl->Draw("same lf");
+  }
+  /** 
+   * Draw the letter Y
+   * 
+   * @param x    Base X coordinate 
+   * @param y    Base Y coordinate 
+   * @param w    Line width 
+   * @param a    Aspect ratio of pad 
+   * @param fg   Foreground colour
+   */
+  void DrawY(Double_t x, Double_t y, Double_t w, Double_t a, Int_t fg)
+  {
+    Double_t u  = 4 * w;
+    Double_t fw = 5.5;
+
+    TBox* b1 = new TBox(x+a*w*(fw/2-.5), y, x + a * w *(fw/2+.5), y + 1 - u);
+    b1->SetLineColor(fDebug ? kGreen+1 : fg);
+    b1->SetFillColor(fDebug ? 0 : fg);
+    b1->SetFillStyle(fDebug ? 0 : 1001);
+    b1->Draw();
+
+    Double_t ang = 40 * TMath::Pi() / 180;
+    Double_t o  = w / TMath::Sin(ang);
+    Double_t o2 = w / TMath::Cos(ang);
+
+
+    TGraph* g = new TGraph(8);
+    SetAttr(g, g, fg);
+    g->SetPoint(0, x+a*w*(fw/2-.5), y + 1-u);
+    g->SetPoint(1, x,             y + 1);
+    g->SetPoint(2, x+a*o2,        y + 1);
+    g->SetPoint(3, x+a*w*fw/2,    y + 1 - u + o);
+    g->SetPoint(4, x+a*w*fw-a*o2, y+1);
+    g->SetPoint(5, x+a*w*fw,      y+1);
+    g->SetPoint(6, x+a*w*(fw/2+.5), y + 1-u);
+    g->SetPoint(7, x+a*w*(fw/2-.5), y + 1-u);
+
+    
+    g->Draw("same lf");
+  }
+  /** 
+   * Set Line and Fill attributes
+   * 
+   * @param lne Line attribute interface 
+   * @param fll Fill attribute interface 
+   * @param col Colour 
+   */
+  void SetAttr(TAttLine* lne, TAttFill* fll, Int_t col) 
+  {
+    if (lne) {
+      lne->SetLineColor(fDebug ? kGreen+1 : col);
+      lne->SetLineWidth(fDebug ? 1        : 0);
+    }
+    if (fll) { 
+      fll->SetFillColor(fDebug ? kGreen+1 : col);
+      fll->SetFillStyle(fDebug ? 0        : 1001);
+    }
+  }
+  Double_t GetX1() const { return fPad ? fPad->GetXlowNDC() : -1; }
+  Double_t GetX2() const { return fPad ? GetX1()+fPad->GetWNDC() : -1; }
+  Double_t GetY1() const { return fPad ? fPad->GetYlowNDC() : -1; }
+  Double_t GetY2() const { return fPad ? GetY1()+fPad->GetHNDC() : -1; }
+  Double_t GetCX() const { return fPad ? (GetX1()+GetX2())/2 : -1; }
+  Double_t GetCY() const { return fPad ? (GetY1()+GetY2())/2 : -1; }
+  /** 
+   * run a simple test
+   * 
+   * @param what 
+   */
+  static void Test(const TString& what)
+  {
+    Test(AliceLogo::ParseTag(what), AliceLogo::ParseColors(what), 
+        what.Contains("debug", TString::kIgnoreCase));
+  }
+  /** 
+   * Run a simple test
+   * 
+   * @param tag 
+   * @param col 
+   * @param debug 
+   */
+  static void Test(UShort_t tag, UInt_t col, Bool_t debug)
+  {
+    TCanvas* c = new TCanvas("test", "Test of AliceLogo");
+    c->SetFillColor(kYellow-10);
+    TH1* h = new TH1F("h", "h", 60, -3, 3);
+    h->SetFillColor(kRed+1);
+    h->SetFillStyle(3001);
+    h->FillRandom("gaus");
+    h->Draw();
+    
+    AliceLogo* dut = new AliceLogo(debug);
+    dut->Draw(c, .75, .4, .25, tag, col);
+
+    c->SaveAs("test.png");
+    c->SaveAs("test.pdf");
+    c->SaveAs("test.svg");
+  }
+  /** 
+   * Check compatiblity by overlaying this logo on 'official' images
+   * 
+   * @param what 
+   */
+  static void Check(const TString& what)
+  {
+    Check(AliceLogo::ParseTag(what), AliceLogo::ParseColors(what), 
+        what.Contains("debug", TString::kIgnoreCase));
+  }
+  /** 
+   * Check compatiblity by overlaying this logo on 'official' images
+   * 
+   * @param tag 
+   * @param col 
+   * @param debug 
+   */
+  static void Check(UShort_t tag, UInt_t col, Bool_t debug=true)
+  {
+    
+    TImage* img = TImage::Create();
+    TString imgName = "2012-Jul-04-Base_Logo.png";
+    // Int_t   logoW   = 0; // img->GetWidth();
+    // Int_t   logoH   = 0; // img->GetHeight();
+    switch (tag) { 
+    case AliceLogo::kPreliminary: 
+      // logoW   = 1849;
+      // logoH   = 2277;
+      imgName = "2012-Jul-04-Preliminary_Logo.png"; 
+      break;
+    case AliceLogo::kPerformance: 
+      imgName = "2012-Jul-04-Performance_Logo.png";
+      break;
+    default:
+      if (col & kMany) 
+       imgName = "2012-Jul-04-4_Color_Logo_CB.png";
+      else
+       imgName = "2012-Jul-04-Base_Logo.png";
+    }
+    Printf("Reading %s", imgName.Data());
+    img->ReadImage(imgName);
+    Int_t    logoW = img->GetWidth();
+    Int_t    logoH = img->GetHeight();
+    Double_t logoA = Float_t(logoH) / logoW; 
+
+    Printf("Logo dimensions (wxh): (%d x %d)", logoW, logoH);
+    Int_t myHeight = 800;
+    TCanvas* c = new TCanvas("check", "Check of AliceLogo", 
+                            (myHeight-22)/logoA, myHeight);
+    c->SetTopMargin(0);
+    c->SetRightMargin(0);
+    c->SetBottomMargin(0);
+    c->SetLeftMargin(0);
+    c->SetFillColor(debug ? kRed-4 : kWhite);
+    c->SetBorderSize(0);
+    c->SetBorderMode(0);
+    if (col & AliceLogo::kReverse /*&& !(col & AliceLogo::kL3)*/ && !debug) 
+      c->SetFillColor(kBlack);
+    
+    if (debug) img->Draw();
+
+    AliceLogo* dut = new AliceLogo(debug);
+    dut->Draw(c, 0, 0, 1, tag, col);
+
+    c->SaveAs("check.svg");
+  }
+
+  TVirtualPad* fPad;      // Our pad 
+  Double_t     fAspect;   // Aspect ratio of our pad 
+  Double_t     fL3Thick;  // Fraction of canvas height
+  Double_t     fL3Height; // Fraction of canvas height 
+  Double_t     fL3Width;  // Width of L3 sub-pad
+  Bool_t       fDebug;    // Debug (make outline only)
+  Int_t        fRed;      // The red color 
+  Int_t        fYellow;   // The yellow-ish color
+  Int_t        fPink;     // The dark-red pink-ish color 
+  Int_t        fBlue;     // The blue gray-ish color 
+};
+
+#endif
+//
+// EOF
+//
index 0ae7de11edaaacf9a70f46190226a1ab7b67326a..56bcd0f821ac3daadea4ca5fb309b11d0a401121 100644 (file)
@@ -179,10 +179,17 @@ protected:
     UShort_t cLow  = centAxis && !onlyMB ? centAxis->GetXmin() : 0;
     UShort_t cHigh = centAxis && !onlyMB ? centAxis->GetXmax() : 100;
 
-    gROOT->LoadMacro("$ALICE_ROOT/PWGLF/FORWARD/analysis2/OtherData.C++");
+    TString savPath(gROOT->GetMacroPath());
+    gROOT->SetMacroPath(Form("%s:$(ALICE_ROOT)/PWGLF/FORWARD/analysis2",
+                            gROOT->GetMacroPath()));
+    // Always recompile 
+    if (!gROOT->GetClass("RefData"))
+      gROOT->LoadMacro("OtherData.C++");
+    gROOT->SetMacroPath(savPath);
+
     // If we have V0AND trigger, get NSD other data
     Int_t   oT = (trigger == 0x2000) ? 0x4 : trigger;
-    TString oC = Form("GetData(%hu,%hu,%hu,%hu,%hu,0xF)", 
+    TString oC = Form("RefData::GetData(%hu,%hu,%hu,%hu,%hu,0xF)", 
                      sys, sNN, oT, cLow, cHigh);
     TMultiGraph* other = 
       reinterpret_cast<TMultiGraph*>(gROOT->ProcessLine(oC));
index 33a2021666e092a91e04b500b4981ed3ad26c696..62f1c1438fdb137cabce9992c47b84c8611dfbba 100644 (file)
@@ -240,7 +240,8 @@ protected:
       << "             trg,\n"
       << "             eff,\n"
       << "             vzMin,\n"
-      << "             vzMax);\n"
+      << "             vzMax,\n"
+      <<"              \"dNdeta_<trig>\");\n"
       << "}\n"
       << "//\n"
       << "// EOF\n"