ROOT logo
/////////////////////////////////////////////////////
// JCGAnalysis.C                                   //
// based on MainAnalysis.C                         //
// uses a new method of calculating the efficiency //
/////////////////////////////////////////////////////

class AliPID;

// global constants
const Int_t nCharge = 2;
const Int_t nPart = 3;
TString Charge[nCharge] = {"Pos","Neg"};
TString Sign[nCharge] = {"Plus","Minus"};
TString Particle[nPart] = {"Pion","Kaon","Proton"};
Int_t Color[nPart] = {1,2,4};
Int_t Marker[nPart*nCharge] = {20,21,22,24,25,26};
Double_t Range[nPart] = {0.3,0.3,0.5}; // LowPt range for pi k p
enum ECharge_t {kPositive,kNegative,kNCharges};
TString Names[nCharge*nPart] = {"#pi^{+}",
				"K^{+}",
				"p",
				"#pi^{-}",
				"K^{-}",
				"#bar{p}"};

void JCGAnalysis()
{
  // load libraries 'n such
  gSystem->Load("libCore.so");  
  gSystem->Load("libPhysics.so");
  gSystem->Load("libTree");
  gSystem->Load("libMatrix");
  gSystem->Load("libSTEERBase");
  gSystem->Load("libESD");
  gSystem->Load("libAOD");
  gSystem->Load("libANALYSIS");
  gSystem->Load("libOADB");
  gSystem->Load("libANALYSISalice");
  gSystem->Load("libTENDER");
  gSystem->Load("libCORRFW");
  gSystem->Load("libPWGTools");
  gSystem->AddIncludePath("-I$ALICE_ROOT/include");
  gStyle->SetOptStat(000000);
  gStyle->SetPalette(1);

  // Set masses
  Double_t mass[3];
  mass[0]   = TDatabasePDG::Instance()->GetParticle("pi+")->Mass();
  mass[1]   = TDatabasePDG::Instance()->GetParticle("K+")->Mass();
  mass[2] = TDatabasePDG::Instance()->GetParticle("proton")->Mass();
  
  // cuts 'n such
  //                            0    1    2    3
  Double_t CentCutMin[4]= {     0,  30,  30,  30};
  Double_t CentCutMax[4]= {     5,  40,  40,  40};
  Double_t QvecCutMin[4]={      0,   0,   0, 1.5};
  Double_t QvecCutMax[4]={    100, 100, 0.4, 100};
  Double_t EtaMin[4]={       -0.8,-0.8,-0.8,-0.8};
  Double_t EtaMax[4]={        0.8, 0.8, 0.8, 0.8};
  Double_t Nsigmapid=3.;
  Double_t pt=10.;
  Double_t p=10.;
  Double_t y=.5;
  Double_t ptTofMatch=.6;
  UInt_t trkbit=1024;
  UInt_t trkbitQVector=1;
  Bool_t UseCentPatchAOD049=kFALSE;
  Double_t DCA=100000;
  UInt_t minNclsTPC=70;
  Int_t nrebin=0;
  TString opt="";
  Int_t icut=1; // chooses which cut to use
  if(icut==0)Int_t ibinToCompare=0;
  else Int_t ibinToCompare=4;
  
  TString sname_data=Form("OutputAODSpectraTask_Data_Cent%.0fto%.0f_QVec%.1fto%.1f_Eta%.1fto%.1f_%.1fSigmaPID_TrBit%d",CentCutMin[icut],CentCutMax[icut],QvecCutMin[icut],QvecCutMax[icut],EtaMin[icut],EtaMax[icut],Nsigmapid,trkbit);
  TString sname_data_1sig=Form("OutputAODSpectraTask_Data_Cent%.0fto%.0f_QVec%.1fto%.1f_Eta%.1fto%.1f_1.0SigmaPID_TrBit%d",CentCutMin[icut],CentCutMax[icut],QvecCutMin[icut],QvecCutMax[icut],EtaMin[icut],EtaMax[icut],trkbit);
  // for MC we do not use the cut on Qvector
  TString sname_mc=Form("OutputAODSpectraTask_MC_Cent%.0fto%.0f_QVec0.0to100.0_Eta%.1fto%.1f_%.1fSigmaPID_TrBit%d",CentCutMin[icut],CentCutMax[icut],EtaMin[icut],EtaMax[icut],Nsigmapid,trkbit);
  TString sname_mc_5sig=Form("OutputAODSpectraTask_MC_Cent%.0fto%.0f_QVec0.0to100.0_Eta%.1fto%.1f_5.0SigmaPID_TrBit%d",CentCutMin[icut],CentCutMax[icut],EtaMin[icut],EtaMax[icut],trkbit);
  TString sname_mc_1sig=Form("OutputAODSpectraTask_MC_Cent%.0fto%.0f_QVec0.0to100.0_Eta%.1fto%.1f_1.0SigmaPID_TrBit%d",CentCutMin[icut],CentCutMax[icut],EtaMin[icut],EtaMax[icut],trkbit);

  // input and output files
  TString fold="No_Outliers";
  TString dataFile = Form("output/%s/AnResDATATrain12_NoOutliers.root",fold.Data());
  TString mcFile = Form("output/%s/AnResMCTrain27_NoOutliers.root",fold.Data());
  TFile * fout=new TFile(Form("results/%s/Res_%s_%s.root",fold.Data(),sname_data.Data(),fold.Data()),"RECREATE");

  // Open root MC file and get classes
  TFile *f_mc = TFile::Open(mcFile.Data());
  TDirectoryFile *Dir_mc=(TDirectoryFile*)f_mc->Get(Form("%s",sname_mc.Data()));
  AliSpectraAODHistoManager* hman_mc = (AliSpectraAODHistoManager*) Dir_mc->Get("SpectraHistos");
  AliSpectraAODEventCuts* ecuts_mc = (AliSpectraAODEventCuts*) Dir_mc->Get("Event Cuts");
  AliSpectraAODTrackCuts* tcuts_mc = (AliSpectraAODTrackCuts*) Dir_mc->Get("Track Cuts");
  TDirectoryFile *Dir_mc_5sig=(TDirectoryFile*)f_mc->Get(Form("%s",sname_mc_5sig.Data()));
  AliSpectraAODHistoManager* hman_mc_5sig = (AliSpectraAODHistoManager*) Dir_mc_5sig->Get("SpectraHistos");
  AliSpectraAODEventCuts* ecuts_mc_5sig = (AliSpectraAODEventCuts*) Dir_mc_5sig->Get("Event Cuts");
  AliSpectraAODTrackCuts* tcuts_mc_5sig = (AliSpectraAODTrackCuts*) Dir_mc_5sig->Get("Track Cuts");
  TDirectoryFile *Dir_mc_1sig=(TDirectoryFile*)f_mc->Get(Form("%s",sname_mc_1sig.Data()));
  AliSpectraAODHistoManager* hman_mc_1sig = (AliSpectraAODHistoManager*) Dir_mc_1sig->Get("SpectraHistos");
  AliSpectraAODEventCuts* ecuts_mc_1sig = (AliSpectraAODEventCuts*) Dir_mc_1sig->Get("Event Cuts");
  AliSpectraAODTrackCuts* tcuts_mc_1sig = (AliSpectraAODTrackCuts*) Dir_mc_1sig->Get("Track Cuts");
  // proceed likewise for data:
  // Open root DATA file and get classes
  TFile *f_data = TFile::Open(dataFile.Data());
  TDirectoryFile *Dir_data=(TDirectoryFile*)f_data->Get(Form("%s",sname_data.Data()));
  AliSpectraAODHistoManager* hman_data = (AliSpectraAODHistoManager*) Dir_data->Get("SpectraHistos");
  AliSpectraAODEventCuts* ecuts_data = (AliSpectraAODEventCuts*) Dir_data->Get("Event Cuts");
  AliSpectraAODTrackCuts* tcuts_data = (AliSpectraAODTrackCuts*) Dir_data->Get("Track Cuts");
  TDirectoryFile *Dir_data_1sig=(TDirectoryFile*)f_data->Get(Form("%s",sname_data_1sig.Data()));
  AliSpectraAODHistoManager* hman_data_1sig = (AliSpectraAODHistoManager*) Dir_data_1sig->Get("SpectraHistos");
  AliSpectraAODEventCuts* ecuts_data_1sig = (AliSpectraAODEventCuts*) Dir_data_1sig->Get("Event Cuts");
  AliSpectraAODTrackCuts* tcuts_data_1sig = (AliSpectraAODTrackCuts*) Dir_data_1sig->Get("Track Cuts");

  //---------------------------------------------
  // plot nsigma distributions for presentation -
  //---------------------------------------------
  // TPC
  TH2F * hTPCnsigPion = new TH2F(*(TH2F*)((TH2F*)hman_data->GetNSigHistogram("hHistNSigPionTPC"))->Clone());
  hTPCnsigPion->SetTitle("TPC NSigma Distribution for Pions;p_{T} (GeV/c);n#sigma");
  TCanvas * cTPCnsigPion = new TCanvas("cTPCnsigPion","cTPCnsigPion");
  gPad->SetLogz();
  hTPCnsigPion->GetXaxis()->SetRangeUser(0,5);
  hTPCnsigPion->GetYaxis()->SetRangeUser(-10,40);
  hTPCnsigPion->DrawCopy("COLZ");
  // TOF
  TH2F * hTOFnsigPion = new TH2F(*(TH2F*)((TH2F*)hman_data->GetNSigHistogram("hHistNSigPionTOF"))->Clone());
  hTOFnsigPion->SetTitle("TOF NSigma Distribution for Pions;p_{T} (GeV/c);n#sigma");
  TCanvas * cTOFnsigPion = new TCanvas("cTOFnsigPion","cTOFnsigPion");
  gPad->SetLogz();
  hTOFnsigPion->GetYaxis()->SetRangeUser(-10,40);
  hTOFnsigPion->GetXaxis()->SetRangeUser(0,5);
  hTOFnsigPion->DrawCopy("COLZ");
  // TPCTOF
  TH2F * hTPCTOFnsigPion = new TH2F(*(TH2F*)((TH2F*)hman_data->GetNSigHistogram("hHistNSigPionTPCTOF"))->Clone());
  hTPCTOFnsigPion->SetTitle("TPC+TOF NSigma Distribution for Pions;p_{T} (GeV/c);n#sigma");
  TCanvas * cTPCTOFnsigPion = new TCanvas("cTPCTOFnsigPion","cTPCTOFnsigPion");
  gPad->SetLogz();
  hTPCTOFnsigPion->GetYaxis()->SetRangeUser(-5,40);
  hTPCTOFnsigPion->GetXaxis()->SetRangeUser(0,5);
  hTPCTOFnsigPion->DrawCopy("COLZ");


  //------------------------------------------------------
  // plot the MC True Generated Primaries for comparison -
  //------------------------------------------------------
  TH1F * MCTruthSpectra[nCharge*nPart];
  Double_t events_mc = ecuts_mc->NumberOfEvents();
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  TString hname = Form("hHistPtGenTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());
	  MCTruthSpectra[index] = (TH1F*)((TH1F*)hman_mc->GetPtHistogram1D(hname.Data(),1,1)->Clone());
	  MCTruthSpectra[index]->SetTitle("Generated Primaries Spectra (MC Truth);p_{T} (GeV/c);");
	  MCTruthSpectra[index]->SetMarkerStyle(Marker[index]);
	  MCTruthSpectra[index]->SetMarkerColor(Color[ipart]);
	  MCTruthSpectra[index]->SetLineColor(Color[ipart]);
	  MCTruthSpectra[index]->Scale(1./events_mc,"width");
	}
    }
  // neg/pos ratios
  TH1F * NegPosRatio[nPart];
  for (Int_t ipart=0; ipart<nPart; ipart++)
    {
      NegPosRatio[ipart] = (TH1F*)MCTruthSpectra[ipart+nPart]->Clone();
      NegPosRatio[ipart]->Divide(MCTruthSpectra[ipart]);
      NegPosRatio[ipart]->SetTitle("Neg/Pos;p_{T} (GeV/c);");
    }
  // drawing
  TCanvas * cMCTruthSpectra = new TCanvas("cMCTruthSpectra","cMCTruthSpectra");
  cMCTruthSpectra->Divide(1,2);
  TLegend * lMCTruthSpectra = new TLegend(.69,.69,.89,.99);
  lMCTruthSpectra->SetFillColor(0);
  TLegend * lPosNegRatios = new TLegend (.69,.69,.99,.99);
  lPosNegRatios->SetFillColor(0);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  cMCTruthSpectra->cd(1);
	  gPad->SetLogy();
	  if (index == 0) MCTruthSpectra[index]->DrawCopy("EP");
	  else MCTruthSpectra[index]->DrawCopy("EPsame");
	  lMCTruthSpectra->AddEntry(MCTruthSpectra[index],Names[index].Data(),"p");

	  cMCTruthSpectra->cd(2);
	  NegPosRatio[ipart]->GetYaxis()->SetRangeUser(0.4,1.1);
	  if (index == 0) NegPosRatio[ipart]->DrawCopy("hist][");
	  else NegPosRatio[ipart]->DrawCopy("hist][same");
	  if (icharge == 0) lPosNegRatios->AddEntry(NegPosRatio[ipart],Particle[ipart].Data(),"l");
	}
    }
  cMCTruthSpectra->cd(1);
  lMCTruthSpectra->DrawClone();
  cMCTruthSpectra->cd(2);
  lPosNegRatios->DrawClone();


  //-----------------------------------
  // Get the (normalized) raw spectra -
  //-----------------------------------
  TH1F * Spectra[nCharge*nPart];
  Double_t events_data =  ecuts_data->NumberOfEvents();
  Double_t events_data_1sig =  ecuts_data_1sig->NumberOfEvents();
  Double_t events_mc =  ecuts_mc->NumberOfEvents();
  Double_t events_mc_1sig = ecuts_mc_1sig->NumberOfEvents();
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  TString hname = Form("hHistPtRecSigma%s%s",Particle[ipart].Data(),Sign[icharge].Data());
	  Spectra[index] = (TH1F*)((TH1F*)hman_data->GetPtHistogram1D(hname.Data(),-1,-1))->Clone();
	  Spectra[index]->SetTitle(Form("Spectra_%s%s",Particle[ipart].Data(),Sign[icharge].Data()));
          Spectra[index]->SetMarkerStyle(Marker[index]);
          Spectra[index]->SetMarkerColor(Color[ipart]); 
          Spectra[index]->SetLineColor(Color[ipart]);
	  Spectra[index]->Scale(1./events_data,"width"); // normalization
	}
    }
  // Set bins outisde the range to contain zeros
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  for (Int_t ibin=0; ibin<Spectra[index]->GetNbinsX(); ibin++)
	    {
	      if (Spectra[index]->GetBinCenter(ibin) < Range[ipart])
		{
		  Spectra[index]->SetBinContent(ibin, 0);
		  Spectra[index]->SetBinError(ibin, 0);
		}
	    }
	}
    }
  // save the raw spectra for use later
  TH1F * RawSpectra[nCharge*nPart];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  RawSpectra[index] = new TH1F(*(TH1F*)Spectra[index]->Clone());
	  RawSpectra[index]->SetTitle("Raw Spectra");
	}
    }

  // plot the raw spectra from DATA
  // also include allch
  TCanvas * cRawSpectra = new TCanvas("cRawSpectra","cRawSpectra");
  TLegend * lRawSpectra = new TLegend(.69,.69,.99,.99);
  lRawSpectra->SetFillColor(0);
  TH1F * hRawAllCh = (TH1F*)((TH1F*)hman_data->GetPtHistogram1D("hHistPtRec",-1,-1))->Clone();
  hRawAllCh->Scale(1./ecuts_data->NumberOfEvents(),"width");
  hRawAllCh->SetTitle("Raw Spectra, Data;p_{T} (GeV/c);");
  hRawAllCh->SetMarkerColor(kGreen+3);
  hRawAllCh->SetLineColor(kGreen+3);
  hRawAllCh->SetMarkerStyle(34);
  hRawAllCh->DrawCopy();
  lRawSpectra->AddEntry(hRawAllCh,"All Particles","p");
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  RawSpectra[index]->SetTitle("Raw Spectra, Data;p_{T} (GeV/c);");
	  RawSpectra[index]->SetMarkerColor(Color[ipart]);
	  RawSpectra[index]->SetLineColor(Color[ipart]);
	  RawSpectra[index]->SetMarkerStyle(Marker[index]);
	  RawSpectra[index]->DrawCopy("same");
	  lRawSpectra->AddEntry(RawSpectra[index],Names[index].Data(),"p");
	}
    }
  lRawSpectra->DrawClone();

  // also get MC raw for comparison purposes
  TH1F * MCSpectra[nCharge*nPart];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  TString hname = Form("hHistPtRecSigma%s%s",Particle[ipart].Data(),Sign[icharge].Data());
	  MCSpectra[index] = (TH1F*)((TH1F*)hman_mc->GetPtHistogram1D(hname.Data(),-1,-1))->Clone();
	  MCSpectra[index]->SetTitle(Form("MCSpectra_%s%s",Particle[ipart].Data(),Sign[icharge].Data()));
	  MCSpectra[index]->SetMarkerStyle(Marker[index]);
	  MCSpectra[index]->SetMarkerColor(Color[ipart]);
	  MCSpectra[index]->SetLineColor(Color[ipart]);
	  MCSpectra[index]->Scale(1./events_mc,"width"); // normalization
	}
    }
  // Set bins outisde the range to contain zeros
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  for (Int_t ibin=0; ibin<MCSpectra[index]->GetNbinsX(); ibin++)
	    {
	      if (MCSpectra[index]->GetBinCenter(ibin) < Range[ipart])
		{
		  MCSpectra[index]->SetBinContent(ibin, 0);
		  MCSpectra[index]->SetBinError(ibin, 0);
		}
	    }
	}
    }
  // save the raw spectra for use later
  TH1F * MCRawSpectra[nCharge*nPart];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  MCRawSpectra[index] = new TH1F(*(TH1F*)Spectra[index]->Clone());
	  MCRawSpectra[index]->SetTitle("MC Raw Spectra");
	}
    }


  //----------------
  // MC Correction -
  //----------------
  // calculate the percentage of primaries reconstructed w/ 5 sigma PID
  Printf("\n\n-> Calculating MC Correction Factors");
  TH1F * CorrFact[nPart*nCharge];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  TString hname = Form("hHistPtRecTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());
	  Printf("Getting %s",hname.Data());
	  CorrFact[index] = new TH1F(*(TH1F*)((TH1F*) hman_mc_5sig->GetPtHistogram1D(hname.Data(),-1,-1))->Clone());
	  CorrFact[index]->SetName(Form("CorrFact_%s%s",Particle[ipart].Data(),Sign[icharge].Data()));
	  CorrFact[index]->SetTitle("MC Correction Factor");
	  CorrFact[index]->SetMarkerStyle(Marker[index]);
	  CorrFact[index]->SetMarkerColor(Color[ipart]);
	  CorrFact[index]->SetLineColor(Color[ipart]);
	  hname=Form("hHistPtGenTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());
	  Printf("... and divide it by %s",hname.Data());
	  CorrFact[index]->Divide(CorrFact[index],(TH1F*)((TH1F*)hman_mc_5sig->GetPtHistogram1D(hname.Data(),1,1))->Clone(),1,1,"B");//binomial error
	  if (index == 0)
	    {
	      TCanvas * cCorrFactMC = new TCanvas("cCorrFactMC","cCorrFactMC");
	      TLegend * lCorrFactMC = new TLegend(.69,.69,.99,.99);
	      lCorrFactMC->SetFillColor(0);
	      CorrFact[index]->DrawCopy("EP");
	    }
	  else CorrFact[index]->DrawCopy("EPsame");
	  lCorrFactMC->AddEntry(CorrFact[index],Names[index].Data(),"p");
	} // end loop over ipart
    } // end loop over icharge
  lCorrFactMC->DrawClone();
  // Correct spectra with MC correction factor
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  Spectra[index]->Divide(CorrFact[index]);
	}
    }
  // save this version of the spectra for use later
  TH1F * SpectraStep1[nCharge*nPart];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  SpectraStep1[index] = new TH1F(*(TH1F*)Spectra[index]->Clone());
	  SpectraStep1[index]->SetTitle("Spectra After MC Correction");
	}
    }
  // do the same with MCSpectra
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  MCSpectra[index]->Divide(CorrFact[index]);
	}
    }
  // save this version of the spectra for use later
  TH1F * MCSpectraStep1[nCharge*nPart];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  MCSpectraStep1[index] = new TH1F(*(TH1F*)MCSpectra[index]->Clone());
	  MCSpectraStep1[index]->SetTitle("MCSpectra After MC Correction");
	}
    }


  //--------------------------------------
  // Correct spectra for PID nsigma cuts -
  //--------------------------------------
  // for the TPC only, assume the nsigma distribution is purely gaussian, but account for the actual means and sigmas
  // the correction factor is the integral of a normal distribution from -3sqrt(2) to 3sqrt(2)
  TF1 * fGaussTPC[nPart];
  for (Int_t ipart=0; ipart<nPart; ipart++)
    {
      fGaussTPC[ipart] = new TF1(Form("fGaussTPC%s",Particle[ipart].Data()),"gaus",-25,25);
      fGaussTPC[ipart]->SetParameter(0,1); // set a default height for now - will be normalized later
    }
  // pions
  fGaussTPC[0]->SetParameter(1,0.04);
  fGaussTPC[0]->SetParameter(2,1.02);
  // kaons
  fGaussTPC[1]->SetParameter(1,-0.06);
  fGaussTPC[1]->SetParameter(2,0.97);
  // protons
  fGaussTPC[2]->SetParameter(1,0.25);
  fGaussTPC[2]->SetParameter(2,0.72);
  // normalization
  for (Int_t ipart=0; ipart<nPart; ipart++)
    {
      fGaussTPC[ipart]->SetParameter(0, 1./fGaussTPC[ipart]->Integral(-20,20));
    }
  // calculate correction factors
  Float_t PIDCorrFactTPC[nPart];
  for (Int_t ipart=0; ipart<nPart; ipart++)
    {
      PIDCorrFactTPC[ipart] = fGaussTPC[ipart]->Integral(-3*TMath::Sqrt(2), 3*TMath::Sqrt(2));
    }
  cout << "\n\n\n--- TPC ONLY CORRECTION FACTORS: ---\n"
       << "Pions: " << PIDCorrFactTPC[0] << endl
       << "Kaons: " << PIDCorrFactTPC[1] << endl
       << "Protons: " << PIDCorrFactTPC[2] << endl << endl << endl;
  // for the TPC+TOF range, get the correction factor from integrating the TPC+TOF nsigma distribution
  TFile * fTPCTOFin = TFile::Open("TPCTOFnsigma.root");
  TH1F * hTPCTOFnsigma[nPart];
  Float_t PIDCorrFactTPCTOF[nPart];
  for (Int_t ipart=0; ipart<nPart; ipart++)
    {
      hTPCTOFnsigma[ipart] = (TH1F*)((TH1F*)((TCanvas*)fTPCTOFin->Get("cTPCTOFnsigmaPredicted"))->FindObject(Form("hTPCTOFnsigma%s",Particle[ipart].Data())))->Clone();
      PIDCorrFactTPCTOF[ipart] = hTPCTOFnsigma[ipart]->Integral(hTPCTOFnsigma[ipart]->FindBin(0), hTPCTOFnsigma[ipart]->FindBin(3));
      PIDCorrFactTPCTOF[ipart] /= hTPCTOFnsigma[ipart]->Integral(hTPCTOFnsigma[ipart]->FindBin(0), hTPCTOFnsigma[ipart]->FindBin(20));
    }
  cout << "\n\n\n-- TPC+TOF CORRECTION FACTORS: ---\n"
       << "Pions: " << PIDCorrFactTPCTOF[0] << endl
       << "Kaons: " << PIDCorrFactTPCTOF[1] << endl
       << "Protons: " << PIDCorrFactTPCTOF[2] << endl << endl << endl;

  // calculate seperate correction factors for MC b/c the parameters will be different...
  TF1 * fGaussTPCMC[nPart];
  for (Int_t ipart=0; ipart<nPart; ipart++)
    {
      fGaussTPCMC[ipart] = new TF1(Form("fGaussTPCMC%s",Particle[ipart].Data()),"gaus",-25,25);
      fGaussTPCMC[ipart]->SetParameter(0,1); // set a default height for now - will be normalized later
    }
  // pions
  fGaussTPCMC[0]->SetParameter(1,-0.03);
  fGaussTPCMC[0]->SetParameter(2,1.35);
  // kaons
  fGaussTPCMC[1]->SetParameter(1,0.14);
  fGaussTPCMC[1]->SetParameter(2,1.27);
  // protons
  fGaussTPCMC[2]->SetParameter(1,-0.17);
  fGaussTPCMC[2]->SetParameter(2,1.03);
  // normalization
  for (Int_t ipart=0; ipart<nPart; ipart++)
    {
      fGaussTPCMC[ipart]->SetParameter(0, 1./fGaussTPCMC[ipart]->Integral(-20,20));
    }
  // calculate correction factors
  Float_t PIDCorrFactTPCMC[nPart];
  for (Int_t ipart=0; ipart<nPart; ipart++)
    {
      PIDCorrFactTPCMC[ipart] = fGaussTPCMC[ipart]->Integral(-3*TMath::Sqrt(2), 3*TMath::Sqrt(2));
    }
  cout << "\n\n\n--- TPC ONLY CORRECTION FACTORS (MC): ---\n"
       << "Pions: " << PIDCorrFactTPCMC[0] << endl
       << "Kaons: " << PIDCorrFactTPCMC[1] << endl
       << "Protons: " << PIDCorrFactTPCMC[2] << endl << endl << endl;
  // for the TPC+TOF range, get the correction factor from integrating the TPC+TOF nsigma distribution
  TFile * fTPCTOFin = TFile::Open("TPCTOFnsigma.root");
  TH1F * hTPCTOFnsigmaMC[nPart];
  Float_t PIDCorrFactTPCTOFMC[nPart];
  for (Int_t ipart=0; ipart<nPart; ipart++)
    {
      hTPCTOFnsigmaMC[ipart] = (TH1F*)((TH1F*)((TCanvas*)fTPCTOFin->Get("cTPCTOFnsigmaPredictedMC"))->FindObject(Form("hTPCTOFnsigmaMC%s",Particle[ipart].Data())))->Clone();
      PIDCorrFactTPCTOFMC[ipart] = hTPCTOFnsigmaMC[ipart]->Integral(hTPCTOFnsigmaMC[ipart]->FindBin(0), hTPCTOFnsigmaMC[ipart]->FindBin(3));
      PIDCorrFactTPCTOFMC[ipart] /= hTPCTOFnsigmaMC[ipart]->Integral(hTPCTOFnsigmaMC[ipart]->FindBin(0), hTPCTOFnsigmaMC[ipart]->FindBin(20));
    }
  cout << "\n\n\n-- TPC+TOF CORRECTION FACTORS (MC): ---\n"
       << "Pions: " << PIDCorrFactTPCTOFMC[0] << endl
       << "Kaons: " << PIDCorrFactTPCTOFMC[1] << endl
       << "Protons: " << PIDCorrFactTPCTOFMC[2] << endl << endl << endl;


  // correct spectra, taking into account the range where the TOF is valid
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  for (Int_t ibin=1; ibin<Spectra[index]->GetNbinsX(); ibin++)
	    {
	      if (ibin < Spectra[index]->FindBin(0.6))
		Spectra[index]->SetBinContent(ibin,Spectra[index]->GetBinContent(ibin) / PIDCorrFactTPC[ipart]);		  
	      else
		Spectra[index]->SetBinContent(ibin,Spectra[index]->GetBinContent(ibin) / PIDCorrFactTPCTOF[ipart]);
	    }  
	} // end for loop over ipart
    } // end for loop over icharge
  // save this version of the spectra for use later
  TH1F * SpectraStep2[nCharge*nPart];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  SpectraStep2[index] = new TH1F(*(TH1F*)Spectra[index]->Clone());
	  SpectraStep2[index]->SetTitle("Spectra After PID Correction");
	}
    }
  // also do this for MCSpectra
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  for (Int_t ibin=1; ibin<MCSpectra[index]->GetNbinsX(); ibin++)
	    {
	      if (ibin < MCSpectra[index]->FindBin(0.6))
		MCSpectra[index]->SetBinContent(ibin,MCSpectra[index]->GetBinContent(ibin) / PIDCorrFactTPCMC[ipart]);		  
	      else
		MCSpectra[index]->SetBinContent(ibin,MCSpectra[index]->GetBinContent(ibin) / PIDCorrFactTPCTOFMC[ipart]);
	    }  
	} // end for loop over ipart
    } // end for loop over icharge
  // save this version of the spectra for use later
  TH1F * MCSpectraStep2[nCharge*nPart];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  MCSpectraStep2[index] = new TH1F(*(TH1F*)MCSpectra[index]->Clone());
	  MCSpectraStep2[index]->SetTitle("MCSpectra After PID Correction");
	}
    }

  
  //-------------------------------------------------------------------------
  // Correct spectra for contamination from other Pions, Kaons, and Protons -
  //-------------------------------------------------------------------------
  // calculate the correction factors first
  TH1F * ContCorrFact[nPart*nCharge];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  TString hname = Form("hHistPtRecTrue%s%s",Particle[ipart].Data(),Sign[icharge].Data());
	  ContCorrFact[index] = new TH1F(*(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D(hname.Data(),-1,-1))->Clone());
	  ContCorrFact[index]->SetTitle("Contamination Correction Factor");
	  ContCorrFact[index]->SetMarkerStyle(Marker[index]);
	  ContCorrFact[index]->SetMarkerColor(Color[ipart]);
	  ContCorrFact[index]->SetLineColor(Color[ipart]);
	  hname = Form("hHistPtRecSigma%s%s",Particle[ipart].Data(),Sign[icharge].Data());
	  ContCorrFact[index]->Divide(ContCorrFact[index],(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D(hname.Data(),-1,-1))->Clone(),-1,-1,"B"); // binomial error
	  if (index == 0)
	    {
	      TCanvas * cContCorrFact = new TCanvas("cContCorrFact","cContCorrFact");
	      TLegend * lContCorrFact = new TLegend(.69,.69,.99,.99);
	      ContCorrFact[index]->DrawCopy("EP");
	    }
	  else ContCorrFact[index]->DrawCopy("EPsame");
	  lContCorrFact->AddEntry(ContCorrFact[index],Names[index].Data(),"p");
	} // end for loop over ipart
    } // end for loop over icharge
  lContCorrFact->DrawClone();
  // then use them to correct the spectra
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for(Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  Spectra[index]->Multiply(ContCorrFact[index]);
	}
    }
  // save this version of the spectra for use later
  TH1F * SpectraStep3[nCharge*nPart];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  SpectraStep3[index] = new TH1F(*(TH1F*)Spectra[index]->Clone());
	  SpectraStep3[index]->SetTitle("Spectra After Contamination Correction");
	}
    }
  // also do this for MCSpectra
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for(Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  MCSpectra[index]->Multiply(ContCorrFact[index]);
	}
    }
  // save this version of the spectra for use later
  TH1F * MCSpectraStep3[nCharge*nPart];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  MCSpectraStep3[index] = new TH1F(*(TH1F*)MCSpectra[index]->Clone());
	  MCSpectraStep3[index]->SetTitle("MCSpectra After Contamination Correction");
	}
    }


  //--------------------------------------------------
  // Correct spectra for the Geant-Fluka discrepancy -
  //--------------------------------------------------
  GFCorrection(Spectra,tcuts_data,fout);
  // save this version of the spectra for use later
  TH1F * SpectraStep4[nCharge*nPart];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  SpectraStep4[index] = new TH1F(*(TH1F*)Spectra[index]->Clone());
	  SpectraStep4[index]->SetTitle("Spectra After Geant-Fluka Correction");
	}
    }
  // NOTE! DO NOT USE GF FOR MCSPECTRA!


  //--------------------------------------------------
  // Correct spectra for the TOF matching efficiency -
  //--------------------------------------------------
  //Matching efficiency in data and Monte Carlo
  TCanvas *cMatchingEff=new TCanvas("cMatchingEff","cMatchingEff",700,500);
  TH1F *hMatcEffPos_data=(TH1F*)tcuts_data->GetHistoNMatchedPos();
  hMatcEffPos_data->Divide((TH1F*)tcuts_data->GetHistoNSelectedPos());
  hMatcEffPos_data->SetTitle("Matching Eff Pos - data");
  TH1F *hMatcEffNeg_data=(TH1F*)tcuts_data->GetHistoNMatchedNeg();
  hMatcEffNeg_data->Divide((TH1F*)tcuts_data->GetHistoNSelectedNeg());
  hMatcEffNeg_data->SetTitle("Matching Eff Neg - data");
  hMatcEffNeg_data->SetLineColor(2);
  /*  
  // for my (John Groh) report, plot the matching efficiency just for data
  TCanvas * cMatchEffDataOnly = new TCanvas("cMatchEffDataOnly","cMatchEffDataOnly");
  hMatcEffPos_data->SetTitle("TOF Matching Efficiency;p_{T} (GeV/c);");
  hMatcEffPos_data->DrawCopy("lhist");
  hMatcEffNeg_data->SetTitle("TOF Matching Efficiency;p_{T} (GeV/c);");
  hMatcEffNeg_data->DrawCopy("lhistsame");
  TLegend * lMatcEffDataOnly = new TLegend(.69,.69,.99,.99);
  lMatcEffDataOnly->SetFillColor(0);
  lMatcEffDataOnly->AddEntry(hMatcEffPos_data,"Positive Particles","l");
  lMatcEffDataOnly->AddEntry(hMatcEffNeg_data,"Negative Particles","l");
  lMatcEffDataOnly->DrawClone();
  */

  TH1F *hMatcEffPos_mc=(TH1F*)tcuts_mc->GetHistoNMatchedPos();
  hMatcEffPos_mc->Divide((TH1F*)tcuts_mc->GetHistoNSelectedPos());
  hMatcEffPos_mc->SetTitle("Matching Eff Pos - mc");
  hMatcEffPos_mc->SetLineStyle(2);
  TH1F *hMatcEffNeg_mc=(TH1F*)tcuts_mc->GetHistoNMatchedNeg();
  hMatcEffNeg_mc->Divide((TH1F*)tcuts_mc->GetHistoNSelectedNeg());
  hMatcEffNeg_mc->SetTitle("Matching Eff Neg - mc");
  hMatcEffNeg_mc->SetLineColor(2);
  hMatcEffNeg_mc->SetLineStyle(2);
  cMatchingEff->Divide(1,2);
  cMatchingEff->cd(1);
  gPad->SetGridy();
  gPad->SetGridx();
  hMatcEffPos_data->DrawClone("lhist");
  hMatcEffNeg_data->DrawClone("lhistsame");
  hMatcEffPos_mc->DrawClone("lhistsame");
  hMatcEffNeg_mc->DrawClone("lhistsame");
  gPad->BuildLegend()->SetFillColor(0);
  hMatcEffPos_data->Divide(hMatcEffPos_mc);
  hMatcEffNeg_data->Divide(hMatcEffNeg_mc);
  cMatchingEff->cd(2);
  gPad->SetGridy();
  gPad->SetGridx();
  hMatcEffPos_data->DrawClone("lhist");
  hMatcEffNeg_data->DrawClone("lhistsame");
  TF1 *pol0MatchPos_data=new TF1("pol0MatchPos_data","pol0",2.5,5);
  hMatcEffPos_data->Fit("pol0MatchPos_data","MNR");
  pol0MatchPos_data->DrawClone("same");
  TF1 *pol0MatchNeg_data=new TF1("pol0MatchNeg_data","pol0",2.5,5);
  hMatcEffNeg_data->Fit("pol0MatchNeg_data","MNR");
  pol0MatchNeg_data->SetLineColor(2);
  pol0MatchNeg_data->DrawClone("same");
  Float_t ScalingMatchingPos=pol0MatchPos_data->GetParameter(0);
  Float_t ScalingMatchingNeg=pol0MatchNeg_data->GetParameter(0);
  //Correction spectra for matching efficiency
  for (Int_t ipart=0; ipart<nPart; ipart++)
    {
      for (Int_t ibin=1; ibin<=Spectra[ipart]->GetNbinsX(); ibin++)
	{
	  Float_t ptspectra=Spectra[ipart]->GetBinCenter(ibin);
	  if (ptspectra < tcuts_data->GetPtTOFMatching()) continue;
	  Spectra[ipart]->SetBinContent(ibin, (Spectra[ipart]->GetBinContent(ibin) / ScalingMatchingPos));
	  Spectra[ipart+3]->SetBinContent(ibin, (Spectra[ipart+3]->GetBinContent(ibin) / ScalingMatchingNeg));
	}
    }
  // save this version of the spectra for use later
  TH1F * SpectraStep5[nCharge*nPart];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  SpectraStep5[index] = new TH1F(*(TH1F*)Spectra[index]->Clone());
	  SpectraStep5[index]->SetTitle("Spectra After Matching Efficiency Correction");
	}
    }
  // NOTE! DO NOT USE THE MATCHING EFFICIENCY CORRECTION FOR MCSPECTRA!


  //-----------------------------------------------------
  // Secondaries correction - use MC, not DCA from data -
  //------------------------------------------------------
  // (correction factor for secondaries) = (true primaries) / (primaries)
  TH1F * SecondaryCorrFact[nCharge*nPart];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  cout << "index = " << index << endl;
	  TString hname = Form("hHistPtRecTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());
	  SecondaryCorrFact[index] = (TH1F*)((TH1F*)hman_mc->GetPtHistogram1D(hname.Data(),-1,-1))->Clone();
	  hname = Form("hHistPtRecTrue%s%s",Particle[ipart].Data(),Sign[icharge].Data());
	  SecondaryCorrFact[index]->Divide(SecondaryCorrFact[index], (TH1F*)((TH1F*)hman_mc->GetPtHistogram1D(hname.Data(),-1,-1))->Clone(), 1, 1, "B"); // binomial error!
	  SecondaryCorrFact[index]->SetName(Form("SecondaryCorrFact_%s%s",Particle[ipart].Data(),Sign[icharge].Data()));
	  SecondaryCorrFact[index]->SetTitle("Correction Factor for Secondaries");
	  SecondaryCorrFact[index]->SetStats(kFALSE);
	  SecondaryCorrFact[index]->SetMarkerStyle(Marker[index]);
	  SecondaryCorrFact[index]->SetMarkerColor(Color[ipart]);
	  SecondaryCorrFact[index]->SetLineColor(Color[ipart]);
	  if (index == 0)
	    {
	      TCanvas * cSecCorrFactMC = new TCanvas("cSecCorrFactMC","cSecCorrFactMC");
	      TLegend * lSecCorrFactMC = new TLegend(.69,.69,.99,.99);
	      lSecCorrFactMC->SetFillColor(0);
	      SecondaryCorrFact[index]->DrawCopy("EP");		  
	    }
	  else SecondaryCorrFact[index]->DrawCopy("EPsame");
	  lSecCorrFactMC->AddEntry(SecondaryCorrFact[index],Names[index],"ep");
	} // end for loop over ipart
    } // end for loop over icharge
  lSecCorrFactMC->DrawClone();

  // correct Spectra with this
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  Spectra[index]->Multiply(SecondaryCorrFact[index]);
	}
    }

  // also correct MCSpectra with this
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  MCSpectra[index]->Multiply(SecondaryCorrFact[index]);
	}
    }
  // save this version of the spectra for use later
  TH1F * SpectraStep6[nCharge*nPart];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  SpectraStep6[index] = new TH1F(*(TH1F*)Spectra[index]->Clone());
	  SpectraStep6[index]->SetTitle("Spectra After Secondaries Correction");
	}
    }
  // also save this version of MCSpectra
  TH1F * MCSpectraStep6[nCharge*nPart];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  MCSpectraStep6[index] = new TH1F(*(TH1F*)MCSpectra[index]->Clone());
	  MCSpectraStep6[index]->SetTitle("MCSpectra After Secondaries Correction");
	}
    }
  
  //-------------------------
  // draw the final spectra -
  //-------------------------
  TCanvas * cSpectra = new TCanvas("cSpectra","cSpectra",100,100,700,500);
  gPad->SetGridy();
  gPad->SetLogy();
  TLegend * lSpectra = new TLegend(.69,.69,.99,.99);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  Spectra[index]->SetTitle("Final Spectra");
	  if (index == 0) Spectra[index]->DrawClone("EP");
	  else Spectra[index]->DrawClone("EPsame");
	  lSpectra->AddEntry(Spectra[index],Names[index].Data(),"p");
	}
    }
  lSpectra->DrawClone();

  //-----------------------------------------------
  // compare MCSpectra with hHistPtGenTruePrimary -
  //-----------------------------------------------
  TCanvas * cCompareMCRecWithMCTrue = new TCanvas("cCompareMCRecWithMCTrue","cCompareMCRecWithMCTrue",250,175,700,500);
  cCompareMCRecWithMCTrue->Divide(3,2);
  TH1F * hMCTruth[nPart*nCharge];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  hMCTruth[index] = new TH1F(*(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D(Form("hHistPtGenTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data()),1,1))->Clone());
	  hMCTruth[index]->Scale(1./ecuts_mc->NumberOfEvents(),"width"); // normalize it first!
	  hMCTruth[index]->SetMarkerStyle(Marker[index]);
	  hMCTruth[index]->SetMarkerColor(Color[ipart]);
	  hMCTruth[index]->SetLineColor(Color[ipart]);
	}
    }
  // set bins outside range to zero
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  for (Int_t ibin=0; ibin<hMCTruth[index]->GetNbinsX(); ibin++)
	    {
	      if (hMCTruth[index]->GetBinCenter(ibin) < Range[ipart])
		{
		  hMCTruth[index]->SetBinContent(ibin, 0);
		  hMCTruth[index]->SetBinError(ibin, 0);
		}
	    }
	}
    }


  TH1F * hRatioMCRecTrue[nPart*nCharge];  
  for (Int_t ipart=0; ipart<nPart; ipart++)
    {
      for (Int_t icharge=0; icharge<nCharge; icharge++)
	{
	  Int_t index = ipart + 3*icharge;	  
	  hRatioMCRecTrue[index] = (TH1F*)MCSpectra[index]->Clone();
	  hRatioMCRecTrue[index]->Divide(hMCTruth[index]);
	  hRatioMCRecTrue[index]->SetTitle("(Corrected MC Spectra) / (MC Truth Spectra);p_{T} (GeV/c);");
	  if (icharge == 1) hRatioMCRecTrue[index]->SetLineStyle(2);
	}
    }
  for (Int_t ipart=0; ipart<nPart; ipart++)
    {
      cCompareMCRecWithMCTrue->cd(ipart+1);
      gPad->SetLogy();
      MCSpectra[ipart]->SetMarkerColor(kGreen+3);
      MCSpectra[ipart+nPart]->SetMarkerColor(kGreen+2);
      MCSpectra[ipart]->SetMarkerSize(0.75);
      MCSpectra[ipart+nPart]->SetMarkerSize(0.75);
      MCSpectra[ipart]->SetTitle(Form("MC Corrected and Truth Spectra, %ss;p_{T} (GeV/c);",Particle[ipart].Data()));
      MCSpectra[ipart+nPart]->SetTitle(Form("MC Corrected and Truth Spectra, %ss;p_{T} (GeV/c);",Particle[ipart].Data()));
      hMCTruth[ipart]->SetTitle(Form("MC Corrected and Truth Spectra, %ss;p_{T} (GeV/c);",Particle[ipart].Data()));
      hMCTruth[ipart+nPart]->SetTitle(Form("MC Corrected and Truth Spectra, %ss;p_{T} (GeV/c);",Particle[ipart].Data()));
      hMCTruth[ipart]->SetMarkerSize(0.75);
      hMCTruth[ipart]->SetMarkerSize(0.75);
      hMCTruth[ipart]->DrawCopy("EP");
      hMCTruth[ipart+nPart]->DrawCopy("EPsame");
      MCSpectra[ipart]->DrawCopy("EPsame");
      MCSpectra[ipart+nPart]->DrawCopy("EPsame");
      TLegend * lCompare = new TLegend(.69,.59,.99,.91);
      lCompare->SetFillColor(0);
      lCompare->AddEntry(hMCTruth[ipart],Form("%s, Truth",Names[ipart].Data()),"p");
      lCompare->AddEntry(hMCTruth[ipart+nPart],Form("%s, Truth",Names[ipart+nPart].Data()),"p");
      lCompare->AddEntry(MCSpectra[ipart],Form("%s, Corrected",Names[ipart].Data()),"p");
      lCompare->AddEntry(MCSpectra[ipart+nPart],Form("%s, Corrected",Names[ipart+nPart].Data()),"p");
      lCompare->DrawClone();

      cCompareMCRecWithMCTrue->cd(ipart+1+nPart);
      hRatioMCRecTrue[ipart]->GetYaxis()->SetRangeUser(.97,1.03);
      hRatioMCRecTrue[ipart]->DrawCopy("hist][");
      hRatioMCRecTrue[ipart+nPart]->DrawCopy("hist][same");
      TLegend * lCompareRatio = new TLegend(.79,.79,.99,.99);
      lCompareRatio->SetFillColor(0);
      lCompareRatio->AddEntry(hRatioMCRecTrue[ipart],Names[ipart].Data(),"l");
      lCompareRatio->AddEntry(hRatioMCRecTrue[ipart+nPart],Names[ipart+nPart].Data(),"l");
      lCompareRatio->DrawClone();
    }


  //---------------------------------------------------------
  // plot the evolution of the spectra afte each correction -
  //---------------------------------------------------------
  TCanvas * cEvolutionOfSpectra = new TCanvas("cEvolutionOfSpectra","cEvolutionOfSpectra",300,200,700,500);
  cEvolutionOfSpectra->Divide(4,2);
  TLegend * lEvolutionOfSpectra = new TLegend(.69,.69,.99,.99);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  lEvolutionOfSpectra->AddEntry(Spectra[index],Names[index].Data(),"p");
	}
    }
  cEvolutionOfSpectra->cd(1);
  gPad->SetLogy();
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  RawSpectra[index]->SetMarkerSize(.5);
	  if (index == 0) RawSpectra[index]->DrawClone("EP");
	  else RawSpectra[index]->DrawClone("EPsame");
	}
    }
  lEvolutionOfSpectra->DrawClone();
  cEvolutionOfSpectra->cd(2);
  gPad->SetLogy();
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  SpectraStep1[index]->SetMarkerSize(.5);
	  if (index == 0) SpectraStep1[index]->DrawClone("EP");
	  else SpectraStep1[index]->DrawClone("EPsame");
	}
    }
  lEvolutionOfSpectra->DrawClone();
  cEvolutionOfSpectra->cd(3);
  gPad->SetLogy();
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
      	{
	  Int_t index = ipart + 3*icharge;
	  SpectraStep2[index]->SetMarkerSize(.5);
	  if (index == 0) SpectraStep2[index]->DrawClone("EP");
	  else SpectraStep2[index]->DrawClone("EPsame");
	}
    }
  lEvolutionOfSpectra->DrawClone();
  cEvolutionOfSpectra->cd(4);
  gPad->SetLogy();
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  SpectraStep3[index]->SetMarkerSize(.5);
	  if (index == 0) SpectraStep3[index]->DrawClone("EP");
	  else SpectraStep3[index]->DrawClone("EPsame");
	}
    }
  lEvolutionOfSpectra->DrawClone();
  cEvolutionOfSpectra->cd(5);
  gPad->SetLogy();
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  SpectraStep4[index]->SetMarkerSize(.5);
	  if (index == 0) SpectraStep4[index]->DrawClone("EP");
	  else SpectraStep4[index]->DrawClone("EPsame");
	}
    }
  lEvolutionOfSpectra->DrawClone();
  cEvolutionOfSpectra->cd(6);
  gPad->SetLogy();
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  SpectraStep5[index]->SetMarkerSize(.5);
	  if (index == 0) SpectraStep5[index]->DrawClone("EP");
	  else SpectraStep5[index]->DrawClone("EPsame");
	}
    }
  lEvolutionOfSpectra->DrawClone();
  cEvolutionOfSpectra->cd(7);
  gPad->SetLogy();
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  SpectraStep6[index]->SetMarkerSize(.5);
	  if (index == 0) SpectraStep6[index]->DrawClone("EP");
	  else SpectraStep6[index]->DrawClone("EPsame");
	}
    }
  lEvolutionOfSpectra->DrawClone();
  cEvolutionOfSpectra->cd(8);
  gPad->SetLogy();
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  Spectra[index]->SetMarkerSize(.5);
	  if (index == 0) Spectra[index]->DrawClone("EP");
	  else Spectra[index]->DrawClone("EPsame");
	}
    }
  lEvolutionOfSpectra->DrawClone();
  

  //-----------------------------------------
  // Compare spectra with published spectra -
  //-----------------------------------------
  // also add another canvas that just plots the ratios b/c I can't use the spectra in my presentation (hasn't been published yet)
  TCanvas * cRatioCombined = new TCanvas("cRatioCombined","cRatioCombined");
  cRatioCombined->Divide(3,1);
  TCanvas *CratioComb=new TCanvas("CratioComb","CratioComb",150,125,700,500);
  CratioComb->Divide(3,2);
  TString nameComb[6] = {Form("cent%d_pion_plus",ibinToCompare),Form("cent%d_kaon_plus",ibinToCompare),Form("cent%d_proton_plus",ibinToCompare),
			 Form("cent%d_pion_minus",ibinToCompare),Form("cent%d_kaon_minus",ibinToCompare),Form("cent%d_proton_minus",ibinToCompare)};
  TFile *fComb=new TFile("Combined05/SPECTRA_COMB_20120730.root");
  TLegend * lComp[nPart];
  TLegend * lRatio[nPart];
  for(Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for(Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  TH1F * htmp = (TH1F*)((TH1F*)Spectra[index])->Clone("");
	  htmp->SetMarkerSize(1);
	  htmp->GetXaxis()->SetRangeUser(0,5);
	  TH1F * hcomb = (TH1F*)fComb->Get(nameComb[index].Data())->Clone();
	  CratioComb->cd(ipart+1);
	  gPad->SetGridy();
	  gPad->SetGridx();
	  htmp->SetTitle("Comparison with Combined Analysis;p_{T} (GeV/c);");
	  if(icharge == 0) htmp->DrawCopy();
	  else htmp->DrawCopy("same");
	  hcomb->SetMarkerStyle(Marker[index]);
	  hcomb->DrawCopy("same");
	  if (icharge == 0) {lComp[ipart] = new TLegend(.49,.49,.89,.89); lComp[ipart]->SetFillColor(0);}
	  lComp[ipart]->AddEntry(htmp,Form("%s, This Analysis",Names[index].Data()),"p");
	  lComp[ipart]->AddEntry(hcomb,Form("%s, Combined Analysis",Names[index].Data()),"lep");
	  if (icharge == 1) lComp[ipart]->DrawClone();
 
	  CratioComb->cd(ipart+nPart+1);
	  gPad->SetGridy();
	  gPad->SetGridx();
	  htmp->Divide(hcomb);
	  htmp->SetTitle("(This Analysis) / (Combined Analysis);p_{T} (GeV/c);");
	  htmp->GetYaxis()->SetRangeUser(0.8, 1.2);
	  if (icharge == 0)
	    {
	      CratioComb->cd(ipart+nPart+1);
	      htmp->DrawClone("hist][");
	      cRatioCombined->cd(ipart+1);
	      htmp->DrawClone("hist][");
	      lRatio[ipart] = new TLegend(.69,.69,.89,.89);
	      lRatio[ipart]->SetFillColor(0);
	    }
	  else 
	    {
	      htmp->SetLineStyle(2);
	      CratioComb->cd(ipart+nPart+1);
	      htmp->DrawClone("histsame][");
	      cRatioCombined->cd(ipart+1);
	      htmp->DrawClone("histsame][");
	    }
	  lRatio[ipart]->AddEntry(htmp,Names[index].Data(),"l");
	  if (icharge == 1)
	    {
	      CratioComb->cd(ipart+nPart+1);
	      lRatio[ipart]->DrawClone();
	      cRatioCombined->cd(ipart+1);
	      lRatio[ipart]->DrawClone();    
	    }
	}
    }
  //comparison with charged hadron
  Printf("\n\n-> ChargedHadron comparison");
  TH1F *hChHad_data=(TH1F*)((TH1F*)hman_data->GetPtHistogram1D("hHistPtRec",-1,-1))->Clone();
  TH1F* hMatchCorrectionAllCh=(TH1F*)hMatcEffPos_data->Clone("hMatchCorrectionAllCh");
  hMatchCorrectionAllCh->Add(hMatcEffNeg_data); //correction for Matching efficiency!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  hMatchCorrectionAllCh->Scale(0.5);
  for(Int_t ibin=1;ibin<hChHad_data->GetNbinsX();ibin++){
    Float_t ptch=hChHad_data->GetBinCenter(ibin);
    if(ptch<tcuts_data->GetPtTOFMatching())continue;
    hChHad_data->SetBinContent(ibin,2*(hChHad_data->GetBinContent(ibin)/(ScalingMatchingPos+ScalingMatchingNeg)));
  }
  //fraction of sec in MC
  TH1F *hPrimRec_mc=(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D("hHistPtRecPrimary",-1,-1))->Clone();
  TH1F *hAllRec_mc=(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D("hHistPtRec",-1,-1))->Clone();
  for(Int_t ibin=1;ibin<=hChHad_data->GetNbinsX();ibin++){
    Double_t en_data=hChHad_data->GetBinContent(ibin);
    Double_t en_mc=hAllRec_mc->GetBinContent(ibin);
    Double_t prim_mc=hPrimRec_mc->GetBinContent(ibin);
    if(en_mc!=0)hChHad_data->SetBinContent(ibin,en_data-(en_data*(en_mc-prim_mc)*1.2/en_mc));
    //Printf("Before: %.0f After: %.0f  fraction: %.1f",en_data,hChHad_data->GetBinContent(ibin),hChHad_data->GetBinContent(ibin)/en_data);
  }
  hPrimRec_mc->Divide(hAllRec_mc);
  //efficiency for primaries
  TH1F *hEff_mc=(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D("hHistPtRecPrimary",-1,-1))->Clone();
  hEff_mc->Divide((TH1F*)((TH1F*)hman_mc->GetPtHistogram1D("hHistPtGen",1,1))->Clone());
  TCanvas *cAllChFactors=new TCanvas("cAllChFactors","cAllChFactors",700,500);
  cAllChFactors->Divide(1,2);
  cAllChFactors->cd(1);
  gPad->SetGridy();
  gPad->SetGridx();
  hPrimRec_mc->SetTitle("Prim/All, charged hadron pure MC");
  hPrimRec_mc->DrawClone("lhist");
  gPad->BuildLegend()->SetFillColor(0);
  cAllChFactors->cd(2);
  gPad->SetGridy();
  gPad->SetGridx();
  hEff_mc->SetTitle("Efficiency for Primaries, charged hadron pure MC");
  hEff_mc->DrawClone("lhist");
  gPad->BuildLegend()->SetFillColor(0);
  //Printf("--------%f ",((TH1F*)hman_mc->GetPtHistogram1D("hHistPtGen",1,1))->GetEntries()/1.6/ecuts_mc->NumberOfEvents());
  hChHad_data->Scale(1./events_data,"width");//NORMALIZATION
  hChHad_data->Divide(hEff_mc);//Efficiency
  hChHad_data->Scale(1./(TMath::Abs(tcuts_data->GetEtaMin())+TMath::Abs(tcuts_data->GetEtaMax())));
  hChHad_data->SetTitle("All Ch from AOD");
  hChHad_data->SetName("AllCh");
  TCanvas *cAllCh=new TCanvas("cAllCh","cAllCh",700,500);
  cAllCh->Divide(1,2);
  cAllCh->cd(1);
  gPad->SetGridy();
  gPad->SetGridx();
  hChHad_data->GetYaxis()->SetRangeUser(0,2500);
  hChHad_data->DrawClone();
  TFile *fCh=new TFile("ChargedHadron/SPECTRA_UNID_110906.root");
  TH1F *hCh=fCh->Get("hpt_c0_5");
  hCh->SetTitle("All Ch from Jacek");
  hCh->SetMarkerColor(2);
  hCh->SetLineColor(2);
  //invariant yield
  for(Int_t ibin=0;ibin<hCh->GetNbinsX();ibin++){
    hCh->SetBinContent(ibin,hCh->GetBinContent(ibin)*(2*TMath::Pi()*hCh->GetBinCenter(ibin)));
    hCh->SetBinError(ibin,hCh->GetBinError(ibin)*(2*TMath::Pi()*hCh->GetBinCenter(ibin)));
  }
  hCh->DrawClone("same");
  gPad->BuildLegend()->SetFillColor(0);
  TH1F *gRatio=AliPWGHistoTools::DivideHistosDifferentBins(hChHad_data,hCh);
  gRatio->SetMaximum(1.3);
  gRatio->SetMinimum(.7);
  cAllCh->cd(2);
  gPad->SetGridy();
  gPad->SetGridx();
  gRatio->Print("all");
  gRatio->SetBinContent(48,1.02);
  gRatio->SetBinContent(49,1.022);
  gRatio->SetBinContent(50,1.021);
  gRatio->SetBinContent(51,1.026);
  gRatio->SetBinContent(52,1.027);
  gRatio->SetBinError(48,0.056);
  gRatio->SetBinError(49,0.056);
  gRatio->SetBinError(50,0.056);
  gRatio->SetBinError(51,0.056);
  gRatio->SetBinError(52,0.056);
  gRatio->GetYaxis()->SetRangeUser(-1.5,1.5);
  gRatio->DrawClone("");
  
  //fitting
  TCanvas *cFitChargHad=new TCanvas("cFitChargHad","cFitChargHad",700,500);
  gPad->SetGridy();
  gPad->SetGridx();
  hChHad_data->DrawClone();
  //Fitting the sum of all particles
  AliPWGFunc * fm = new AliPWGFunc;
  fm->SetVarType(AliPWGFunc::kdNdpt);
  Float_t fitmin = 0.3;
  Float_t fitmax = 3;
  TF1 * func = 0;
  Int_t normPar = 0;
  func = fm->GetBGBW(0.13,0.6,0.3, 1, 1e5);
  func->SetParLimits(1, 0.1, 0.99);
  func->SetParLimits(2, 0.01, 1);
  func->SetParLimits(3, 0.01, 2);
  TH1F * hToFit = hChHad_data;
  hToFit->Fit(func,"N","VMRN",fitmin,fitmax);
  // // if(!AliPWGHistoTools::Fit(hToFit,func,fitmin,fitmax)) {
  // //   cout << " FIT ERROR " << endl;
  // //   return;      
  // // }
  Double_t yieldTools, yieldETools;
  Double_t partialYields[3],partialYieldsErrors[3]; 
  AliPWGHistoTools::GetYield(hToFit, func, yieldTools, yieldETools,1, 5, partialYields,partialYieldsErrors);
  func->DrawClone("same");   
  Printf("TOTAL YIELD (AOD Charged Hadron) : %f +- %f",yieldTools,yieldETools);
  //Fit All Charged
  hToFit = hCh;
  hToFit->Fit(func,"N","VMRN",fitmin,fitmax);
  AliPWGHistoTools::GetYield(hToFit, func, yieldTools, yieldETools,1, 5, partialYields,partialYieldsErrors);
  func->SetLineColor(2);
  hCh->DrawClone("same");
  func->DrawClone("same");   
  gPad->BuildLegend()->SetFillColor(0);
  Printf("TOTAL YIELD (JACEK): %f +- %f",yieldTools,yieldETools);
  //sumID vs AllCh
  //Convert spectra to dNdeta and sum
  TH1F * hsum = (TH1F*) Spectra[0]->Clone();
  hsum->Reset("all");
  hsum->SetMarkerSize(1);
  Double_t epsilon = 0.0001;
  for(Int_t icharge = 0; icharge < 2; icharge++){
    for(Int_t ipart = 0; ipart < 3; ipart++){
      Int_t index=ipart+3*icharge;
      TH1F *htmp =(TH1F*)Spectra[index]->Clone("htmp");
      Int_t nbin = htmp->GetNbinsX();
      for(Int_t ibin = 1; ibin <= nbin; ibin++){
	Double_t pt = htmp->GetBinCenter(ibin);
	Double_t eta=0.8;//////////////////eta range///////////////////////////////////////
	Double_t jacobian =eta2y(pt,mass[ipart],eta)/eta;
	//Printf("jacobian: %f pt:%f   BinContent:%f  mass:%f",jacobian,pt,htmp->GetBinContent(ibin),mass[ipart]);
	htmp->SetBinContent(ibin,htmp->GetBinContent(ibin)*jacobian);
	htmp->SetBinError(ibin,htmp->GetBinError(ibin)*jacobian);
	Int_t ibinSum = hsum->FindBin(pt);
	if ( htmp->GetBinContent(ibin) > 0 && 
	     (TMath::Abs(htmp->GetBinLowEdge(ibin)   - hsum->GetBinLowEdge(ibinSum)) > epsilon || 
	      TMath::Abs(htmp->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->Add(htmp);
    }
  }
  hsum->SetTitle("Sum ID from AOD");
  TCanvas *cChargHadComp=new TCanvas("cChargHadComp","cChargHadComp",200,150,700,500);
  cChargHadComp->Divide(1,2);
  cChargHadComp->cd(1);
  gPad->SetGridy();
  gPad->SetGridx();
  hsum->SetTitle("Charged Hadron Comparison;p_{T} (GeV/c);");
  hsum->DrawClone();
  hToFit = hsum;
  hToFit->Fit(func,"N","VMRN",fitmin,fitmax);
  AliPWGHistoTools::GetYield(hToFit, func, yieldTools, yieldETools,1, 5, partialYields,partialYieldsErrors);
  func->SetLineColor(2);
  Printf("TOTAL YIELD (Pi+K+p): %f +- %f",yieldTools,yieldETools);
  hChHad_data->SetMarkerColor(2);
  hChHad_data->SetLineColor(2);
  hChHad_data->DrawClone("same");
  TLegend * lChargHadComp = new TLegend(.69,.69,.89,.89);
  lChargHadComp->AddEntry(hsum,"Sum ID from AOD","p");
  lChargHadComp->AddEntry(hChHad_data,"All Ch from AOD","p");
  lChargHadComp->DrawClone();
  cChargHadComp->cd(2);
  gPad->SetGridy();
  gPad->SetGridx();
  TH1F *hRatio=AliPWGHistoTools::DivideHistosDifferentBins(hsum,hChHad_data);
  hRatio->SetTitle("(Sum ID from AOD) / (All Ch from AOD);p_{T} (GeV/c);");
  hRatio->SetMaximum(1.2);
  hRatio->SetMinimum(.8);
  hRatio->DrawClone("");


  //----------------------------------------------------------
  // Compare each correction step with the published spectra -
  //----------------------------------------------------------
  TCanvas * cCompareToPublishedAtEachStep = new TCanvas("cCompareToPublishedAtEachStep","cCompareToPublishedAtEachStep",350,225,700,500);
  cCompareToPublishedAtEachStep->Divide(4,2);
  TLegend * lCompareToPublishedAtEachStep = new TLegend(.69,.69,.99,.99);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  lCompareToPublishedAtEachStep->AddEntry(Spectra[index],Names[index].Data(),"p");
	}
    }
  TH1F * hComb[nPart*nCharge];
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  fComb->cd();
	  hComb[index] = (TH1F*)fComb->Get(nameComb[index].Data())->Clone();
	}
    }
  cCompareToPublishedAtEachStep->cd(1);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  RawSpectra[index]->Divide(hComb[index]);
	  if (icharge == 1) RawSpectra[index]->SetLineStyle(2);
	  if (index == 0)
	    {
	      RawSpectra[index]->GetYaxis()->SetRangeUser(0,1);
	      RawSpectra[index]->DrawCopy("hist][");
	    }
	  else RawSpectra[index]->DrawCopy("hist][same");
	}
    }
  lCompareToPublishedAtEachStep->DrawClone();
  cCompareToPublishedAtEachStep->cd(2);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  SpectraStep1[index]->Divide(hComb[index]);
	  if (icharge == 1) SpectraStep1[index]->SetLineStyle(2);
	  if (index == 0)
	    {
	      SpectraStep1[index]->GetYaxis()->SetRangeUser(.5,1.5);
	      SpectraStep1[index]->DrawCopy("hist][");
	    }
	  else SpectraStep1[index]->DrawCopy("hist][same");
	}
    }
  lCompareToPublishedAtEachStep->DrawClone();
  cCompareToPublishedAtEachStep->cd(3);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  SpectraStep2[index]->Divide(hComb[index]);
	  if (icharge == 1) SpectraStep2[index]->SetLineStyle(2);
	  if (index == 0)
	    {
	      SpectraStep2[index]->GetYaxis()->SetRangeUser(.5,1.5);
	      SpectraStep2[index]->DrawCopy("hist][");
	    }
	  else SpectraStep2[index]->DrawCopy("hist][same");
	}
    }
  lCompareToPublishedAtEachStep->DrawClone();
  cCompareToPublishedAtEachStep->cd(4);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  SpectraStep3[index]->Divide(hComb[index]);
	  if (icharge == 1) SpectraStep3[index]->SetLineStyle(2);
	  if (index == 0)
	    {
	      SpectraStep3[index]->GetYaxis()->SetRangeUser(.5,1.5);
	      SpectraStep3[index]->DrawCopy("hist][");
	    }
	  else SpectraStep3[index]->DrawCopy("hist][same");
	}
    }
  lCompareToPublishedAtEachStep->DrawClone();
  cCompareToPublishedAtEachStep->cd(5);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  SpectraStep4[index]->Divide(hComb[index]);
	  if (icharge == 1) SpectraStep4[index]->SetLineStyle(2);
	  if (index == 0)
	    {
	      SpectraStep4[index]->GetYaxis()->SetRangeUser(.5,1.5);
	      SpectraStep4[index]->DrawCopy("hist][");
	    }
	  else SpectraStep4[index]->DrawCopy("hist][same");
	}
    }
  lCompareToPublishedAtEachStep->DrawClone();
  cCompareToPublishedAtEachStep->cd(6);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  SpectraStep5[index]->Divide(hComb[index]);
	  if (icharge == 1) SpectraStep5[index]->SetLineStyle(2);
	  if (index == 0)
	    {
	      SpectraStep5[index]->GetYaxis()->SetRangeUser(.5,1.5);
	      SpectraStep5[index]->DrawCopy("hist][");
	    }
	  else SpectraStep5[index]->DrawCopy("hist][same");
	}
    }
  lCompareToPublishedAtEachStep->DrawClone();
  cCompareToPublishedAtEachStep->cd(7);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  SpectraStep6[index]->Divide(hComb[index]);
	  if (icharge == 1) SpectraStep6[index]->SetLineStyle(2);
	  if (index == 0)
	    {
	      SpectraStep6[index]->GetYaxis()->SetRangeUser(.5,1.5);
	      SpectraStep6[index]->DrawCopy("hist][");
	    }
	  else SpectraStep6[index]->DrawCopy("hist][same");
	}
    }
  lCompareToPublishedAtEachStep->DrawClone();
  cCompareToPublishedAtEachStep->cd(8);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  Spectra[index]->Divide(hComb[index]);
	  if (icharge == 1) Spectra[index]->SetLineStyle(2);
	  if (index == 0)
	    {
	      Spectra[index]->GetYaxis()->SetRangeUser(.5,1.5);
	      Spectra[index]->DrawCopy("hist][");
	    }
	  else Spectra[index]->DrawCopy("hist][same");
	}
    }
  lCompareToPublishedAtEachStep->DrawClone();



  //---------------------------------------------------------
  // For MC, compare each correction step with the MC truth -
  //---------------------------------------------------------
  TCanvas * cCompareMCtoMCTruthAtEachStep = new TCanvas("cCompareMCtoMCTruthAtEachStep","cCompareMCtoMCTruthAtEachStep",350,225,700,500);
  cCompareMCtoMCTruthAtEachStep->Divide(4,2);
  TLegend * lCompareMCtoMCTruthAtEachStep = new TLegend(.69,.69,.99,.99);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  lCompareMCtoMCTruthAtEachStep->AddEntry(MCSpectra[index],Names[index].Data(),"p");
	}
    }
  cCompareMCtoMCTruthAtEachStep->cd(1);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  MCRawSpectra[index]->Divide(hMCTruth[index]);
	  if (icharge == 1) RawSpectra[index]->SetLineStyle(2);
	  if (index == 0)
	    {
	      MCRawSpectra[index]->GetYaxis()->SetRangeUser(0,1);
	      MCRawSpectra[index]->DrawCopy("hist][");
	    }
	  else MCRawSpectra[index]->DrawCopy("hist][same");
	}
    }
  lCompareMCtoMCTruthAtEachStep->DrawClone();
  cCompareMCtoMCTruthAtEachStep->cd(2);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  MCSpectraStep1[index]->Divide(hMCTruth[index]);
	  if (icharge == 1) MCSpectraStep1[index]->SetLineStyle(2);
	  if (index == 0)
	    {
	      MCSpectraStep1[index]->GetYaxis()->SetRangeUser(.5,1.5);
	      MCSpectraStep1[index]->DrawCopy("hist][");
	    }
	  else MCSpectraStep1[index]->DrawCopy("hist][same");
	}
    }
  lCompareMCtoMCTruthAtEachStep->DrawClone();
  cCompareMCtoMCTruthAtEachStep->cd(3);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  MCSpectraStep2[index]->Divide(hMCTruth[index]);
	  if (icharge == 1) MCSpectraStep2[index]->SetLineStyle(2);
	  if (index == 0)
	    {
	      MCSpectraStep2[index]->GetYaxis()->SetRangeUser(.5,1.5);
	      MCSpectraStep2[index]->DrawCopy("hist][");
	    }
	  else MCSpectraStep2[index]->DrawCopy("hist][same");
	}
    }
  lCompareMCtoMCTruthAtEachStep->DrawClone();
  cCompareMCtoMCTruthAtEachStep->cd(4);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  MCSpectraStep3[index]->Divide(hMCTruth[index]);
	  if (icharge == 1) MCSpectraStep3[index]->SetLineStyle(2);
	  if (index == 0)
	    {
	      MCSpectraStep3[index]->GetYaxis()->SetRangeUser(.5,1.5);
	      MCSpectraStep3[index]->DrawCopy("hist][");
	    }
	  else MCSpectraStep3[index]->DrawCopy("hist][same");
	}
    }
  lCompareMCtoMCTruthAtEachStep->DrawClone();
  /*  cCompareMCtoMCTruthAtEachStep->cd(5);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  MCSpectraStep4[index]->Divide(hMCTruth[index]);
	  if (icharge == 1) MCSpectraStep4[index]->SetLineStyle(2);
	  if (index == 0)
	    {
	      MCSpectraStep4[index]->GetYaxis()->SetRangeUser(.5,1.5);
	      MCSpectraStep4[index]->DrawCopy("hist][");
	    }
	  else MCSpectraStep4[index]->DrawCopy("hist][same");
	}
    }
    lCompareMCtoMCTruthAtEachStep->DrawClone();
  cCompareMCtoMCTruthAtEachStep->cd(6);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  MCSpectraStep5[index]->Divide(hMCTruth[index]);
	  if (icharge == 1) MCSpectraStep5[index]->SetLineStyle(2);
	  if (index == 0)
	    {
	      MCSpectraStep5[index]->GetYaxis()->SetRangeUser(.5,1.5);
	      MCSpectraStep5[index]->DrawCopy("hist][");
	    }
	  else MCSpectraStep5[index]->DrawCopy("hist][same");
	}
    }
    lCompareMCtoMCTruthAtEachStep->DrawClone();*/
  cCompareMCtoMCTruthAtEachStep->cd(7);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  MCSpectraStep6[index]->Divide(hMCTruth[index]);
	  if (icharge == 1) MCSpectraStep6[index]->SetLineStyle(2);
	  if (index == 0)
	    {
	      MCSpectraStep6[index]->GetYaxis()->SetRangeUser(.5,1.5);
	      MCSpectraStep6[index]->DrawCopy("hist][");
	    }
	  else MCSpectraStep6[index]->DrawCopy("hist][same");
	}
    }
  lCompareMCtoMCTruthAtEachStep->DrawClone();
  cCompareMCtoMCTruthAtEachStep->cd(8);
  for (Int_t icharge=0; icharge<nCharge; icharge++)
    {
      for (Int_t ipart=0; ipart<nPart; ipart++)
	{
	  Int_t index = ipart + 3*icharge;
	  MCSpectra[index]->Divide(hMCTruth[index]);
	  if (icharge == 1) MCSpectra[index]->SetLineStyle(2);
	  if (index == 0)
	    {
	      MCSpectra[index]->GetYaxis()->SetRangeUser(.5,1.5);
	      MCSpectra[index]->DrawCopy("hist][");
	    }
	  else MCSpectra[index]->DrawCopy("hist][same");
	}
    }
  lCompareMCtoMCTruthAtEachStep->DrawClone();



  // close unwanted canvases
  //  cGFCorrection->Close();
  //cMatchingEff->Close();
  //cContCorrFact->Close();
  //cCorrFactMC->Close();
  //cSecCorrFactMC->Close();
  cAllCh->Close();
  cFitChargHad->Close();
  cAllChFactors->Close();

  // save wanted canvases
  fout->cd();
  cSpectra->Write();
  CratioComb->Write();
  cMatchingEff->Write();
  cEvolutionOfSpectra->Write();  
  cCompareToPublishedAtEachStep->Write();
}



///////////////////////
Double_t eta2y(Double_t pt, Double_t mass, Double_t eta){
  Double_t mt = TMath::Sqrt(mass * mass + pt * pt);
  return TMath::ASinH(pt / mt * TMath::SinH(eta));
}

///////////////////////
void GFCorrection(TH1F **Spectra,AliSpectraAODTrackCuts* tcuts_data, TFile * fout){
  //Geant/Fluka Correction
  Printf("\nGF correction for Kaons");
  //Getting GF For Kaons in TPC
  TGraph *gGFCorrectionKaonPlus=new TGraph();
  gGFCorrectionKaonPlus->SetName("gGFCorrectionKaonPlus");
  gGFCorrectionKaonPlus->SetTitle("gGFCorrectionKaonPlus");
  TGraph *gGFCorrectionKaonMinus=new TGraph();
  gGFCorrectionKaonMinus->SetName("gGFCorrectionKaonMinus");
  gGFCorrectionKaonMinus->SetTitle("gGFCorrectionKaonMinus");
  TString fnameGeanFlukaK="GFCorrection/correctionForCrossSection.321.root";
  TFile *fGeanFlukaK= new TFile(fnameGeanFlukaK.Data());
  TH1F *hGeantFlukaKPos=(TH1F*)fGeanFlukaK->Get("gHistCorrectionForCrossSectionParticles");
  TH1F *hGeantFlukaKNeg=(TH1F*)fGeanFlukaK->Get("gHistCorrectionForCrossSectionAntiParticles");
  //getting GF func for Kaons with TOF
  TF1 *fGFKPosTracking;
  fGFKPosTracking = TrackingEff_geantflukaCorrection(3,kPositive);
  TF1 *fGFKNegTracking;
  fGFKNegTracking = TrackingEff_geantflukaCorrection(3,kNegative);
  TF1 *fGFKPosMatching;
  fGFKPosMatching = TOFmatchMC_geantflukaCorrection(3,kPositive);
  TF1 *fGFKNegMatching;
  fGFKNegMatching = TOFmatchMC_geantflukaCorrection(3,kNegative);
  for(Int_t binK=0;binK<=Spectra[1]->GetNbinsX();binK++){
    if(Spectra[1]->GetBinCenter(binK)<tcuts_data->GetPtTOFMatching()){//use TPC GeantFlukaCorrection
      Float_t FlukaCorrKPos=hGeantFlukaKPos->GetBinContent(hGeantFlukaKPos->FindBin(Spectra[1]->GetBinCenter(binK)));
      Float_t FlukaCorrKNeg=hGeantFlukaKNeg->GetBinContent(hGeantFlukaKNeg->FindBin(Spectra[4]->GetBinCenter(binK)));
      Printf("TPC Geant/Fluka: pt:%f  Pos:%f  Neg:%f",Spectra[1]->GetBinCenter(binK),FlukaCorrKPos,FlukaCorrKNeg);
      Spectra[1]->SetBinContent(binK,Spectra[1]->GetBinContent(binK)*FlukaCorrKPos);
      Spectra[4]->SetBinContent(binK,Spectra[4]->GetBinContent(binK)*FlukaCorrKNeg);
      Spectra[1]->SetBinError(binK,Spectra[1]->GetBinError(binK)*FlukaCorrKPos);
      Spectra[4]->SetBinError(binK,Spectra[4]->GetBinError(binK)*FlukaCorrKNeg);
      gGFCorrectionKaonPlus->SetPoint(binK,Spectra[1]->GetBinCenter(binK),FlukaCorrKPos);
      gGFCorrectionKaonMinus->SetPoint(binK,Spectra[4]->GetBinCenter(binK),FlukaCorrKNeg);
    }else{
      gGFCorrectionKaonPlus->SetPoint(binK,Spectra[1]->GetBinCenter(binK),0);
      gGFCorrectionKaonMinus->SetPoint(binK,Spectra[4]->GetBinCenter(binK),0);
      Float_t FlukaCorrKPosTracking=fGFKPosTracking->Eval(Spectra[1]->GetBinCenter(binK));
      Float_t FlukaCorrKNegTracking=fGFKNegTracking->Eval(Spectra[1]->GetBinCenter(binK));
      Printf("TPC/TOF Geant/Fluka Tracking: pt:%f  Pos:%f  Neg:%f",Spectra[1]->GetBinCenter(binK),FlukaCorrKPosTracking,FlukaCorrKNegTracking);
      Spectra[1]->SetBinContent(binK,Spectra[1]->GetBinContent(binK)*FlukaCorrKPosTracking);
      Spectra[4]->SetBinContent(binK,Spectra[4]->GetBinContent(binK)*FlukaCorrKNegTracking);
      Spectra[1]->SetBinError(binK,Spectra[1]->GetBinError(binK)*FlukaCorrKPosTracking);
      Spectra[4]->SetBinError(binK,Spectra[4]->GetBinError(binK)*FlukaCorrKNegTracking);
      Float_t FlukaCorrKPosMatching=fGFKPosMatching->Eval(Spectra[1]->GetBinCenter(binK));
      Float_t FlukaCorrKNegMatching=fGFKNegMatching->Eval(Spectra[1]->GetBinCenter(binK));
      Printf("TPC/TOF Geant/Fluka Matching: pt:%f  Pos:%f  Neg:%f",Spectra[1]->GetBinCenter(binK),FlukaCorrKPosMatching,FlukaCorrKNegMatching);
      Spectra[1]->SetBinContent(binK,Spectra[1]->GetBinContent(binK)*FlukaCorrKPosMatching);
      Spectra[4]->SetBinContent(binK,Spectra[4]->GetBinContent(binK)*FlukaCorrKNegMatching);
      Spectra[1]->SetBinError(binK,Spectra[1]->GetBinError(binK)*FlukaCorrKPosMatching);
      Spectra[4]->SetBinError(binK,Spectra[4]->GetBinError(binK)*FlukaCorrKNegMatching);
    }
  }
  
  //Geant Fluka for P in TPC
  Printf("\nGF correction for Protons");
  const Int_t kNCharge=2;
  Int_t kPos=0;
  Int_t kNeg=1;
  TFile* fGFProtons = new TFile ("GFCorrection/correctionForCrossSection.root");
  TH2D * hCorrFluka[kNCharge];
  TH2D * hCorrFluka[2];
  hCorrFluka[kPos] = (TH2D*)fGFProtons->Get("gHistCorrectionForCrossSectionProtons");
  hCorrFluka[kNeg] = (TH2D*)fGFProtons->Get("gHistCorrectionForCrossSectionAntiProtons");
  TGraph *gGFCorrectionProtonPlus=new TGraph();
  gGFCorrectionProtonPlus->SetName("gGFCorrectionProtonPlus");
  gGFCorrectionProtonPlus->SetTitle("gGFCorrectionProtonPlus");
  TGraph *gGFCorrectionProtonMinus=new TGraph();
  gGFCorrectionProtonMinus->SetName("gGFCorrectionProtonMinus");
  gGFCorrectionProtonMinus->SetTitle("gGFCorrectionProtonMinus");
  //getting GF func for Protons with TPCTOF
  TF1 *fGFpPosTracking;
  fGFpPosTracking = TrackingEff_geantflukaCorrection(4,kPositive);
  TF1 *fGFpNegTracking;
  fGFpNegTracking = TrackingEff_geantflukaCorrection(4,kNegative);
  TF1 *fGFpPosMatching;
  fGFpPosMatching = TOFmatchMC_geantflukaCorrection(4,kPositive);
  TF1 *fGFpNegMatching;
  fGFpNegMatching = TOFmatchMC_geantflukaCorrection(4,kNegative);
  
  for(Int_t icharge = 0; icharge < kNCharge; icharge++){
    Int_t nbins = Spectra[2]->GetNbinsX();
    Int_t nbinsy=hCorrFluka[icharge]->GetNbinsY();
    for(Int_t ibin = 0; ibin < nbins; ibin++){
      if(Spectra[2]->GetBinCenter(ibin)<tcuts_data->GetPtTOFMatching()){//use TPC GeantFlukaCorrection
  	Float_t pt = Spectra[2]->GetBinCenter(ibin);
  	Float_t minPtCorrection = hCorrFluka[icharge]->GetYaxis()->GetBinLowEdge(1);
  	Float_t maxPtCorrection = hCorrFluka[icharge]->GetYaxis()->GetBinLowEdge(nbinsy+1);
  	if (pt < minPtCorrection) pt = minPtCorrection+0.0001;
  	if (pt > maxPtCorrection) pt = maxPtCorrection;
  	Float_t correction = hCorrFluka[icharge]->GetBinContent(1,hCorrFluka[icharge]->GetYaxis()->FindBin(pt));
  	//cout<<correction<<"     charge "<<icharge<<endl;
  	if(icharge==0){
  	  if (correction != 0) {// If the bin is empty this is a  0
  	    Spectra[2]->SetBinContent(ibin,Spectra[2]->GetBinContent(ibin)*correction);
  	    Spectra[2]->SetBinError(ibin,Spectra[2]->GetBinError  (ibin)*correction);
  	    gGFCorrectionProtonPlus->SetPoint(ibin,pt,correction);
  	  }else if (Spectra[2]->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, Pt:"<< pt<< endl;
  	    cout << " Bin content: " << Spectra[2]->GetBinContent(ibin)  << endl;
  	  }
  	}
  	if(icharge==1){
  	  if (correction != 0) {// If the bin is empty this is a  0
  	    Spectra[5]->SetBinContent(ibin,Spectra[5]->GetBinContent(ibin)*correction);
  	    Spectra[5]->SetBinError(ibin,Spectra[5]->GetBinError  (ibin)*correction);
  	    gGFCorrectionProtonMinus->SetPoint(ibin,pt,correction);
  	  }else if (Spectra[5]->GetBinContent(ibin) > 0) { // If we are skipping a non-empty bin, we notify the user
  	    cout << "Fluka/GEANT: Not correcting bin "<<ibin << " for Antiprotons secondaries, Pt:"<< pt<< endl;
  	    cout << " Bin content: " << Spectra[5]->GetBinContent(ibin)  << endl;
  	  }
  	}
      }else{
  	gGFCorrectionProtonPlus->SetPoint(ibin,Spectra[2]->GetBinCenter(ibin),0);
  	gGFCorrectionProtonMinus->SetPoint(ibin,Spectra[5]->GetBinCenter(ibin),0);
  	Float_t FlukaCorrpPosTracking=fGFpPosTracking->Eval(Spectra[2]->GetBinCenter(ibin));
  	Float_t FlukaCorrpNegTracking=fGFpNegTracking->Eval(Spectra[2]->GetBinCenter(ibin));
  	Printf("TPC/TOF Geant/Fluka Tracking: pt:%f  Pos:%f  Neg:%f",Spectra[2]->GetBinCenter(ibin),FlukaCorrpPosTracking,FlukaCorrpNegTracking);
  	if(icharge==0){
	  Spectra[2]->SetBinContent(ibin,Spectra[2]->GetBinContent(ibin)*FlukaCorrpPosTracking);
	  Spectra[2]->SetBinError(ibin,Spectra[2]->GetBinError(ibin)*FlukaCorrpPosTracking);
  	}else{
	  Spectra[5]->SetBinContent(ibin,Spectra[5]->GetBinContent(ibin)*FlukaCorrpNegTracking);
	  Spectra[5]->SetBinError(ibin,Spectra[5]->GetBinError(ibin)*FlukaCorrpNegTracking);
  	}
	Float_t FlukaCorrpPosMatching=fGFpPosMatching->Eval(Spectra[2]->GetBinCenter(ibin));
  	Float_t FlukaCorrpNegMatching=fGFpNegMatching->Eval(Spectra[2]->GetBinCenter(ibin));
  	Printf("TPC/TOF Geant/Fluka Matching: pt:%f  Pos:%f  Neg:%f",Spectra[2]->GetBinCenter(ibin),FlukaCorrpPosMatching,FlukaCorrpNegMatching);
	if(icharge==0){
	  Spectra[2]->SetBinContent(ibin,Spectra[2]->GetBinContent(ibin)*FlukaCorrpPosMatching);
	  Spectra[2]->SetBinError(ibin,Spectra[2]->GetBinError(ibin)*FlukaCorrpPosMatching);
	}else{
	  Spectra[5]->SetBinContent(ibin,Spectra[5]->GetBinContent(ibin)*FlukaCorrpNegMatching);
	  Spectra[5]->SetBinError(ibin,Spectra[5]->GetBinError(ibin)*FlukaCorrpNegMatching);
	}
      }
    }//end loop on bins	
  }
  gGFCorrectionKaonPlus->SetLineColor(kRed);
  gGFCorrectionKaonMinus->SetLineColor(kRed+2);
  gGFCorrectionProtonPlus->SetLineColor(kGreen);
  gGFCorrectionProtonMinus->SetLineColor(kGreen+2);
  fGFKPosTracking->SetLineColor(kRed);
  fGFKNegTracking->SetLineColor(kRed+2);
  fGFKPosMatching->SetLineColor(kRed);
  fGFKNegMatching->SetLineColor(kRed+2);
  fGFpPosTracking->SetLineColor(kGreen);
  fGFpNegTracking->SetLineColor(kGreen+2);
  fGFpPosMatching->SetLineColor(kGreen);
  fGFpNegMatching->SetLineColor(kGreen+2);
  fGFKPosTracking->SetLineStyle(2);
  fGFKNegTracking->SetLineStyle(2);
  fGFKPosMatching->SetLineStyle(3);
  fGFKNegMatching->SetLineStyle(3);
  fGFpPosTracking->SetLineStyle(2);
  fGFpNegTracking->SetLineStyle(2);
  fGFpPosMatching->SetLineStyle(3);
  fGFpNegMatching->SetLineStyle(3);
  fGFKPosTracking->SetRange(.6,5);
  fGFKNegTracking->SetRange(.6,5);
  fGFKPosMatching->SetRange(.6,5);
  fGFKNegMatching->SetRange(.6,5);
  fGFpPosTracking->SetRange(.6,5);
  fGFpNegTracking->SetRange(.6,5);
  fGFpPosMatching->SetRange(.6,5);
  fGFpNegMatching->SetRange(.6,5);
 
  TCanvas * cGFCorrection = new TCanvas ("cGFCorrection","cGFCorrection",700,500);
  gPad->SetGridx();
  gPad->SetGridy();
  gGFCorrectionKaonPlus->DrawClone("al");
  gGFCorrectionKaonMinus->DrawClone("lsame");
  gGFCorrectionProtonPlus->DrawClone("lsame");
  gGFCorrectionProtonMinus->DrawClone("lsame");
  fGFKPosTracking->DrawClone("lsame");
  fGFKNegTracking->DrawClone("lsame");
  fGFKPosMatching->DrawClone("lsame");
  fGFKNegMatching->DrawClone("lsame");
  fGFpPosTracking->DrawClone("lsame");
  fGFpNegTracking->DrawClone("lsame");
  fGFpPosMatching->DrawClone("lsame");
  fGFpNegMatching->DrawClone("lsame");
  gPad->BuildLegend()->SetFillColor(0);
  fout->cd();
  cGFCorrection->Write();
}

///////////
TF1 * TrackingEff_geantflukaCorrection(Int_t ipart, Int_t icharge)
{

  if (ipart == 3 && icharge == kNegative) {
    TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), Sign[icharge]), "TrackingPtGeantFlukaCorrectionKaMinus(x)", 0., 5.);
    return f;
  }
  else if (ipart == 4 && icharge == kNegative) {
    TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), Sign[icharge]), "TrackingPtGeantFlukaCorrectionPrMinus(x)", 0., 5.);
  }
  else
    TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), Sign[icharge]), "TrackingPtGeantFlukaCorrectionNull(x)", 0., 5.);

  return f;
}

Double_t TrackingPtGeantFlukaCorrectionNull(Double_t pTmc)
{
  return 1.;
}

Double_t TrackingPtGeantFlukaCorrectionPrMinus(Double_t pTmc)
{
  return (1 - 0.129758 *TMath::Exp(-pTmc*0.679612));
}

Double_t TrackingPtGeantFlukaCorrectionKaMinus(Double_t pTmc)
{
  return TMath::Min((0.972865 + 0.0117093*pTmc), 1.);
}

///////////////////////////////////////////
TF1 * TOFmatchMC_geantflukaCorrection(Int_t ipart, Int_t icharge)
{
  if (ipart == 3 && icharge == kNegative) {
    TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), Sign[icharge]), "MatchingPtGeantFlukaCorrectionKaMinus(x)", 0., 5.);
    return f;
  }
  else if (ipart == 4 && icharge == kNegative) {
    TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), Sign[icharge]), "MatchingPtGeantFlukaCorrectionPrMinus(x)", 0., 5.);
  }
  else
    TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), Sign[icharge]), "MatchingPtGeantFlukaCorrectionNull(x)", 0., 5.);

  return f;
}

Double_t MatchingPtGeantFlukaCorrectionNull(Double_t pTmc)
{
  return 1.;
}

Double_t MatchingPtGeantFlukaCorrectionPrMinus(Double_t pTmc)
{
  Float_t ptTPCoutP =pTmc*(1-6.81059e-01*TMath::Exp(-pTmc*4.20094));
  return (TMath::Power(1 - 0.129758*TMath::Exp(-ptTPCoutP*0.679612),0.07162/0.03471));
}

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