ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <iostream>
#include "TH1F.h"
#include "TGraphErrors.h"
#include "AliPWGFunc.h"
#include "AliPWGHistoTools.h"
#include "TF1.h"
#include "TFile.h"
#include "TDatabasePDG.h"
#include "TROOT.h"
#include "TCanvas.h"
#include "TFolder.h"
#include "TStyle.h"
#include "AliLatexTable.h"
#include "TLegend.h"
#include "TVirtualFitter.h"
#include "TMath.h"
#include "TH2F.h"
#include "TSystem.h"
#include "TLine.h"
#include "TLatex.h"
#include "TMath.h"

#include "TASImage.h"
#include "TPaveText.h"
#include "StarPPSpectra.C"
#include "GetE735Ratios.C"
#include "TString.h"
#include "TObjString.h"
#include "TGraphAsymmErrors.h"

#endif


using namespace std;


// A bunch of useful enums and constants
enum {kPion=0,kKaon,kProton,kNPart};
enum {kTPC=0,kTOF,kITS,kITSTPC,kK0,kKinks,kCombTOFTPC,kCombAll,kNHist};// "k0" listed here as a kind of PID method...
const Int_t kNDet = kITS+2;
enum {kPos=0,kNeg,kNCharge};
enum {kPhojet=0,kPyTuneAtlasCSC, kPyTuneCMS6D6T, kPyTunePerugia0, kNTunes} ;
enum {kFitLevi=0, kFitUA1, kFitPowerLaw,
      kFitPhojet, kFitAtlasCSC, kFitCMS6D6T, kFitPerugia0,
      kNFit};
enum {kDoFits=0, kDoRatios, kDoSuperposition, kDoDrawWithModels, kDoCompareToStar, kDoDrawSyst, kDoCompareToAllCharged, kDoHelp};
enum {kStatErrors = 0, kSystErrors, kStatSystErrors}; // which errors do we put in the histo that we fit? stat,syst or stat+syst?

// flags, labels and names
const char * partFlag[] = {"Pion", "Kaon", "Proton"};
const char * detFlag[]  = {"TPC", "TOF", "ITS standalone", "ITS-TPC", "K0", "Kinks", "Combined TOF + TPC", "Combined TOF + TPC + ITS"};
const char * chargeFlag[]  = {"Pos", "Neg"};
const char * chargeLabel[]  = {"Positive", "Negative"};
const char * partLabel[kNPart][kNCharge] = {{"#pi^{+}", "#pi^{-}"}, 
					    //					    {"K^{+} (#times 2)", "K^{-} (#times 2)"}, 
					    {"K^{+}", "K^{-}"}, 
					    {"p" ,  "#bar{p}"}};
const char * partLatex[kNPart][kNCharge] = {{"$\\pi^{+}$", "$\\pi^{-}$"}, 
					    //					    {"K^{+} (#times 2)", "K^{-} (#times 2)"}, 
					    {"$K^{+}$", "$K^{-}$"}, 
					    {"$p$" ,  "$\\bar{p}$"}};
const char * mcTuneName[] = {"Phojet", 
			     "Pythia - CSC 306", 
			     "Pythia - D6T 109", 
			     "Pythia - Perugia0 - 320", };
const char * funcName[] = { "Levi", "UA1", "PowerLaw", "Phojet", "AtlasCSC", "CMS6D6T", "Perugia0"};

// Style
//const Int_t marker[] = {25,24,28,20,21}; // set for highlithining marek
//const Int_t marker[] = {20,24,25,28,21}; // standard set
const Int_t marker[] = {24,25,28,27,21}; // No full symbols
const Int_t color [] = {1,2,4};

const Int_t mcLineColor[] = {kGreen,kRed,kBlue,kBlack};
const Int_t mcLineStyle[] = {1,2,3,4};


// Template needed to combine different detectors
const Float_t templBins[] = {0.05,0.1,0.12,0.14,0.16,0.18,0.20,0.25,0.30,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,2,2.2,2.4,2.6};
Int_t nbinsTempl=34;

TH1F * htemplate = new TH1F("htemplate", "htemplate",nbinsTempl, templBins );

//  Globals
TH1F * hSpectra[kNHist][kNPart][kNCharge];
TH1F * hSpectraMC[kNTunes][kNPart][kNCharge];
TH1F * hSystError[kNHist][kNPart][kNCharge];
Double_t mass[kNPart];

// Functions:
// Loading
void LoadSpectra() ;
void LoadMC() ;

// Additional tasks (may be uncommented below)
void LoadLibs();
void DrawStar(Int_t icharge);
void GetITSResiduals();
void DrawWithModels() ;
void DrawAllAndKaons();
void DrawWithJacek();
void DrawRatioToStar();
void DrawRatios();
void DrawWithSyst();
void FitCombined();
void PrintCanvas(TCanvas* c,const TString formats) ;
void RebinHistosForRatios() ;
void Help();

// External stuff
void ALICEWorkInProgress(TCanvas *c,TString today="11/05/2010", TString label = "ALICE performance"){

  TPad *myPadLogo = new TPad("myPadLogo", "Pad for ALICE Logo",0.72,0.72,0.89,0.89);
  //TPad *myPadLogo = new TPad("myPadLogo", "Pad for ALICE Logo",0.72,0.62,0.85,0.75);
  myPadLogo->SetFillColor(0); 
  myPadLogo->SetBorderMode(0);
  myPadLogo->SetBorderSize(2);
  myPadLogo->SetFrameBorderMode(0);
  myPadLogo->SetLeftMargin(0.0);
  myPadLogo->SetTopMargin(0.0);
  myPadLogo->SetBottomMargin(0.0);
  myPadLogo->SetRightMargin(0.0);
  myPadLogo->SetFillStyle(0);
  myPadLogo->Draw();
  myPadLogo->cd();
  TASImage *myAliceLogo = new TASImage("alice_logo.png");
  myAliceLogo->Draw();
  c->cd();  
  TPaveText* t1=new TPaveText(0.418103, 0.837798, 0.656609, 0.888393,"NDC");
  t1->SetFillStyle(0);
  t1->SetBorderSize(0);
  t1->AddText(0.,0.,label);
  t1->SetTextColor(kRed);
  t1->SetTextFont(42);
  t1->SetTextSize(0.04);
  t1->Draw();
  TPaveText* t2=new TPaveText(0.418103, 0.80, 0.656609, 0.84,"NDC");
  t2->SetFillStyle(0);
  t2->SetBorderSize(0);
  t2->AddText(0.,0.,"pp at #sqrt{s} = 900 GeV (2009 data)");
  t2->SetTextColor(kRed);
  t2->SetTextFont(42);
  t2->SetTextSize(0.027);
  t2->Draw();
  TPaveText* t3=new TPaveText(0.418103, 0.76, 0.656609, 0.80,"NDC");
  t3->SetFillStyle(0);
  t3->SetBorderSize(0);
  t3->AddText(0.,0.,"Statistical and systematic errors");
  t3->SetTextColor(kRed);
  t3->SetTextFont(42);
  t3->SetTextSize(0.027);
  t3->Draw(); 
  // TPaveText* t2=new TPaveText(0.65,0.65,0.89,0.7,"NDC");
  // t2->SetFillStyle(0);
  // t2->SetBorderSize(0);
  // t2->SetTextColor(kRed);
  // t2->SetTextFont(52);
  // t2->AddText(0.,0.,today.Data());
  // t2->Draw();
}

// Used to tag plots
TDatime dt;
TString today = "";



// Switches
Bool_t convertToMT = 0;
Bool_t sumCharge = 0;
Int_t whatToFit = kStatErrors;
Bool_t scaleKaons =  kFALSE;
Bool_t drawStar =  kFALSE; // Overlay star when doing fits
Bool_t correctSecondaries  = 1;
Bool_t correctGeantFlukaXS = 1;
Int_t iCombInStudy = kCombAll; //kCombTOFTPC
Int_t fitFuncID = kFitLevi;
Bool_t showMC=kTRUE;
Bool_t showE735=kTRUE;
Bool_t useSecCorrFromDCA=kTRUE;
Bool_t flagPreliminary=kFALSE; // Add "preliminary" flag and logo to the plots
Bool_t doPrint = 1;
Bool_t applyEtaCutCorrection=kTRUE; // Fixes a bug in the ITSsa analysis
TString printFormats = "C,eps,root"; // format in which canvases will be printed, if PrintCanvas is called (not all prints are based on printcanvas at the moment). This is a comma separated list.


void CombineSpectra(Int_t analysisType=kDoHelp, Int_t  locfitFuncID = kFitLevi) {  //kDoSuperposition;//kDoDrawWithModels;// kDoFits; //kDoRatios;  

  // This macro is used to combine the 900 GeV spectra from 2009

  fitFuncID=locfitFuncID;

  // Load stuff
  LoadLibs();

  // Print Help and quit
  if (analysisType == kDoHelp) {
    Help();
    return;
  }


  // Set date
  today = today +  long(dt.GetDay()) +"/" + long(dt.GetMonth()) +"/"+ long(dt.GetYear());


  // Set Masses
  mass[kPion]   = TDatabasePDG::Instance()->GetParticle("pi+")->Mass();
  mass[kKaon]   = TDatabasePDG::Instance()->GetParticle("K+")->Mass();
  mass[kProton] = TDatabasePDG::Instance()->GetParticle("proton")->Mass();

  // Load histos
  LoadSpectra();
  LoadMC();

  // Additional tasks
  //DrawStar(icharge);
  //  GetITSResiduals();
  if(analysisType==kDoSuperposition) DrawAllAndKaons();  
  else if(analysisType==kDoDrawWithModels)  DrawWithModels() ;
  else if(analysisType==kDoCompareToAllCharged) DrawWithJacek();
  else if(analysisType==kDoCompareToStar) DrawRatioToStar();
  else if(analysisType==kDoRatios) DrawRatios();
  else if(analysisType==kDoDrawSyst) DrawWithSyst();
  else if(analysisType==kDoFits) FitCombined();
  return;
}


void FitCombined() {
  gStyle->SetOptTitle(0);
  gStyle->SetOptStat(0);

  // Draw combined & Fit
  AliPWGFunc * fm = new AliPWGFunc;
  fm->SetVarType(AliPWGFunc::kdNdpt);
  if (convertToMT) fm->SetVarType(AliPWGFunc::kOneOverMtdNdmt);

  // table to print results
  AliLatexTable table(10,"c|ccccccccc");
  if (fitFuncID == kFitLevi) {
    table.InsertCustomRow("Part & Yield & Yield (FIT) &  T Slope & n & $\\chi^2$/NDF & Min X & Extrap (%) & $\\langle p_{t} \\rangle (Fit)$  & $\\langle p_{t} \\rangle$ (FIT+DATA)\\\\");
  }  else if (fitFuncID == kFitPowerLaw) {
    table.InsertCustomRow("Part & Yield & Norm &  n & pt0 & $\\chi^2$/NDF & Min X & Frac Above  & $\\langle p_{t} \\rangle (Fit)$  & $\\langle p_{t} \\rangle$ (FIT+DATA)  \\\\");    
  } else {
    table.InsertCustomRow("Part & Yield & Par0 & Par2  & Par1 & $\\chi^2$/NDF & Min X & Frac Above  & $\\langle p_{t} \\rangle (Fit)$  & $\\langle p_{t} \\rangle$ (FIT+DATA)  \\\\");

  }
  table.InsertHline();
  AliLatexTable tempTable(3,"c|cc");
  tempTable.InsertCustomRow("Part & Yield &  $\\langle p_{t} \\rangle$ \\\\");
  tempTable.InsertHline();

  TH1F* hRatiosToFit[kNPart][kNCharge]; // Ratio data/fit function, stat error by default
  TH1F* hRatiosToFitSyst[kNPart][kNCharge]; // Ratio data/fit, stat + syst
  //  Fit all 
  Int_t chargeLoop = sumCharge ? 1 : 2; 
  Bool_t divideRatiosCanvas=kTRUE;
  for(Int_t icharge = 0; icharge < chargeLoop; icharge++){

    TCanvas * c2 = new TCanvas(TString("cCombined")+chargeFlag[icharge]+"_"+funcName[fitFuncID], TString("cCombined")+chargeFlag[icharge],700,700);
    c2->SetTickx();
    c2->SetTicky();
    c2->SetLeftMargin(0.14);
    TCanvas * c2r = 0;
    if(divideRatiosCanvas) c2r = new TCanvas(TString("cCombinedRatio")+chargeFlag[icharge]+"_"+funcName[fitFuncID], TString("cCombinedRatio")+chargeFlag[icharge],1200,500);
    else                   c2r = new TCanvas(TString("cCombinedRatio")+chargeFlag[icharge]+"_"+funcName[fitFuncID], TString("cCombinedRatio")+chargeFlag[icharge],700,700);
    c2->cd();
    gPad->SetLogy();
    TH2F * hempty = new TH2F(TString("hempty")+long(icharge),"hempty",100,0.,2.9, 100, 0.0005,5);
    hempty->SetXTitle("p_{t} (GeV/c)");
    hempty->SetYTitle("1/N_{ev} d^{2}N / dydp_{t} (GeV/c)^{-1}");
    hempty->GetYaxis()->SetTitleOffset(1.35);
    hempty->GetXaxis()->SetTitleOffset(1.1);
    hempty->Draw();
    c2r->cd();
    if(divideRatiosCanvas) {
      c2r->Divide(3,1);
      c2r->cd(1);
    }
    gPad->SetGridy();
    TH2F * hemptyR = new TH2F(TString("hemptyR")+long(icharge),"hemptyR",100,0.,2.9, 100, 0.5,1.5);
    hemptyR->SetXTitle("p_{t} (GeV/c)");
    hemptyR->SetYTitle("Data/Fit");
    hemptyR->Draw();
    

    TLegend * l = new TLegend(0.176724, 0.181548, 0.477011, 0.462798,chargeLabel[icharge]);
    l->SetFillColor(kWhite);
    l->SetTextSize(0.035);
    

    
    TPaveText* tf=new TPaveText(0.321839, 0.175595, 0.685345, 0.299107,"NDC");
    if(fitFuncID == kFitLevi){
      tf->AddText("#frac{dN}{dp_{t}} #propto p_{t} #left(1+#frac{#sqrt{m^{2}+p_{t}^{2}} -m}{nT} #right)^{-n}");
      //      tf->SetNDC();
      tf->SetTextFont(12);
      tf->SetTextSize(0.032);
    }

    for(Int_t ipart = 0; ipart < kNPart; ipart++){
      printf(" ----- Fit %s %s ------\n",partFlag[ipart],chargeFlag[icharge]);
      Float_t fitmin = 0;
      Float_t fitmax = 3;

      // Get functions
      TF1 * func = 0;
      Int_t normPar = -1;
      if(fitFuncID == kFitLevi)          {
	normPar = 0; // The levi is normalized by parameter 0
	if (ipart == kPion)
	  func = fm->GetLevi(mass[ipart], 0.12, 7, 1.5);
	if (ipart == kKaon)
	  func = fm->GetLevi(mass[ipart], 0.17, 7, 0.17);
	if (ipart == kProton)
	  func = fm->GetLevi(mass[ipart], 0.15, 8.5, 0.09);
      }      
      else if(fitFuncID == kFitUA1)      func = fm->GetUA1(mass[ipart],0.2,1.25,1.25,0.2,1.5);
      else if(fitFuncID == kFitPowerLaw) {
	// fitmin=0;
	// fitmax=1;
	if (ipart == kPion)
	  func = fm->GetPowerLaw(1.0, 8.6, 7);
	if (ipart == kKaon)
	  func = fm->GetPowerLaw(3.0, 12, 2.6);
	if (ipart == kProton)
	  func = fm->GetPowerLaw(24, 72, 0.8);
      }
      else if(fitFuncID == kFitPhojet)   func = fm->GetHistoFunc(hSpectraMC[kPhojet]        [ipart][icharge]);
      else if(fitFuncID == kFitAtlasCSC) func = fm->GetHistoFunc(hSpectraMC[kPyTuneAtlasCSC][ipart][icharge]);
      else if(fitFuncID == kFitPerugia0) func = fm->GetHistoFunc(hSpectraMC[kPyTunePerugia0][ipart][icharge]);
      else if(fitFuncID == kFitCMS6D6T)  func = fm->GetHistoFunc(hSpectraMC[kPyTuneCMS6D6T] [ipart][icharge]);
      else {
	cout << "Unknown fit ID " << fitFuncID << endl;
	return;	
      }

      if(fitFuncID >= kFitPhojet){
	fitmin = 0.0;
	fitmax = 1.0;
      }

      // Temp: fit histo with sist errors 
      TH1F * hsyst     = new TH1F(*htemplate);
      TH1F * hsyststat = 0;
      hsyst->SetFillColor(kGray);
      AliPWGHistoTools::GetValueAndError(hsyst,hSpectra[iCombInStudy][ipart][icharge],hSystError[iCombInStudy][ipart][icharge],kTRUE);
      hsyststat= new TH1F(*hsyst);
      AliPWGHistoTools::GetHistoCombinedErrors(hsyststat,hSpectra[iCombInStudy][ipart][icharge]); // combine syst and stat
      hsyststat->SetFillColor(kGray);

      TH1F * hToFit = 0;
      if (whatToFit == kStatErrors) hToFit = hSpectra[iCombInStudy][ipart][icharge]; // Shorthand
      if (whatToFit == kStatSystErrors) {
	hToFit = hsyststat;// Shorthand
      }
      if (whatToFit == kSystErrors) hToFit = hsyst;
      if (sumCharge) {
	if(whatToFit == kStatErrors)
	  hToFit->Add(hSpectra[iCombInStudy][ipart][1]);
	else if (whatToFit == kStatSystErrors) {
	  TH1F * hsyst2     = new TH1F(*htemplate);
	  TH1F * hsyststat2 = 0;
	  hsyst2->SetFillColor(kGray);
	  AliPWGHistoTools::GetValueAndError(hsyst2,hSpectra[iCombInStudy][ipart][1],hSystError[iCombInStudy][ipart][1],kTRUE);
	  hsyststat2= new TH1F(*hsyst2);
	  AliPWGHistoTools::GetHistoCombinedErrors(hsyststat2,hSpectra[iCombInStudy][ipart][1]); // combine syst and stat
	  hToFit->Add(hsyststat2);
	}
      }

      

      if(!AliPWGHistoTools::Fit(hToFit,func,fitmin,fitmax)) {
	cout << " FIT ERROR " << endl;
	return;      
      }
      cout << "DRAWING" << endl;
      c2->cd();      
      hsyststat->Draw("same,e2");    
      // TH1F * hsyststat2 = new TH1F(*hsyststat);
      //      hsyststat2->SetFillColor(kWhite);
      //      hsyststat2->SetLineColor(kBlack);
      //      hsyststat2->Draw("same,e2");    
      hToFit->Draw("same");    
      TF1* fitfunc=(TF1*)hToFit->GetListOfFunctions()->At(0);
      fitfunc->Draw("same");
      fitfunc->SetRange(0,4);
      fitfunc->SetLineColor(hSpectra[iCombInStudy][ipart][icharge]->GetLineColor());
      if(drawStar)    DrawStar(icharge);
      hRatiosToFit[ipart][icharge]=(TH1F*)hToFit->Clone(Form("hRatio%s%s",chargeFlag[icharge],partFlag[icharge])); // Ratio data/fit
      hRatiosToFitSyst[ipart][icharge]=(TH1F*)hsyststat->Clone(Form("hRatioSyst%s%s",chargeFlag[icharge],partFlag[icharge])); // Ratio data/fit
      // Syst error on ratio with no fill
      hRatiosToFitSyst[ipart][icharge]->SetLineColor(hToFit->GetLineColor());
      hRatiosToFitSyst[ipart][icharge]->SetFillStyle(0);
      

      // Compute ratio data/function integrating the function in the bin width
      for(Int_t iBin=1; iBin<hToFit->GetNbinsX(); iBin++){
	Double_t lowLim=hToFit->GetBinLowEdge(iBin);
	Double_t highLim=hToFit->GetBinLowEdge(iBin+1);
	Double_t contFunc=fitfunc->Integral(lowLim,highLim)/(highLim-lowLim);
	Double_t ratio=hToFit->GetBinContent(iBin)/contFunc;
	Double_t eratio=hToFit->GetBinError(iBin)/contFunc;
	Double_t eratioSyst=hsyststat->GetBinError(iBin)/contFunc;
	hRatiosToFitSyst[ipart][icharge]->SetBinContent(iBin,ratio);
	hRatiosToFitSyst[ipart][icharge]->SetBinError(iBin,eratioSyst);
	hRatiosToFit[ipart][icharge]->SetBinContent(iBin,ratio);
	hRatiosToFit[ipart][icharge]->SetBinError(iBin,eratio);
      }
      c2->Update();
      l->AddEntry(hToFit, 
		  scaleKaons && ipart == kKaon ? 
		  (TString(partLabel[ipart][icharge])+" #times 2").Data() 
		  : partLabel[ipart][icharge]);
      
      // populate table
      //     Float_t yield  = func->Integral(0.45,1.05);
      //     Float_t yieldE = func->IntegralError(0.45,1.05);
      
      Float_t yield  = func->Integral(0.,100);
      //Float_t yieldE = func->IntegralError(0.,100);

      Double_t yieldTools, yieldETools;
      Double_t partialYields[3],partialYieldsErrors[3]; 
      AliPWGHistoTools::GetYield(hToFit, func, yieldTools, yieldETools, 
			   0, 100, partialYields,partialYieldsErrors);
      Double_t tslope   = func->GetParameter(2);
      Double_t tslopeE  = func->GetParError(2);	
      
      table.SetNextCol(partLatex[ipart][icharge]);
      //table.SetNextCol(yield,yieldE,-4);
      table.SetNextCol(yieldTools, yieldETools,-4);
      table.SetNextCol(func->GetParameter(0));
      table.SetNextCol(tslope,tslopeE,-4);
      table.SetNextCol(func->GetParameter(1),func->GetParError(1),-2); 
      table.SetNextCol(Form("%2.2f/%d",func->GetChisquare(),func->GetNDF())); 
      Float_t lowestPoint = AliPWGHistoTools::GetLowestNotEmptyBinEdge(hToFit);
      //Float_t lowestPoint = AliPWGHistoTools::GetLowestNotEmptyBinEdge(hSpectra[kITS][ipart][icharge]);
      Float_t yieldAbove  = func->Integral(lowestPoint,100);
      table.SetNextCol(lowestPoint,-2);
      table.SetNextCol((1 - yieldAbove/yield)*100,-1);
      Float_t mean, meane;  // Mean using only fit function
      Double_t meanDF, meanDFe; // Mean from data + fit 
      Float_t mean2, mean2e;
      if (fitFuncID < kFitPhojet) {
	AliPWGHistoTools::GetMean      (func, mean,  meane , 0.,100., normPar);
	AliPWGHistoTools::GetMeanSquare(func, mean2, mean2e, 0.,100., normPar);
      }
      //      AliPWGHistoTools::GetMeanDataAndExtrapolation(hToFit, func, meanDF, meanDFe, 0.,100.);
      AliPWGHistoTools::GetMeanDataAndExtrapolation(hToFit, func, meanDF, meanDFe, 0.,100.);
      table.SetNextCol(mean,   meane  ,-4);
      table.SetNextCol(meanDF, meanDFe,-4);
      
      //			 fMean2->IntegralError(0,100)/func->Integral(0,100),-7);
      table.InsertRow();
      

      /// TEMP TABLE
      tempTable.SetNextCol(partLatex[ipart][icharge]);
      tempTable.SetNextCol(yieldTools, yieldETools, -4);
      tempTable.SetNextCol(meanDF,  meanDFe ,-4);
      //      tempTable.SetNextCol(partialYields[1], partialYieldsErrors[1], -4);
      //      tempTable.SetNextCol(yieldAbove/yield,-2);
      tempTable.InsertRow();
      c2r->cd();
      if(divideRatiosCanvas) {
	c2r->cd(ipart+1);
	gPad->SetGridy();
	TH2F * heloc = new TH2F(*hemptyR);
	heloc->Draw();
      }
      hRatiosToFitSyst[ipart][icharge]->Draw("e2same");
      hRatiosToFit[ipart][icharge]->Draw("esame");

    }
    c2->cd();
    if (flagPreliminary) ALICEWorkInProgress(c2,"","ALICE Preliminary");
    l->Draw();
    if (flagPreliminary) tf->Draw();
    c2r->cd();
    if(flagPreliminary) ALICEWorkInProgress(c2r,"","ALICE Preliminary");
    l->Draw();
    PrintCanvas(c2,printFormats);
    PrintCanvas(c2r,printFormats);
    
    
  }

  
  table.PrintTable("ASCII");
  cout << "" << endl;
  table.PrintTable("");
  
  cout << "" << endl;
  tempTable.PrintTable("ASCII");



}

void LoadSpectra() {

  // Loads spectra for different detectors and corresponding systematic errors.

  TFile * f=0;

  // Systematic errors: initialize histos
  gROOT->cd();
  for(Int_t ipart = 0; ipart < kNPart; ipart++){
    for(Int_t idet = 0; idet < kNHist; idet++){
      for(Int_t icharge = 0; icharge < kNCharge; icharge++){
	hSystError[idet][ipart][icharge] = new TH1F (TString("hSyst_")+detFlag[idet]+partFlag[ipart]+chargeFlag[icharge],
						     TString("hSyst_")+detFlag[idet]+partFlag[ipart]+chargeFlag[icharge],
						     nbinsTempl,templBins);
	hSystError[idet][ipart][icharge]->SetMarkerColor (color[ipart] );
	hSystError[idet][ipart][icharge]->SetLineColor   (color[ipart] );

      }
      
    }
    
  }

  // Load


  // TOF
  // Load Efficiencies
  f =  new TFile("./Files/effTOFhistosSmooth.root");
  TFile * ftrk =  new TFile("./Files/effhistos.root");
  TH1D * hEffTrackTOF[kNPart][kNCharge];
  TH1D * hEffMatchTOF[kNPart][kNCharge];
  hEffTrackTOF[kPion]  [kPos] = (TH1D*) ftrk->Get("hpitrk_pos");
  hEffTrackTOF[kKaon]  [kPos] = (TH1D*) ftrk->Get("hkatrk_pos");
  hEffTrackTOF[kProton][kPos] = (TH1D*) ftrk->Get("hprtrk_pos");
  hEffMatchTOF[kPion]  [kPos] = (TH1D*) f->Get("hpieff_pos");
  hEffMatchTOF[kKaon]  [kPos] = (TH1D*) f->Get("hkaeff_pos");
  hEffMatchTOF[kProton][kPos] = (TH1D*) f->Get("hpreff_pos");
  hEffTrackTOF[kPion]  [kNeg] = (TH1D*) ftrk->Get("hpitrk_neg");
  hEffTrackTOF[kKaon]  [kNeg] = (TH1D*) ftrk->Get("hkatrk_neg");
  hEffTrackTOF[kProton][kNeg] = (TH1D*) ftrk->Get("hprtrk_neg");
  hEffMatchTOF[kPion]  [kNeg] = (TH1D*) f->Get("hpieff_neg");
  hEffMatchTOF[kKaon]  [kNeg] = (TH1D*) f->Get("hkaeff_neg");
  hEffMatchTOF[kProton][kNeg] = (TH1D*) f->Get("hpreff_neg");

  //  f = new TFile("./Files/spectra-pos-y.root");
  f = new TFile("./Files/spectraRaw-pos-y.root");
  hSpectra[kTOF][kPion]  [kPos]= (TH1F*) f->Get("hpi");
  hSpectra[kTOF][kProton][kPos]= (TH1F*) f->Get("hpr");
  hSpectra[kTOF][kKaon]  [kPos]= (TH1F*) f->Get("hka");
  hSpectra[kTOF][kPion]  [kPos]->SetName("hpiPos");
  hSpectra[kTOF][kProton][kPos]->SetName("hprPos");
  hSpectra[kTOF][kKaon]  [kPos]->SetName("hkaPos");
  //f = new TFile("./Files/spectra-neg-y.root");
  f = new TFile("./Files/spectraRaw-neg-y.root");
  hSpectra[kTOF][kPion]  [kNeg]= (TH1F*) f->Get("hpi");
  hSpectra[kTOF][kProton][kNeg]= (TH1F*) f->Get("hpr");
  hSpectra[kTOF][kKaon]  [kNeg]= (TH1F*) f->Get("hka");
  hSpectra[kTOF][kPion]  [kNeg]->SetName("hpiNeg");
  hSpectra[kTOF][kProton][kNeg]->SetName("hprNeg");
  hSpectra[kTOF][kKaon]  [kNeg]->SetName("hkaNeg");

  // Divide for efficiency
  hSpectra[kTOF][kPion]  [kPos]->Divide(hEffTrackTOF[kPion]  [kPos]);
  hSpectra[kTOF][kKaon]  [kPos]->Divide(hEffTrackTOF[kKaon]  [kPos]);
  hSpectra[kTOF][kProton][kPos]->Divide(hEffTrackTOF[kProton][kPos]);
  hSpectra[kTOF][kPion]  [kPos]->Divide(hEffMatchTOF[kPion]  [kPos]);
  hSpectra[kTOF][kKaon]  [kPos]->Divide(hEffMatchTOF[kKaon]  [kPos]);
  hSpectra[kTOF][kProton][kPos]->Divide(hEffMatchTOF[kProton][kPos]);
  hSpectra[kTOF][kPion]  [kNeg]->Divide(hEffTrackTOF[kPion]  [kNeg]);
  hSpectra[kTOF][kKaon]  [kNeg]->Divide(hEffTrackTOF[kKaon]  [kNeg]);
  hSpectra[kTOF][kProton][kNeg]->Divide(hEffTrackTOF[kProton][kNeg]);
  hSpectra[kTOF][kPion]  [kNeg]->Divide(hEffMatchTOF[kPion]  [kNeg]);
  hSpectra[kTOF][kKaon]  [kNeg]->Divide(hEffMatchTOF[kKaon]  [kNeg]);
  hSpectra[kTOF][kProton][kNeg]->Divide(hEffMatchTOF[kProton][kNeg]);


  // Clean UP TOF spectra, removing unwanted points
  cout << "Cleaning Up TOF spectra" << endl;
  Int_t nbin =  hSpectra[kTOF][kKaon][kPos]->GetNbinsX();
  for(Int_t ibin = 1; ibin <= nbin; ibin++){
    Float_t pt =  hSpectra[kTOF][kKaon][kPos]->GetBinCenter(ibin);
    for(Int_t icharge = 0; icharge < kNCharge; icharge++){
      if (pt > 2.35) {
	hSpectra[kTOF][kKaon][icharge]->SetBinContent(ibin,0);
	hSpectra[kTOF][kKaon][icharge]->SetBinError  (ibin,0);	
	hSpectra[kTOF][kProton][icharge]->SetBinContent(ibin,0);
	hSpectra[kTOF][kProton][icharge]->SetBinError  (ibin,0);	
      }
      if (pt < 0.7) {
	hSpectra[kTOF][kProton][icharge]->SetBinContent(ibin,0);
	hSpectra[kTOF][kProton][icharge]->SetBinError  (ibin,0);	
      }
    }
  }
//   cout << "Scaling TOF to TPC" << endl;  
//   // Scale protons to TPC
//   hSpectra[kTOF][kProton][kPos]->Scale(1./1.05);
//   // Scale pbar so that pbar/p is compatible with Panos
//   hSpectra[kTOF][kProton][kNeg]->Scale(1./1.1);
  
  // TOF: systematics
  // Load TOF systematic errors:
  f = new TFile ("./Files/systMatchingPos.root");
  AliPWGHistoTools::AddHisto(hSystError[kTOF][kPion][kPos]  ,(TH1*)gDirectory->Get("hErrPionMatch")  );
  AliPWGHistoTools::AddHisto(hSystError[kTOF][kProton][kPos],(TH1*)gDirectory->Get("hErrProtonMatch"));
  AliPWGHistoTools::AddHisto(hSystError[kTOF][kKaon][kPos]  ,(TH1*)gDirectory->Get("hErrKaonMatch")  );
  f = new TFile ("./Files/systMatchingNeg.root");
  AliPWGHistoTools::AddHisto(hSystError[kTOF][kPion]  [kNeg],(TH1*)gDirectory->Get("hErrPionMatch"));
  AliPWGHistoTools::AddHisto(hSystError[kTOF][kProton][kNeg],(TH1*)gDirectory->Get("hErrProtonMatch"));
  AliPWGHistoTools::AddHisto(hSystError[kTOF][kKaon]  [kNeg],(TH1*)gDirectory->Get("hErrKaonMatch"));  
  f = new TFile ("./Files/systPIDall.root");
  AliPWGHistoTools::AddHisto(hSystError[kTOF][kPion]  [kPos],(TH1*)gDirectory->Get("hpiCorr"));
  AliPWGHistoTools::AddHisto(hSystError[kTOF][kProton][kPos],(TH1*)gDirectory->Get("hpCorr"));
  AliPWGHistoTools::AddHisto(hSystError[kTOF][kKaon]  [kPos],(TH1*)gDirectory->Get("hkCorr"));  
  AliPWGHistoTools::AddHisto(hSystError[kTOF][kPion]  [kNeg],(TH1*)gDirectory->Get("hpiCorr"));
  AliPWGHistoTools::AddHisto(hSystError[kTOF][kProton][kNeg],(TH1*)gDirectory->Get("hpCorr"));
  AliPWGHistoTools::AddHisto(hSystError[kTOF][kKaon]  [kNeg],(TH1*)gDirectory->Get("hkCorr"));  
  
  
  // ITS SA 
  f = new TFile("./Files/ITSsaSpectraCorr-28Sep10.root");
  hSpectra[kITS][kPion]  [kPos]= (TH1F*) f->Get("hSpectraPos0");
  hSpectra[kITS][kKaon]  [kPos]= (TH1F*) f->Get("hSpectraPos1");
  hSpectra[kITS][kProton][kPos]= (TH1F*) f->Get("hSpectraPos2");
  hSpectra[kITS][kPion]  [kNeg]= (TH1F*) f->Get("hSpectraNeg0");
  hSpectra[kITS][kKaon]  [kNeg]= (TH1F*) f->Get("hSpectraNeg1");
  hSpectra[kITS][kProton][kNeg]= (TH1F*) f->Get("hSpectraNeg2");

  // Remove unwanted bins
  for(Int_t ipart = 0; ipart < kNPart; ipart++){
    for(Int_t icharge = 0; icharge < kNCharge; icharge++){
      Int_t nbinITS = hSpectra[kITS][ipart][icharge]->GetNbinsX();
      for(Int_t ibin = 1; ibin <= nbinITS; ibin++){
	if(hSpectra[kITS][ipart][icharge]->GetBinContent(ibin) < 0 ) {
	  hSpectra[kITS][ipart][icharge]->SetBinContent(ibin,0);
	  hSpectra[kITS][ipart][icharge]->SetBinError  (ibin,0);
	}
	//	if(ipart == kProton && (ibin==9 || ibin==10)){ // FIXME
	if(ipart == kProton && (ibin==9)){
	  printf("Kill bin %d (%f - %f GeV/c)for ITS protons\n",ibin,hSpectra[kITS][ipart][icharge]->GetBinLowEdge(ibin),hSpectra[kITS][ipart][icharge]->GetBinLowEdge(ibin)+hSpectra[kITS][ipart][icharge]->GetBinWidth(ibin));
	  hSpectra[kITS][ipart][icharge]->SetBinContent(ibin,0);
	  hSpectra[kITS][ipart][icharge]->SetBinError  (ibin,0);
	}
	// FIXME: uncomment?
	// if(ipart == kKaon && ibin==7){
	//   printf("Kill bin %d (%f - %f GeV/c)for ITS kaons\n",ibin,hSpectra[kITS][ipart][icharge]->GetBinLowEdge(ibin),hSpectra[kITS][ipart][icharge]->GetBinLowEdge(ibin)+hSpectra[kITS][ipart][icharge]->GetBinWidth(ibin));
	//   hSpectra[kITS][ipart][icharge]->SetBinContent(ibin,0);
	//   hSpectra[kITS][ipart][icharge]->SetBinError  (ibin,0);
	// }
	
// 	if ((ipart == kKaon && ibin >= 12) || (ipart == kProton && ibin >= 20)) {
// 	  hSpectra[kITS][ipart][icharge]->SetBinContent(ibin,0);
// 	  hSpectra[kITS][ipart][icharge]->SetBinError  (ibin,0);
// 	}
      }
      
    }
  }

  if(useSecCorrFromDCA){
    TFile* fseccorr = new TFile("./Files/CorrFac-SecProtons3Meth-ITSsa.root");
    TH1F* hcorrp=(TH1F*)fseccorr->Get("hSecPCorrFromDCAexpo");
    TH1F* hcorrpbar=(TH1F*)fseccorr->Get("hSecPbarCorrFromDCAexpo");
    hSpectra[kITS][kProton][kPos]->Multiply(hcorrp);
    hSpectra[kITS][kProton][kNeg]->Multiply(hcorrpbar);
    fseccorr->Close();
  }

  // Correct for the eta bug (see mails around 30/01/2011)
  if(applyEtaCutCorrection) {
    TH1F * hCorrectionITSsaEtaCut[kNPart][kNCharge] = {0};
    f= TFile::Open("./Files/ITSsaEtaCutCorr.root");
    hCorrectionITSsaEtaCut[kPion  ][kPos] = (TH1F*) f->Get("ITSsaPos0");
    hCorrectionITSsaEtaCut[kKaon  ][kPos] = (TH1F*) f->Get("ITSsaPos1");
    hCorrectionITSsaEtaCut[kProton][kPos] = (TH1F*) f->Get("ITSsaPos2");
    hCorrectionITSsaEtaCut[kPion  ][kNeg] = (TH1F*) f->Get("ITSsaNeg0");
    hCorrectionITSsaEtaCut[kKaon  ][kNeg] = (TH1F*) f->Get("ITSsaNeg1");
    hCorrectionITSsaEtaCut[kProton][kNeg] = (TH1F*) f->Get("ITSsaNeg2");
    for(Int_t ipart = 0; ipart < kNPart; ipart++){
      for(Int_t icharge = 0; icharge < kNCharge; icharge++){
	Int_t nbin = hSpectra[kITS][ipart][icharge]->GetNbinsX();
	for(Int_t ibin = 0; ibin < nbin; ibin++){
	  Int_t content = hSpectra[kITS][ipart][icharge]->GetBinContent(ibin) * hCorrectionITSsaEtaCut[ipart][icharge]->GetBinContent(ibin);
	  Int_t error   = hSpectra[kITS][ipart][icharge]->GetBinError(ibin) * hCorrectionITSsaEtaCut[ipart][icharge]->GetBinContent(ibin);
	  hSpectra[kITS][ipart][icharge]->SetBinContent(ibin, content);
	  hSpectra[kITS][ipart][icharge]->SetBinError  (ibin, error);
	}
      }    
    }
  }
    
  // Load ITS sa systematics, only pt dependent ones
  //  f = TFile::Open("./Files/ITSsa-systematics_20100930.root");
  f = TFile::Open("./Files/ITSsa-systematics-20101014.root");
  for(Int_t ipart = 0; ipart < kNPart; ipart++){
      for(Int_t icharge = 0; icharge < kNCharge; icharge++){
	AliPWGHistoTools::AddHisto(hSystError[kITS][ipart][icharge], (TH1*) gDirectory->Get(Form("hSystTot%s%s",chargeFlag[icharge],partFlag[ipart]))); // Using total error
      }
    }

  // ITS + TPC (Marek)
  //f = TFile::Open("./Files/SpectraCorrectedITSBeforeProtons20100720.root");
  //  f = TFile::Open("./Files/SpectraCorrectedITSBeforeProtons14092010new.root");
  f = TFile::Open("./Files/SpectraCorrectedITSBeforeProtonsstat29102010.root");
  TList * list = (TList*) gDirectory->Get("output");
  hSpectra[kITSTPC][kPion]  [kPos]= (TH1F*) list->FindObject("Pions");
  hSpectra[kITSTPC][kKaon]  [kPos]= (TH1F*) list->FindObject("Kaons");
  hSpectra[kITSTPC][kProton][kPos]= (TH1F*) list->FindObject("Protons");
  hSpectra[kITSTPC][kPion]  [kNeg]= (TH1F*) list->FindObject("AntiPions");
  hSpectra[kITSTPC][kKaon]  [kNeg]= (TH1F*) list->FindObject("AntiKaons");
  hSpectra[kITSTPC][kProton][kNeg]= (TH1F*) list->FindObject("AntiProtons");
  // Systematics
  f = TFile::Open("./Files/SpectraCorrectedITSBeforeProtonssys29102010.root");
  list = (TList*) gDirectory->Get("output");
  hSystError[kITSTPC][kPion]  [kPos]= (TH1F*) AliPWGHistoTools::GetRelativeError((TH1*) list->FindObject("Pions"));
  hSystError[kITSTPC][kKaon]  [kPos]= (TH1F*) AliPWGHistoTools::GetRelativeError((TH1*) list->FindObject("Kaons"));
  hSystError[kITSTPC][kProton][kPos]= (TH1F*) AliPWGHistoTools::GetRelativeError((TH1*) list->FindObject("Protons"));
  hSystError[kITSTPC][kPion]  [kNeg]= (TH1F*) AliPWGHistoTools::GetRelativeError((TH1*) list->FindObject("AntiPions"));
  hSystError[kITSTPC][kKaon]  [kNeg]= (TH1F*) AliPWGHistoTools::GetRelativeError((TH1*) list->FindObject("AntiKaons"));
  hSystError[kITSTPC][kProton][kNeg]= (TH1F*) AliPWGHistoTools::GetRelativeError((TH1*) list->FindObject("AntiProtons"));



  // TPC
  f = new TFile("./Files/protonSpectra_20100615.root");
  hSpectra[kTPC][kProton][kPos]= AliPWGHistoTools::GetHistoFromGraph((TGraphErrors*)f->Get("protonPosClassic"),htemplate);
  hSpectra[kTPC][kProton][kNeg]= AliPWGHistoTools::GetHistoFromGraph((TGraphErrors*)f->Get("protonNegClassic"),htemplate);
  f = new TFile("./Files/pionSpectra_20100615.root");
  hSpectra[kTPC][kPion][kPos]= AliPWGHistoTools::GetHistoFromGraph((TGraphErrors*)f->Get("pionPosClassic"),htemplate);
  hSpectra[kTPC][kPion][kNeg]= AliPWGHistoTools::GetHistoFromGraph((TGraphErrors*)f->Get("pionNegClassic"),htemplate);
  //  f = new TFile("./Files/kaonSpectra_20100615.root");
  f = new TFile("./Files/kaonsTPCcorr_2010_08_31.root");
  hSpectra[kTPC][kKaon][kPos]= AliPWGHistoTools::GetHistoFromGraph((TGraphErrors*)f->Get("kaonPosClassic"),htemplate);
  hSpectra[kTPC][kKaon][kNeg]= AliPWGHistoTools::GetHistoFromGraph((TGraphErrors*)f->Get("kaonNegClassic"),htemplate);

  // Clean UP TPC spectra, removing unwanted points
  cout << "Cleaning Up TPC spectra" << endl;
  nbin =  hSpectra[kTPC][kKaon][kPos]->GetNbinsX();
  for(Int_t ibin = 0; ibin < nbin; ibin++){
    Float_t pt =  hSpectra[kTPC][kKaon][kPos]->GetBinCenter(ibin);
    if (pt > 0.45 || pt<0.25) {
      for(Int_t icharge = 0; icharge < kNCharge; icharge++){
      	hSpectra[kTPC][kKaon][icharge]->SetBinContent(ibin,0);
      	hSpectra[kTPC][kKaon][icharge]->SetBinError  (ibin,0);	
      }      
    }
    // if (pt < 0.25) {
    //   hSpectra[kTPC][kKaon][kNeg]->SetBinContent(ibin,0);
    //   hSpectra[kTPC][kKaon][kNeg]->SetBinError  (ibin,0);	
    // }
    if (pt < 0.45) {
      for(Int_t icharge = 0; icharge < kNCharge; icharge++){
	hSpectra[kTPC][kProton][icharge]->SetBinContent(ibin,0);
	hSpectra[kTPC][kProton][icharge]->SetBinError  (ibin,0);	
      }      
    }
  }
  
  // Load TPC systematics
  cout << "WARNING: TPC SYST FOR NEGATIVES TO BE CORRECTED" << endl;
  f = TFile ::Open("./Files/pionsSystSum.root");
  AliPWGHistoTools::AddHisto(hSystError[kTPC][kPion][kPos],(TH1*) gDirectory->Get("pionsSyst"));
  AliPWGHistoTools::AddHisto(hSystError[kTPC][kPion][kNeg],(TH1*) gDirectory->Get("pionsSyst"));
  f = TFile ::Open("./Files/kaonsSystSum.root");
  AliPWGHistoTools::AddHisto(hSystError[kTPC][kKaon][kPos],(TH1*) gDirectory->Get("kaonsSyst"));
  AliPWGHistoTools::AddHisto(hSystError[kTPC][kKaon][kNeg],(TH1*) gDirectory->Get("kaonsSyst"));
  f = TFile ::Open("./Files/ProtonsSystSum.root");
  AliPWGHistoTools::AddHisto(hSystError[kTPC][kProton][kPos],(TH1*) gDirectory->Get("ProtonsSyst"));
  AliPWGHistoTools::AddHisto(hSystError[kTPC][kProton][kNeg],(TH1*) gDirectory->Get("ProtonsSyst"));
    
  // K0s
  f = new TFile ("./Files/PtSpectraCorrectedK0sOff_20100803.root");
  //  hSpectra[kK0][kKaon][kPos] = (TH1F*) AliPWGHistoTools::GetdNdPtFromOneOverPt((TH1*) gDirectory->Get("hSpectraOff")); 
  hSpectra[kK0][kKaon][kPos] = (TH1F*) gDirectory->Get("hSpectraOff"); 
  //  hSpectra[kK0][kKaon][kPos]->Scale(2*TMath::Pi());
  //  hSpectra[kK0][kKaon][kPos]->Scale(1./272463);
  hSpectra[kK0][kKaon][kNeg] = hSpectra[kK0][kKaon][kPos];

  // Kinks
  //  f = new TFile ("./Files/PtAllKaonKinkRap6Apr24.root");
  //  f = new TFile ("./Files/PtKaonKinkJune13AllPN_20100615.root");
  //  f = new TFile ("./Files/KaonKinkJun16PhySel2N.root");
  f = new TFile ("./Files/KaonKinkJun16PhySel2NRebPass6.root");
  hSpectra[kKinks][kKaon][kPos] = (TH1F*)gDirectory->Get("fptallKPA");
  hSpectra[kKinks][kKaon][kNeg] = (TH1F*)gDirectory->Get("fptallKNA");
  // hSpectra[kKinks][kKaon][kPos]->Scale(0.5/0.7); // different rapidity range for kinks
  // hSpectra[kKinks][kKaon][kNeg]->Scale(0.5/0.7); // different rapidity range for kinks
  // hSpectra[kKinks][kKaon][kPos]->Scale(276004./263345.); // different N of events
  // hSpectra[kKinks][kKaon][kNeg]->Scale(276004./263345.); // different N of events
  // This normalization if for KaonKinkJun16PhySel2N
  // hSpectra[kKinks][kKaon][kPos]->Scale(1./303214); // different N of events
  // hSpectra[kKinks][kKaon][kNeg]->Scale(1./303214); // different N of events
  // This normalization is for KaonKinkJun16PhySel2NRebPass6
  hSpectra[kKinks][kKaon][kPos]->Scale(1./260432.26); // different N of events
  hSpectra[kKinks][kKaon][kNeg]->Scale(1./260432.26); // different N of events

  // Apply correction factors
  // Secondaries for protons

  //f = new TFile ("./Files/corrFactorProtons_20100615.root");
  f = new TFile ("./Files/corrFactorProtons_2010_09_24.root");
  TH1F * hCorrSecondaries = (TH1F*) gDirectory->Get("corrFactorProtons");
  if(correctSecondaries) {
    cout << "CORRECTING SECONDARIES" << endl;
    
    for(Int_t idet = 0; idet <= kTOF; idet++){ // TPC and TOF only
      for(Int_t icharge = 0; icharge < kNCharge; icharge++){
	Int_t ipart = kProton;
	TH1* h = hSpectra[idet][ipart][icharge]; // lighter notation below
	if (h){
	  Int_t nbins = h->GetNbinsX();
	  for(Int_t ibin = 0; ibin < nbins; ibin++){
	    //	    Float_t pt = convertToMT ? TMath::Sqrt(h->GetBinCenter(ibin)*h->GetBinCenter(ibin)-mass[kProton]*mass[kProton]) : h->GetBinCenter(ibin);
	    Float_t pt = h->GetBinCenter(ibin);
	    if (icharge == kNeg) pt = -pt;
	    Int_t binCorrection = hCorrSecondaries->FindBin(pt);
	    Float_t correction    = hCorrSecondaries->GetBinContent(binCorrection);
	    //	    cout << pt << " " << correction << endl;
	    
	    if (correction) {// If the bin is empty this is a  0
	      h->SetBinContent(ibin,h->GetBinContent(ibin)/correction);
	      h->SetBinError  (ibin,h->GetBinError  (ibin)/correction);
	    } else if (h->GetBinContent(ibin) > 0) { // If we are skipping a non-empty bin, we notify the user
	      cout << "Not correcting bin "<<ibin << " for protons secondaries, " << detFlag[idet] << " " << chargeFlag[icharge] << endl;
	      cout << " Bin content: " << h->GetBinContent(ibin)  << endl;
	      
	    }
	  }	
	}
      }
    }
  }
  // geant/fluka absorption
  if(correctGeantFlukaXS) {
    cout << "CORRECTING GEANT3/FLUKA" << endl;
    // common file for Kaons
    TFile *fFlukakaons = TFile::Open("./Files/correctionForCrossSection.321.root");
    TH1D * hCorrFlukakaon[kNCharge];
    hCorrFlukakaon[kPos] = (TH1D*)fFlukakaons->Get("gHistCorrectionForCrossSectionParticles");
    hCorrFlukakaon[kNeg] = (TH1D*)fFlukakaons->Get("gHistCorrectionForCrossSectionAntiParticles");

    for(Int_t idet = 0; idet < kNDet; idet++){
      if( idet != kITS) continue; // comment to use fluka for kaons for all dets
      if (idet == kTOF) continue; // TOF already corrected
      for(Int_t icharge = 0; icharge < kNCharge; icharge++){
	Int_t ipart = kKaon;
	TH1 * h = hSpectra[idet][ipart][icharge]; // only ITS sa
	if (h){
	  Int_t nbins = h->GetNbinsX();
	  Int_t nbinsy=hCorrFlukakaon[icharge]->GetNbinsY();
	  for(Int_t ibin = 0; ibin < nbins; ibin++){
	    Float_t pt = h->GetBinCenter(ibin);
	    Float_t minPtCorrection = hCorrFlukakaon[icharge]->GetXaxis()->GetBinLowEdge(1);
	    Float_t maxPtCorrection = hCorrFlukakaon[icharge]->GetXaxis()->GetBinLowEdge(nbinsy+1);
	    if (pt < minPtCorrection) pt = minPtCorrection+0.0001;
	    if (pt > maxPtCorrection) pt = maxPtCorrection;
	    Float_t correction = hCorrFlukakaon[icharge]->GetBinContent(hCorrFlukakaon[icharge]->GetXaxis()->FindBin(pt));
	    if (correction != 0) {// If the bin is empty this is a  0
	      h->SetBinContent(ibin,h->GetBinContent(ibin)*correction);
	      h->SetBinError  (ibin,h->GetBinError  (ibin)*correction);
	    } else if (h->GetBinContent(ibin) > 0) { // If we are skipping a non-empty bin, we notify the user
	      cout << "Fluka/GEANT: Not correcting bin "<<ibin << " for protons secondaries, ITS, " << chargeFlag[icharge] << endl;
	      cout << " Bin content: " << h->GetBinContent(ibin)  << endl;
	    }
	  }
	}
      }
    }
 
    // PROTONS

    // ITS specific file for protons/antiprotons
    TFile* fITS = new TFile ("./Files/correctionForCrossSectionITS_20100719.root");
    TH2D * hCorrFlukaITS[kNCharge];
    hCorrFlukaITS[kPos] = (TH2D*)fITS->Get("gHistCorrectionForCrossSectionProtons");
    hCorrFlukaITS[kNeg] = (TH2D*)fITS->Get("gHistCorrectionForCrossSectionAntiProtons");
    
    for(Int_t icharge = 0; icharge < kNCharge; icharge++){
      Int_t ipart = kProton;
      TH1 * h = hSpectra[kITS][ipart][icharge]; // only ITS sa
      if (h){
	Int_t nbins = h->GetNbinsX();
	Int_t nbinsy=hCorrFlukaITS[icharge]->GetNbinsY();
	for(Int_t ibin = 0; ibin < nbins; ibin++){
	  Float_t pt = h->GetBinCenter(ibin);
	  Float_t minPtCorrection = hCorrFlukaITS[icharge]->GetYaxis()->GetBinLowEdge(1);
	  Float_t maxPtCorrection = hCorrFlukaITS[icharge]->GetYaxis()->GetBinLowEdge(nbinsy+1);
	  if (pt < minPtCorrection) pt = minPtCorrection+0.0001;
	  if (pt > maxPtCorrection) pt = maxPtCorrection;
	  Float_t correction = hCorrFlukaITS[icharge]->GetBinContent(1,hCorrFlukaITS[icharge]->GetYaxis()->FindBin(pt));
	  if (correction != 0) {// If the bin is empty this is a  0
	    h->SetBinContent(ibin,h->GetBinContent(ibin)*correction);
	    h->SetBinError  (ibin,h->GetBinError  (ibin)*correction);
	  } else if (h->GetBinContent(ibin) > 0) { // If we are skipping a non-empty bin, we notify the user
	    cout << "Fluka/GEANT: Not correcting bin "<<ibin << " for protons secondaries, ITS, " << chargeFlag[icharge] << endl;
	    cout << " Bin content: " << h->GetBinContent(ibin)  << endl;
	  }
	}
      }
    }
      
    

    //f = new TFile ("./Files/correctionForCrossSection_20100615.root");
    f = new TFile ("./Files/correctionForCrossSection_20100920.root");
    TH2D * hCorrFluka[kNCharge];
    hCorrFluka[kPos] = (TH2D*)gDirectory->Get("gHistCorrectionForCrossSectionProtons");
    hCorrFluka[kNeg] = (TH2D*)gDirectory->Get("gHistCorrectionForCrossSectionAntiProtons");
    for(Int_t idet = 0; idet < kNDet; idet++){
      if (idet == kITS) continue; // skip ITS sa
      for(Int_t icharge = 0; icharge < kNCharge; icharge++){
	Int_t ipart = kProton;
	TH1 * h = hSpectra[idet][ipart][icharge]; // lighter notation below
	if (h){
	  Int_t nbins = h->GetNbinsX();
	  for(Int_t ibin = 0; ibin < nbins; ibin++){
// 	    Float_t pt = convertToMT ? 
// 	      TMath::Sqrt(h->GetBinCenter(ibin)*h->GetBinCenter(ibin)-mass[kProton]*mass[kProton]) :
// 	      h->GetBinCenter(ibin);
	    Float_t pt = h->GetBinCenter(ibin);
	    Float_t minPtCorrection = hCorrFluka[icharge]->GetYaxis()->GetBinLowEdge(1);
	    //	    hCorrFluka[icharge]->Draw();
	    TH1D * htmpFluka=hCorrFluka[icharge]->ProjectionY();
	    Float_t maxPtCorrection = AliPWGHistoTools::GetHighestNotEmptyBinEdge(htmpFluka);//->GetYaxis()->GetBinLowEdge(hCorrFluka[icharge]->GetNbinsY()+1);
	    if (pt < minPtCorrection) pt = minPtCorrection+0.0001;
	    if (pt > maxPtCorrection) pt = maxPtCorrection-0.0001;
	    Float_t correction = hCorrFluka[icharge]->GetBinContent(1,hCorrFluka[icharge]->GetYaxis()->FindBin(pt));
	    
	    // already in the efficiency correction (F. Noferini)
	    if (idet == kTOF) {
	      if (icharge == kNeg)  correction = 1; // antiprotons already corrected in efficiency
	      // Scale correction for the different material budget. Recipe by Francesco Noferini
	      else {
		correction = TMath::Power(correction,0.07162/0.03471);
	      }
	    }	    
	    if (correction != 0) {// If the bin is empty this is a  0
	      
	      h->SetBinContent(ibin,h->GetBinContent(ibin)*correction);
	      h->SetBinError  (ibin,h->GetBinError  (ibin)*correction);
	    } else if (h->GetBinContent(ibin) > 0) { // If we are skipping a non-empty bin, we notify the user
	      cout << "Fluka/GEANT: Not correcting bin "<<ibin << " for protons secondaries, " << detFlag[idet] << " " << chargeFlag[icharge] << endl;
	      cout << " Bin content: " << h->GetBinContent(ibin)  << endl;
	    }
	    
	  }
	  
	}
      }
    }    
  }


  // Set style and scale
  for(Int_t idet = 0; idet < kNDet; idet++){
    for(Int_t ipart = 0; ipart < kNPart; ipart++){
      for(Int_t icharge = 0; icharge < kNCharge; icharge++){
	if (hSpectra[idet][ipart][icharge]){
	  hSpectra[idet][ipart][icharge]->SetStats(0); // disable stats
	  hSpectra[idet][ipart][icharge]->SetMarkerColor (color[ipart] );
	  hSpectra[idet][ipart][icharge]->SetLineColor   (color[ipart] );
	  hSpectra[idet][ipart][icharge]->SetMarkerStyle (marker[ipart]);
	  hSpectra[idet][ipart][icharge]->SetXTitle("p_{t} (GeV/c)");
	  hSpectra[idet][ipart][icharge]->SetYTitle("1/N_{ev} dN/dp_{t} (GeV/c)^{-1}");
	  if (convertToMT) {
	    TH1F * htmp = (TH1F*) AliPWGHistoTools::GetOneOverPtdNdPt(hSpectra[idet][ipart][icharge]);
	    hSpectra[idet][ipart][icharge] = (TH1F*)AliPWGHistoTools::GetdNdmtFromdNdpt(htmp,mass[ipart]);
	    hSpectra[idet][ipart][icharge]->SetXTitle("m_{t} (GeV)");
	    hSpectra[idet][ipart][icharge]->SetYTitle("1/N_{ev} 1/m_{t} dN/dp_{t} (GeV)^{-1}");
	  }
// 	  if (idet == kTOF || idet == kTPC) {
// 	      hSpectra[idet][ipart][icharge]->Scale(1./236763);	      
// 	  } 
// 	  if (idet == kITS){
// 	    hSpectra[idet][ipart][icharge]->Scale(202945./236763);	      	      
// 	  }
	  if (scaleKaons && ipart == kKaon) {
	    hSpectra[idet][ipart][icharge]->Scale(2.);	      	    
	  }
	} else {
	  printf("Cannot load %s,%s,%s\n",detFlag[idet],partFlag[ipart],chargeFlag[icharge]);
	}
      }
    }
  }


  // Create fake weights for the mean; To be update once we have syst errors
  // Using syste from table in paper. It would be better to have this as a function of pt.
  TH1F * hWeights[3][kNPart];
  const Double_t kWeights[3][kNPart] =  
    // {{4,  3,  10.2},  // TPC
    //  {4.1,8.8,7.0 },  //TOF
    //  {4.5,5.6,7.0 }}; // ITS
    {{0.1,0.1,0.1},  // TPC
     {0.1,0.1,0.1},  //TOF
     {0.1,0.1,0.1}}; // ITS
  for(Int_t ipart = 0; ipart <= kNPart ; ipart++){
    for(Int_t idet = 0; idet <= kITS ; idet++){
      hWeights[idet][ipart] = (TH1F*) hSpectra[idet][ipart][kPos]->Clone();
      Int_t nbinW = hWeights[idet][ipart]->GetNbinsX();
      for(Int_t ibin = 1; ibin <= nbinW; ibin++){
	hWeights[idet][ipart]->SetBinError(ibin, kWeights[idet][ipart]);
      }    
    }
  }
  const Double_t scaleDet[] = {1.00,1.00,1.00}; // During the weekly meeting 19/08/2010 we decided not to apply any scaling.
  //  const Double_t scaleDet[] = {0.98,1,1.00}; // Scaling factor for the different detectors. Estimated from ratios, it has an estimated uncertainty of ~2% 
  //  const Double_t scaleDet[] = {0.88,1,0.88}; // Scaling factor for the different detectors. Estimated from ratios, it has an estimated uncertainty of ~2% 


  // Combine detectors
  for(Int_t ipart = 0; ipart < kNPart; ipart++){
    for(Int_t icharge = 0; icharge < kNCharge; icharge++){
      TH1F * htemplLocal = htemplate; // If we are converting to 1/mt dNdmt we need to convert the template as well...
      
      if (convertToMT) {
	TH1F * htmp = (TH1F*) AliPWGHistoTools::GetOneOverPtdNdPt(htemplate);
	htemplLocal = (TH1F*)AliPWGHistoTools::GetdNdmtFromdNdpt(htmp,mass[ipart]);

      }
      hSpectra[kCombTOFTPC][ipart][icharge] = AliPWGHistoTools::CombineHistos(hSpectra[kTOF][ipart][icharge],
									hSpectra[kTPC][ipart][icharge],
									htemplLocal,1.);;

      hSpectra[kCombAll][ipart][icharge]   = 
	AliPWGHistoTools::Combine3HistosWithErrors(hSpectra[kITS][ipart][icharge],  // Histos to combine
					     hSpectra[kTPC][ipart][icharge],
					     hSpectra[kTOF][ipart][icharge],
					     hSystError[kITS][ipart][icharge], // Errors (weights) used for the average
					     hSystError[kTPC][ipart][icharge],
					     hSystError[kTOF][ipart][icharge],
					     // hWeights[kITS][ipart],
					     // hWeights[kTPC][ipart],
					     // hWeights[kTOF][ipart],
					     htemplLocal,1,   // template, take statistical error from TPC in overlap
					     scaleDet[kITS],  // relative scaling
					     scaleDet[kTPC],
					     scaleDet[kTOF],
					     (TH1**)&hSystError[kCombAll][ipart][icharge], // put combined syst error here
					     1 // weights histos contain error in bin content
					     );
//       if (convertToMT) {
// 	TH1F * htmp = (TH1F*) AliPWGHistoTools::GetOneOverPtdNdPt(hSpectra[kCombTOFTPC][ipart][icharge]);
// 	hSpectra[kCombTOFTPC][ipart][icharge] = (TH1F*)AliPWGHistoTools::GetdNdmtFromdNdpt(htmp,mass[ipart]);
// 	hSpectra[kCombTOFTPC][ipart][icharge]->SetXTitle("m_{t} (GeV)");
// 	hSpectra[kCombTOFTPC][ipart][icharge]->SetYTitle("1/N_{ev} 1/m_{t} dN/dp_{t} (GeV)^{-1}");
//       }
    }
  }


  // Scale for the number of inelastic collisions and correct for
  // efficiency losses due to physics selection:

  Double_t effPhysSel[kNPart];
  effPhysSel[kPion]   = 1.012;
  effPhysSel[kKaon]   = 1.013;
  effPhysSel[kProton] = 1.014;


  for(Int_t idet = 0; idet < kNHist; idet++){
    for(Int_t ipart = 0; ipart < kNPart; ipart++){
      for(Int_t icharge = 0; icharge < kNCharge; icharge++){
	if(hSpectra[idet][ipart][icharge]) {
	  //	  cout << "Scaling!" << endl;
	  if(idet != kKinks && idet != kK0){ // Kinks use a different run list, k0s normalized by Helene
	    if(idet!=kITSTPC) hSpectra[idet][ipart][icharge]->Scale(1.*effPhysSel[ipart]/278366.15); // Scale PhysSel efficiency (computed by Alexander)
	    else hSpectra[idet][ipart][icharge]->Scale(1./278366.15); // Scale PhysSel efficiency (computed by Alexander)
	  }
	}
      }
    }
  }


}

void LoadMC() {

  TFile * f = 0;
  const char * evClass= "INEL";
  const char * files[] = {"./Files/dndeta_Phojet_10M_900GeV.root", 
			  "./Files/dndeta_AtlasCSC306_10M_900GeV.root", 
			  "./Files/dndeta_CMSD6T109_10M_900GeV.root", 
			  "./Files/dndeta_Perugia0320_10M_900GeV.root", };
  
  // Phojet
  for(Int_t itune = 0; itune < kNTunes; itune++){
    f = new TFile(files[itune]);
    for(Int_t ipart = 0; ipart < kNPart; ipart++){
      for(Int_t icharge = 0; icharge < kNCharge; icharge++){
	hSpectraMC[itune][ipart][icharge] = (TH1F*) f->Get(Form("fHistPtID_%s_%s%s",evClass,partFlag[ipart],icharge==0 ? "Pos" : "Neg"));
      }
    }
  }
  

  // Set style
  for(Int_t itune = 0; itune < kNTunes; itune++){
    for(Int_t ipart = 0; ipart < kNPart; ipart++){
      for(Int_t icharge = 0; icharge < kNCharge; icharge++){
	if (hSpectraMC[itune][ipart][icharge]){
	  hSpectraMC[itune][ipart][icharge]->SetName(TString(hSpectraMC[itune][ipart][icharge]->GetName())+mcTuneName[itune]);
	  hSpectraMC[itune][ipart][icharge]->SetMarkerColor (mcLineColor[itune] );
	  hSpectraMC[itune][ipart][icharge]->SetLineColor   (mcLineColor[itune] );
	  hSpectraMC[itune][ipart][icharge]->SetLineStyle   (mcLineStyle[itune] );
	  hSpectraMC[itune][ipart][icharge]->SetMarkerStyle (1);
	  if (convertToMT) {
	    TH1F * htmp = (TH1F*)AliPWGHistoTools::GetOneOverPtdNdPt(hSpectraMC[itune][ipart][icharge]);
	    hSpectraMC[itune][ipart][icharge] = (TH1F*)AliPWGHistoTools::GetdNdmtFromdNdpt(htmp,mass[ipart]);
	    hSpectraMC[itune][ipart][icharge]->SetXTitle("m_{t} (GeV)");
	    hSpectraMC[itune][ipart][icharge]->SetYTitle("1/N_{ev} 1/m_{t} dN/dp_{t} (GeV)^{-1}");
	  }

	} else {
	  printf("Cannot load MC # %d,%s,%s\n",itune,partFlag[ipart],chargeFlag[icharge]);
	}
      }
    }
  }
  
}

void DrawStar(Int_t icharge) {
  //  cout << icharge << endl;
  
  //  gROOT->LoadMacro("StarPPSpectra.C");
  TGraphErrors ** gStar = StarPPSpectra();
  
  for(Int_t istar = 0; istar < 6; istar++){
    gStar[istar]->SetMarkerStyle(kOpenStar);
    if      (icharge==kPos &&  (istar%2) ) gStar[istar]->Draw("P");
    else if (icharge==kNeg && !(istar%2) ) gStar[istar]->Draw("P");
    else cout << "Skipping Star " << istar << endl;    
  }
}

void GetITSResiduals() {

 
  for(Int_t ipart = 0; ipart < kNPart; ipart++){
    for(Int_t icharge = 0; icharge < kNCharge; icharge++){
      //      cout << "1 " << ipart << " " << icharge << endl;
      
//       gSystem->ProcessEvents();
//       gSystem->Sleep(1000);
      TF1* f = (TF1*)   hSpectra[kCombTOFTPC][ipart][icharge]->GetListOfFunctions()->At(0);
      TH1F * hres1, *hres2;
      AliPWGHistoTools::GetResiduals(hSpectra[kITS][ipart][icharge], f, &hres1, &hres2);

      TCanvas * c1 = new TCanvas(TString(partFlag[ipart])+"_"+chargeFlag[icharge],TString(partFlag[ipart])+"_"+chargeFlag[icharge]);
      c1->SetLogy();
      hSpectra[kCombTOFTPC][ipart][icharge]->Draw();
      hSpectra[kITS][ipart][icharge]->SetMarkerStyle(24);
      hSpectra[kCombTOFTPC][ipart][icharge]->SetMarkerStyle(20);
      hSpectra[kITS][ipart][icharge]->Draw("same");
      hSpectra[kCombTOFTPC][ipart][icharge]->GetListOfFunctions()->At(0)->Draw("same");
      TLegend* l = new TLegend(    0.182886,    0.192308,    0.505034,0.384615, TString(partLabel[ipart][icharge])+" "+chargeFlag[icharge]);
      l->AddEntry(hSpectra[kCombTOFTPC][ipart][icharge], "TOF+TPC");
      l->AddEntry(hSpectra[kITS][ipart][icharge],        "ITS");
      l->AddEntry(f,        "Fit to TOF+TPC");
      l->Draw();

      TCanvas * c2 = new TCanvas(TString(partFlag[ipart])+"_"+chargeFlag[icharge]+"_res",
				 TString(partFlag[ipart])+"_"+chargeFlag[icharge]+"_res");  
      c2->SetGridy();
      hres2->SetMinimum(-1);
      hres2->SetMaximum(1);
      hres2->Draw();
      hres2->GetYaxis()->SetTitleOffset(1.2);
      Float_t x = AliPWGHistoTools::GetLowestNotEmptyBinEdge(hSpectra[kCombTOFTPC][ipart][icharge]);
      TLine * line = new TLine(x,-1,x,1);
      line->SetLineStyle(kDashed);
      line->Draw("same");
      
      if (doPrint) {
	c1->Update();
	c2->Update();
	gSystem->ProcessEvents();
	c1->Print(TString(c1->GetName()) + ".png");
	c2->Print(TString(c2->GetName()) + ".png");
      }
    }
  }
}

void DrawWithModels() {

  Int_t chargeLoop = sumCharge ? 1 : 2; 
  for(Int_t icharge = 0; icharge < chargeLoop; icharge++){
 
    // Draw with models
    for(Int_t ipart = 0; ipart < kNPart; ipart++){
      // Multipad canvas
      TString chargeFlagLocal = chargeFlag[icharge];
      if(sumCharge) chargeFlagLocal += chargeFlag[1];
      TCanvas * c1 = new TCanvas(TString("cSpectra")+partFlag[ipart]+chargeFlagLocal,TString("cSpectra")+partFlag[ipart]+chargeFlagLocal,700,700);
      TPad *p1 = new TPad(TString("p1")+partFlag[ipart]+chargeFlagLocal, "p1", 0.0, 0.35, 1.0,  0.95, 0, 0, 0);
      p1->SetBottomMargin(0);
      p1->Draw();
      
      TPad *p2 = new TPad(TString("p2")+partFlag[ipart]+chargeFlagLocal, "p2", 0.0, 0.05, 1.0,  0.35, 0, 0, 0);
      p2->SetTopMargin(0);
      p2->SetBottomMargin(0.3);
      p2->Draw();

      Float_t scaleFonts = (0.95-0.3)/(0.3-0.05);

      // Draw spectra
      p1->cd();
      p1->SetLogy();
      Float_t maxy = sumCharge ? 10 : 5;
      TH2F * hempty = new TH2F(TString("hempty")+long(icharge)+long(ipart),"hempty",100,0.,3, 100, 0.0015,maxy);
      hempty->SetXTitle("p_{t} (GeV/c)");
      hempty->SetYTitle("1/N_{ev} d^{2}N / dydp_{t} (GeV/c)^{-1}");
      hempty->Draw();
      c1->SetLogy();
      


      TLegend * l =new TLegend(0.502874, 0.493056, 0.892241, 0.904762);
      l->SetFillColor(kWhite);      
      if(sumCharge) 	{
	hSpectra[iCombInStudy][ipart][kPos]->Add(hSpectra[iCombInStudy][ipart][kNeg]); // Draw pos+neg
      }
      hSpectra[iCombInStudy][ipart][icharge]->Draw("same");
      l->AddEntry(hSpectra[kTOF][ipart][icharge],TString ("Data"));
      for(Int_t itune = 0; itune < kNTunes; itune++){      
	if(sumCharge)	hSpectraMC[itune][ipart][icharge]->Add(hSpectraMC[itune][ipart][kNeg]); // Draw pos+neg;    
	l->AddEntry(hSpectraMC[itune][ipart][icharge],mcTuneName[itune]);
	hSpectraMC[itune][ipart][icharge]->SetLineWidth(2);    
	AliPWGHistoTools::GetGraphFromHisto(hSpectraMC[itune][ipart][icharge])->Draw("CX");
      }
      l->Draw("same");
     
      TLatex * tex = new TLatex(0.6712643,2.353486,sumCharge ? Form("%s+%s",partLabel[ipart][icharge],partLabel[ipart][1]) : partLabel[ipart][icharge]);
      tex->SetTextFont(42);
      tex->SetTextSize(0.07936508);
      tex->SetLineWidth(2);
      tex->Draw();

      // Draw ratio
      p2->cd();
      Float_t maxyr = sumCharge ? 3.99 : 2.99;
      TH2F * hemptyr = new TH2F(TString("hemptyratio")+long(icharge)+long(ipart),"hempty",100,0.,3, 100, 0.01,maxyr);
      hemptyr->SetXTitle("p_{t} (GeV/c)");
      hemptyr->SetYTitle("Data/MC");
      hemptyr->GetXaxis()->SetLabelSize(0.04*scaleFonts);
      hemptyr->GetYaxis()->SetLabelSize(0.04*scaleFonts);
      hemptyr->GetYaxis()->SetTitleSize(0.05*scaleFonts);
      hemptyr->GetYaxis()->SetTitleOffset(1.4/scaleFonts);
      hemptyr->GetXaxis()->SetTitleSize(0.05*scaleFonts);
      hemptyr->GetXaxis()->SetTitleOffset(1.05);
      hemptyr->SetTickLength(0.03*scaleFonts, "X");
      hemptyr->SetTickLength(0.02*scaleFonts, "Y");
      //      hemptyr->GetXaxis()->SetTitleOffset(1.4/scaleFonts);
      hemptyr->GetYaxis()->SetNdivisions(5);
      hemptyr->Draw("");

      AliPWGFunc fm;
      for(Int_t itune = 0; itune < kNTunes; itune++){      
	TF1* f = fm.GetHistoFunc(hSpectraMC[itune][ipart][icharge], TString("f")+mcTuneName[itune]);

	//	l->AddEntry(hSpectraMC[itune][ipart][icharge],mcTuneName[itune]);
	TH1F* hRatio = AliPWGHistoTools::DivideHistoByFunc(hSpectra[iCombInStudy][ipart][icharge],f);
	hRatio->SetLineStyle(hSpectraMC[itune][ipart][icharge]->GetLineStyle());
	hRatio->SetLineColor(hSpectraMC[itune][ipart][icharge]->GetLineColor());
	hRatio->SetLineWidth(hSpectraMC[itune][ipart][icharge]->GetLineWidth());
	hRatio->SetMarkerStyle(0);
	hRatio->Draw("same");
	//	AliPWGHistoTools::GetGraphFromHisto(hRatio)->Draw("CX");
      }


      // print
      PrintCanvas(c1,printFormats);
    }
  }



}

void DrawAllAndKaons() {

  

  //  gROOT->LoadMacro("ALICEWorkInProgress.C");

  //  gStyle->SetOptFit(0);
  gStyle->SetStatX(0.9);
  gStyle->SetStatY(0.88);
  gStyle->SetStatW(0.4);
  gStyle->SetStatH(0.1);

  TH1F * hKaonsAllTPCTOF = (TH1F*) hSpectra[iCombInStudy][kKaon][kPos]->Clone();
  hKaonsAllTPCTOF->Add(hSpectra[iCombInStudy][kKaon][kNeg]);
  
  TH1F * hK0Scaled    = (TH1F*) hSpectra[kK0][kKaon][kPos]->Clone();
  hK0Scaled->Add(hSpectra[kK0][kKaon][kPos]);

  hSpectra[kKinks][kKaon][kPos]->SetMarkerStyle(25);
  hSpectra[kKinks][kKaon][kPos]->SetLineColor(4);
  hSpectra[kKinks][kKaon][kPos]->SetStats(0);
  TH1F * hKinksAll = (TH1F*) hSpectra[kKinks][kKaon][kPos]->Clone();
  hKinksAll->Add(hSpectra[kKinks][kKaon][kNeg]);
  
  TCanvas * c1 = new TCanvas("cKaons","cKaons",700,700);
  c1->SetLogy();
  TH2F * hempty = new TH2F("hempty_allkaons","hempty",100,0.,3, 100, 1e-3,6);
  hempty->SetXTitle("p_{t} (GeV/c)");
  //  hempty->SetYTitle("dN / dp_{t} (A.U.)");
  hempty->SetYTitle("1/N_{ev} d^{2}N / dydp_{t} (GeV/c)^{-1}");
  hempty->Draw();
  hK0Scaled->Draw("same");
  hKaonsAllTPCTOF->Draw("same");
  hKinksAll->Draw("same");
  

  TLegend * leg = new TLegend(0.456897, 0.71875, 0.892241, 0.936012,NULL,"brNDC");
  //    leg->SetBorderSize(0);
//    leg->SetLineColor(1);
//    leg->SetLineStyle(1);
//    leg->SetLineWidth(1);
//    leg->SetFillColor(19);
    leg->SetFillColor(0);
   TLegendEntry *entry=leg->AddEntry(hKaonsAllTPCTOF,"K^{+} + K^{-}, ITS+TPC+TOF ","lpf");
   entry=leg->AddEntry(hK0Scaled,"K^{0} #times 2","lpf");
   entry=leg->AddEntry(hKinksAll,"K^{+} + K ^{-}, Kinks","lpf");
   leg->Draw();

   //   ALICEWorkInProgress(c1,today.Data(),"#splitline{ALICE Prelimiary}{Statistical Error Only}");
   // TLatex * tex = new TLatex(0.2120805,0.01288336,"Statistical error only");
   // tex->SetTextColor(2);
   // tex->SetTextFont(42);
   // tex->SetTextSize(0.03496503);
   // tex->Draw();

   c1->Update();
   PrintCanvas(c1, printFormats);

  // Draw all "stable" hadrons
   Bool_t divideCanvas=kFALSE; 
   TH1F * hSpectraSystError[kNHist][kNPart][kNCharge];// used to store spectra with syst error only
       
  for(Int_t icharge = 0; icharge < kNCharge; icharge++){
    TCanvas * c1h = 0;
    if(divideCanvas) c1h = new TCanvas(TString("cAll_")+chargeFlag[icharge],TString("cAll_")+chargeFlag[icharge],1200,500);
    else {
      c1h = new TCanvas(TString("cAll_")+chargeFlag[icharge],TString("cAll_")+chargeFlag[icharge],700,700);
      c1h->SetLogy();
    }
    c1h->SetLeftMargin(0.14);
    if(divideCanvas) {
      c1h->Divide(3,1);
      c1h->cd(1);
    }
    TH2F * hemptyLoc = new TH2F(TString("hempty")+long(icharge),"hempty",100,0.,4, 100, 1e-2,5);
    hemptyLoc->SetXTitle("p_{t} (GeV/c)");
    hemptyLoc->SetYTitle("1/N_{ev} d^{2}N / dydp_{t} (GeV/c)^{-1}");
    hemptyLoc->GetYaxis()->SetTitleOffset(1.35);
    hemptyLoc->GetXaxis()->SetTitleOffset(1.1);
    hemptyLoc->GetXaxis()->SetRangeUser(0,1);
    hemptyLoc->Draw();    

    for(Int_t ipart = 0; ipart < kNPart; ipart++) {                  
      if(ipart == kPion)         leg = new TLegend(0.558908, 0.78125, 0.889368, 0.924107, NULL,"brNDC");
      else if (ipart == kKaon)   leg = new TLegend(0.16523, 0.177083, 0.50431, 0.31994, NULL,"brNDC");
      else if (ipart == kProton) leg = new TLegend(0.51, 0.177083, 0.84, 0.31994, NULL,"brNDC");
      leg->SetFillColor(0);
      if(divideCanvas) {
	cout << "CD!!" << ipart+1 << endl;	
	c1h->cd(ipart+1);
	TH2F * hClone = new TH2F(*hemptyLoc);
	hClone->GetXaxis()->SetRangeUser(0,1);
	if(ipart == kPion)   hClone->GetYaxis()->SetRangeUser(0,3.5);
	if(ipart == kKaon)   hClone->GetYaxis()->SetRangeUser(0,0.28);
	if(ipart == kProton) hClone->GetYaxis()->SetRangeUser(0,0.1);
	hClone->Draw();
      }
      for(Int_t idet = 0; idet <= kITSTPC; idet++){
	//	if (idet == kITS) continue;
	// 	if (idet == kITSTPC) hSpectra[idet][ipart][icharge]->SetMarkerColor(kGreen);
 	hSpectra[idet][ipart][icharge]->SetMarkerStyle(marker[idet]);
	TH1F * hsyst = new TH1F(*hSpectra[idet][ipart][icharge]);
	hsyst->Reset();
	AliPWGHistoTools::GetValueAndError(hsyst, hSpectra[idet][ipart][icharge],hSystError[idet][ipart][icharge],kTRUE);
	//	hSpectra[idet][ipart][icharge]->Draw("same");
	hsyst->Draw("same");
	hSpectraSystError[idet][ipart][icharge] = hsyst;
	leg->AddEntry(hSpectra[idet][ipart][icharge],TString(partLabel[ipart][icharge])+" (" + detFlag[idet]  + ")","lpf");
      }
      //      leg->AddLine();
      leg->Draw();
    } 
    if(divideCanvas) c1h->cd(1);
    //    leg->Draw();
    //    ALICEWorkInProgress(c1h,today.Data(),"#splitline{ALICE Preliminary}{Statistical Error Only}");
    PrintCanvas(c1h,printFormats);
  }
 

  //  Draw ratios 

  // K-/K+ in the different detectors
  TCanvas * cpm=new TCanvas("cpm","Kminus/Kplus",700,700);
  cpm->Divide(2,2);
  cpm->cd(1);
  TH1F* hRatioKPKM_TPC=new TH1F(*(hSpectra[kTPC][kKaon][kNeg]));
  hRatioKPKM_TPC->SetMinimum(0.5);
  hRatioKPKM_TPC->SetMaximum(1.5);
  hRatioKPKM_TPC->Divide(hSpectra[kTPC][kKaon][kPos]);
  hRatioKPKM_TPC->GetYaxis()->SetTitle("K-/K+ (TPC)");
  hRatioKPKM_TPC->Draw();
  cpm->cd(2);
  TH1F* hRatioKPKM_ITS=new TH1F(*(hSpectra[kITS][kKaon][kNeg]));
  hRatioKPKM_ITS->Divide(hSpectra[kITS][kKaon][kPos]);
  hRatioKPKM_ITS->SetMinimum(0.5);
  hRatioKPKM_ITS->SetMaximum(1.5);
  hRatioKPKM_ITS->GetYaxis()->SetTitle("K-/K+ (ITSsa)");
  hRatioKPKM_ITS->Draw("");
  cpm->cd(3);
  TH1F* hRatioKPKM_TOF=new TH1F(*(hSpectra[kTOF][kKaon][kNeg]));
  hRatioKPKM_TOF->Divide(hSpectra[kTOF][kKaon][kPos]);
  hRatioKPKM_TOF->SetMinimum(0.5);
  hRatioKPKM_TOF->SetMaximum(1.5);
  hRatioKPKM_TOF->GetYaxis()->SetTitle("K-/K+ (TOF)");
  hRatioKPKM_TOF->Draw("");
  cpm->cd(4);
  TH1F* hRatioKPKM_ITSTPC=new TH1F(*(hSpectra[kITSTPC][kKaon][kNeg]));
  hRatioKPKM_ITSTPC->Divide(hSpectra[kITSTPC][kKaon][kPos]);
  hRatioKPKM_ITSTPC->SetMinimum(0.5);
  hRatioKPKM_ITSTPC->SetMaximum(1.5);
  hRatioKPKM_ITSTPC->GetYaxis()->SetTitle("K-/K+ (ITS Global)");
  hRatioKPKM_ITSTPC->Draw("");
  

  // ITS/TPC
  TH1F * hRatioITSTPC[kNPart][kNCharge];
  for(Int_t icharge = 0; icharge < kNCharge; icharge++){ // loop over charges
    // Create canvas
    TCanvas * c1h = new TCanvas(TString("cITSTPCRatio_")+chargeFlag[icharge],TString("cITSTPCRatio_")+chargeFlag[icharge],1200,500);
    c1h->Divide(3,1);
    c1h->SetGridy();
    TH2F * hemptyLoc = new TH2F(TString("hemptyR")+long(icharge),"ITSsa/TPC ",100,0.,1., 100, 0.5,1.5);
    hemptyLoc->SetXTitle("p_{t} (GeV/c)");
    hemptyLoc->SetYTitle("ITSsa / TPC");
    // Loop over particles
    for(Int_t ipart = 0; ipart < kNPart; ipart++) {
      // Clone histo
      hRatioITSTPC[ipart][icharge]=new TH1F(*hSpectraSystError[kITS][ipart][icharge]);
      Int_t nBinsITS=hSpectraSystError[kITS][ipart][icharge]->GetNbinsX();
      Int_t nBinsTPC=hSpectraSystError[kTPC][ipart][icharge]->GetNbinsX();
      // Loop over ITS bins, 
      for(Int_t iBin=1; iBin<=nBinsITS; iBin++){
	hRatioITSTPC[ipart][icharge]->SetBinContent(iBin,0.);
	hRatioITSTPC[ipart][icharge]->SetBinError(iBin,0.);
	Float_t lowPtITS=hSpectraSystError[kITS][ipart][icharge]->GetBinLowEdge(iBin);
	Float_t binWidITS=hSpectraSystError[kITS][ipart][icharge]->GetBinWidth(iBin);
	// Loop over TPC bins and find overlapping bins to ITS
	for(Int_t jBin=1; jBin<=nBinsTPC; jBin++){
	  Float_t lowPtTPC=hSpectraSystError[kTPC][ipart][icharge]->GetBinLowEdge(jBin);
	  Float_t binWidTPC=hSpectraSystError[kTPC][ipart][icharge]->GetBinWidth(jBin);
	  if(TMath::Abs(lowPtITS-lowPtTPC)<0.001 && TMath::Abs(binWidTPC-binWidITS)<0.001){
	    Float_t numer=hSpectraSystError[kITS][ipart][icharge]->GetBinContent(iBin);
	    Float_t denom=hSpectraSystError[kTPC][ipart][icharge]->GetBinContent(jBin);
	    Float_t enumer=hSpectraSystError[kITS][ipart][icharge]->GetBinError(iBin);
	    Float_t edenom=hSpectraSystError[kTPC][ipart][icharge]->GetBinError(jBin);
	    Double_t ratio=0.;
	    Double_t eratio=0.;
	    if(numer>0. && denom>0.){
	      ratio=numer/denom;
	      eratio=ratio*TMath::Sqrt((enumer/numer)*(enumer/numer)+(edenom/denom)*(edenom/denom));
	    }
	    hRatioITSTPC[ipart][icharge]->SetBinContent(iBin,ratio);
	    hRatioITSTPC[ipart][icharge]->SetBinError(iBin,eratio);
	    break;
	  }
	}
      }
      c1h->cd(ipart+1);
      // hemptyLoc->SetStats(1);
      // hemptyLoc->Draw(); 
      hRatioITSTPC[ipart][icharge]->SetYTitle("ITSsa/TPC");
      hRatioITSTPC[ipart][icharge]->SetStats(1);
      hRatioITSTPC[ipart][icharge]->GetYaxis()->SetRangeUser(0.5,1.5);
      hRatioITSTPC[ipart][icharge]->Draw("");
      TF1 * f = new TF1("fpol0","[0]");
      f->SetParameter(0,1);
      hRatioITSTPC[ipart][icharge]->Fit(f,"","same");
       
    }
    PrintCanvas(c1h,printFormats);
  }

  // ITS/TPC
  TH1F * hRatioITSGlobalTPC[kNPart][kNCharge];
  for(Int_t icharge = 0; icharge < kNCharge; icharge++){ // loop over charges
    // Create canvas
    TCanvas * c1h = new TCanvas(TString("cITSGlobalTPCRatio_")+chargeFlag[icharge],TString("cITSGlobalTPCRatio_")+chargeFlag[icharge],1200,500);
    c1h->Divide(3,1);
    c1h->SetGridy();
    TH2F * hemptyLoc = new TH2F(TString("hemptyR")+long(icharge),"ITS Global/TPC ",100,0.,1., 100, 0.5,1.5);
    hemptyLoc->SetXTitle("p_{t} (GeV/c)");
    hemptyLoc->SetYTitle("ITS Global / TPC");
    // Loop over particles
    for(Int_t ipart = 0; ipart < kNPart; ipart++) {
      // Clone histo
      hRatioITSGlobalTPC[ipart][icharge]=new TH1F(*hSpectraSystError[kITSTPC][ipart][icharge]);
      Int_t nBinsITS=hSpectraSystError[kITSTPC][ipart][icharge]->GetNbinsX();
      Int_t nBinsTPC=hSpectraSystError[kTPC][ipart][icharge]->GetNbinsX();
      // Loop over ITS bins, 
      for(Int_t iBin=1; iBin<=nBinsITS; iBin++){
	hRatioITSGlobalTPC[ipart][icharge]->SetBinContent(iBin,0.);
	hRatioITSGlobalTPC[ipart][icharge]->SetBinError(iBin,0.);
	Float_t lowPtITS=hSpectraSystError[kITSTPC][ipart][icharge]->GetBinLowEdge(iBin);
	Float_t binWidITS=hSpectraSystError[kITSTPC][ipart][icharge]->GetBinWidth(iBin);
	// Loop over TPC bins and find overlapping bins to ITS
	for(Int_t jBin=1; jBin<=nBinsTPC; jBin++){
	  Float_t lowPtTPC=hSpectraSystError[kTPC][ipart][icharge]->GetBinLowEdge(jBin);
	  Float_t binWidTPC=hSpectraSystError[kTPC][ipart][icharge]->GetBinWidth(jBin);
	  if(TMath::Abs(lowPtITS-lowPtTPC)<0.001 && TMath::Abs(binWidTPC-binWidITS)<0.001){
	    Float_t numer=hSpectraSystError[kITSTPC][ipart][icharge]->GetBinContent(iBin);
	    Float_t denom=hSpectraSystError[kTPC][ipart][icharge]->GetBinContent(jBin);
	    Float_t enumer=hSpectraSystError[kITSTPC][ipart][icharge]->GetBinError(iBin);
	    Float_t edenom=hSpectraSystError[kTPC][ipart][icharge]->GetBinError(jBin);
	    Double_t ratio=0.;
	    Double_t eratio=0.;
	    if(numer>0. && denom>0.){
	      ratio=numer/denom;
	      eratio=ratio*TMath::Sqrt((enumer/numer)*(enumer/numer)+(edenom/denom)*(edenom/denom));
	    }
	    hRatioITSGlobalTPC[ipart][icharge]->SetBinContent(iBin,ratio);
	    hRatioITSGlobalTPC[ipart][icharge]->SetBinError(iBin,eratio);
	    break;
	  }
	}
      }
      c1h->cd(ipart+1);
      // hemptyLoc->SetStats(1);
      // hemptyLoc->Draw(); 
      hRatioITSGlobalTPC[ipart][icharge]->SetYTitle("ITS Global/TPC");
      hRatioITSGlobalTPC[ipart][icharge]->SetStats(1);
      hRatioITSGlobalTPC[ipart][icharge]->GetYaxis()->SetRangeUser(0.5,1.5);
      hRatioITSGlobalTPC[ipart][icharge]->Draw("");
      TF1 * f = new TF1("fpol0","[0]");
      f->SetParameter(0,1);
      hRatioITSGlobalTPC[ipart][icharge]->Fit(f,"","same");
       
    }
    PrintCanvas(c1h,printFormats);
  }

  // TOF/TPC
  TH1F * hRatioTOFTPC[kNPart][kNCharge];
  for(Int_t icharge = 0; icharge < kNCharge; icharge++){ // loop over charges
    // create canvas
    TCanvas * c1t = new TCanvas(TString("cTOFTPCRatio_")+chargeFlag[icharge],TString("cTOFTPCRatio_")+chargeFlag[icharge],1200,500);
    c1t->SetGridy();
    c1t->Divide(3,1);
    TH2F * hemptyt = new TH2F(TString("hemptyRt")+long(icharge),"TOF/TPC ",100,0.,1., 100, 0.5,1.5);
    hemptyt->SetXTitle("p_{t} (GeV/c)");
    hemptyt->SetYTitle("TOF / TPC");
    //    hemptyt->Draw();    
    for(Int_t ipart = 0; ipart < kNPart; ipart++) { // loop over particles
      // Clone histo
      hRatioTOFTPC[ipart][icharge]=new TH1F(*hSpectraSystError[kTOF][ipart][icharge]);
      Int_t nBinsTOF=hSpectraSystError[kTOF][ipart][icharge]->GetNbinsX();
      Int_t nBinsTPC=hSpectraSystError[kTPC][ipart][icharge]->GetNbinsX();
      // Loop over TOF bins
      for(Int_t iBin=1; iBin<=nBinsTOF; iBin++){
	hRatioTOFTPC[ipart][icharge]->SetBinContent(iBin,0.);
	hRatioTOFTPC[ipart][icharge]->SetBinError(iBin,0.);
	Float_t lowPtTOF=hSpectraSystError[kTOF][ipart][icharge]->GetBinLowEdge(iBin);
	Float_t binWidTOF=hSpectraSystError[kTOF][ipart][icharge]->GetBinWidth(iBin);
	// Loop over TPC bins and find overlapping bins to ITS
	for(Int_t jBin=1; jBin<=nBinsTPC; jBin++){
	  Float_t lowPtTPC=hSpectraSystError[kTPC][ipart][icharge]->GetBinLowEdge(jBin);
	  Float_t binWidTPC=hSpectraSystError[kTPC][ipart][icharge]->GetBinWidth(jBin);
	  if(TMath::Abs(lowPtTOF-lowPtTPC)<0.001 && TMath::Abs(binWidTPC-binWidTOF)<0.001){
	    Float_t numer=hSpectraSystError[kTOF][ipart][icharge]->GetBinContent(iBin);
	    Float_t denom=hSpectraSystError[kTPC][ipart][icharge]->GetBinContent(jBin);
	    Float_t enumer=hSpectraSystError[kTOF][ipart][icharge]->GetBinError(iBin);
	    Float_t edenom=hSpectraSystError[kTPC][ipart][icharge]->GetBinError(jBin);
	    Double_t ratio=0.;
	    Double_t eratio=0.;
	    if(numer>0. && denom>0.){
	      ratio=numer/denom;
	      eratio=ratio*TMath::Sqrt((enumer/numer)*(enumer/numer)+(edenom/denom)*(edenom/denom));
	    }
	    hRatioTOFTPC[ipart][icharge]->SetBinContent(iBin,ratio);
	    hRatioTOFTPC[ipart][icharge]->SetBinError(iBin,eratio);
	    break;
	  }
	}
      }
      c1t->cd(ipart+1);
      hRatioTOFTPC[ipart][icharge]->SetYTitle("TOF/TPC");
      hRatioTOFTPC[ipart][icharge]->SetStats(1);
      hRatioTOFTPC[ipart][icharge]->GetYaxis()->SetRangeUser(0.5,1.5);
      hRatioTOFTPC[ipart][icharge]->Draw("");
      hRatioTOFTPC[ipart][icharge]->Print();
      TF1 * f = new TF1("fpol0","[0]");
      f->SetParameter(0,1);
      hRatioTOFTPC[ipart][icharge]->Fit(f,"","same");
    }
    PrintCanvas(c1t,printFormats);
  }

}

void DrawWithJacek() {

  //1. Convert spectra to dNdeta and sum
  TH1F * hsum = (TH1F*) htemplate->Clone();
  hsum->Reset();
  Int_t idet= iCombInStudy;
  for(Int_t icharge = 0; icharge < kNCharge; icharge++){
    for(Int_t ipart = 0; ipart < kNPart; ipart++){
      TH1 * h = hSpectra[idet][ipart][icharge];
      Int_t nbin = h->GetNbinsX();
      for(Int_t ibin = 1; ibin <= nbin; ibin++){
	Double_t pt = h->GetBinCenter(ibin);
	Double_t mt = TMath::Sqrt(pt*pt + mass[ipart]*mass[ipart]);
	Double_t jacobian = pt/mt;
	h->SetBinContent(ibin,h->GetBinContent(ibin)*jacobian);
	h->SetBinError  (ibin,h->GetBinError  (ibin)*jacobian);
	Int_t ibinSum = hsum->FindBin(pt);
	Double_t epsilon = 0.0001;
	if ( h->GetBinContent(ibin) > 0 && 
	     (TMath::Abs(h->GetBinLowEdge(ibin)   - hsum->GetBinLowEdge(ibinSum)) > epsilon || 
	      TMath::Abs(h->GetBinLowEdge(ibin+1) - hsum->GetBinLowEdge(ibinSum+1)) )
	     ) {
	  cout << "DISCREPANCY IN BIN RANGES" << endl;
	  cout << pt << " " << ibinSum << " " << ibin  << "; " << h->GetBinContent(ibin) << endl
	       << h->GetBinLowEdge(ibin) << "-"  << h->GetBinLowEdge(ibin+1) << endl
	       << hsum->GetBinLowEdge(ibinSum) << "-"  << hsum->GetBinLowEdge(ibinSum+1) << endl;
	  cout << "" << endl;	    
	}
	

	hsum->SetBinContent(ibinSum,hsum->GetBinContent(ibinSum)+h->GetBinContent(ibin)); // EROOR FIXME
	hsum->SetBinError  (ibinSum,0);
      }
      //	hsum->Add(h);
    }      
  }    


  // Load Jacek and Draw both:  
  new TFile ("./Files/pt_allcharged_published.root");
  TGraphErrors * gJacek = (TGraphErrors*) gDirectory->Get("dndpt");
  gJacek->SetMarkerStyle(20);
  gJacek->SetMarkerColor(kGray);
  gJacek->Draw("AP");
  gJacek->GetHistogram()->SetXTitle("p_{t} (GeV)");
  gJacek->GetHistogram()->SetYTitle("d^{2}N/dp_{t}d#eta (GeV^{-1})");
  hsum->Draw("same");

  TGraphErrors * gRatio = AliPWGHistoTools::DivideGraphByHisto(gJacek,hsum);  
  new TCanvas();
  gRatio->Draw("AP");

  

}


void DrawRatioToStar() {

  // Star data
  //  gROOT->LoadMacro("StarPPSpectra.C");
  TGraphErrors ** gStar = StarPPSpectra();
  gStar[0]->SetMarkerStyle(kOpenStar);
  gStar[1]->SetMarkerStyle(kFullStar);
  gStar[2]->SetMarkerStyle(kOpenStar);
  gStar[3]->SetMarkerStyle(kFullStar);
  gStar[4]->SetMarkerStyle(kOpenStar);
  gStar[5]->SetMarkerStyle(kFullStar);

  // ALICE, INEL -> NSD
  Double_t scaleYield = 3.58/3.02; // from paper 2
  for(Int_t ipart = 0; ipart < kNPart; ipart++){
    for(Int_t icharge = 0; icharge < kNCharge; icharge++){
      hSpectra[iCombInStudy][ipart][icharge]->Scale(scaleYield);
    }    
  }
  
    
  TCanvas * c1 = new TCanvas("cRatioToStarNeg","cRatioToStarNeg");
  TH2F * hempty = new TH2F(TString("hemptyNeg"),"hemptyNeg",100,0.,1.5, 100, 0.001,1.8);
  hempty->SetXTitle("p_{t} (GeV/c)");
  hempty->SetYTitle("ALICE/STAR (NSD)");
  hempty->Draw();

  TCanvas * c1Comp = new TCanvas("cCompToStarNeg","cCompToStarNeg");
  c1Comp->SetLogy();
  TH2F * hempty2 = new TH2F(TString("hemptyCompNeg"),"hemptyCompNeg",100,0.,1.5, 100, 0.001,10);
  hempty2->SetXTitle("p_{t} (GeV/c)");
  hempty2->SetYTitle("1/N_{ev} d^{2}N / dydp_{t} (GeV/c)^{-1} [NSD]");
  hempty2->Draw();
  
  TLegend *leg = new TLegend(0.6510067,0.1853147,0.8892617,0.4178322,"Negative","brNDC");
  leg->SetBorderSize(0);
  leg->SetLineColor(1);
  leg->SetLineStyle(1);
  leg->SetLineWidth(1);
  leg->SetFillColor(0);
  leg->SetFillStyle(1001);



  c1->cd();
  TGraphErrors * g ;
  g = AliPWGHistoTools::DivideGraphByHisto(gStar[0],hSpectra[iCombInStudy][kPion][kNeg],1);
  g->SetMarkerStyle(kFullCircle);
  g->SetMarkerColor(kBlack);
  g->Draw("p");
  leg->AddEntry(g,"#pi^{-}","lp");
  g = AliPWGHistoTools::DivideGraphByHisto(gStar[2],hSpectra[iCombInStudy][kKaon][kNeg],1);
  g->SetMarkerStyle(kOpenCircle);
  g->SetMarkerColor(kRed);
  g->Draw("p");
  leg->AddEntry(g,"K^{-}","lp");
  g = AliPWGHistoTools::DivideGraphByHisto(gStar[4],hSpectra[iCombInStudy][kProton][kNeg],1);
  g->SetMarkerStyle(kOpenSquare);
  g->SetMarkerColor(kBlue);
  g->Draw("p");
  leg->AddEntry(g,"#bar{p}","lp");  
  leg->Draw();

  c1Comp->cd();
  gStar[0]->Draw("p");
  hSpectra[iCombInStudy][kPion][kNeg]->Draw("same");
  gStar[2]->Draw("p");
  hSpectra[iCombInStudy][kKaon][kNeg]->Draw("same");
  gStar[4]->Draw("p");
  hSpectra[iCombInStudy][kProton][kNeg]->Draw("same");



  TCanvas * c2 = new TCanvas("cRatioToStarPos","cRatioToStarPos");
  hempty->Draw(); 
  leg = new TLegend(0.6510067,0.1853147,0.8892617,0.4178322,"Positive","brNDC");
  leg->SetBorderSize(0);
  leg->SetLineColor(1);
  leg->SetLineStyle(1);
  leg->SetLineWidth(1);
  leg->SetFillColor(0);
  leg->SetFillStyle(1001);

  TCanvas * c2Comp = new TCanvas("cCompToStarPos","cCompToStarPos");
  c2Comp->SetLogy();
  hempty2->Draw();

  c2->cd();
 //  TGraphErrors * g ;
  g = AliPWGHistoTools::DivideGraphByHisto(gStar[1],hSpectra[iCombInStudy][kPion][kPos],1);
  g->SetMarkerStyle(kFullCircle);
  g->SetMarkerColor(kBlack);
  g->Draw("p");
  leg->AddEntry(g,"#pi^{+}","lp");
  g = AliPWGHistoTools::DivideGraphByHisto(gStar[3],hSpectra[iCombInStudy][kKaon][kPos],1);
  g->SetMarkerStyle(kOpenCircle);
  g->SetMarkerColor(kRed);
  g->Draw("p");
  leg->AddEntry(g,"K^{+}","lp");
  g = AliPWGHistoTools::DivideGraphByHisto(gStar[5],hSpectra[iCombInStudy][kProton][kPos],1);
  g->SetMarkerStyle(kOpenSquare);
  g->SetMarkerColor(kBlue);
  g->Draw("p");
  leg->AddEntry(g,"p","lp");
  leg->Draw();


  c2Comp->cd();
  gStar[1]->Draw("p");
  hSpectra[iCombInStudy][kPion][kPos]->Draw("same");
  gStar[3]->Draw("p");
  hSpectra[iCombInStudy][kKaon][kPos]->Draw("same");
  gStar[5]->Draw("p");
  hSpectra[iCombInStudy][kProton][kPos]->Draw("same");


  c1->Update();
  c2->Update();
  gSystem->ProcessEvents();
  c1->Print(TString(c1->GetName()) + ".eps");
  c2->Print(TString(c2->GetName()) + ".eps");
  ALICEWorkInProgress(c1,today.Data(),"#splitline{ALICE Preliminary}{Statistical Error Only}");
  ALICEWorkInProgress(c2,today.Data(),"#splitline{ALICE Preliminary}{Statistical Error Only}");
  c1->Update();
  c2->Update();
  c1->Print(TString(c1->GetName()) + ".png");
  c2->Print(TString(c2->GetName()) + ".png");




}



void DrawRatios() {

  // Draws ratios of combined spectra

  // Rebin histograms (hi pt was fluctuating too much in the TOF)
  RebinHistosForRatios();

  // Compute ratios
  TH1F * hPosNegRatio[kNPart];
  
  for(Int_t ipart = 0; ipart < kNPart; ipart++){
    hPosNegRatio[ipart] = (TH1F*) hSpectra[iCombInStudy][ipart][kPos]->Clone();
    hPosNegRatio[ipart]->Divide(hSpectra[iCombInStudy][ipart][kNeg]);
    hPosNegRatio[ipart]->SetYTitle(TString(partLabel[ipart][kPos])+"/"+partLabel[ipart][kNeg]);    
    hPosNegRatio[ipart]->SetMinimum(0.5);
    hPosNegRatio[ipart]->SetMaximum(1.5);
  }
  
  
  TH1F * hKPiRatio = (TH1F*) hSpectra[iCombInStudy][kKaon][kPos]->Clone();
  hKPiRatio->Add(hSpectra[iCombInStudy][kKaon][kNeg]);
  TH1F * htmp = (TH1F*) hSpectra[iCombInStudy][kPion][kPos]->Clone();
  htmp->Add(hSpectra[iCombInStudy][kPion][kNeg]);
  hKPiRatio->Divide(htmp);
  hKPiRatio->SetYTitle("(K^{+}+K^{-})/(#pi^{+}+#pi^{-})");
  // Get ratio of syst errors
  // FIXME: commented combined error
  TH1F * hKPiRatioSyst = new TH1F(*htemplate);;
  AliPWGHistoTools::GetValueAndError(hKPiRatioSyst,hSpectra[iCombInStudy][kKaon][kPos],hSystError[iCombInStudy][kKaon][kPos],kTRUE);
  //  AliPWGHistoTools::GetHistoCombinedErrors(hKPiRatioSyst,hSpectra[iCombInStudy][kKaon][kPos]);
  AliPWGHistoTools::GetValueAndError(htmp,hSpectra[iCombInStudy][kKaon][kNeg],hSystError[iCombInStudy][kKaon][kNeg],kTRUE);
  // //  AliPWGHistoTools::GetHistoCombinedErrors(htmp,hSpectra[iCombInStudy][kKaon][kNeg]);
  hKPiRatioSyst->Add(htmp);
  AliPWGHistoTools::GetValueAndError(htmp,hSpectra[iCombInStudy][kPion][kNeg],hSystError[iCombInStudy][kPion][kNeg],kTRUE);
  //  AliPWGHistoTools::GetHistoCombinedErrors(htmp,hSpectra[iCombInStudy][kPion][kNeg]);
  TH1F * htmp2 = new TH1F(*htemplate);
  AliPWGHistoTools::GetValueAndError(htmp2,hSpectra[iCombInStudy][kPion][kPos],hSystError[iCombInStudy][kPion][kPos],kTRUE);
  //  AliPWGHistoTools::GetHistoCombinedErrors(htmp2,hSpectra[iCombInStudy][kPion][kPos]);
  htmp->Add(htmp2);
  hKPiRatioSyst->Divide(htmp);
  hKPiRatioSyst->SetYTitle("(K^{+}+K^{-})/(#pi^{+}+#pi^{-})");
  // Multiply error for sqrt(2): the syst is not reduced by combining positive and negative charges
  Int_t nbin = hKPiRatioSyst->GetNbinsX();
  for(Int_t ibin = 1; ibin <= nbin; ibin++){
    hKPiRatioSyst->SetBinError(ibin, hKPiRatioSyst->GetBinError(ibin)*TMath::Sqrt(2));
  }
  



  TH1F * hKPiRatioMC[kNTunes];
  if(showMC){
    for(Int_t itune = 0; itune < kNTunes; itune++){
      hKPiRatioMC[itune] = (TH1F*) hSpectraMC[itune][kKaon][kPos]->Clone();
      hKPiRatioMC[itune]->Add(hSpectraMC[itune][kKaon][kNeg]);
      TH1F * htmpLoc = (TH1F*) hSpectraMC[itune][kPion][kPos]->Clone();
      htmpLoc->Add(hSpectraMC[itune][kPion][kNeg]);
      hKPiRatioMC[itune]->Divide(htmpLoc);
      hKPiRatioMC[itune]->SetYTitle("(K^{+}+K^{-})/(#pi^{+}+#pi^{-})");    
    }
  }
  


  TH1F * hPPiRatio = (TH1F*) hSpectra[iCombInStudy][kProton][kPos]->Clone();
  hPPiRatio->Add(hSpectra[iCombInStudy][kProton][kNeg]);
  htmp = (TH1F*) hSpectra[iCombInStudy][kPion][kPos]->Clone();
  htmp->Add(hSpectra[iCombInStudy][kPion][kNeg]);
  hPPiRatio->Divide(htmp);
  hPPiRatio->SetYTitle("(p+#bar{p})/(#pi^{+}+#pi^{-})");

  TH1F * hPPiRatioMC[kNTunes];
  if(showMC){
    for(Int_t itune = 0; itune < kNTunes; itune++){
      hPPiRatioMC[itune] = (TH1F*) hSpectraMC[itune][kProton][kPos]->Clone();
      hPPiRatioMC[itune]->Add(hSpectraMC[itune][kProton][kNeg]);
      TH1F * htmpLoc = (TH1F*) hSpectraMC[itune][kPion][kPos]->Clone();
      htmpLoc->Add(hSpectraMC[itune][kPion][kNeg]);
      hPPiRatioMC[itune]->Divide(htmpLoc);
      hPPiRatioMC[itune]->SetYTitle("(p+#bar{p})/(#pi^{+}+#pi^{-})");    
    }
  }
 
  // Phenix ratio
  TFile * fPhenix = new TFile("./Files/phenixdata.root");
  TH1F * hPPiRatioPhenix = (TH1F*) fPhenix->Get("ProtonPHNX");
  hPPiRatioPhenix->Add((TH1F*) fPhenix->Get("PbarPHNX"));
  htmp = (TH1F*) fPhenix->Get("PiPlusPHNX");
  htmp->Add((TH1F*) fPhenix->Get("PiMinusPHNX"));
  hPPiRatioPhenix = AliPWGHistoTools::DivideHistosDifferentBins(hPPiRatioPhenix,htmp);
  hPPiRatioPhenix->SetMarkerStyle(24);
  hPPiRatioPhenix->SetBinContent(14,0);
  hPPiRatioPhenix->SetBinError(14,0);
  // Draw
//   TH2F * hempty = new TH2F(TString("hempty"),"hempty",100,0.,1.5, 100, 0.001,1.8);
//   hempty->SetXTitle("p_{t} (GeV/c)");
  //  hempty->SetYTitle("");

  // tmp: overlay levi fits
  AliPWGFunc * fm2 = new AliPWGFunc;
  fm2->SetVarType(AliPWGFunc::kdNdpt);
  TF1 * fLevi[kNPart]  [kNCharge];
  fLevi[kPion]  [kPos] = fm2->GetLevi (mass[0], 0.1243, 7.614785, 1.524167, "fLeviPiPlus");
  fLevi[kKaon]  [kPos] = fm2->GetLevi (mass[1], 0.1625, 5.869318, 0.186361, "fLeviKPlus");
  fLevi[kProton][kPos] = fm2->GetLevi (mass[2], 0.1773, 6.918065, 0.086389, "fLeviPPlus");
  fLevi[kPion]  [kNeg] = fm2->GetLevi (mass[0], 0.1267, 7.979582, 1.515908, "fLeviPiNeg");
  fLevi[kKaon]  [kNeg] = fm2->GetLevi (mass[1], 0.1721, 6.927956, 0.191140, "fLeviKNeg");
  fLevi[kProton][kNeg] = fm2->GetLevi (mass[2], 0.1782, 8.160362, 0.082091, "fLeviPNeg");
  for(Int_t ipart = 0; ipart < kNPart; ipart++){
    for(Int_t icharge = 0; icharge < kNCharge; icharge++){
      fLevi[ipart][icharge]->SetRange(0,4);
    }    
  }
  

  for(Int_t ipart = 0; ipart < kNPart; ipart++){
    TString detName = detFlag[iCombInStudy];
    detName.ReplaceAll(" ", "_");
    detName.ReplaceAll("+", "");

    TCanvas * c1 = new TCanvas(TString("cRatio_")+detName+TString("_")+partFlag[ipart], TString("cRatio_")+detName+partFlag[ipart]);
    c1->SetGridy();
    hPosNegRatio[ipart]->Draw();
    TF1 * fRatio = new TF1 (TString("fRatio")+partFlag[ipart], TString(fLevi[ipart][kPos]->GetName())+"/"+fLevi[ipart][kNeg]->GetName());
    //    fRatio->Draw("same");
    fRatio->SetRange(0,5);
    PrintCanvas(c1,printFormats);
    
  }


  TCanvas * c2 = new TCanvas(TString("cRatio_KPi"),TString("cRatio_KPi"));  
  //  c2->SetGridy();

  hKPiRatioSyst->SetMaximum(0.62);  
  hKPiRatioSyst->SetFillColor(kGray);
  hKPiRatioSyst->SetMarkerStyle(24);
  //  hKPiRatioSyst->Draw("e2");
  // TMP FIXME: ERROR FROM FP:
  TFile * f = TFile::Open("./Files/ITSsa-systematics-20101014.root");
  TH1F * hsystRatio = (TH1F*) f->Get("hSystRatioKpi");
  TH1F * hsyst = new TH1F(*htemplate);
  AliPWGHistoTools::GetValueAndError(hsyst,hKPiRatio,hsystRatio,1);
  //  AliPWGHistoTools::GetHistoCombinedErrors(hsyst,hKPiRatio);
  //  hsyst->Draw("samee1");
  // END TMP
  hKPiRatio->SetMaximum(0.62);  
  hKPiRatio->Draw("");
  TLegend * lMC = new TLegend(0.526846, 0.18007, 0.887584,0.407343);
  lMC->SetFillColor(kWhite);
  TGraphErrors ** gStar = StarPPSpectra();
  cout << gStar[6] << endl;
  
  gStar[6]->SetMarkerStyle(kOpenStar);
  gStar[6]->Draw("P");
  
  if(showE735){
    gROOT->LoadMacro("GetE735Ratios.C");
    // GetE735Ratios(0,0)->Draw("EX0,same");
    // GetE735Ratios(0,1)->Draw("EX0,same");
    // GetE735Ratios(0,2)->Draw("EX0,same");
    GetE735Ratios(0,3)->Draw("EX0,same");
  }
  hKPiRatio->SetMarkerStyle(20);
  hKPiRatio->SetMarkerColor(kRed);
  hKPiRatio->SetLineColor(kRed);
  //hKPiRatio->Draw("same");
  
  if(showMC){
    for(Int_t itune = 0; itune < kNTunes; itune++){
      lMC->AddEntry(hKPiRatioMC[itune],mcTuneName[itune]);
      hKPiRatioMC[itune]->SetLineWidth(2);    
      hKPiRatioMC[itune]->Draw("same,chist");    	
    }
  
    lMC->Draw();
  }
  cout << "12" << endl;

  if(showE735){
    TLegend * l = new TLegend(  0.1879,  0.68,  0.54,0.92);
    l->SetFillColor(kWhite);
    l->AddEntry(hKPiRatio, "ALICE, #sqrt{s} = 900 GeV","lpf");
    l->AddEntry(gStar[6],  "STAR, #sqrt{s} = 200 GeV", "lp");
    // l->AddEntry(GetE735Ratios(0,0), "E735, #sqrt{s} = 300 GeV","lpf");
    // l->AddEntry(GetE735Ratios(0,1), "E735, #sqrt{s} = 540 GeV","lpf");
    // l->AddEntry(GetE735Ratios(0,2), "E735, #sqrt{s} = 1000 GeV","lpf");
    l->AddEntry(GetE735Ratios(0,3), "E735, #sqrt{s} = 1800 GeV","lpf");
    l->Draw();
  }


  TCanvas * c3 = new TCanvas(TString("cRatio_PPi"),TString("cRatio_PPi"));  
  cout << "DRAWING" << endl;
  //  c3->SetGridy();
  hPPiRatio->SetMarkerStyle(20);
  hPPiRatio->SetMarkerColor(kRed);
  hPPiRatio->SetLineColor(kRed);
  hPPiRatio->Draw();
  hPPiRatio->SetMaximum(0.39);
  if(showMC){
    lMC = new TLegend(0.526846, 0.18007, 0.887584,0.407343);
    lMC->SetFillColor(kWhite);

    for(Int_t itune = 0; itune < kNTunes; itune++){
      lMC->AddEntry(hKPiRatioMC[itune],mcTuneName[itune]);
      hPPiRatioMC[itune]->SetLineWidth(2);    
      hPPiRatioMC[itune]->Draw("same,chist");    	
    }
  
    lMC->Draw();
  }
  hPPiRatioPhenix->Draw("same");

  
  TLegend * l = new TLegend(0.186242, 0.781469, 0.538591, 0.921329);
  l->SetFillColor(kWhite);
  l->AddEntry(hPPiRatio, "ALICE, #sqrt{s} = 900 GeV","lpf");
  l->AddEntry(hPPiRatioPhenix, "PHENIX, #sqrt{s} = 200 GeV","lpf");
  //  TLegend * l = new TLegend(0.206376, 0.77972, 0.600671, 0.909091);
  l->Draw();

  PrintCanvas(c2,printFormats);
  PrintCanvas(c3,printFormats);

}

void DrawWithSyst() {

  // Draws detector and combined with syst errors. 

  for(Int_t idet = 0; idet < kNHist; idet++){
    if(idet > kITSTPC && idet != iCombInStudy) continue;
    for(Int_t icharge = 0; icharge < kNCharge; icharge++){
      TCanvas * c = new TCanvas(TString("cWithSyst")+detFlag[idet]+chargeFlag[icharge],TString("cWithSyst")+detFlag[idet]+chargeFlag[icharge]);
      TH2F * hempty = new TH2F(TString("hempty")+long(icharge),"hempty",100,0.,2.9, 100, 0.0005,5);
      hempty->SetXTitle("p_{t} (GeV/c)");
      hempty->SetYTitle("1/N_{ev} d^{2}N / dydp_{t} (GeV/c)^{-1}");
      hempty->GetYaxis()->SetTitleOffset(1.35);
      hempty->GetXaxis()->SetTitleOffset(1.1);
      hempty->Draw();      
      c->SetLogy();
      for(Int_t ipart = 0; ipart < kNPart; ipart++){
	//	cout << detFlag[idet] << " " << chargeFlag[icharge] << " " << partFlag[ipart] << endl;
	
	TString opt = ipart ? "" : "same";
	TH1F * hsyst = new TH1F(*htemplate);
	AliPWGHistoTools::GetValueAndError(hsyst,hSpectra[idet][ipart][icharge],hSystError[idet][ipart][icharge],kTRUE);
	hsyst->SetFillColor(kGray);
	hsyst->Draw("e5,same");
	hSpectra[idet][ipart][icharge]->Draw("same");
	// Do not draw syst error outside of spectra range
	Float_t lowEdge = AliPWGHistoTools::GetLowestNotEmptyBinEdge(hSpectra[idet][ipart][icharge]);
	Float_t hiEdge  = AliPWGHistoTools::GetHighestNotEmptyBinEdge(hSpectra[idet][ipart][icharge]);
	Int_t lowBin = hSystError[idet][ipart][icharge]->FindBin(lowEdge);
	Int_t hiBin = hSystError[idet][ipart][icharge]->FindBin(hiEdge);
	Int_t nbin = 	hSystError[idet][ipart][icharge]->GetNbinsX();
	for(Int_t ibin = 1; ibin < lowBin; ibin++){
	  hSystError[idet][ipart][icharge]->SetBinContent(ibin,0);	  
	  hSystError[idet][ipart][icharge]->SetBinError(ibin,0);	  
	}
	for(Int_t ibin = hiBin; ibin <= nbin; ibin++){
	  hSystError[idet][ipart][icharge]->SetBinContent(ibin,0);	  
	  hSystError[idet][ipart][icharge]->SetBinError(ibin,0);	  
	}
	// Draw relative syst error, convert to graph to avoid vertical bars at the edges (empty bins in histo)
	AliPWGHistoTools::GetGraphFromHisto(hSystError[idet][ipart][icharge])->Draw("LX");

				     

      }
      PrintCanvas(c,printFormats);
    }
  }
}

void Help() {

  cout << "Macro: void CombineSpectra(Int_t analysisType=kDoFits, Int_t  fitFuncID = kFitLevi) " << endl;
  cout << "" << endl;
  cout << "WARNING: some function modify the histos upon execution. You are advised to quit root" << endl;
  cout << "         before running a different function" << endl;
  cout << "" << endl;
  cout << "Possible Arguments" << endl;
  cout << "- analysisType:" << endl;  
  cout << "    kDoFits:           Fit Combined Spectra " << endl;
  cout << "    kDoRatios:         Particle ratios K/pi and p/pi" << endl;
  cout << "    kDoSuperposition:  Compare different detectors (superimpose and ratios)" << endl;
  cout << "    kDoCompareStar:    Compare combined spectra to star results" << endl;
  cout << "    kDoDrawWithModels: Compare combined spectra and models" << endl;
  cout << "    kDoDrawSyst:       Draws spectra from individual detectors with their systematic error" << endl;
  cout << "    kDoCompareToAllCharged:       convert to dn/deta/dpt, sum up and compare to all charged" << endl;
  cout << "    kDoHelp:           This help" << endl;
  cout << "- fitFuncID, function used to extrapolate and compute yields" << endl;
  cout << "    An analitic fit function [kFitLevi, kFitUA1, kFitPowerLaw]" << endl;
  cout << "    Or a shape from a MC moder [kFitPhojet, kFitAtlasCSC, kFitCMS6D6T, kFitPerugia0]" << endl;
  cout << "    Which is fitted to the data at low pt and used to extrapolate at low pt" << endl;


}

void PrintCanvas(TCanvas* c,const TString formats) {
  // print a canvas in every of the given comma-separated formats
  // ensure the canvas is updated
  if(!doPrint) return;
  c->Update();
  gSystem->ProcessEvents();
  TObjArray * arr = formats.Tokenize(",");
  TIterator * iter = arr->MakeIterator();
  TObjString * element = 0;
  TString name  =c ->GetName();
  name.ReplaceAll(" ","_");
  name.ReplaceAll("+","Plus");
  name.ReplaceAll("-","");
  while ((element = (TObjString*) iter->Next())) {
    c->Print(name+ "."+element->GetString());
  }
}


void LoadLibs(){

  gSystem->Load("libTree.so");
  gSystem->Load("libVMC.so");
  gSystem->Load("libMinuit.so");
  gSystem->Load("libSTEERBase.so");
  gSystem->Load("libESD.so");
  gSystem->Load("libAOD.so");
  gSystem->Load("libANALYSIS.so");
  gSystem->Load("libANALYSISalice.so");
  gSystem->Load("libCORRFW.so");
  gSystem->Load("libPWG2spectra.so");

}

void RebinHistosForRatios() {
  // rebins all spectra histograms 

  cout << "WARNING: REBINNING HISTOS BEFORE RATIOS" << endl;
  

  const Float_t rebinBins[] = {0.05,0.1,0.12,0.14,0.16,0.18,0.20,0.25,0.30,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.6,1.8,2.4};
  Int_t nrebinBins=29;



  Int_t idet = iCombInStudy;
  for(Int_t ipart = 0; ipart < kNPart; ipart++){
    for(Int_t icharge = 0; icharge < kNCharge; icharge++){  

      TH1F * h =  hSpectra[idet][ipart][icharge];
      TString hname = h->GetName();
      hname += "_rebin";
     
      TH1F *hrebin   = new TH1F(hname, hname,nrebinBins,rebinBins);
      hrebin->Sumw2();

      for(Int_t i=1;i <= h->GetNbinsX();i++){
	Float_t x = h->GetBinCenter(i);
	Int_t j=0;
	while(x > rebinBins[j+1]) j++;
	j++;
	hrebin->AddBinContent(j,h->GetBinContent(i));

	Float_t err = hrebin->GetBinError(j) + h->GetBinError(i)*h->GetBinError(i);
	hrebin->SetBinError(j,err);
      }

      for(Int_t i=1;i <= hrebin->GetNbinsX();i++){
	hrebin->SetBinError(i,TMath::Sqrt(hrebin->GetBinError(i)));
      }
      hSpectra[idet][ipart][icharge] = hrebin;
    }
  }

}
 CombineSpectra.C:1
 CombineSpectra.C:2
 CombineSpectra.C:3
 CombineSpectra.C:4
 CombineSpectra.C:5
 CombineSpectra.C:6
 CombineSpectra.C:7
 CombineSpectra.C:8
 CombineSpectra.C:9
 CombineSpectra.C:10
 CombineSpectra.C:11
 CombineSpectra.C:12
 CombineSpectra.C:13
 CombineSpectra.C:14
 CombineSpectra.C:15
 CombineSpectra.C:16
 CombineSpectra.C:17
 CombineSpectra.C:18
 CombineSpectra.C:19
 CombineSpectra.C:20
 CombineSpectra.C:21
 CombineSpectra.C:22
 CombineSpectra.C:23
 CombineSpectra.C:24
 CombineSpectra.C:25
 CombineSpectra.C:26
 CombineSpectra.C:27
 CombineSpectra.C:28
 CombineSpectra.C:29
 CombineSpectra.C:30
 CombineSpectra.C:31
 CombineSpectra.C:32
 CombineSpectra.C:33
 CombineSpectra.C:34
 CombineSpectra.C:35
 CombineSpectra.C:36
 CombineSpectra.C:37
 CombineSpectra.C:38
 CombineSpectra.C:39
 CombineSpectra.C:40
 CombineSpectra.C:41
 CombineSpectra.C:42
 CombineSpectra.C:43
 CombineSpectra.C:44
 CombineSpectra.C:45
 CombineSpectra.C:46
 CombineSpectra.C:47
 CombineSpectra.C:48
 CombineSpectra.C:49
 CombineSpectra.C:50
 CombineSpectra.C:51
 CombineSpectra.C:52
 CombineSpectra.C:53
 CombineSpectra.C:54
 CombineSpectra.C:55
 CombineSpectra.C:56
 CombineSpectra.C:57
 CombineSpectra.C:58
 CombineSpectra.C:59
 CombineSpectra.C:60
 CombineSpectra.C:61
 CombineSpectra.C:62
 CombineSpectra.C:63
 CombineSpectra.C:64
 CombineSpectra.C:65
 CombineSpectra.C:66
 CombineSpectra.C:67
 CombineSpectra.C:68
 CombineSpectra.C:69
 CombineSpectra.C:70
 CombineSpectra.C:71
 CombineSpectra.C:72
 CombineSpectra.C:73
 CombineSpectra.C:74
 CombineSpectra.C:75
 CombineSpectra.C:76
 CombineSpectra.C:77
 CombineSpectra.C:78
 CombineSpectra.C:79
 CombineSpectra.C:80
 CombineSpectra.C:81
 CombineSpectra.C:82
 CombineSpectra.C:83
 CombineSpectra.C:84
 CombineSpectra.C:85
 CombineSpectra.C:86
 CombineSpectra.C:87
 CombineSpectra.C:88
 CombineSpectra.C:89
 CombineSpectra.C:90
 CombineSpectra.C:91
 CombineSpectra.C:92
 CombineSpectra.C:93
 CombineSpectra.C:94
 CombineSpectra.C:95
 CombineSpectra.C:96
 CombineSpectra.C:97
 CombineSpectra.C:98
 CombineSpectra.C:99
 CombineSpectra.C:100
 CombineSpectra.C:101
 CombineSpectra.C:102
 CombineSpectra.C:103
 CombineSpectra.C:104
 CombineSpectra.C:105
 CombineSpectra.C:106
 CombineSpectra.C:107
 CombineSpectra.C:108
 CombineSpectra.C:109
 CombineSpectra.C:110
 CombineSpectra.C:111
 CombineSpectra.C:112
 CombineSpectra.C:113
 CombineSpectra.C:114
 CombineSpectra.C:115
 CombineSpectra.C:116
 CombineSpectra.C:117
 CombineSpectra.C:118
 CombineSpectra.C:119
 CombineSpectra.C:120
 CombineSpectra.C:121
 CombineSpectra.C:122
 CombineSpectra.C:123
 CombineSpectra.C:124
 CombineSpectra.C:125
 CombineSpectra.C:126
 CombineSpectra.C:127
 CombineSpectra.C:128
 CombineSpectra.C:129
 CombineSpectra.C:130
 CombineSpectra.C:131
 CombineSpectra.C:132
 CombineSpectra.C:133
 CombineSpectra.C:134
 CombineSpectra.C:135
 CombineSpectra.C:136
 CombineSpectra.C:137
 CombineSpectra.C:138
 CombineSpectra.C:139
 CombineSpectra.C:140
 CombineSpectra.C:141
 CombineSpectra.C:142
 CombineSpectra.C:143
 CombineSpectra.C:144
 CombineSpectra.C:145
 CombineSpectra.C:146
 CombineSpectra.C:147
 CombineSpectra.C:148
 CombineSpectra.C:149
 CombineSpectra.C:150
 CombineSpectra.C:151
 CombineSpectra.C:152
 CombineSpectra.C:153
 CombineSpectra.C:154
 CombineSpectra.C:155
 CombineSpectra.C:156
 CombineSpectra.C:157
 CombineSpectra.C:158
 CombineSpectra.C:159
 CombineSpectra.C:160
 CombineSpectra.C:161
 CombineSpectra.C:162
 CombineSpectra.C:163
 CombineSpectra.C:164
 CombineSpectra.C:165
 CombineSpectra.C:166
 CombineSpectra.C:167
 CombineSpectra.C:168
 CombineSpectra.C:169
 CombineSpectra.C:170
 CombineSpectra.C:171
 CombineSpectra.C:172
 CombineSpectra.C:173
 CombineSpectra.C:174
 CombineSpectra.C:175
 CombineSpectra.C:176
 CombineSpectra.C:177
 CombineSpectra.C:178
 CombineSpectra.C:179
 CombineSpectra.C:180
 CombineSpectra.C:181
 CombineSpectra.C:182
 CombineSpectra.C:183
 CombineSpectra.C:184
 CombineSpectra.C:185
 CombineSpectra.C:186
 CombineSpectra.C:187
 CombineSpectra.C:188
 CombineSpectra.C:189
 CombineSpectra.C:190
 CombineSpectra.C:191
 CombineSpectra.C:192
 CombineSpectra.C:193
 CombineSpectra.C:194
 CombineSpectra.C:195
 CombineSpectra.C:196
 CombineSpectra.C:197
 CombineSpectra.C:198
 CombineSpectra.C:199
 CombineSpectra.C:200
 CombineSpectra.C:201
 CombineSpectra.C:202
 CombineSpectra.C:203
 CombineSpectra.C:204
 CombineSpectra.C:205
 CombineSpectra.C:206
 CombineSpectra.C:207
 CombineSpectra.C:208
 CombineSpectra.C:209
 CombineSpectra.C:210
 CombineSpectra.C:211
 CombineSpectra.C:212
 CombineSpectra.C:213
 CombineSpectra.C:214
 CombineSpectra.C:215
 CombineSpectra.C:216
 CombineSpectra.C:217
 CombineSpectra.C:218
 CombineSpectra.C:219
 CombineSpectra.C:220
 CombineSpectra.C:221
 CombineSpectra.C:222
 CombineSpectra.C:223
 CombineSpectra.C:224
 CombineSpectra.C:225
 CombineSpectra.C:226
 CombineSpectra.C:227
 CombineSpectra.C:228
 CombineSpectra.C:229
 CombineSpectra.C:230
 CombineSpectra.C:231
 CombineSpectra.C:232
 CombineSpectra.C:233
 CombineSpectra.C:234
 CombineSpectra.C:235
 CombineSpectra.C:236
 CombineSpectra.C:237
 CombineSpectra.C:238
 CombineSpectra.C:239
 CombineSpectra.C:240
 CombineSpectra.C:241
 CombineSpectra.C:242
 CombineSpectra.C:243
 CombineSpectra.C:244
 CombineSpectra.C:245
 CombineSpectra.C:246
 CombineSpectra.C:247
 CombineSpectra.C:248
 CombineSpectra.C:249
 CombineSpectra.C:250
 CombineSpectra.C:251
 CombineSpectra.C:252
 CombineSpectra.C:253
 CombineSpectra.C:254
 CombineSpectra.C:255
 CombineSpectra.C:256
 CombineSpectra.C:257
 CombineSpectra.C:258
 CombineSpectra.C:259
 CombineSpectra.C:260
 CombineSpectra.C:261
 CombineSpectra.C:262
 CombineSpectra.C:263
 CombineSpectra.C:264
 CombineSpectra.C:265
 CombineSpectra.C:266
 CombineSpectra.C:267
 CombineSpectra.C:268
 CombineSpectra.C:269
 CombineSpectra.C:270
 CombineSpectra.C:271
 CombineSpectra.C:272
 CombineSpectra.C:273
 CombineSpectra.C:274
 CombineSpectra.C:275
 CombineSpectra.C:276
 CombineSpectra.C:277
 CombineSpectra.C:278
 CombineSpectra.C:279
 CombineSpectra.C:280
 CombineSpectra.C:281
 CombineSpectra.C:282
 CombineSpectra.C:283
 CombineSpectra.C:284
 CombineSpectra.C:285
 CombineSpectra.C:286
 CombineSpectra.C:287
 CombineSpectra.C:288
 CombineSpectra.C:289
 CombineSpectra.C:290
 CombineSpectra.C:291
 CombineSpectra.C:292
 CombineSpectra.C:293
 CombineSpectra.C:294
 CombineSpectra.C:295
 CombineSpectra.C:296
 CombineSpectra.C:297
 CombineSpectra.C:298
 CombineSpectra.C:299
 CombineSpectra.C:300
 CombineSpectra.C:301
 CombineSpectra.C:302
 CombineSpectra.C:303
 CombineSpectra.C:304
 CombineSpectra.C:305
 CombineSpectra.C:306
 CombineSpectra.C:307
 CombineSpectra.C:308
 CombineSpectra.C:309
 CombineSpectra.C:310
 CombineSpectra.C:311
 CombineSpectra.C:312
 CombineSpectra.C:313
 CombineSpectra.C:314
 CombineSpectra.C:315
 CombineSpectra.C:316
 CombineSpectra.C:317
 CombineSpectra.C:318
 CombineSpectra.C:319
 CombineSpectra.C:320
 CombineSpectra.C:321
 CombineSpectra.C:322
 CombineSpectra.C:323
 CombineSpectra.C:324
 CombineSpectra.C:325
 CombineSpectra.C:326
 CombineSpectra.C:327
 CombineSpectra.C:328
 CombineSpectra.C:329
 CombineSpectra.C:330
 CombineSpectra.C:331
 CombineSpectra.C:332
 CombineSpectra.C:333
 CombineSpectra.C:334
 CombineSpectra.C:335
 CombineSpectra.C:336
 CombineSpectra.C:337
 CombineSpectra.C:338
 CombineSpectra.C:339
 CombineSpectra.C:340
 CombineSpectra.C:341
 CombineSpectra.C:342
 CombineSpectra.C:343
 CombineSpectra.C:344
 CombineSpectra.C:345
 CombineSpectra.C:346
 CombineSpectra.C:347
 CombineSpectra.C:348
 CombineSpectra.C:349
 CombineSpectra.C:350
 CombineSpectra.C:351
 CombineSpectra.C:352
 CombineSpectra.C:353
 CombineSpectra.C:354
 CombineSpectra.C:355
 CombineSpectra.C:356
 CombineSpectra.C:357
 CombineSpectra.C:358
 CombineSpectra.C:359
 CombineSpectra.C:360
 CombineSpectra.C:361
 CombineSpectra.C:362
 CombineSpectra.C:363
 CombineSpectra.C:364
 CombineSpectra.C:365
 CombineSpectra.C:366
 CombineSpectra.C:367
 CombineSpectra.C:368
 CombineSpectra.C:369
 CombineSpectra.C:370
 CombineSpectra.C:371
 CombineSpectra.C:372
 CombineSpectra.C:373
 CombineSpectra.C:374
 CombineSpectra.C:375
 CombineSpectra.C:376
 CombineSpectra.C:377
 CombineSpectra.C:378
 CombineSpectra.C:379
 CombineSpectra.C:380
 CombineSpectra.C:381
 CombineSpectra.C:382
 CombineSpectra.C:383
 CombineSpectra.C:384
 CombineSpectra.C:385
 CombineSpectra.C:386
 CombineSpectra.C:387
 CombineSpectra.C:388
 CombineSpectra.C:389
 CombineSpectra.C:390
 CombineSpectra.C:391
 CombineSpectra.C:392
 CombineSpectra.C:393
 CombineSpectra.C:394
 CombineSpectra.C:395
 CombineSpectra.C:396
 CombineSpectra.C:397
 CombineSpectra.C:398
 CombineSpectra.C:399
 CombineSpectra.C:400
 CombineSpectra.C:401
 CombineSpectra.C:402
 CombineSpectra.C:403
 CombineSpectra.C:404
 CombineSpectra.C:405
 CombineSpectra.C:406
 CombineSpectra.C:407
 CombineSpectra.C:408
 CombineSpectra.C:409
 CombineSpectra.C:410
 CombineSpectra.C:411
 CombineSpectra.C:412
 CombineSpectra.C:413
 CombineSpectra.C:414
 CombineSpectra.C:415
 CombineSpectra.C:416
 CombineSpectra.C:417
 CombineSpectra.C:418
 CombineSpectra.C:419
 CombineSpectra.C:420
 CombineSpectra.C:421
 CombineSpectra.C:422
 CombineSpectra.C:423
 CombineSpectra.C:424
 CombineSpectra.C:425
 CombineSpectra.C:426
 CombineSpectra.C:427
 CombineSpectra.C:428
 CombineSpectra.C:429
 CombineSpectra.C:430
 CombineSpectra.C:431
 CombineSpectra.C:432
 CombineSpectra.C:433
 CombineSpectra.C:434
 CombineSpectra.C:435
 CombineSpectra.C:436
 CombineSpectra.C:437
 CombineSpectra.C:438
 CombineSpectra.C:439
 CombineSpectra.C:440
 CombineSpectra.C:441
 CombineSpectra.C:442
 CombineSpectra.C:443
 CombineSpectra.C:444
 CombineSpectra.C:445
 CombineSpectra.C:446
 CombineSpectra.C:447
 CombineSpectra.C:448
 CombineSpectra.C:449
 CombineSpectra.C:450
 CombineSpectra.C:451
 CombineSpectra.C:452
 CombineSpectra.C:453
 CombineSpectra.C:454
 CombineSpectra.C:455
 CombineSpectra.C:456
 CombineSpectra.C:457
 CombineSpectra.C:458
 CombineSpectra.C:459
 CombineSpectra.C:460
 CombineSpectra.C:461
 CombineSpectra.C:462
 CombineSpectra.C:463
 CombineSpectra.C:464
 CombineSpectra.C:465
 CombineSpectra.C:466
 CombineSpectra.C:467
 CombineSpectra.C:468
 CombineSpectra.C:469
 CombineSpectra.C:470
 CombineSpectra.C:471
 CombineSpectra.C:472
 CombineSpectra.C:473
 CombineSpectra.C:474
 CombineSpectra.C:475
 CombineSpectra.C:476
 CombineSpectra.C:477
 CombineSpectra.C:478
 CombineSpectra.C:479
 CombineSpectra.C:480
 CombineSpectra.C:481
 CombineSpectra.C:482
 CombineSpectra.C:483
 CombineSpectra.C:484
 CombineSpectra.C:485
 CombineSpectra.C:486
 CombineSpectra.C:487
 CombineSpectra.C:488
 CombineSpectra.C:489
 CombineSpectra.C:490
 CombineSpectra.C:491
 CombineSpectra.C:492
 CombineSpectra.C:493
 CombineSpectra.C:494
 CombineSpectra.C:495
 CombineSpectra.C:496
 CombineSpectra.C:497
 CombineSpectra.C:498
 CombineSpectra.C:499
 CombineSpectra.C:500
 CombineSpectra.C:501
 CombineSpectra.C:502
 CombineSpectra.C:503
 CombineSpectra.C:504
 CombineSpectra.C:505
 CombineSpectra.C:506
 CombineSpectra.C:507
 CombineSpectra.C:508
 CombineSpectra.C:509
 CombineSpectra.C:510
 CombineSpectra.C:511
 CombineSpectra.C:512
 CombineSpectra.C:513
 CombineSpectra.C:514
 CombineSpectra.C:515
 CombineSpectra.C:516
 CombineSpectra.C:517
 CombineSpectra.C:518
 CombineSpectra.C:519
 CombineSpectra.C:520
 CombineSpectra.C:521
 CombineSpectra.C:522
 CombineSpectra.C:523
 CombineSpectra.C:524
 CombineSpectra.C:525
 CombineSpectra.C:526
 CombineSpectra.C:527
 CombineSpectra.C:528
 CombineSpectra.C:529
 CombineSpectra.C:530
 CombineSpectra.C:531
 CombineSpectra.C:532
 CombineSpectra.C:533
 CombineSpectra.C:534
 CombineSpectra.C:535
 CombineSpectra.C:536
 CombineSpectra.C:537
 CombineSpectra.C:538
 CombineSpectra.C:539
 CombineSpectra.C:540
 CombineSpectra.C:541
 CombineSpectra.C:542
 CombineSpectra.C:543
 CombineSpectra.C:544
 CombineSpectra.C:545
 CombineSpectra.C:546
 CombineSpectra.C:547
 CombineSpectra.C:548
 CombineSpectra.C:549
 CombineSpectra.C:550
 CombineSpectra.C:551
 CombineSpectra.C:552
 CombineSpectra.C:553
 CombineSpectra.C:554
 CombineSpectra.C:555
 CombineSpectra.C:556
 CombineSpectra.C:557
 CombineSpectra.C:558
 CombineSpectra.C:559
 CombineSpectra.C:560
 CombineSpectra.C:561
 CombineSpectra.C:562
 CombineSpectra.C:563
 CombineSpectra.C:564
 CombineSpectra.C:565
 CombineSpectra.C:566
 CombineSpectra.C:567
 CombineSpectra.C:568
 CombineSpectra.C:569
 CombineSpectra.C:570
 CombineSpectra.C:571
 CombineSpectra.C:572
 CombineSpectra.C:573
 CombineSpectra.C:574
 CombineSpectra.C:575
 CombineSpectra.C:576
 CombineSpectra.C:577
 CombineSpectra.C:578
 CombineSpectra.C:579
 CombineSpectra.C:580
 CombineSpectra.C:581
 CombineSpectra.C:582
 CombineSpectra.C:583
 CombineSpectra.C:584
 CombineSpectra.C:585
 CombineSpectra.C:586
 CombineSpectra.C:587
 CombineSpectra.C:588
 CombineSpectra.C:589
 CombineSpectra.C:590
 CombineSpectra.C:591
 CombineSpectra.C:592
 CombineSpectra.C:593
 CombineSpectra.C:594
 CombineSpectra.C:595
 CombineSpectra.C:596
 CombineSpectra.C:597
 CombineSpectra.C:598
 CombineSpectra.C:599
 CombineSpectra.C:600
 CombineSpectra.C:601
 CombineSpectra.C:602
 CombineSpectra.C:603
 CombineSpectra.C:604
 CombineSpectra.C:605
 CombineSpectra.C:606
 CombineSpectra.C:607
 CombineSpectra.C:608
 CombineSpectra.C:609
 CombineSpectra.C:610
 CombineSpectra.C:611
 CombineSpectra.C:612
 CombineSpectra.C:613
 CombineSpectra.C:614
 CombineSpectra.C:615
 CombineSpectra.C:616
 CombineSpectra.C:617
 CombineSpectra.C:618
 CombineSpectra.C:619
 CombineSpectra.C:620
 CombineSpectra.C:621
 CombineSpectra.C:622
 CombineSpectra.C:623
 CombineSpectra.C:624
 CombineSpectra.C:625
 CombineSpectra.C:626
 CombineSpectra.C:627
 CombineSpectra.C:628
 CombineSpectra.C:629
 CombineSpectra.C:630
 CombineSpectra.C:631
 CombineSpectra.C:632
 CombineSpectra.C:633
 CombineSpectra.C:634
 CombineSpectra.C:635
 CombineSpectra.C:636
 CombineSpectra.C:637
 CombineSpectra.C:638
 CombineSpectra.C:639
 CombineSpectra.C:640
 CombineSpectra.C:641
 CombineSpectra.C:642
 CombineSpectra.C:643
 CombineSpectra.C:644
 CombineSpectra.C:645
 CombineSpectra.C:646
 CombineSpectra.C:647
 CombineSpectra.C:648
 CombineSpectra.C:649
 CombineSpectra.C:650
 CombineSpectra.C:651
 CombineSpectra.C:652
 CombineSpectra.C:653
 CombineSpectra.C:654
 CombineSpectra.C:655
 CombineSpectra.C:656
 CombineSpectra.C:657
 CombineSpectra.C:658
 CombineSpectra.C:659
 CombineSpectra.C:660
 CombineSpectra.C:661
 CombineSpectra.C:662
 CombineSpectra.C:663
 CombineSpectra.C:664
 CombineSpectra.C:665
 CombineSpectra.C:666
 CombineSpectra.C:667
 CombineSpectra.C:668
 CombineSpectra.C:669
 CombineSpectra.C:670
 CombineSpectra.C:671
 CombineSpectra.C:672
 CombineSpectra.C:673
 CombineSpectra.C:674
 CombineSpectra.C:675
 CombineSpectra.C:676
 CombineSpectra.C:677
 CombineSpectra.C:678
 CombineSpectra.C:679
 CombineSpectra.C:680
 CombineSpectra.C:681
 CombineSpectra.C:682
 CombineSpectra.C:683
 CombineSpectra.C:684
 CombineSpectra.C:685
 CombineSpectra.C:686
 CombineSpectra.C:687
 CombineSpectra.C:688
 CombineSpectra.C:689
 CombineSpectra.C:690
 CombineSpectra.C:691
 CombineSpectra.C:692
 CombineSpectra.C:693
 CombineSpectra.C:694
 CombineSpectra.C:695
 CombineSpectra.C:696
 CombineSpectra.C:697
 CombineSpectra.C:698
 CombineSpectra.C:699
 CombineSpectra.C:700
 CombineSpectra.C:701
 CombineSpectra.C:702
 CombineSpectra.C:703
 CombineSpectra.C:704
 CombineSpectra.C:705
 CombineSpectra.C:706
 CombineSpectra.C:707
 CombineSpectra.C:708
 CombineSpectra.C:709
 CombineSpectra.C:710
 CombineSpectra.C:711
 CombineSpectra.C:712
 CombineSpectra.C:713
 CombineSpectra.C:714
 CombineSpectra.C:715
 CombineSpectra.C:716
 CombineSpectra.C:717
 CombineSpectra.C:718
 CombineSpectra.C:719
 CombineSpectra.C:720
 CombineSpectra.C:721
 CombineSpectra.C:722
 CombineSpectra.C:723
 CombineSpectra.C:724
 CombineSpectra.C:725
 CombineSpectra.C:726
 CombineSpectra.C:727
 CombineSpectra.C:728
 CombineSpectra.C:729
 CombineSpectra.C:730
 CombineSpectra.C:731
 CombineSpectra.C:732
 CombineSpectra.C:733
 CombineSpectra.C:734
 CombineSpectra.C:735
 CombineSpectra.C:736
 CombineSpectra.C:737
 CombineSpectra.C:738
 CombineSpectra.C:739
 CombineSpectra.C:740
 CombineSpectra.C:741
 CombineSpectra.C:742
 CombineSpectra.C:743
 CombineSpectra.C:744
 CombineSpectra.C:745
 CombineSpectra.C:746
 CombineSpectra.C:747
 CombineSpectra.C:748
 CombineSpectra.C:749
 CombineSpectra.C:750
 CombineSpectra.C:751
 CombineSpectra.C:752
 CombineSpectra.C:753
 CombineSpectra.C:754
 CombineSpectra.C:755
 CombineSpectra.C:756
 CombineSpectra.C:757
 CombineSpectra.C:758
 CombineSpectra.C:759
 CombineSpectra.C:760
 CombineSpectra.C:761
 CombineSpectra.C:762
 CombineSpectra.C:763
 CombineSpectra.C:764
 CombineSpectra.C:765
 CombineSpectra.C:766
 CombineSpectra.C:767
 CombineSpectra.C:768
 CombineSpectra.C:769
 CombineSpectra.C:770
 CombineSpectra.C:771
 CombineSpectra.C:772
 CombineSpectra.C:773
 CombineSpectra.C:774
 CombineSpectra.C:775
 CombineSpectra.C:776
 CombineSpectra.C:777
 CombineSpectra.C:778
 CombineSpectra.C:779
 CombineSpectra.C:780
 CombineSpectra.C:781
 CombineSpectra.C:782
 CombineSpectra.C:783
 CombineSpectra.C:784
 CombineSpectra.C:785
 CombineSpectra.C:786
 CombineSpectra.C:787
 CombineSpectra.C:788
 CombineSpectra.C:789
 CombineSpectra.C:790
 CombineSpectra.C:791
 CombineSpectra.C:792
 CombineSpectra.C:793
 CombineSpectra.C:794
 CombineSpectra.C:795
 CombineSpectra.C:796
 CombineSpectra.C:797
 CombineSpectra.C:798
 CombineSpectra.C:799
 CombineSpectra.C:800
 CombineSpectra.C:801
 CombineSpectra.C:802
 CombineSpectra.C:803
 CombineSpectra.C:804
 CombineSpectra.C:805
 CombineSpectra.C:806
 CombineSpectra.C:807
 CombineSpectra.C:808
 CombineSpectra.C:809
 CombineSpectra.C:810
 CombineSpectra.C:811
 CombineSpectra.C:812
 CombineSpectra.C:813
 CombineSpectra.C:814
 CombineSpectra.C:815
 CombineSpectra.C:816
 CombineSpectra.C:817
 CombineSpectra.C:818
 CombineSpectra.C:819
 CombineSpectra.C:820
 CombineSpectra.C:821
 CombineSpectra.C:822
 CombineSpectra.C:823
 CombineSpectra.C:824
 CombineSpectra.C:825
 CombineSpectra.C:826
 CombineSpectra.C:827
 CombineSpectra.C:828
 CombineSpectra.C:829
 CombineSpectra.C:830
 CombineSpectra.C:831
 CombineSpectra.C:832
 CombineSpectra.C:833
 CombineSpectra.C:834
 CombineSpectra.C:835
 CombineSpectra.C:836
 CombineSpectra.C:837
 CombineSpectra.C:838
 CombineSpectra.C:839
 CombineSpectra.C:840
 CombineSpectra.C:841
 CombineSpectra.C:842
 CombineSpectra.C:843
 CombineSpectra.C:844
 CombineSpectra.C:845
 CombineSpectra.C:846
 CombineSpectra.C:847
 CombineSpectra.C:848
 CombineSpectra.C:849
 CombineSpectra.C:850
 CombineSpectra.C:851
 CombineSpectra.C:852
 CombineSpectra.C:853
 CombineSpectra.C:854
 CombineSpectra.C:855
 CombineSpectra.C:856
 CombineSpectra.C:857
 CombineSpectra.C:858
 CombineSpectra.C:859
 CombineSpectra.C:860
 CombineSpectra.C:861
 CombineSpectra.C:862
 CombineSpectra.C:863
 CombineSpectra.C:864
 CombineSpectra.C:865
 CombineSpectra.C:866
 CombineSpectra.C:867
 CombineSpectra.C:868
 CombineSpectra.C:869
 CombineSpectra.C:870
 CombineSpectra.C:871
 CombineSpectra.C:872
 CombineSpectra.C:873
 CombineSpectra.C:874
 CombineSpectra.C:875
 CombineSpectra.C:876
 CombineSpectra.C:877
 CombineSpectra.C:878
 CombineSpectra.C:879
 CombineSpectra.C:880
 CombineSpectra.C:881
 CombineSpectra.C:882
 CombineSpectra.C:883
 CombineSpectra.C:884
 CombineSpectra.C:885
 CombineSpectra.C:886
 CombineSpectra.C:887
 CombineSpectra.C:888
 CombineSpectra.C:889
 CombineSpectra.C:890
 CombineSpectra.C:891
 CombineSpectra.C:892
 CombineSpectra.C:893
 CombineSpectra.C:894
 CombineSpectra.C:895
 CombineSpectra.C:896
 CombineSpectra.C:897
 CombineSpectra.C:898
 CombineSpectra.C:899
 CombineSpectra.C:900
 CombineSpectra.C:901
 CombineSpectra.C:902
 CombineSpectra.C:903
 CombineSpectra.C:904
 CombineSpectra.C:905
 CombineSpectra.C:906
 CombineSpectra.C:907
 CombineSpectra.C:908
 CombineSpectra.C:909
 CombineSpectra.C:910
 CombineSpectra.C:911
 CombineSpectra.C:912
 CombineSpectra.C:913
 CombineSpectra.C:914
 CombineSpectra.C:915
 CombineSpectra.C:916
 CombineSpectra.C:917
 CombineSpectra.C:918
 CombineSpectra.C:919
 CombineSpectra.C:920
 CombineSpectra.C:921
 CombineSpectra.C:922
 CombineSpectra.C:923
 CombineSpectra.C:924
 CombineSpectra.C:925
 CombineSpectra.C:926
 CombineSpectra.C:927
 CombineSpectra.C:928
 CombineSpectra.C:929
 CombineSpectra.C:930
 CombineSpectra.C:931
 CombineSpectra.C:932
 CombineSpectra.C:933
 CombineSpectra.C:934
 CombineSpectra.C:935
 CombineSpectra.C:936
 CombineSpectra.C:937
 CombineSpectra.C:938
 CombineSpectra.C:939
 CombineSpectra.C:940
 CombineSpectra.C:941
 CombineSpectra.C:942
 CombineSpectra.C:943
 CombineSpectra.C:944
 CombineSpectra.C:945
 CombineSpectra.C:946
 CombineSpectra.C:947
 CombineSpectra.C:948
 CombineSpectra.C:949
 CombineSpectra.C:950
 CombineSpectra.C:951
 CombineSpectra.C:952
 CombineSpectra.C:953
 CombineSpectra.C:954
 CombineSpectra.C:955
 CombineSpectra.C:956
 CombineSpectra.C:957
 CombineSpectra.C:958
 CombineSpectra.C:959
 CombineSpectra.C:960
 CombineSpectra.C:961
 CombineSpectra.C:962
 CombineSpectra.C:963
 CombineSpectra.C:964
 CombineSpectra.C:965
 CombineSpectra.C:966
 CombineSpectra.C:967
 CombineSpectra.C:968
 CombineSpectra.C:969
 CombineSpectra.C:970
 CombineSpectra.C:971
 CombineSpectra.C:972
 CombineSpectra.C:973
 CombineSpectra.C:974
 CombineSpectra.C:975
 CombineSpectra.C:976
 CombineSpectra.C:977
 CombineSpectra.C:978
 CombineSpectra.C:979
 CombineSpectra.C:980
 CombineSpectra.C:981
 CombineSpectra.C:982
 CombineSpectra.C:983
 CombineSpectra.C:984
 CombineSpectra.C:985
 CombineSpectra.C:986
 CombineSpectra.C:987
 CombineSpectra.C:988
 CombineSpectra.C:989
 CombineSpectra.C:990
 CombineSpectra.C:991
 CombineSpectra.C:992
 CombineSpectra.C:993
 CombineSpectra.C:994
 CombineSpectra.C:995
 CombineSpectra.C:996
 CombineSpectra.C:997
 CombineSpectra.C:998
 CombineSpectra.C:999
 CombineSpectra.C:1000
 CombineSpectra.C:1001
 CombineSpectra.C:1002
 CombineSpectra.C:1003
 CombineSpectra.C:1004
 CombineSpectra.C:1005
 CombineSpectra.C:1006
 CombineSpectra.C:1007
 CombineSpectra.C:1008
 CombineSpectra.C:1009
 CombineSpectra.C:1010
 CombineSpectra.C:1011
 CombineSpectra.C:1012
 CombineSpectra.C:1013
 CombineSpectra.C:1014
 CombineSpectra.C:1015
 CombineSpectra.C:1016
 CombineSpectra.C:1017
 CombineSpectra.C:1018
 CombineSpectra.C:1019
 CombineSpectra.C:1020
 CombineSpectra.C:1021
 CombineSpectra.C:1022
 CombineSpectra.C:1023
 CombineSpectra.C:1024
 CombineSpectra.C:1025
 CombineSpectra.C:1026
 CombineSpectra.C:1027
 CombineSpectra.C:1028
 CombineSpectra.C:1029
 CombineSpectra.C:1030
 CombineSpectra.C:1031
 CombineSpectra.C:1032
 CombineSpectra.C:1033
 CombineSpectra.C:1034
 CombineSpectra.C:1035
 CombineSpectra.C:1036
 CombineSpectra.C:1037
 CombineSpectra.C:1038
 CombineSpectra.C:1039
 CombineSpectra.C:1040
 CombineSpectra.C:1041
 CombineSpectra.C:1042
 CombineSpectra.C:1043
 CombineSpectra.C:1044
 CombineSpectra.C:1045
 CombineSpectra.C:1046
 CombineSpectra.C:1047
 CombineSpectra.C:1048
 CombineSpectra.C:1049
 CombineSpectra.C:1050
 CombineSpectra.C:1051
 CombineSpectra.C:1052
 CombineSpectra.C:1053
 CombineSpectra.C:1054
 CombineSpectra.C:1055
 CombineSpectra.C:1056
 CombineSpectra.C:1057
 CombineSpectra.C:1058
 CombineSpectra.C:1059
 CombineSpectra.C:1060
 CombineSpectra.C:1061
 CombineSpectra.C:1062
 CombineSpectra.C:1063
 CombineSpectra.C:1064
 CombineSpectra.C:1065
 CombineSpectra.C:1066
 CombineSpectra.C:1067
 CombineSpectra.C:1068
 CombineSpectra.C:1069
 CombineSpectra.C:1070
 CombineSpectra.C:1071
 CombineSpectra.C:1072
 CombineSpectra.C:1073
 CombineSpectra.C:1074
 CombineSpectra.C:1075
 CombineSpectra.C:1076
 CombineSpectra.C:1077
 CombineSpectra.C:1078
 CombineSpectra.C:1079
 CombineSpectra.C:1080
 CombineSpectra.C:1081
 CombineSpectra.C:1082
 CombineSpectra.C:1083
 CombineSpectra.C:1084
 CombineSpectra.C:1085
 CombineSpectra.C:1086
 CombineSpectra.C:1087
 CombineSpectra.C:1088
 CombineSpectra.C:1089
 CombineSpectra.C:1090
 CombineSpectra.C:1091
 CombineSpectra.C:1092
 CombineSpectra.C:1093
 CombineSpectra.C:1094
 CombineSpectra.C:1095
 CombineSpectra.C:1096
 CombineSpectra.C:1097
 CombineSpectra.C:1098
 CombineSpectra.C:1099
 CombineSpectra.C:1100
 CombineSpectra.C:1101
 CombineSpectra.C:1102
 CombineSpectra.C:1103
 CombineSpectra.C:1104
 CombineSpectra.C:1105
 CombineSpectra.C:1106
 CombineSpectra.C:1107
 CombineSpectra.C:1108
 CombineSpectra.C:1109
 CombineSpectra.C:1110
 CombineSpectra.C:1111
 CombineSpectra.C:1112
 CombineSpectra.C:1113
 CombineSpectra.C:1114
 CombineSpectra.C:1115
 CombineSpectra.C:1116
 CombineSpectra.C:1117
 CombineSpectra.C:1118
 CombineSpectra.C:1119
 CombineSpectra.C:1120
 CombineSpectra.C:1121
 CombineSpectra.C:1122
 CombineSpectra.C:1123
 CombineSpectra.C:1124
 CombineSpectra.C:1125
 CombineSpectra.C:1126
 CombineSpectra.C:1127
 CombineSpectra.C:1128
 CombineSpectra.C:1129
 CombineSpectra.C:1130
 CombineSpectra.C:1131
 CombineSpectra.C:1132
 CombineSpectra.C:1133
 CombineSpectra.C:1134
 CombineSpectra.C:1135
 CombineSpectra.C:1136
 CombineSpectra.C:1137
 CombineSpectra.C:1138
 CombineSpectra.C:1139
 CombineSpectra.C:1140
 CombineSpectra.C:1141
 CombineSpectra.C:1142
 CombineSpectra.C:1143
 CombineSpectra.C:1144
 CombineSpectra.C:1145
 CombineSpectra.C:1146
 CombineSpectra.C:1147
 CombineSpectra.C:1148
 CombineSpectra.C:1149
 CombineSpectra.C:1150
 CombineSpectra.C:1151
 CombineSpectra.C:1152
 CombineSpectra.C:1153
 CombineSpectra.C:1154
 CombineSpectra.C:1155
 CombineSpectra.C:1156
 CombineSpectra.C:1157
 CombineSpectra.C:1158
 CombineSpectra.C:1159
 CombineSpectra.C:1160
 CombineSpectra.C:1161
 CombineSpectra.C:1162
 CombineSpectra.C:1163
 CombineSpectra.C:1164
 CombineSpectra.C:1165
 CombineSpectra.C:1166
 CombineSpectra.C:1167
 CombineSpectra.C:1168
 CombineSpectra.C:1169
 CombineSpectra.C:1170
 CombineSpectra.C:1171
 CombineSpectra.C:1172
 CombineSpectra.C:1173
 CombineSpectra.C:1174
 CombineSpectra.C:1175
 CombineSpectra.C:1176
 CombineSpectra.C:1177
 CombineSpectra.C:1178
 CombineSpectra.C:1179
 CombineSpectra.C:1180
 CombineSpectra.C:1181
 CombineSpectra.C:1182
 CombineSpectra.C:1183
 CombineSpectra.C:1184
 CombineSpectra.C:1185
 CombineSpectra.C:1186
 CombineSpectra.C:1187
 CombineSpectra.C:1188
 CombineSpectra.C:1189
 CombineSpectra.C:1190
 CombineSpectra.C:1191
 CombineSpectra.C:1192
 CombineSpectra.C:1193
 CombineSpectra.C:1194
 CombineSpectra.C:1195
 CombineSpectra.C:1196
 CombineSpectra.C:1197
 CombineSpectra.C:1198
 CombineSpectra.C:1199
 CombineSpectra.C:1200
 CombineSpectra.C:1201
 CombineSpectra.C:1202
 CombineSpectra.C:1203
 CombineSpectra.C:1204
 CombineSpectra.C:1205
 CombineSpectra.C:1206
 CombineSpectra.C:1207
 CombineSpectra.C:1208
 CombineSpectra.C:1209
 CombineSpectra.C:1210
 CombineSpectra.C:1211
 CombineSpectra.C:1212
 CombineSpectra.C:1213
 CombineSpectra.C:1214
 CombineSpectra.C:1215
 CombineSpectra.C:1216
 CombineSpectra.C:1217
 CombineSpectra.C:1218
 CombineSpectra.C:1219
 CombineSpectra.C:1220
 CombineSpectra.C:1221
 CombineSpectra.C:1222
 CombineSpectra.C:1223
 CombineSpectra.C:1224
 CombineSpectra.C:1225
 CombineSpectra.C:1226
 CombineSpectra.C:1227
 CombineSpectra.C:1228
 CombineSpectra.C:1229
 CombineSpectra.C:1230
 CombineSpectra.C:1231
 CombineSpectra.C:1232
 CombineSpectra.C:1233
 CombineSpectra.C:1234
 CombineSpectra.C:1235
 CombineSpectra.C:1236
 CombineSpectra.C:1237
 CombineSpectra.C:1238
 CombineSpectra.C:1239
 CombineSpectra.C:1240
 CombineSpectra.C:1241
 CombineSpectra.C:1242
 CombineSpectra.C:1243
 CombineSpectra.C:1244
 CombineSpectra.C:1245
 CombineSpectra.C:1246
 CombineSpectra.C:1247
 CombineSpectra.C:1248
 CombineSpectra.C:1249
 CombineSpectra.C:1250
 CombineSpectra.C:1251
 CombineSpectra.C:1252
 CombineSpectra.C:1253
 CombineSpectra.C:1254
 CombineSpectra.C:1255
 CombineSpectra.C:1256
 CombineSpectra.C:1257
 CombineSpectra.C:1258
 CombineSpectra.C:1259
 CombineSpectra.C:1260
 CombineSpectra.C:1261
 CombineSpectra.C:1262
 CombineSpectra.C:1263
 CombineSpectra.C:1264
 CombineSpectra.C:1265
 CombineSpectra.C:1266
 CombineSpectra.C:1267
 CombineSpectra.C:1268
 CombineSpectra.C:1269
 CombineSpectra.C:1270
 CombineSpectra.C:1271
 CombineSpectra.C:1272
 CombineSpectra.C:1273
 CombineSpectra.C:1274
 CombineSpectra.C:1275
 CombineSpectra.C:1276
 CombineSpectra.C:1277
 CombineSpectra.C:1278
 CombineSpectra.C:1279
 CombineSpectra.C:1280
 CombineSpectra.C:1281
 CombineSpectra.C:1282
 CombineSpectra.C:1283
 CombineSpectra.C:1284
 CombineSpectra.C:1285
 CombineSpectra.C:1286
 CombineSpectra.C:1287
 CombineSpectra.C:1288
 CombineSpectra.C:1289
 CombineSpectra.C:1290
 CombineSpectra.C:1291
 CombineSpectra.C:1292
 CombineSpectra.C:1293
 CombineSpectra.C:1294
 CombineSpectra.C:1295
 CombineSpectra.C:1296
 CombineSpectra.C:1297
 CombineSpectra.C:1298
 CombineSpectra.C:1299
 CombineSpectra.C:1300
 CombineSpectra.C:1301
 CombineSpectra.C:1302
 CombineSpectra.C:1303
 CombineSpectra.C:1304
 CombineSpectra.C:1305
 CombineSpectra.C:1306
 CombineSpectra.C:1307
 CombineSpectra.C:1308
 CombineSpectra.C:1309
 CombineSpectra.C:1310
 CombineSpectra.C:1311
 CombineSpectra.C:1312
 CombineSpectra.C:1313
 CombineSpectra.C:1314
 CombineSpectra.C:1315
 CombineSpectra.C:1316
 CombineSpectra.C:1317
 CombineSpectra.C:1318
 CombineSpectra.C:1319
 CombineSpectra.C:1320
 CombineSpectra.C:1321
 CombineSpectra.C:1322
 CombineSpectra.C:1323
 CombineSpectra.C:1324
 CombineSpectra.C:1325
 CombineSpectra.C:1326
 CombineSpectra.C:1327
 CombineSpectra.C:1328
 CombineSpectra.C:1329
 CombineSpectra.C:1330
 CombineSpectra.C:1331
 CombineSpectra.C:1332
 CombineSpectra.C:1333
 CombineSpectra.C:1334
 CombineSpectra.C:1335
 CombineSpectra.C:1336
 CombineSpectra.C:1337
 CombineSpectra.C:1338
 CombineSpectra.C:1339
 CombineSpectra.C:1340
 CombineSpectra.C:1341
 CombineSpectra.C:1342
 CombineSpectra.C:1343
 CombineSpectra.C:1344
 CombineSpectra.C:1345
 CombineSpectra.C:1346
 CombineSpectra.C:1347
 CombineSpectra.C:1348
 CombineSpectra.C:1349
 CombineSpectra.C:1350
 CombineSpectra.C:1351
 CombineSpectra.C:1352
 CombineSpectra.C:1353
 CombineSpectra.C:1354
 CombineSpectra.C:1355
 CombineSpectra.C:1356
 CombineSpectra.C:1357
 CombineSpectra.C:1358
 CombineSpectra.C:1359
 CombineSpectra.C:1360
 CombineSpectra.C:1361
 CombineSpectra.C:1362
 CombineSpectra.C:1363
 CombineSpectra.C:1364
 CombineSpectra.C:1365
 CombineSpectra.C:1366
 CombineSpectra.C:1367
 CombineSpectra.C:1368
 CombineSpectra.C:1369
 CombineSpectra.C:1370
 CombineSpectra.C:1371
 CombineSpectra.C:1372
 CombineSpectra.C:1373
 CombineSpectra.C:1374
 CombineSpectra.C:1375
 CombineSpectra.C:1376
 CombineSpectra.C:1377
 CombineSpectra.C:1378
 CombineSpectra.C:1379
 CombineSpectra.C:1380
 CombineSpectra.C:1381
 CombineSpectra.C:1382
 CombineSpectra.C:1383
 CombineSpectra.C:1384
 CombineSpectra.C:1385
 CombineSpectra.C:1386
 CombineSpectra.C:1387
 CombineSpectra.C:1388
 CombineSpectra.C:1389
 CombineSpectra.C:1390
 CombineSpectra.C:1391
 CombineSpectra.C:1392
 CombineSpectra.C:1393
 CombineSpectra.C:1394
 CombineSpectra.C:1395
 CombineSpectra.C:1396
 CombineSpectra.C:1397
 CombineSpectra.C:1398
 CombineSpectra.C:1399
 CombineSpectra.C:1400
 CombineSpectra.C:1401
 CombineSpectra.C:1402
 CombineSpectra.C:1403
 CombineSpectra.C:1404
 CombineSpectra.C:1405
 CombineSpectra.C:1406
 CombineSpectra.C:1407
 CombineSpectra.C:1408
 CombineSpectra.C:1409
 CombineSpectra.C:1410
 CombineSpectra.C:1411
 CombineSpectra.C:1412
 CombineSpectra.C:1413
 CombineSpectra.C:1414
 CombineSpectra.C:1415
 CombineSpectra.C:1416
 CombineSpectra.C:1417
 CombineSpectra.C:1418
 CombineSpectra.C:1419
 CombineSpectra.C:1420
 CombineSpectra.C:1421
 CombineSpectra.C:1422
 CombineSpectra.C:1423
 CombineSpectra.C:1424
 CombineSpectra.C:1425
 CombineSpectra.C:1426
 CombineSpectra.C:1427
 CombineSpectra.C:1428
 CombineSpectra.C:1429
 CombineSpectra.C:1430
 CombineSpectra.C:1431
 CombineSpectra.C:1432
 CombineSpectra.C:1433
 CombineSpectra.C:1434
 CombineSpectra.C:1435
 CombineSpectra.C:1436
 CombineSpectra.C:1437
 CombineSpectra.C:1438
 CombineSpectra.C:1439
 CombineSpectra.C:1440
 CombineSpectra.C:1441
 CombineSpectra.C:1442
 CombineSpectra.C:1443
 CombineSpectra.C:1444
 CombineSpectra.C:1445
 CombineSpectra.C:1446
 CombineSpectra.C:1447
 CombineSpectra.C:1448
 CombineSpectra.C:1449
 CombineSpectra.C:1450
 CombineSpectra.C:1451
 CombineSpectra.C:1452
 CombineSpectra.C:1453
 CombineSpectra.C:1454
 CombineSpectra.C:1455
 CombineSpectra.C:1456
 CombineSpectra.C:1457
 CombineSpectra.C:1458
 CombineSpectra.C:1459
 CombineSpectra.C:1460
 CombineSpectra.C:1461
 CombineSpectra.C:1462
 CombineSpectra.C:1463
 CombineSpectra.C:1464
 CombineSpectra.C:1465
 CombineSpectra.C:1466
 CombineSpectra.C:1467
 CombineSpectra.C:1468
 CombineSpectra.C:1469
 CombineSpectra.C:1470
 CombineSpectra.C:1471
 CombineSpectra.C:1472
 CombineSpectra.C:1473
 CombineSpectra.C:1474
 CombineSpectra.C:1475
 CombineSpectra.C:1476
 CombineSpectra.C:1477
 CombineSpectra.C:1478
 CombineSpectra.C:1479
 CombineSpectra.C:1480
 CombineSpectra.C:1481
 CombineSpectra.C:1482
 CombineSpectra.C:1483
 CombineSpectra.C:1484
 CombineSpectra.C:1485
 CombineSpectra.C:1486
 CombineSpectra.C:1487
 CombineSpectra.C:1488
 CombineSpectra.C:1489
 CombineSpectra.C:1490
 CombineSpectra.C:1491
 CombineSpectra.C:1492
 CombineSpectra.C:1493
 CombineSpectra.C:1494
 CombineSpectra.C:1495
 CombineSpectra.C:1496
 CombineSpectra.C:1497
 CombineSpectra.C:1498
 CombineSpectra.C:1499
 CombineSpectra.C:1500
 CombineSpectra.C:1501
 CombineSpectra.C:1502
 CombineSpectra.C:1503
 CombineSpectra.C:1504
 CombineSpectra.C:1505
 CombineSpectra.C:1506
 CombineSpectra.C:1507
 CombineSpectra.C:1508
 CombineSpectra.C:1509
 CombineSpectra.C:1510
 CombineSpectra.C:1511
 CombineSpectra.C:1512
 CombineSpectra.C:1513
 CombineSpectra.C:1514
 CombineSpectra.C:1515
 CombineSpectra.C:1516
 CombineSpectra.C:1517
 CombineSpectra.C:1518
 CombineSpectra.C:1519
 CombineSpectra.C:1520
 CombineSpectra.C:1521
 CombineSpectra.C:1522
 CombineSpectra.C:1523
 CombineSpectra.C:1524
 CombineSpectra.C:1525
 CombineSpectra.C:1526
 CombineSpectra.C:1527
 CombineSpectra.C:1528
 CombineSpectra.C:1529
 CombineSpectra.C:1530
 CombineSpectra.C:1531
 CombineSpectra.C:1532
 CombineSpectra.C:1533
 CombineSpectra.C:1534
 CombineSpectra.C:1535
 CombineSpectra.C:1536
 CombineSpectra.C:1537
 CombineSpectra.C:1538
 CombineSpectra.C:1539
 CombineSpectra.C:1540
 CombineSpectra.C:1541
 CombineSpectra.C:1542
 CombineSpectra.C:1543
 CombineSpectra.C:1544
 CombineSpectra.C:1545
 CombineSpectra.C:1546
 CombineSpectra.C:1547
 CombineSpectra.C:1548
 CombineSpectra.C:1549
 CombineSpectra.C:1550
 CombineSpectra.C:1551
 CombineSpectra.C:1552
 CombineSpectra.C:1553
 CombineSpectra.C:1554
 CombineSpectra.C:1555
 CombineSpectra.C:1556
 CombineSpectra.C:1557
 CombineSpectra.C:1558
 CombineSpectra.C:1559
 CombineSpectra.C:1560
 CombineSpectra.C:1561
 CombineSpectra.C:1562
 CombineSpectra.C:1563
 CombineSpectra.C:1564
 CombineSpectra.C:1565
 CombineSpectra.C:1566
 CombineSpectra.C:1567
 CombineSpectra.C:1568
 CombineSpectra.C:1569
 CombineSpectra.C:1570
 CombineSpectra.C:1571
 CombineSpectra.C:1572
 CombineSpectra.C:1573
 CombineSpectra.C:1574
 CombineSpectra.C:1575
 CombineSpectra.C:1576
 CombineSpectra.C:1577
 CombineSpectra.C:1578
 CombineSpectra.C:1579
 CombineSpectra.C:1580
 CombineSpectra.C:1581
 CombineSpectra.C:1582
 CombineSpectra.C:1583
 CombineSpectra.C:1584
 CombineSpectra.C:1585
 CombineSpectra.C:1586
 CombineSpectra.C:1587
 CombineSpectra.C:1588
 CombineSpectra.C:1589
 CombineSpectra.C:1590
 CombineSpectra.C:1591
 CombineSpectra.C:1592
 CombineSpectra.C:1593
 CombineSpectra.C:1594
 CombineSpectra.C:1595
 CombineSpectra.C:1596
 CombineSpectra.C:1597
 CombineSpectra.C:1598
 CombineSpectra.C:1599
 CombineSpectra.C:1600
 CombineSpectra.C:1601
 CombineSpectra.C:1602
 CombineSpectra.C:1603
 CombineSpectra.C:1604
 CombineSpectra.C:1605
 CombineSpectra.C:1606
 CombineSpectra.C:1607
 CombineSpectra.C:1608
 CombineSpectra.C:1609
 CombineSpectra.C:1610
 CombineSpectra.C:1611
 CombineSpectra.C:1612
 CombineSpectra.C:1613
 CombineSpectra.C:1614
 CombineSpectra.C:1615
 CombineSpectra.C:1616
 CombineSpectra.C:1617
 CombineSpectra.C:1618
 CombineSpectra.C:1619
 CombineSpectra.C:1620
 CombineSpectra.C:1621
 CombineSpectra.C:1622
 CombineSpectra.C:1623
 CombineSpectra.C:1624
 CombineSpectra.C:1625
 CombineSpectra.C:1626
 CombineSpectra.C:1627
 CombineSpectra.C:1628
 CombineSpectra.C:1629
 CombineSpectra.C:1630
 CombineSpectra.C:1631
 CombineSpectra.C:1632
 CombineSpectra.C:1633
 CombineSpectra.C:1634
 CombineSpectra.C:1635
 CombineSpectra.C:1636
 CombineSpectra.C:1637
 CombineSpectra.C:1638
 CombineSpectra.C:1639
 CombineSpectra.C:1640
 CombineSpectra.C:1641
 CombineSpectra.C:1642
 CombineSpectra.C:1643
 CombineSpectra.C:1644
 CombineSpectra.C:1645
 CombineSpectra.C:1646
 CombineSpectra.C:1647
 CombineSpectra.C:1648
 CombineSpectra.C:1649
 CombineSpectra.C:1650
 CombineSpectra.C:1651
 CombineSpectra.C:1652
 CombineSpectra.C:1653
 CombineSpectra.C:1654
 CombineSpectra.C:1655
 CombineSpectra.C:1656
 CombineSpectra.C:1657
 CombineSpectra.C:1658
 CombineSpectra.C:1659
 CombineSpectra.C:1660
 CombineSpectra.C:1661
 CombineSpectra.C:1662
 CombineSpectra.C:1663
 CombineSpectra.C:1664
 CombineSpectra.C:1665
 CombineSpectra.C:1666
 CombineSpectra.C:1667
 CombineSpectra.C:1668
 CombineSpectra.C:1669
 CombineSpectra.C:1670
 CombineSpectra.C:1671
 CombineSpectra.C:1672
 CombineSpectra.C:1673
 CombineSpectra.C:1674
 CombineSpectra.C:1675
 CombineSpectra.C:1676
 CombineSpectra.C:1677
 CombineSpectra.C:1678
 CombineSpectra.C:1679
 CombineSpectra.C:1680
 CombineSpectra.C:1681
 CombineSpectra.C:1682
 CombineSpectra.C:1683
 CombineSpectra.C:1684
 CombineSpectra.C:1685
 CombineSpectra.C:1686
 CombineSpectra.C:1687
 CombineSpectra.C:1688
 CombineSpectra.C:1689
 CombineSpectra.C:1690
 CombineSpectra.C:1691
 CombineSpectra.C:1692
 CombineSpectra.C:1693
 CombineSpectra.C:1694
 CombineSpectra.C:1695
 CombineSpectra.C:1696
 CombineSpectra.C:1697
 CombineSpectra.C:1698
 CombineSpectra.C:1699
 CombineSpectra.C:1700
 CombineSpectra.C:1701
 CombineSpectra.C:1702
 CombineSpectra.C:1703
 CombineSpectra.C:1704
 CombineSpectra.C:1705
 CombineSpectra.C:1706
 CombineSpectra.C:1707
 CombineSpectra.C:1708
 CombineSpectra.C:1709
 CombineSpectra.C:1710
 CombineSpectra.C:1711
 CombineSpectra.C:1712
 CombineSpectra.C:1713
 CombineSpectra.C:1714
 CombineSpectra.C:1715
 CombineSpectra.C:1716
 CombineSpectra.C:1717
 CombineSpectra.C:1718
 CombineSpectra.C:1719
 CombineSpectra.C:1720
 CombineSpectra.C:1721
 CombineSpectra.C:1722
 CombineSpectra.C:1723
 CombineSpectra.C:1724
 CombineSpectra.C:1725
 CombineSpectra.C:1726
 CombineSpectra.C:1727
 CombineSpectra.C:1728
 CombineSpectra.C:1729
 CombineSpectra.C:1730
 CombineSpectra.C:1731
 CombineSpectra.C:1732
 CombineSpectra.C:1733
 CombineSpectra.C:1734
 CombineSpectra.C:1735
 CombineSpectra.C:1736
 CombineSpectra.C:1737
 CombineSpectra.C:1738
 CombineSpectra.C:1739
 CombineSpectra.C:1740
 CombineSpectra.C:1741
 CombineSpectra.C:1742
 CombineSpectra.C:1743
 CombineSpectra.C:1744
 CombineSpectra.C:1745
 CombineSpectra.C:1746
 CombineSpectra.C:1747
 CombineSpectra.C:1748
 CombineSpectra.C:1749
 CombineSpectra.C:1750
 CombineSpectra.C:1751
 CombineSpectra.C:1752
 CombineSpectra.C:1753
 CombineSpectra.C:1754
 CombineSpectra.C:1755
 CombineSpectra.C:1756
 CombineSpectra.C:1757
 CombineSpectra.C:1758
 CombineSpectra.C:1759
 CombineSpectra.C:1760
 CombineSpectra.C:1761
 CombineSpectra.C:1762
 CombineSpectra.C:1763
 CombineSpectra.C:1764
 CombineSpectra.C:1765
 CombineSpectra.C:1766
 CombineSpectra.C:1767
 CombineSpectra.C:1768
 CombineSpectra.C:1769
 CombineSpectra.C:1770
 CombineSpectra.C:1771
 CombineSpectra.C:1772
 CombineSpectra.C:1773
 CombineSpectra.C:1774
 CombineSpectra.C:1775
 CombineSpectra.C:1776
 CombineSpectra.C:1777
 CombineSpectra.C:1778
 CombineSpectra.C:1779
 CombineSpectra.C:1780
 CombineSpectra.C:1781
 CombineSpectra.C:1782
 CombineSpectra.C:1783
 CombineSpectra.C:1784
 CombineSpectra.C:1785
 CombineSpectra.C:1786
 CombineSpectra.C:1787
 CombineSpectra.C:1788
 CombineSpectra.C:1789
 CombineSpectra.C:1790
 CombineSpectra.C:1791
 CombineSpectra.C:1792
 CombineSpectra.C:1793
 CombineSpectra.C:1794
 CombineSpectra.C:1795
 CombineSpectra.C:1796
 CombineSpectra.C:1797
 CombineSpectra.C:1798
 CombineSpectra.C:1799
 CombineSpectra.C:1800
 CombineSpectra.C:1801
 CombineSpectra.C:1802
 CombineSpectra.C:1803
 CombineSpectra.C:1804
 CombineSpectra.C:1805
 CombineSpectra.C:1806
 CombineSpectra.C:1807
 CombineSpectra.C:1808
 CombineSpectra.C:1809
 CombineSpectra.C:1810
 CombineSpectra.C:1811
 CombineSpectra.C:1812
 CombineSpectra.C:1813
 CombineSpectra.C:1814
 CombineSpectra.C:1815
 CombineSpectra.C:1816
 CombineSpectra.C:1817
 CombineSpectra.C:1818
 CombineSpectra.C:1819
 CombineSpectra.C:1820
 CombineSpectra.C:1821
 CombineSpectra.C:1822
 CombineSpectra.C:1823
 CombineSpectra.C:1824
 CombineSpectra.C:1825
 CombineSpectra.C:1826
 CombineSpectra.C:1827
 CombineSpectra.C:1828
 CombineSpectra.C:1829
 CombineSpectra.C:1830
 CombineSpectra.C:1831
 CombineSpectra.C:1832
 CombineSpectra.C:1833
 CombineSpectra.C:1834
 CombineSpectra.C:1835
 CombineSpectra.C:1836
 CombineSpectra.C:1837
 CombineSpectra.C:1838
 CombineSpectra.C:1839
 CombineSpectra.C:1840
 CombineSpectra.C:1841
 CombineSpectra.C:1842
 CombineSpectra.C:1843
 CombineSpectra.C:1844
 CombineSpectra.C:1845
 CombineSpectra.C:1846
 CombineSpectra.C:1847
 CombineSpectra.C:1848
 CombineSpectra.C:1849
 CombineSpectra.C:1850
 CombineSpectra.C:1851
 CombineSpectra.C:1852
 CombineSpectra.C:1853
 CombineSpectra.C:1854
 CombineSpectra.C:1855
 CombineSpectra.C:1856
 CombineSpectra.C:1857
 CombineSpectra.C:1858
 CombineSpectra.C:1859
 CombineSpectra.C:1860
 CombineSpectra.C:1861
 CombineSpectra.C:1862
 CombineSpectra.C:1863
 CombineSpectra.C:1864
 CombineSpectra.C:1865
 CombineSpectra.C:1866
 CombineSpectra.C:1867
 CombineSpectra.C:1868
 CombineSpectra.C:1869
 CombineSpectra.C:1870
 CombineSpectra.C:1871
 CombineSpectra.C:1872
 CombineSpectra.C:1873
 CombineSpectra.C:1874
 CombineSpectra.C:1875
 CombineSpectra.C:1876
 CombineSpectra.C:1877
 CombineSpectra.C:1878
 CombineSpectra.C:1879
 CombineSpectra.C:1880
 CombineSpectra.C:1881
 CombineSpectra.C:1882
 CombineSpectra.C:1883
 CombineSpectra.C:1884
 CombineSpectra.C:1885
 CombineSpectra.C:1886
 CombineSpectra.C:1887
 CombineSpectra.C:1888
 CombineSpectra.C:1889
 CombineSpectra.C:1890
 CombineSpectra.C:1891
 CombineSpectra.C:1892
 CombineSpectra.C:1893
 CombineSpectra.C:1894
 CombineSpectra.C:1895
 CombineSpectra.C:1896
 CombineSpectra.C:1897
 CombineSpectra.C:1898
 CombineSpectra.C:1899
 CombineSpectra.C:1900
 CombineSpectra.C:1901
 CombineSpectra.C:1902
 CombineSpectra.C:1903
 CombineSpectra.C:1904
 CombineSpectra.C:1905
 CombineSpectra.C:1906
 CombineSpectra.C:1907
 CombineSpectra.C:1908
 CombineSpectra.C:1909
 CombineSpectra.C:1910
 CombineSpectra.C:1911
 CombineSpectra.C:1912
 CombineSpectra.C:1913
 CombineSpectra.C:1914
 CombineSpectra.C:1915
 CombineSpectra.C:1916
 CombineSpectra.C:1917
 CombineSpectra.C:1918
 CombineSpectra.C:1919
 CombineSpectra.C:1920
 CombineSpectra.C:1921
 CombineSpectra.C:1922
 CombineSpectra.C:1923
 CombineSpectra.C:1924
 CombineSpectra.C:1925
 CombineSpectra.C:1926
 CombineSpectra.C:1927
 CombineSpectra.C:1928
 CombineSpectra.C:1929
 CombineSpectra.C:1930
 CombineSpectra.C:1931
 CombineSpectra.C:1932
 CombineSpectra.C:1933
 CombineSpectra.C:1934
 CombineSpectra.C:1935
 CombineSpectra.C:1936
 CombineSpectra.C:1937
 CombineSpectra.C:1938
 CombineSpectra.C:1939
 CombineSpectra.C:1940
 CombineSpectra.C:1941
 CombineSpectra.C:1942
 CombineSpectra.C:1943
 CombineSpectra.C:1944
 CombineSpectra.C:1945
 CombineSpectra.C:1946
 CombineSpectra.C:1947
 CombineSpectra.C:1948
 CombineSpectra.C:1949
 CombineSpectra.C:1950
 CombineSpectra.C:1951
 CombineSpectra.C:1952
 CombineSpectra.C:1953
 CombineSpectra.C:1954
 CombineSpectra.C:1955
 CombineSpectra.C:1956
 CombineSpectra.C:1957
 CombineSpectra.C:1958
 CombineSpectra.C:1959
 CombineSpectra.C:1960
 CombineSpectra.C:1961
 CombineSpectra.C:1962
 CombineSpectra.C:1963
 CombineSpectra.C:1964
 CombineSpectra.C:1965
 CombineSpectra.C:1966
 CombineSpectra.C:1967
 CombineSpectra.C:1968
 CombineSpectra.C:1969
 CombineSpectra.C:1970
 CombineSpectra.C:1971
 CombineSpectra.C:1972
 CombineSpectra.C:1973
 CombineSpectra.C:1974
 CombineSpectra.C:1975
 CombineSpectra.C:1976
 CombineSpectra.C:1977
 CombineSpectra.C:1978
 CombineSpectra.C:1979
 CombineSpectra.C:1980
 CombineSpectra.C:1981
 CombineSpectra.C:1982
 CombineSpectra.C:1983
 CombineSpectra.C:1984
 CombineSpectra.C:1985
 CombineSpectra.C:1986
 CombineSpectra.C:1987
 CombineSpectra.C:1988
 CombineSpectra.C:1989
 CombineSpectra.C:1990
 CombineSpectra.C:1991
 CombineSpectra.C:1992
 CombineSpectra.C:1993
 CombineSpectra.C:1994
 CombineSpectra.C:1995
 CombineSpectra.C:1996
 CombineSpectra.C:1997
 CombineSpectra.C:1998
 CombineSpectra.C:1999
 CombineSpectra.C:2000
 CombineSpectra.C:2001
 CombineSpectra.C:2002
 CombineSpectra.C:2003
 CombineSpectra.C:2004
 CombineSpectra.C:2005
 CombineSpectra.C:2006
 CombineSpectra.C:2007
 CombineSpectra.C:2008
 CombineSpectra.C:2009
 CombineSpectra.C:2010
 CombineSpectra.C:2011
 CombineSpectra.C:2012
 CombineSpectra.C:2013
 CombineSpectra.C:2014
 CombineSpectra.C:2015
 CombineSpectra.C:2016
 CombineSpectra.C:2017
 CombineSpectra.C:2018
 CombineSpectra.C:2019
 CombineSpectra.C:2020
 CombineSpectra.C:2021
 CombineSpectra.C:2022
 CombineSpectra.C:2023
 CombineSpectra.C:2024
 CombineSpectra.C:2025
 CombineSpectra.C:2026
 CombineSpectra.C:2027
 CombineSpectra.C:2028
 CombineSpectra.C:2029
 CombineSpectra.C:2030
 CombineSpectra.C:2031
 CombineSpectra.C:2032
 CombineSpectra.C:2033
 CombineSpectra.C:2034
 CombineSpectra.C:2035
 CombineSpectra.C:2036
 CombineSpectra.C:2037
 CombineSpectra.C:2038
 CombineSpectra.C:2039
 CombineSpectra.C:2040
 CombineSpectra.C:2041
 CombineSpectra.C:2042
 CombineSpectra.C:2043
 CombineSpectra.C:2044
 CombineSpectra.C:2045
 CombineSpectra.C:2046
 CombineSpectra.C:2047
 CombineSpectra.C:2048
 CombineSpectra.C:2049
 CombineSpectra.C:2050
 CombineSpectra.C:2051
 CombineSpectra.C:2052
 CombineSpectra.C:2053
 CombineSpectra.C:2054
 CombineSpectra.C:2055
 CombineSpectra.C:2056
 CombineSpectra.C:2057
 CombineSpectra.C:2058
 CombineSpectra.C:2059
 CombineSpectra.C:2060
 CombineSpectra.C:2061
 CombineSpectra.C:2062
 CombineSpectra.C:2063
 CombineSpectra.C:2064
 CombineSpectra.C:2065
 CombineSpectra.C:2066
 CombineSpectra.C:2067
 CombineSpectra.C:2068
 CombineSpectra.C:2069
 CombineSpectra.C:2070
 CombineSpectra.C:2071
 CombineSpectra.C:2072
 CombineSpectra.C:2073
 CombineSpectra.C:2074
 CombineSpectra.C:2075
 CombineSpectra.C:2076
 CombineSpectra.C:2077
 CombineSpectra.C:2078
 CombineSpectra.C:2079
 CombineSpectra.C:2080
 CombineSpectra.C:2081
 CombineSpectra.C:2082
 CombineSpectra.C:2083
 CombineSpectra.C:2084
 CombineSpectra.C:2085
 CombineSpectra.C:2086
 CombineSpectra.C:2087
 CombineSpectra.C:2088
 CombineSpectra.C:2089
 CombineSpectra.C:2090
 CombineSpectra.C:2091
 CombineSpectra.C:2092
 CombineSpectra.C:2093
 CombineSpectra.C:2094
 CombineSpectra.C:2095
 CombineSpectra.C:2096
 CombineSpectra.C:2097
 CombineSpectra.C:2098
 CombineSpectra.C:2099
 CombineSpectra.C:2100
 CombineSpectra.C:2101
 CombineSpectra.C:2102
 CombineSpectra.C:2103
 CombineSpectra.C:2104
 CombineSpectra.C:2105
 CombineSpectra.C:2106
 CombineSpectra.C:2107
 CombineSpectra.C:2108
 CombineSpectra.C:2109
 CombineSpectra.C:2110
 CombineSpectra.C:2111
 CombineSpectra.C:2112
 CombineSpectra.C:2113
 CombineSpectra.C:2114
 CombineSpectra.C:2115
 CombineSpectra.C:2116
 CombineSpectra.C:2117
 CombineSpectra.C:2118
 CombineSpectra.C:2119
 CombineSpectra.C:2120
 CombineSpectra.C:2121
 CombineSpectra.C:2122
 CombineSpectra.C:2123
 CombineSpectra.C:2124
 CombineSpectra.C:2125
 CombineSpectra.C:2126
 CombineSpectra.C:2127
 CombineSpectra.C:2128
 CombineSpectra.C:2129
 CombineSpectra.C:2130
 CombineSpectra.C:2131
 CombineSpectra.C:2132
 CombineSpectra.C:2133
 CombineSpectra.C:2134
 CombineSpectra.C:2135
 CombineSpectra.C:2136
 CombineSpectra.C:2137
 CombineSpectra.C:2138
 CombineSpectra.C:2139
 CombineSpectra.C:2140
 CombineSpectra.C:2141
 CombineSpectra.C:2142
 CombineSpectra.C:2143
 CombineSpectra.C:2144
 CombineSpectra.C:2145
 CombineSpectra.C:2146
 CombineSpectra.C:2147
 CombineSpectra.C:2148
 CombineSpectra.C:2149
 CombineSpectra.C:2150
 CombineSpectra.C:2151
 CombineSpectra.C:2152
 CombineSpectra.C:2153
 CombineSpectra.C:2154
 CombineSpectra.C:2155
 CombineSpectra.C:2156
 CombineSpectra.C:2157
 CombineSpectra.C:2158
 CombineSpectra.C:2159
 CombineSpectra.C:2160
 CombineSpectra.C:2161
 CombineSpectra.C:2162
 CombineSpectra.C:2163
 CombineSpectra.C:2164
 CombineSpectra.C:2165
 CombineSpectra.C:2166
 CombineSpectra.C:2167
 CombineSpectra.C:2168
 CombineSpectra.C:2169
 CombineSpectra.C:2170
 CombineSpectra.C:2171
 CombineSpectra.C:2172
 CombineSpectra.C:2173
 CombineSpectra.C:2174
 CombineSpectra.C:2175
 CombineSpectra.C:2176
 CombineSpectra.C:2177
 CombineSpectra.C:2178
 CombineSpectra.C:2179
 CombineSpectra.C:2180
 CombineSpectra.C:2181
 CombineSpectra.C:2182
 CombineSpectra.C:2183
 CombineSpectra.C:2184
 CombineSpectra.C:2185