ROOT logo
//////////////////////////////////////////////////////////////
//                                                          //
// This macro produces all final results and QA plots for   //
// the DEUTERON nuclei analysis.                            //
//                                                          //
//                                                          //
//                                                          //
//////////////////////////////////////////////////////////////

#include "TFile.h"
#include "TList.h"
#include "TH1D.h"
#include "TH2D.h"
#include "TH3D.h"
#include "THnSparse.h"
#include "TF1.h"
#include "TCanvas.h"
#include "TFractionFitter.h"
#include "TColor.h"



using namespace std;

//
// global variables
//

Char_t * fileNameMcEnhancedNew = "MC/McEnhancedNew.root";
Char_t * fileNameMcEnhancedOld = "MC/McEnhancedOld2.root";
Char_t * fileNameMcUnEnhanced  = "MC/McUnEnhanced.root";
Char_t * fileNameData          = "data/dataFinal.root";

//
// definition of functions
//
void       MakeEfficiency();
TH1D    *  ExtractEfficiency(TList * listMC, Int_t sign = -1, Int_t centrality = 0, Bool_t isTOF = kTRUE);
TF1     *  MakeEtaRapidityGenCorrection(Bool_t drawQA = kFALSE);
//
void       MakeFinalSpectra();
TH1D    *  MakeRawSpectraTPC(TList * list, Int_t sign = -1, Int_t centralityBin = 0);
TH1D    *  MakeRawSpectra(TList * list, Int_t sign = -1, Int_t centralityBin = 0);
void       NormalizeSpectrum(TH1D * spectrum, Float_t dy, Float_t numberOfEvents);
void       PlotSpectraComparison();
void       CombinationAndSystematics();
TH1D    *  GetSpectrumWithSyst(TH1D * histStatError);
//
void       MakeQAplots();
TCanvas *  PlotTpcQA(Char_t * fileName = "", Bool_t isMC = kTRUE,  Bool_t isMCold = kFALSE);
void       PlotSpectraQA(TList * list, Int_t particleType = 0, Int_t sign = -1);
//
void       MakeMaterialCorrection();
Float_t    GetMaterialCorrection(Float_t ptBin, Int_t centralityBin, Bool_t pureMC = kFALSE);



//
// implementation
//
//_______________________________________________________________________
void CombinationAndSystematics() {
  //
  // produce the final spectra for the paper
  //
  Int_t kMaxCentrality = 5;
  //
  TFile fileOut("output/spectraDeuteronCombined.root", "RECREATE");
  fileOut.Close();
  //
  TFile * fileIn = TFile::Open("output/spectraDeuteron.root");
  //
  TCanvas * canvDeuteron = new TCanvas("canvDeuteron","deuteron spectra");
  //
  for(Int_t iCentr = 0; iCentr < kMaxCentrality; iCentr++) {
    //
    TH1D * tpc = (TH1D *) fileIn->Get(Form("cent%i_sign%s_TPC",iCentr,"Pos"));
    TH1D * tof = (TH1D *) fileIn->Get(Form("cent%i_sign%s",iCentr,"Pos"));
    //
    TH1D * deuteron = (TH1D *) tof->Clone();
    deuteron->SetNameTitle(Form("deuteron_centrality%i",iCentr), Form("deuteron_centrality%i",iCentr));
    deuteron->GetYaxis()->SetTitle("d#it{N}/(d#it{y}d#it{p_{T}})");
    deuteron->GetXaxis()->SetTitle("p_{T} (GeV/#it{c})");
    //
    // merge the two
    //
    deuteron->SetBinContent(4, tpc->GetBinContent(4));  deuteron->SetBinError(4, tpc->GetBinError(4));
    deuteron->SetBinContent(5, tpc->GetBinContent(5));  deuteron->SetBinError(5, tpc->GetBinError(4));
    //
    // get systematics
    //
    TH1D * deuteronSyst = GetSpectrumWithSyst(deuteron);
    //
    // drawing and saving
    //
    if (iCentr == 0) {
      deuteronSyst->DrawCopy("E2");
      deuteron->DrawCopy("SAME");
    } else {
      deuteronSyst->DrawCopy("E2,SAME");
      deuteron->DrawCopy("SAME");
    }
    //

    //
    TFile fileIn2("output/fitsBW.root");
    TF1 * fit = (TF1 * ) fileIn2.Get(Form("fit%i_signNeg", iCentr));
    if (fit) {
      fit->Draw("SAME");
    }
    fileIn2.Close();
    //
    TFile fileOut("output/spectraDeuteronCombined.root", "UPDATE");
    deuteron->Write();
    deuteronSyst->Write();
    if (fit) fit->Write();
    fileOut.Close();

  }



}

//_______________________________________________________________________
TH1D * GetSpectrumWithSyst(TH1D * histStatError) {
  //
  // add systematic error to the points
  //
  TH1D * histSyst = (TH1D *) histStatError->Clone();
  histSyst->SetNameTitle(Form("%s_SYST", histStatError->GetName()), 
			 Form("%s_SYST", histStatError->GetName()));
  histSyst->SetFillColor(histStatError->GetMarkerColor());
  histSyst->SetFillStyle(0);
  histSyst->SetDrawOption("E2");
  //
  for(Int_t i=0; i <  histSyst->GetXaxis()->GetNbins(); i++) { // begin loop over pt-bins
      Float_t syst = 0.;
      Float_t pt = histSyst->GetXaxis()->GetBinCenter(i);
      //
      // (1.) tracking and matching normally 4%, but we add 2% for the pt-correction
      //
      syst += 0.06*0.06;
      //
      // (2.) PID -- difference between bin counting and fit in TOF
      //
      if (pt > 1.4) syst += 0.05*0.05;
      //
      // (3.) material knock-out -- 20% of correction
      //
      Float_t corr = 1.5*TMath::Exp(1.27259 - 2.527*pt);
      syst += (0.2*corr)*(0.2*corr);
      //
      // (4.) absorption in material (shifted proton exponential, difference between Eulogio's and geant production)
      // ==> for anti-deuterons correspondingly more. ==> see plot by Natasha (backup slide APW)
      //
      syst += 0.03*0.03;
      //
      // (5.) matching efficiency
      //
      //if (pt > 1.) syst += 0.05*0.05;
      //
      // put it to the spectrum
      //
      Float_t  sum = TMath::Sqrt(syst)*histSyst->GetBinContent(i);
      histSyst->SetBinError(i,sum);
    } // end loop over pt-bins

  //
  return histSyst;


}


//_______________________________________________________________________
void PlotSpectraComparison() {
  //
  // plot TPC & TOF spectra for comparison
  //
  Int_t kMaxCentrality = 5;
  //
  //
  TFile * fileIn = TFile::Open("output/spectraDeuteron.root");
  //
  TCanvas * canvRatio = new TCanvas("canvRatio","canvRatio");
  //
  for(Int_t iCentr = 0; iCentr < kMaxCentrality; iCentr++) {
    //
    TCanvas * canvComparison = new TCanvas(Form("canvComparison_%i",iCentr),Form("spectra in centrality %i", iCentr));
    //
    TH1D * tpc = (TH1D *) fileIn->Get(Form("cent%i_sign%s_TPC",iCentr,"Pos"));
    TH1D * tof = (TH1D *) fileIn->Get(Form("cent%i_sign%s",iCentr,"Pos"));
    //
    TH1D * tpcNeg = (TH1D *) fileIn->Get(Form("cent%i_sign%s_TPC",iCentr,"Neg"));
    TH1D * tofNeg = (TH1D *) fileIn->Get(Form("cent%i_sign%s",iCentr,"Neg"));
    tpcNeg->SetMarkerStyle(21);
    tofNeg->SetMarkerStyle(25);
    //
    tof->DrawCopy();
    tpc->DrawCopy("SAME");
    tpcNeg->DrawCopy("SAME");
    tofNeg->DrawCopy("SAME");
    //
    TFile fileIn2("output/fitsBW.root");
    TF1 * fit = (TF1 * ) fileIn2.Get(Form("fit%i_signNeg", iCentr));
    fit->Draw("SAME");
    fileIn2.Close();
    //
    //TCanvas * canvRatio = new TCanvas(Form("canvRatio_%i",iCentr),Form("Ratio in centrality %i", iCentr));
    canvRatio->cd();
    tofNeg->Divide(tof);
    if (iCentr == 0) {
      tofNeg->DrawCopy();
    } else {
      tofNeg->DrawCopy("SAME");
    }
  }


}


//_______________________________________________________________________
void MakeFinalSpectra() {
  //
  // make final spectra for all centrality bins
  //
  Int_t kMaxCentrality = 5;
  TFile fileOut("output/spectraDeuteron.root", "RECREATE");
  fileOut.Close();
  //
  // get efficiencies and data
  //
  TFile * inFileEff = TFile::Open("output/efficiencies.root");
  TH1D  * efficiencyTrackingNegNew = (TH1D*) inFileEff->Get("efficiencyTrackingNegNew");
  TH1D  * efficiencyTrackingPosNew = (TH1D*) inFileEff->Get("efficiencyTrackingPosNew");
  TH1D  * efficiencyTofPosNew      = (TH1D*) inFileEff->Get("efficiencyTofPosNew");
  TH1D  * efficiencyTofNegNew      = (TH1D*) inFileEff->Get("efficiencyTofNegNew");
  //
  TFile inFileData(fileNameData);
  TList * list = (TList * ) inFileData.Get("akalweit_Nuclei");
  //
  // positive particles
  //
  TCanvas * canvAllPos = new TCanvas("canvAllPos","deuteron spectra");
  for(Int_t iCentr = 0; iCentr < kMaxCentrality; iCentr++) {
    //
    TH1D * rawSpecTpc = MakeRawSpectraTPC(list, +1, iCentr);
    TH1D * rawSpecTof = MakeRawSpectra(list, +1, iCentr);
    rawSpecTpc->Divide(efficiencyTrackingPosNew);
    rawSpecTof->Divide(efficiencyTofPosNew);
    //
    canvAllPos->cd();
    if (iCentr == 0) {
      rawSpecTpc->DrawCopy("EP");
      rawSpecTof->DrawCopy("EPSAME");
    } else {
      rawSpecTpc->DrawCopy("EPSAME");
      rawSpecTof->DrawCopy("EPSAME");
    }
    //
    // apply material correction
    //
    TFile matFile("output/materialCorrection.root");
    TH1D * materialCorrection = (TH1D *) matFile.Get(Form("matCorr_%i",iCentr));
    for(Int_t iBin = 0; iBin < rawSpecTpc->GetXaxis()->GetNbins(); iBin++) {
      Double_t pT = rawSpecTpc->GetXaxis()->GetBinCenter(iBin);
      if (pT > 0.4 && pT < 2.) {
	Float_t primFactor = 1. - materialCorrection->GetBinContent(iBin);
	rawSpecTof->SetBinContent(iBin, rawSpecTof->GetBinContent(iBin)*primFactor);
	rawSpecTof->SetBinError(iBin, rawSpecTof->GetBinError(iBin)*primFactor);
	rawSpecTpc->SetBinContent(iBin, rawSpecTpc->GetBinContent(iBin)*primFactor);
	rawSpecTpc->SetBinError(iBin, rawSpecTpc->GetBinError(iBin)*primFactor);
      }
    }
    //
    matFile.Close();
    //
    TFile fileOutput("output/spectraDeuteron.root", "UPDATE");
    rawSpecTpc->Write();
    rawSpecTof->Write();
    fileOutput.Close();
  }
  canvAllPos->Print("QAplots/posSpectra.pdf");
  //
  // negative particles
  //
  TCanvas * canvAllNeg = new TCanvas("canvAllNeg","anti-deuteron spectra");
  for(Int_t iCentr = 0; iCentr < kMaxCentrality; iCentr++) {
    //
    TH1D * rawSpecTpc = MakeRawSpectraTPC(list, -1, iCentr);
    TH1D * rawSpecTof = MakeRawSpectra(list, -1, iCentr);
    rawSpecTpc->Divide(efficiencyTrackingNegNew);
    rawSpecTof->Divide(efficiencyTofNegNew);
    //
    canvAllPos->cd();
    if (iCentr == 0) {
      rawSpecTpc->DrawCopy("EP");
      rawSpecTof->DrawCopy("EPSAME");
    } else {
      rawSpecTpc->DrawCopy("EPSAME");
      rawSpecTof->DrawCopy("EPSAME");
    }
    TFile fileOutput("output/spectraDeuteron.root", "UPDATE");
    rawSpecTpc->Write();
    rawSpecTof->Write();
    fileOutput.Close();
  }
  canvAllNeg->Print("QAplots/negSpectra.pdf");
  


}


//_______________________________________________________________________
TH1D * MakeRawSpectraTPC(TList * list, Int_t sign, Int_t centralityBin) {
  //
  // Make raw spectra for given sign and centrality bin
  //
  // (0.) assumed particle: 0. deuteron, 1. triton, 2. He-3
  // (1.) multiplicity or centrality -- number of accepted ESD tracks per events (deprecated), but now classes from 1 to 10, 0: Min. Bias
  // (2.) pT
  // (3.) sign
  // (4.) rapidity --> filled 4xW
  // (5.)  pull TPC dEx --> filled 4x
  // (6.) has valid TOF pid signal
  // (7.) nsigma TOF --> filled 4x XXXXXXXXX no mass*mass
  // (8..) dca_xy
  // (9.) CODE -- only MC 0-generated, 1-true rec. primaries, 2-misident prim, 3-second weak, 4-second material, 5-misident sec
  //
  TH1D * histCentr = (TH1D *)  list->FindObject("fHistCentrality");
  //
  THnSparseF * hist = (THnSparseF *) list->FindObject("fHistRealTracks");
  hist->GetAxis(0)->SetRangeUser(0,0);                     // select deuterons
  //
  // centrality 0: 0-5% / 1: 5-10% / 2: 10-20% / 3: 20-30% / 4: 30-40% / 5: 40-50% / 6: 50-60% / 7: 60-70% / 8: 70-80%
  //
  Int_t centrality = 0;
  if (centralityBin == 0) centrality = 0; //  0-10%
  if (centralityBin == 1) centrality = 2; // 10-20%
  if (centralityBin == 2) centrality = 3; // 20-40%
  if (centralityBin == 3) centrality = 5; // 40-60%
  if (centralityBin == 4) centrality = 7; // 60-80%
  //
  hist->GetAxis(1)->SetRangeUser(centrality,centrality);   // select centrality bin
  Float_t norm = histCentr->GetBinContent(centrality+2);
  if (centralityBin != 1) {
    hist->GetAxis(1)->SetRangeUser(centrality,centrality+1);   // select centrality bin
    norm += histCentr->GetBinContent(centrality+3);
  }
  //
  // apply cuts -- Has to be consistent with efficiency
  //
  hist->GetAxis(4)->SetRangeUser(-0.49, 0.49);             // select rapidity range
  hist->GetAxis(3)->SetRangeUser(sign,sign);               // select anti-deuterons
  hist->GetAxis(8)->SetRangeUser(-0.5,0.5);  // DCA-cut / TODO: do proper unfolding
  hist->GetAxis(5)->SetRangeUser(-2.5,2.5);  // TPC-PID cut  
  //
  TH1D * spec    = hist->Projection(2);
  spec->SetNameTitle("spec","SPEC");
  TH1D * rawSpec = hist->Projection(2);
  rawSpec->Reset();
  for(Int_t iBin = 0; iBin < spec->GetXaxis()->GetNbins(); iBin++) {
    Double_t pT = spec->GetXaxis()->GetBinCenter(iBin);
    if (pT > 0.6 && pT < 1.2) {
      rawSpec->SetBinContent(iBin, spec->GetBinContent(iBin));
      rawSpec->SetBinError(iBin, spec->GetBinError(iBin));
    }
  }
  //
  //
  NormalizeSpectrum(rawSpec,1,norm);
  //
  if (sign < 0) rawSpec->SetNameTitle(Form("cent%i_sign%s_TPC",centralityBin,"Neg"),
				      Form("cent%i_sign%s_TPC",centralityBin,"Neg"));
  if (sign > 0) rawSpec->SetNameTitle(Form("cent%i_sign%s_TPC",centralityBin,"Pos"),
				      Form("cent%i_sign%s_TPC",centralityBin,"Pos"));
  //
  Int_t colorList[9] = {600+4, 600+3, 600+2, 600+1, 600, 600-4, 600-7, 600-9, 600-10};
  rawSpec->SetMarkerStyle(20);
  rawSpec->SetMarkerSize(1.4);
  rawSpec->SetMarkerColor(colorList[centrality]);
  rawSpec->SetLineColor(colorList[centrality]);
  //
  hist->GetAxis(5)->SetRangeUser(-1000.,1000);  // TPC-PID cut  
  hist->GetAxis(6)->SetRangeUser(-1000.,1000);  // TOF-PID cut  
  hist->GetAxis(7)->SetRangeUser(-1000.,1000);  // TOF-PID cut    
  hist->GetAxis(8)->SetRangeUser(-1000.,1000);  // TOF-PID cut    

  //
  return rawSpec;

}



//_______________________________________________________________________
TH1D * MakeRawSpectra(TList * list, Int_t sign, Int_t centralityBin) {
  //
  // Make raw spectra for given sign and centrality bin
  //
  //
  // (0.) assumed particle: 0. deuteron, 1. triton, 2. He-3
  // (1.) multiplicity or centrality -- number of accepted ESD tracks per events (deprecated), but now classes from 1 to 10, 0: Min. Bias
  // (2.) pT
  // (3.) sign
  // (4.) rapidity --> filled 4xW
  // (5.)  pull TPC dEx --> filled 4x
  // (6.) has valid TOF pid signal
  // (7.) nsigma TOF --> filled 4x XXXXXXXXX no mass*mass
  // (8..) dca_xy
  // (9.) CODE -- only MC 0-generated, 1-true rec. primaries, 2-misident prim, 3-second weak, 4-second material, 5-misident sec
  //
  TH1D * histCentr = (TH1D *)  list->FindObject("fHistCentrality");
  //
  THnSparseF * hist = (THnSparseF *) list->FindObject("fHistRealTracks");
  hist->GetAxis(0)->SetRangeUser(0,0);                     // select deuterons
  //
  // centrality 0: 0-5% / 1: 5-10% / 2: 10-20% / 3: 20-30% / 4: 30-40% / 5: 40-50% / 6: 50-60% / 7: 60-70% / 8: 70-80%
  //
  Int_t centrality = 0;
  if (centralityBin == 0) centrality = 0; //  0-10%
  if (centralityBin == 1) centrality = 2; // 10-20%
  if (centralityBin == 2) centrality = 3; // 20-40%
  if (centralityBin == 3) centrality = 5; // 40-60%
  if (centralityBin == 4) centrality = 7; // 60-80%
  //
  hist->GetAxis(1)->SetRangeUser(centrality,centrality);   // select centrality bin
  Float_t norm = histCentr->GetBinContent(centrality+2);
  if (centralityBin != 1) {
    hist->GetAxis(1)->SetRangeUser(centrality,centrality+1);   // select centrality bin
    norm += histCentr->GetBinContent(centrality+3);
  }
  //
  //
  //
  hist->GetAxis(4)->SetRangeUser(-0.49, 0.49);             // select rapidity range
  hist->GetAxis(3)->SetRangeUser(sign,sign);               // select anti-deuterons
  //
  hist->GetAxis(8)->SetRangeUser(-0.5,0.5);  // DCA-cut / TODO: do proper unfolding
  //
  hist->GetAxis(5)->SetRangeUser(-2.5,2.5);  // TPC-PID cut  
  //hist->GetAxis(7)->SetRangeUser(-2.,2.5);
  //
  // PID in the TOF
  //
  hist->GetAxis(6)->SetRangeUser(1,1);        // TOF-PID cut: require hasTOF
  //
  TH1D * rawSpec = hist->Projection(2);
  rawSpec->Reset();
  if (sign < 0) rawSpec->SetNameTitle(Form("cent%i_sign%s",centralityBin,"Neg"),
				      Form("cent%i_sign%s",centralityBin,"Neg"));
  if (sign > 0) rawSpec->SetNameTitle(Form("cent%i_sign%s",centralityBin,"Pos"),
				      Form("cent%i_sign%s",centralityBin,"Pos"));
  //
  // --> simple PID: hist->GetAxis(7)->SetRangeUser(-0.8.,0.8);  // TOF-PID cut
  //TF1 fitFunc("fitFunc","gaus(0) + [3] + [4]*x",-1.5,1.5);
  TF1 fTOFsignal("fTOFsignal", "(x <= ([3] + [1])) * [0] * TMath::Gaus(x, [1], [2]) + (x > ([3] + [1])) * [0] * TMath::Gaus([3] + [1], [1], [2]) * TMath::Exp(-([3]) * (x - [3] - [1]) / ([2] * [2]))    +    [4] + [5]*x   +   [6]*TMath::Exp(-[7]*x) ", -2.2,2.2); //0:norm, 1:mean, 2:sigma, 3:tail
  //
  //
  TH2D * m2fit = (TH2D *) hist->Projection(7,2);
  m2fit->SetNameTitle(Form("m2fits_%i_%i",sign,centralityBin),
		      Form("m**2 fits for sign %i and centrality %i",sign,centralityBin));
  hist->GetAxis(5)->SetRangeUser(-1000.,1000);  // TPC-PID cut  
  hist->GetAxis(6)->SetRangeUser(-1000.,1000);  // TOF-PID cut  
  hist->GetAxis(7)->SetRangeUser(-1000.,1000);  // TOF-PID cut    
  hist->GetAxis(8)->SetRangeUser(-1000.,1000);  // TOF-PID cut    
  //
  // rebin because of statistics
  //
  m2fit->RebinY(2);
  //
  TCanvas * canvM2fits = new TCanvas(Form("canvM2fits_%i_%i",sign,centralityBin),
				     Form("m**2 fits for sign %i and centrality %i",sign,centralityBin));
  canvM2fits->Print(Form("QA/M2fits_%i_%i.pdf(",sign,centralityBin));
  //
  Double_t oldParStartValue[8] = {664.78 , 0.0178744 , 0.212441 , 0.229438 , 171.889, 0. , 0.0203292};
  //
  for(Int_t iBin = 1; iBin < m2fit->GetXaxis()->GetNbins(); iBin++) {
    //
    Float_t ptBin = m2fit->GetXaxis()->GetBinCenter(iBin);
    if (ptBin < 0.6) continue;
    //
    TH1D * m2distr = m2fit->ProjectionY(Form("m2_%f",ptBin),iBin,iBin);
    //    m2distr->RebinX(2);
    //
    m2distr->SetMarkerColor(kBlue);
    m2distr->SetMarkerStyle(20);
    m2distr->SetMarkerSize(1.4);
    //
    // initialize signal with background parameters
    //
    fTOFsignal.SetParameters(oldParStartValue);
    //
    // improve fit convergence
    //
    fTOFsignal.SetParLimits(1,-0.2,0.2);
    fTOFsignal.SetParLimits(2,0.05,0.8);
    fTOFsignal.SetParLimits(3,0.,1.5);
    //
    fTOFsignal.SetParameter(4, m2distr->GetBinContent(m2distr->GetXaxis()->FindBin(-1.)));
    fTOFsignal.SetParLimits(4, 0.,  m2distr->GetBinContent(m2distr->GetXaxis()->FindBin(0.)));
    //
    fTOFsignal.SetParLimits(7,0.,10.);
    fTOFsignal.SetParLimits(6,0., 5.);
    //
    if (centralityBin < 3 && ptBin < 2.4) {
      fTOFsignal.SetRange(-1.3,2.2);
    } else{
      fTOFsignal.SetRange(-2.2,2.2);
    }
    //
    Int_t fitStatus = m2distr->Fit(&fTOFsignal, "QNR");
    cout << fTOFsignal.GetParameter(3) << endl;
    //
    for(Int_t ival =0; ival < 7; ival++) oldParStartValue[ival] = fTOFsignal.GetParameter(ival);
    //
    canvM2fits->cd();
    m2distr->GetYaxis()->SetRangeUser(0.1, m2distr->GetBinContent(m2distr->GetXaxis()->FindBin(0.))*1.5);
    m2distr->DrawCopy("EP");
    fTOFsignal.DrawCopy("same");
    //
    //
    // bin counting at low pt and subtract the background at high pt
    //
    Float_t yield =1;//  m2distr->Integral(m2distr->GetXaxis()->FindBin(-0.5), m2distr->GetXaxis()->FindBin(+0.5)) - 
      (m2distr->Integral(m2distr->GetXaxis()->FindBin(-1.), m2distr->GetXaxis()->FindBin(-0.5)) + m2distr->Integral(m2distr->GetXaxis()->FindBin(0.5), m2distr->GetXaxis()->FindBin(1.)));
    //
    //
    //
    cout << "pT: " << ptBin 
	 << " , " << fTOFsignal.GetParameter(0)
	 << " , " << fTOFsignal.GetParameter(1)
	 << " , " << fTOFsignal.GetParameter(2)
	 << " , " << fTOFsignal.GetParameter(3)
	 << " , " << fTOFsignal.GetParameter(4)
	 << " , " << fTOFsignal.GetParameter(5)
	 << " , " << fTOFsignal.GetParameter(6)
	 << " , " << fTOFsignal.GetParameter(7) << endl;
    //
    //
    fTOFsignal.SetParameter(4,0.);
    fTOFsignal.SetParameter(5,0.);
    fTOFsignal.SetParameter(6,0.);
    //
    //if (ptBin > 2.3) 
    yield = fTOFsignal.Integral(-1.,1.5)/m2distr->GetBinWidth(10);
    //     yield = m2distr->Integral(m2distr->GetXaxis()->FindBin(-1.), m2distr->GetXaxis()->FindBin(+1.));
    //
    Float_t yieldErr = TMath::Sqrt(yield);
    //    if (fTOFsignal.GetParameter(0) != 0 ) yieldErr = yield*fTOFsignal.GetParError(0)/fTOFsignal.GetParameter(0);
    //
    Float_t maxPt = 4.2;
    if (centralityBin > 2) maxPt = 3.2;
    if (ptBin > 0.5 && ptBin < maxPt && yield > 0) {
      rawSpec->SetBinContent(iBin, yield);
      rawSpec->SetBinError(iBin, yieldErr);
    }
    //
    //
    canvM2fits->Print(Form("QA/M2fits_%i_%i.pdf",sign,centralityBin));
  }
  canvM2fits->Print(Form("QA/M2fits_%i_%i.pdf)",sign,centralityBin));
  //
  rawSpec->Sumw2();
  //
  NormalizeSpectrum(rawSpec,1,norm);
  //
  Int_t colorList[9] = {600+4, 600+3, 600+2, 600+1, 600, 600-4, 600-7, 600-9, 600-10};
  rawSpec->SetMarkerStyle(24);
  rawSpec->SetMarkerSize(1.4);
  rawSpec->SetMarkerColor(colorList[centrality]);
  rawSpec->SetLineColor(colorList[centrality]);
  //
  return rawSpec;

}

//_______________________________________________________________________
void NormalizeSpectrum(TH1D * spectrum, Float_t dy, Float_t numberOfEvents) {
  //
  // make (1 / Nev)*  dN/(dy*dpt)
  //
  spectrum->Scale(1./dy);
  spectrum->Scale(1./numberOfEvents);
  //    
  Int_t nBins = spectrum->GetNbinsX(); 
  for(Int_t i=0; i < nBins+1; i++) {
    Double_t Content =spectrum->GetBinContent(i);
    Double_t error =spectrum->GetBinError(i);
    if (spectrum->GetBinWidth(i) == 0) continue;
    spectrum->SetBinContent(i, Content/spectrum->GetBinWidth(i));
    spectrum->SetBinError(i, error/spectrum->GetBinWidth(i));
  }

}



//_______________________________________________________________________
void MakeEfficiency() {
  //
  // make efficiencies for TPC and TOF part.
  //
  TFile inFileMCold(fileNameMcEnhancedOld);
  TList * listMCold = (TList * ) inFileMCold.Get("akalweit_Nuclei");
  //
  //
  // TPC and tracking as well as matching efficiencies
  //
  //
  TH1D * efficiencyTrackingNegOld = ExtractEfficiency(listMCold, -1, 0, kFALSE);
  TH1D * efficiencyTrackingPosOld = ExtractEfficiency(listMCold, +1, 0, kFALSE);
  efficiencyTrackingNegOld->SetNameTitle("efficiencyTrackingNegOld","efficiencyTrackingNegOld");
  efficiencyTrackingPosOld->SetNameTitle("efficiencyTrackingPosOld","efficiencyTrackingPosOld");
  //
  TH1D * efficiencyTofNegOld = ExtractEfficiency(listMCold, -1, 0, kTRUE);
  TH1D * efficiencyTofPosOld = ExtractEfficiency(listMCold, +1, 0, kTRUE);
  efficiencyTofNegOld->SetNameTitle("efficiencyTofNegOld","efficiencyTofNegOld");
  efficiencyTofPosOld->SetNameTitle("efficiencyTofPosOld","efficiencyTofPosOld");
  //
  TF1 * etaGenCorrection = MakeEtaRapidityGenCorrection(kFALSE);
  efficiencyTrackingPosOld->Divide(etaGenCorrection);
  efficiencyTrackingNegOld->Divide(etaGenCorrection);
  efficiencyTofPosOld->Divide(etaGenCorrection);
  efficiencyTofNegOld->Divide(etaGenCorrection);
  //
  // new simulation
  //
  TFile inFileMCnew(fileNameMcEnhancedNew);
  TList * listMCnew = (TList * ) inFileMCnew.Get("akalweit_Nuclei");
  //
  TH1D * efficiencyTrackingNegNew = ExtractEfficiency(listMCnew, -1, 0, kFALSE);
  TH1D * efficiencyTrackingPosNew = ExtractEfficiency(listMCnew, +1, 0, kFALSE);
  efficiencyTrackingNegNew->SetNameTitle("efficiencyTrackingNegNew","efficiencyTrackingNegNew");
  efficiencyTrackingPosNew->SetNameTitle("efficiencyTrackingPosNew","efficiencyTrackingPosNew");
  efficiencyTrackingNegNew->SetMarkerStyle(21);
  efficiencyTrackingPosNew->SetMarkerStyle(21);
  //
  TH1D * efficiencyTofNegNew = ExtractEfficiency(listMCnew, -1, 0, kTRUE);
  TH1D * efficiencyTofPosNew = ExtractEfficiency(listMCnew, +1, 0, kTRUE);
  efficiencyTofNegNew->SetNameTitle("efficiencyTofNegNew","efficiencyTofNegNew");
  efficiencyTofPosNew->SetNameTitle("efficiencyTofPosNew","efficiencyTofPosNew");
  efficiencyTofNegNew->SetMarkerStyle(24);
  efficiencyTofPosNew->SetMarkerStyle(24);  
  //
  TCanvas * canvEfficiencyTracking = new TCanvas("canvEfficiencyTracking","Efficiencies Tracking");
  efficiencyTrackingNegOld->GetYaxis()->SetRangeUser(0.,1.3);
  efficiencyTrackingNegOld->DrawCopy("E");
  efficiencyTrackingPosOld->DrawCopy("ESame");
  //
  efficiencyTrackingNegNew->DrawCopy("ESame");
  efficiencyTrackingPosNew->DrawCopy("ESame");
  //
  TCanvas * canvEfficiencyTof = new TCanvas("canvEfficiencyTof","Efficiencies Tracking");
  efficiencyTofNegNew->GetYaxis()->SetRangeUser(0.,1.3);
  efficiencyTofNegNew->DrawCopy("E");
  efficiencyTofPosNew->DrawCopy("ESame");
  efficiencyTofNegOld->DrawCopy("ESAME");
  efficiencyTofPosOld->DrawCopy("ESame");
  //
  canvEfficiencyTracking->Print("QAplots/efficiencyTracking.pdf");
  canvEfficiencyTof->Print("QAplots/efficiencyTof.pdf");
  //
  // store output
  //
  TFile * outFile = new TFile("output/efficiencies.root","RECREATE");
  efficiencyTrackingNegNew->Write();
  efficiencyTrackingPosNew->Write();
  efficiencyTofNegNew->Write();
  efficiencyTofPosNew->Write();
  outFile->Close();
  //
  //
  TCanvas * canvEfficiencyMatching = new TCanvas("canvEfficiencyMatching","matching efficiency");
  efficiencyTofNegNew->Divide(efficiencyTrackingNegNew);
  efficiencyTofPosNew->Divide(efficiencyTrackingPosNew);
  efficiencyTofPosNew->DrawCopy();
  efficiencyTofNegNew->DrawCopy("SAME");
  //
  TCanvas * canvEfficiencyRatio = new TCanvas("canvEfficiencyRatio","Efficiencies ratio");
  efficiencyTrackingPosNew->Divide(efficiencyTrackingPosOld);
  efficiencyTrackingPosNew->DrawCopy();
  efficiencyTrackingNegNew->Divide(efficiencyTrackingNegOld);
  efficiencyTrackingNegNew->DrawCopy("SAME");

  

}



//_______________________________________________________________________
TH1D * ExtractEfficiency(TList * listMC, Int_t sign, Int_t centrality, Bool_t isTOF) {
  //
  // Extract the efficiency
  //
  //
  // (0.) assumed particle: 0. deuteron, 1. triton, 2. He-3
  // (1.) multiplicity or centrality -- number of accepted ESD tracks per events (deprecated), but now classes from 1 to 10, 0: Min. Bias
  // (2.) pT
  // (3.) sign
  // (4.) rapidity --> filled 4x
  // (5.)  pull TPC dEx --> filled 4x
  // (6.) has valid TOF pid signal
  // (7.) nsigma TOF --> filled 4x XXXXXXXXX no mass*mass
  // (8..) dca_xy
  // (9.) CODE -- only MC 0-generated, 1-true rec. primaries, 2-misident prim, 3-second weak, 4-second material, 5-misident sec
  //
  THnSparseF * hist = (THnSparseF *) listMC->FindObject("fHistMCparticles");
  //
  // common selections for generated and reconstructed particles
  // 
  hist->GetAxis(0)->SetRangeUser(0,0);                     // select deuterons
  hist->GetAxis(4)->SetRangeUser(-0.49, 0.49);             // select rapidity range
  hist->GetAxis(3)->SetRangeUser(sign,sign);               // select anti-deuterons
  //assume eff. indepedent of centrality  ---> hist->GetAxis(1)->SetRangeUser(centrality,centrality);   // select centrality bin
  //
  hist->GetAxis(9)->SetRangeUser(0,0);
  TH1D * generated = hist->Projection(2);
  generated->SetNameTitle(Form("generated_cent%i_sign%i",centrality,sign),
			  Form("generated_cent%i_sign%i",centrality,sign));
  //
  // further cuts on reconstructed particles
  //
  hist->GetAxis(8)->SetRangeUser(-0.5,0.5);  // DCA-cut / TODO: do proper unfolding
  //
  hist->GetAxis(5)->SetRangeUser(-4.5,4.5);  // TPC-PID cut  
  //
  if (isTOF) {
    //    hist->GetAxis(5)->SetRangeUser(-2.,2.);  // TPC-PID cut  
    hist->GetAxis(6)->SetRangeUser(1.,1.);  // TOF-PID cut  
    hist->GetAxis(7)->SetRangeUser(-1.2,1.2);  // TOF-PID cut  
  }
  //
  hist->GetAxis(9)->SetRangeUser(1,1);
  TH1D * rawSpec = hist->Projection(2);
  rawSpec->Sumw2();
  rawSpec->SetNameTitle(Form("eff_cent%i_sign%i",centrality,sign),
			Form("eff_cent%i_sign%i",centrality,sign));
  //
  rawSpec->Divide(generated);
  //
  if (sign > 0) {
    rawSpec->SetMarkerColor(kRed);
    rawSpec->SetLineColor(kRed);
  } else{
    rawSpec->SetMarkerColor(kBlue);
    rawSpec->SetLineColor(kBlue);
  }
  //
  // reset ranges
  //
  hist->GetAxis(5)->SetRangeUser(-1000.,1000);  // TPC-PID cut  
  hist->GetAxis(6)->SetRangeUser(-1000.,1000);  // TOF-PID cut  
  hist->GetAxis(7)->SetRangeUser(-1000.,1000);  // TOF-PID cut    
  hist->GetAxis(8)->SetRangeUser(-1000.,1000);  // TOF-PID cut    
  //
  //
  //
  return rawSpec;

}

//__________________________________________________________________
TF1 * MakeEtaRapidityGenCorrection(Bool_t drawQA) {
  //
  // the enhanced sample LHC11b9_1 has a stupid cut on the generated level
  //
  TF1 * funcDeut = new TF1("funcDeut","TMath::ASinH(TMath::Sqrt(1 + (1.876*1.876)/(x*x))*TMath::SinH(0.5))",0.5,5);
  TF1 * etaCut = new TF1("etaCut","0.9",0.5,5);
  //
  funcDeut->SetLineColor(kBlue);
  //
  if (drawQA) {
    TCanvas * canv1 = new TCanvas("canv1","original functions");
    funcDeut->DrawCopy();
    funcDeut->GetHistogram()->GetYaxis()->SetRange(0,1.8);
    etaCut->DrawCopy("same");
  }
  //
  TF1 * funcCorr = new TF1("funcCorr","funcDeut/etaCut*(x - 1.1 < 0) + 1*(x - 1.1 >= 0)",0.5,2);
  if (drawQA) {
    TCanvas * canv2 = new TCanvas("canv2","correction function");
    funcCorr->Draw();
  }
  //
  return funcCorr;

}


//__________________________________________________________________
void MakeQAplots() {
  //
  // make the QA plots
  //
  TCanvas * canvData          =  PlotTpcQA(fileNameData,          kFALSE);
  TCanvas * canvMcEnhancedNew =  PlotTpcQA(fileNameMcEnhancedNew, kTRUE);
  TCanvas * canvMcUnEnhanced  =  PlotTpcQA(fileNameMcUnEnhanced,  kTRUE, kTRUE);
  TCanvas * canvMcEnhancedOld =  PlotTpcQA(fileNameMcEnhancedOld, kTRUE, kTRUE);
  //
  TCanvas * canvQA = new TCanvas("canvQA","canvQA");
  canvQA->Print("QAplots/QAplots.pdf(");
  //
  // add all QA plots to file
  //
  canvData->Print("QAplots/QAplots.pdf");
  canvMcEnhancedNew->Print("QAplots/QAplots.pdf");
  canvMcUnEnhanced->Print("QAplots/QAplots.pdf");
  canvMcEnhancedOld->Print("QAplots/QAplots.pdf");
  //
  canvQA->Print("QAplots/QAplots.pdf)");
  //
  // spectra QA
  //
  TFile inFile(fileNameData);
  TList * list = (TList * ) inFile.Get("akalweit_Nuclei");
  PlotSpectraQA(list);


}


//__________________________________________________________________
TCanvas * PlotTpcQA(Char_t * fileName, Bool_t isMC, Bool_t isMCold) {
  //
  // plot QA of TPC-PID
  //
  TFile inFileMC(fileName);
  TList * list = (TList * ) inFileMC.Get("akalweit_Nuclei");
  //
  TF1 * fBBlines[6];
  const Double_t masses[6] = {0.000511, 0.138, 0.4936, 0.938, 2*0.938, 3*0.938};
  //
  // set BB parameters
  //
  Double_t parData[5] = {1.45802, 27.4992, 4.00313e-15, 2.48485, 8.31768};
  Double_t parMC[5] = {1.17329, 27.4992, 4.00313e-15, 2.1204316, 4.1373729}; 
  Double_t parMCold[5] = {1.17329, 27.4992, 4.00313e-15, 2.35563, 9.47569}; // OLD FOR LHC11b9_1 !!
  //
  for(Int_t ii = 0; ii < 6; ii++) {
    fBBlines[ii] = new TF1(Form("fBB_%i",ii),"AliExternalTrackParam::BetheBlochAleph(x/([0]),[1],[2],[3], [4], [5])",0.3,10);
    
    fBBlines[ii]->SetParameters(masses[ii], parData[0], parData[1], parData[2], parData[3], parData[4]);
    if (isMC) {
      fBBlines[ii]->SetParameters(masses[ii], parMC[0], parMC[1], parMC[2], parMC[3], parMC[4]);
      if (isMCold) fBBlines[ii]->SetParameters(masses[ii], parMCold[0], parMCold[1], parMCold[2], parMCold[3], parMCold[4]);
    }
    fBBlines[ii]->SetLineColor(kRed);
    fBBlines[ii]->SetLineWidth(2);
  }
  //
  TCanvas * canvDeDx = new TCanvas(Form("canvDeDxTpcQA_%s",fileName),"control histogram for dE/dx");
  canvDeDx->Divide(1,2);
  canvDeDx->cd(1);
  TH3D * histTPC = (TH3D *) list->FindObject("fHistPidQA");
  histTPC->GetZaxis()->SetRangeUser(-1,-1);
  TH2D * histNegTPC = (TH2D *) histTPC->Project3D("yx");
  histNegTPC->SetNameTitle("histNegTPC", Form("histNegTPC_%s", fileName));
  gPad->SetLogx();
  histNegTPC->DrawCopy("colZ");
  for(Int_t ii = 0; ii < 6; ii++) fBBlines[ii]->DrawCopy("same");
  //
  canvDeDx->cd(2);
  histTPC->GetZaxis()->SetRangeUser(+1,+1);
  TH2D * histPosTPC = (TH2D*) histTPC->Project3D("yx");
  histPosTPC->SetNameTitle("histPosTPC", Form("histPosTPC_%s", fileName));
  gPad->SetLogx();
  histPosTPC->DrawCopy("colZ");
  //  for(Int_t ii = 0; ii < 6; ii++) fBBlines[ii]->DrawCopy("same");
  fBBlines[4]->DrawCopy("same"); // Draw deuteron line
  //
  // He-3 goes extra
  //
  TF1 * funcHel3 = new TF1("funcHel3","4*AliExternalTrackParam::BetheBlochAleph(2*x/(0.938*3),1.74962,27.4992,4.00313e-15,2.42485,8.31768)",0.2,6.);
  if (isMC) funcHel3 = new TF1("funcHel3MC","4*AliExternalTrackParam::BetheBlochAleph(2*x/(0.938*3), 1.17329, 27.4992, 4.00313e-15, 2.1204316, 4.1373729)",0.2,6.);
  //
  fBBlines[5]->DrawCopy("same"); // Draw deuteron line
  funcHel3->DrawCopy("same");

  return canvDeDx;

}



//_______________________________________________________________________
void PlotSpectraQA(TList * list, Int_t particleType, Int_t sign) {
  //
  // Make some basic QA plots for TOF related PID
  //
  THnSparseF * hist = (THnSparseF *) list->FindObject("fHistRealTracks");
  hist->GetAxis(4)->SetRangeUser(-0.49, 0.49);             // select Rapidity range
  hist->GetAxis(0)->SetRangeUser(particleType,particleType); // select deuterons
  hist->GetAxis(3)->SetRangeUser(sign,sign); // select deuterons
  //
  TCanvas * canvSpectraQA1 = new TCanvas("canvSpectraQA1","QA for nsigma TPC");
  TH2F * histTpcNsigma = (TH2F *) hist->Projection(5,2);
  histTpcNsigma->SetNameTitle("histTpcNsigma","histTpcNsigma");
  histTpcNsigma->DrawCopy("colZ");
  //
  TCanvas * canvSpectraQA2 = new TCanvas("canvSpectraQA2","QA for nsigma TOF");
  hist->GetAxis(6)->SetRangeUser(1,1);   // require proper match to TOF
  hist->GetAxis(5)->SetRangeUser(-4.,4); // pre-select tracks with TPC-PID
  TH2F * histTofNsigma = (TH2F *) hist->Projection(7,2);
  histTofNsigma->RebinY(4);
  histTofNsigma->SetNameTitle("histTofNsigma","histTofNsigma");
  histTofNsigma->DrawCopy("colZ");

}



//_______________________________________________________________________
void MakeMaterialCorrection(){
  //
  // compare fitted values with MC pt-dependence
  //
  TFile outFile("output/materialCorrection.root","RECREATE");
  outFile.Close();
  //
  Int_t kMaxCentrality = 5;
  TFile * fileIn = TFile::Open("output/efficiencies.root");
  //
  //
  for(Int_t iCentr = 0; iCentr < kMaxCentrality; iCentr++) {
    //
    TH1D * matCorrMC = (TH1D *) fileIn->Get("efficiencyTrackingNegNew");
    matCorrMC->Reset();
    matCorrMC->SetNameTitle(Form("matCorrMC_%i",iCentr), Form("matCorrMC_i",iCentr));
    //
    TH1D * matCorr = (TH1D *) fileIn->Get("efficiencyTrackingNegNew");
    matCorr->SetLineColor(kRed);
    matCorr->Reset();
    matCorr->SetNameTitle(Form("matCorr_%i",iCentr), Form("matCorr_i",iCentr));    
    //
    for(Int_t iBin = 0; iBin < matCorrMC->GetXaxis()->GetNbins(); iBin++) {
      Double_t pT = matCorrMC->GetXaxis()->GetBinCenter(iBin);
      if (pT > 0.6 && pT < 2.8) {
	Float_t corr = GetMaterialCorrection(pT,iCentr,kTRUE);
	matCorrMC->SetBinContent(iBin, corr);
	if (pT < 2.) {
	  Float_t corrReal = GetMaterialCorrection(pT,iCentr,kFALSE);
	  matCorr->SetBinContent(iBin, corrReal);
	}
      }
    }
    //
    //
    TCanvas * canvMaterial = new TCanvas("canvMaterial","canvMaterial");
    canvMaterial->cd();
    if (iCentr == 0) {
      matCorr->DrawCopy();
      matCorrMC->DrawCopy("SAME");
    } else {
      matCorrMC->DrawCopy("SAME");
    }
    TFile * outputFile = new TFile("output/materialCorrection.root","UPDATE");
    matCorr->Write();
    outputFile->Close();
    delete outputFile;
  }


}



//_______________________________________________________________________
Float_t GetMaterialCorrection(Float_t ptBin, Int_t centralityBin, Bool_t pureMC) {
  //
  // subtract the material contamination from positive particles
  //
  //
  Float_t dcaCutInAnalysis = 0.5;
  //
  TFile * inFileData = TFile::Open("data/dataFinal.root");
  TList * listData = (TList *) inFileData->Get("akalweit_Nuclei");
  THnSparse * histData = (THnSparse *) listData->FindObject("fHistRealTracks");
  //
  TFile * inFileMC = TFile::Open("MC/McCombined.root");
  TList * listMC = (TList *) inFileMC->Get("akalweit_Nuclei");
  THnSparse * histMC = (THnSparse *) listMC->FindObject("fHistMCparticles");
  //
  //
  // (1.) select deuterons
  //
  histData->GetAxis(0)->SetRangeUser(0,0);
  histMC->GetAxis(0)->SetRangeUser(0,0);
  histData->GetAxis(3)->SetRangeUser(+1,+1); // sign
  histMC->GetAxis(3)->SetRangeUser(+1,+1);   // sign
  //
  histData->GetAxis(4)->SetRangeUser(-0.49, 0.49);             // select rapidity range
  histMC->GetAxis(4)->SetRangeUser(-0.49, 0.49);             // select rapidity range
  //
  //  hist->GetAxis(8)->SetRangeUser(-1.,1.);  // DCA-cut / TODO: do proper unfolding
  histData->GetAxis(5)->SetRangeUser(-2.5,2.5);  // TPC-PID cut  
  histData->GetAxis(6)->SetRangeUser(1.,1.);  // TOF-PID cut  
  histData->GetAxis(7)->SetRangeUser(-0.5,0.5);  // TOF-PID cut  
  //
  // (2.) select pt-range
  //
  histData->GetAxis(2)->SetRangeUser(ptBin,ptBin);
  histMC->GetAxis(2)->SetRangeUser(ptBin,ptBin);
  //
  // (4.a) get different MC templates
  //
  histMC->GetAxis(9)->SetRangeUser(1,1);
  TH1D * prim = (TH1D*) histMC->Projection(8);
  prim->SetNameTitle("prim","prim");
  prim->SetLineColor(kRed);
  //
  histMC->GetAxis(9)->SetRangeUser(4,4);
  //
  // centrality can oonly be selected after the primary yield
  //
  Int_t centrality = 0;
  if (centralityBin == 0) centrality = 0; //  0-10%
  if (centralityBin == 1) centrality = 2; // 10-20%
  if (centralityBin == 2) centrality = 3; // 20-40%
  if (centralityBin == 3) centrality = 5; // 40-60%
  if (centralityBin == 4) centrality = 7; // 60-80%
  //
  histData->GetAxis(1)->SetRangeUser(centrality,centrality);       // select centrality bin
  histMC->GetAxis(1)->SetRangeUser(centrality,centrality);       // select centrality bin
  if (centralityBin != 1) {
    histData->GetAxis(1)->SetRangeUser(centrality,centrality+1);   // select centrality bin
    histMC->GetAxis(1)->SetRangeUser(centrality,centrality+1);     // select centrality bin
  }
  //
  TH1D * material = (TH1D*) histMC->Projection(8);
  histMC->GetAxis(2)->SetRangeUser(ptBin,ptBin);
  material->SetNameTitle("material","material");  
  material->SetLineColor(kGreen);
  //
  TH1D * dcaDistr = (TH1D*) histData->Projection(8);
  //
  // if only MC, we just return the values
  //
  if (pureMC) {
    Int_t fractionBinLow = dcaDistr->FindBin(-dcaCutInAnalysis);
    Int_t fractionBinUp  = dcaDistr->FindBin(+dcaCutInAnalysis);
    Float_t materialFraction = 0.;
    prim->Add(material); // has to be scaled with number of events somehow
    materialFraction = material->Integral(fractionBinLow,fractionBinUp)/prim->Integral(fractionBinLow,fractionBinUp);
    //
    delete listData;
    delete listMC;
    inFileData->Close();
    inFileMC->Close();
    delete inFileData;
    delete inFileMC;
    //
    return materialFraction;
  }
  //
  // (6.) do the fit
  //
  Float_t dcaUp = 0.5;//0.0182 + 0.035/TMath::Power(ptBin,1.01);
  Float_t dcaLow  = -1.*dcaUp;
  Int_t binLow = dcaDistr->GetXaxis()->FindBin(dcaLow);
  Int_t binUp  = dcaDistr->GetXaxis()->FindBin(dcaUp);
  //
  TObjArray *mcShapes = new TObjArray(3);        // MC histograms are put in this array
  mcShapes->Add(prim);
  mcShapes->Add(material);
  //
  TFractionFitter* fit = new TFractionFitter(dcaDistr, mcShapes); // initialise
  fit->SetRangeX(binLow,binUp);
  fit->Constrain(1,0.,1.);
  fit->Constrain(2,0.,1.);
  //
  //
  //
  Int_t status = fit->Fit();
  if (status==0) fit->GetPlot()->Draw("same");
  //
  // (7.) Rescaling of histograms and final plots
  //
  TH1D * result = 0x0;
  Double_t yieldPrim, yieldSec, yieldMat, error;
  if (status == 0) {
    fit->GetResult(0,yieldPrim,error);
    fit->GetResult(1,yieldMat,error);
    result = (TH1D*) fit->GetPlot();
    result->SetLineWidth(3);
  }
  //
  prim->Scale(1./prim->Integral(binLow,binUp));
  if (status == 0) prim->Scale(yieldPrim*result->Integral(binLow,binUp));
  //
  material->Scale(1./material->Integral(binLow,binUp));
  if (status == 0) material->Scale(yieldMat*result->Integral(binLow,binUp));
  //
  NormalizeSpectrum(dcaDistr,1,1);
  NormalizeSpectrum(prim,1,1);
  NormalizeSpectrum(material,1,1);
  if (status == 0) NormalizeSpectrum(result,1,1);
  //
  TH1D * sumHist = (TH1D*) prim->Clone(); // result is not equal to weighted sum ---> see FractionFitter doku and paper (?)
  sumHist->SetNameTitle("sumHist","sumHist");
  sumHist->Add(material);
  sumHist->SetLineColor(kOrange);
  //
  TCanvas * canvFeed = new TCanvas("canvFeed", "feed down and material correction");
  dcaDistr->SetMarkerStyle(24);  dcaDistr->SetMarkerSize(1.4);
  dcaDistr->DrawCopy("Ep");
  prim->DrawCopy("same");
  material->DrawCopy("same");
  sumHist->DrawCopy("same");
  //
  // Final-Results
  //
  Int_t fractionBinLow = dcaDistr->FindBin(-dcaCutInAnalysis);
  Int_t fractionBinUp  = dcaDistr->FindBin(+dcaCutInAnalysis);
  //
  Float_t materialFraction = 0.;
  if (status == 0) {
    result->DrawCopy("same");
    materialFraction = material->Integral(fractionBinLow,fractionBinUp)/dcaDistr->Integral(fractionBinLow,fractionBinUp);
  }
  Printf("RESULTING MATERIAL FRACTION: %f", materialFraction);
  Printf("TEMPLATE  MATERIAL FRACTION: %f", yieldMat);
  //
  delete sumHist;
  delete result;
  delete mcShapes;
  delete fit;
  //  delete histData;
  //delete histMC;
  delete listData;
  delete listMC;
  inFileData->Close();
  inFileMC->Close();
  delete inFileData;
  delete inFileMC;
  //
  return materialFraction;

}
 MakeFinalResults.C:1
 MakeFinalResults.C:2
 MakeFinalResults.C:3
 MakeFinalResults.C:4
 MakeFinalResults.C:5
 MakeFinalResults.C:6
 MakeFinalResults.C:7
 MakeFinalResults.C:8
 MakeFinalResults.C:9
 MakeFinalResults.C:10
 MakeFinalResults.C:11
 MakeFinalResults.C:12
 MakeFinalResults.C:13
 MakeFinalResults.C:14
 MakeFinalResults.C:15
 MakeFinalResults.C:16
 MakeFinalResults.C:17
 MakeFinalResults.C:18
 MakeFinalResults.C:19
 MakeFinalResults.C:20
 MakeFinalResults.C:21
 MakeFinalResults.C:22
 MakeFinalResults.C:23
 MakeFinalResults.C:24
 MakeFinalResults.C:25
 MakeFinalResults.C:26
 MakeFinalResults.C:27
 MakeFinalResults.C:28
 MakeFinalResults.C:29
 MakeFinalResults.C:30
 MakeFinalResults.C:31
 MakeFinalResults.C:32
 MakeFinalResults.C:33
 MakeFinalResults.C:34
 MakeFinalResults.C:35
 MakeFinalResults.C:36
 MakeFinalResults.C:37
 MakeFinalResults.C:38
 MakeFinalResults.C:39
 MakeFinalResults.C:40
 MakeFinalResults.C:41
 MakeFinalResults.C:42
 MakeFinalResults.C:43
 MakeFinalResults.C:44
 MakeFinalResults.C:45
 MakeFinalResults.C:46
 MakeFinalResults.C:47
 MakeFinalResults.C:48
 MakeFinalResults.C:49
 MakeFinalResults.C:50
 MakeFinalResults.C:51
 MakeFinalResults.C:52
 MakeFinalResults.C:53
 MakeFinalResults.C:54
 MakeFinalResults.C:55
 MakeFinalResults.C:56
 MakeFinalResults.C:57
 MakeFinalResults.C:58
 MakeFinalResults.C:59
 MakeFinalResults.C:60
 MakeFinalResults.C:61
 MakeFinalResults.C:62
 MakeFinalResults.C:63
 MakeFinalResults.C:64
 MakeFinalResults.C:65
 MakeFinalResults.C:66
 MakeFinalResults.C:67
 MakeFinalResults.C:68
 MakeFinalResults.C:69
 MakeFinalResults.C:70
 MakeFinalResults.C:71
 MakeFinalResults.C:72
 MakeFinalResults.C:73
 MakeFinalResults.C:74
 MakeFinalResults.C:75
 MakeFinalResults.C:76
 MakeFinalResults.C:77
 MakeFinalResults.C:78
 MakeFinalResults.C:79
 MakeFinalResults.C:80
 MakeFinalResults.C:81
 MakeFinalResults.C:82
 MakeFinalResults.C:83
 MakeFinalResults.C:84
 MakeFinalResults.C:85
 MakeFinalResults.C:86
 MakeFinalResults.C:87
 MakeFinalResults.C:88
 MakeFinalResults.C:89
 MakeFinalResults.C:90
 MakeFinalResults.C:91
 MakeFinalResults.C:92
 MakeFinalResults.C:93
 MakeFinalResults.C:94
 MakeFinalResults.C:95
 MakeFinalResults.C:96
 MakeFinalResults.C:97
 MakeFinalResults.C:98
 MakeFinalResults.C:99
 MakeFinalResults.C:100
 MakeFinalResults.C:101
 MakeFinalResults.C:102
 MakeFinalResults.C:103
 MakeFinalResults.C:104
 MakeFinalResults.C:105
 MakeFinalResults.C:106
 MakeFinalResults.C:107
 MakeFinalResults.C:108
 MakeFinalResults.C:109
 MakeFinalResults.C:110
 MakeFinalResults.C:111
 MakeFinalResults.C:112
 MakeFinalResults.C:113
 MakeFinalResults.C:114
 MakeFinalResults.C:115
 MakeFinalResults.C:116
 MakeFinalResults.C:117
 MakeFinalResults.C:118
 MakeFinalResults.C:119
 MakeFinalResults.C:120
 MakeFinalResults.C:121
 MakeFinalResults.C:122
 MakeFinalResults.C:123
 MakeFinalResults.C:124
 MakeFinalResults.C:125
 MakeFinalResults.C:126
 MakeFinalResults.C:127
 MakeFinalResults.C:128
 MakeFinalResults.C:129
 MakeFinalResults.C:130
 MakeFinalResults.C:131
 MakeFinalResults.C:132
 MakeFinalResults.C:133
 MakeFinalResults.C:134
 MakeFinalResults.C:135
 MakeFinalResults.C:136
 MakeFinalResults.C:137
 MakeFinalResults.C:138
 MakeFinalResults.C:139
 MakeFinalResults.C:140
 MakeFinalResults.C:141
 MakeFinalResults.C:142
 MakeFinalResults.C:143
 MakeFinalResults.C:144
 MakeFinalResults.C:145
 MakeFinalResults.C:146
 MakeFinalResults.C:147
 MakeFinalResults.C:148
 MakeFinalResults.C:149
 MakeFinalResults.C:150
 MakeFinalResults.C:151
 MakeFinalResults.C:152
 MakeFinalResults.C:153
 MakeFinalResults.C:154
 MakeFinalResults.C:155
 MakeFinalResults.C:156
 MakeFinalResults.C:157
 MakeFinalResults.C:158
 MakeFinalResults.C:159
 MakeFinalResults.C:160
 MakeFinalResults.C:161
 MakeFinalResults.C:162
 MakeFinalResults.C:163
 MakeFinalResults.C:164
 MakeFinalResults.C:165
 MakeFinalResults.C:166
 MakeFinalResults.C:167
 MakeFinalResults.C:168
 MakeFinalResults.C:169
 MakeFinalResults.C:170
 MakeFinalResults.C:171
 MakeFinalResults.C:172
 MakeFinalResults.C:173
 MakeFinalResults.C:174
 MakeFinalResults.C:175
 MakeFinalResults.C:176
 MakeFinalResults.C:177
 MakeFinalResults.C:178
 MakeFinalResults.C:179
 MakeFinalResults.C:180
 MakeFinalResults.C:181
 MakeFinalResults.C:182
 MakeFinalResults.C:183
 MakeFinalResults.C:184
 MakeFinalResults.C:185
 MakeFinalResults.C:186
 MakeFinalResults.C:187
 MakeFinalResults.C:188
 MakeFinalResults.C:189
 MakeFinalResults.C:190
 MakeFinalResults.C:191
 MakeFinalResults.C:192
 MakeFinalResults.C:193
 MakeFinalResults.C:194
 MakeFinalResults.C:195
 MakeFinalResults.C:196
 MakeFinalResults.C:197
 MakeFinalResults.C:198
 MakeFinalResults.C:199
 MakeFinalResults.C:200
 MakeFinalResults.C:201
 MakeFinalResults.C:202
 MakeFinalResults.C:203
 MakeFinalResults.C:204
 MakeFinalResults.C:205
 MakeFinalResults.C:206
 MakeFinalResults.C:207
 MakeFinalResults.C:208
 MakeFinalResults.C:209
 MakeFinalResults.C:210
 MakeFinalResults.C:211
 MakeFinalResults.C:212
 MakeFinalResults.C:213
 MakeFinalResults.C:214
 MakeFinalResults.C:215
 MakeFinalResults.C:216
 MakeFinalResults.C:217
 MakeFinalResults.C:218
 MakeFinalResults.C:219
 MakeFinalResults.C:220
 MakeFinalResults.C:221
 MakeFinalResults.C:222
 MakeFinalResults.C:223
 MakeFinalResults.C:224
 MakeFinalResults.C:225
 MakeFinalResults.C:226
 MakeFinalResults.C:227
 MakeFinalResults.C:228
 MakeFinalResults.C:229
 MakeFinalResults.C:230
 MakeFinalResults.C:231
 MakeFinalResults.C:232
 MakeFinalResults.C:233
 MakeFinalResults.C:234
 MakeFinalResults.C:235
 MakeFinalResults.C:236
 MakeFinalResults.C:237
 MakeFinalResults.C:238
 MakeFinalResults.C:239
 MakeFinalResults.C:240
 MakeFinalResults.C:241
 MakeFinalResults.C:242
 MakeFinalResults.C:243
 MakeFinalResults.C:244
 MakeFinalResults.C:245
 MakeFinalResults.C:246
 MakeFinalResults.C:247
 MakeFinalResults.C:248
 MakeFinalResults.C:249
 MakeFinalResults.C:250
 MakeFinalResults.C:251
 MakeFinalResults.C:252
 MakeFinalResults.C:253
 MakeFinalResults.C:254
 MakeFinalResults.C:255
 MakeFinalResults.C:256
 MakeFinalResults.C:257
 MakeFinalResults.C:258
 MakeFinalResults.C:259
 MakeFinalResults.C:260
 MakeFinalResults.C:261
 MakeFinalResults.C:262
 MakeFinalResults.C:263
 MakeFinalResults.C:264
 MakeFinalResults.C:265
 MakeFinalResults.C:266
 MakeFinalResults.C:267
 MakeFinalResults.C:268
 MakeFinalResults.C:269
 MakeFinalResults.C:270
 MakeFinalResults.C:271
 MakeFinalResults.C:272
 MakeFinalResults.C:273
 MakeFinalResults.C:274
 MakeFinalResults.C:275
 MakeFinalResults.C:276
 MakeFinalResults.C:277
 MakeFinalResults.C:278
 MakeFinalResults.C:279
 MakeFinalResults.C:280
 MakeFinalResults.C:281
 MakeFinalResults.C:282
 MakeFinalResults.C:283
 MakeFinalResults.C:284
 MakeFinalResults.C:285
 MakeFinalResults.C:286
 MakeFinalResults.C:287
 MakeFinalResults.C:288
 MakeFinalResults.C:289
 MakeFinalResults.C:290
 MakeFinalResults.C:291
 MakeFinalResults.C:292
 MakeFinalResults.C:293
 MakeFinalResults.C:294
 MakeFinalResults.C:295
 MakeFinalResults.C:296
 MakeFinalResults.C:297
 MakeFinalResults.C:298
 MakeFinalResults.C:299
 MakeFinalResults.C:300
 MakeFinalResults.C:301
 MakeFinalResults.C:302
 MakeFinalResults.C:303
 MakeFinalResults.C:304
 MakeFinalResults.C:305
 MakeFinalResults.C:306
 MakeFinalResults.C:307
 MakeFinalResults.C:308
 MakeFinalResults.C:309
 MakeFinalResults.C:310
 MakeFinalResults.C:311
 MakeFinalResults.C:312
 MakeFinalResults.C:313
 MakeFinalResults.C:314
 MakeFinalResults.C:315
 MakeFinalResults.C:316
 MakeFinalResults.C:317
 MakeFinalResults.C:318
 MakeFinalResults.C:319
 MakeFinalResults.C:320
 MakeFinalResults.C:321
 MakeFinalResults.C:322
 MakeFinalResults.C:323
 MakeFinalResults.C:324
 MakeFinalResults.C:325
 MakeFinalResults.C:326
 MakeFinalResults.C:327
 MakeFinalResults.C:328
 MakeFinalResults.C:329
 MakeFinalResults.C:330
 MakeFinalResults.C:331
 MakeFinalResults.C:332
 MakeFinalResults.C:333
 MakeFinalResults.C:334
 MakeFinalResults.C:335
 MakeFinalResults.C:336
 MakeFinalResults.C:337
 MakeFinalResults.C:338
 MakeFinalResults.C:339
 MakeFinalResults.C:340
 MakeFinalResults.C:341
 MakeFinalResults.C:342
 MakeFinalResults.C:343
 MakeFinalResults.C:344
 MakeFinalResults.C:345
 MakeFinalResults.C:346
 MakeFinalResults.C:347
 MakeFinalResults.C:348
 MakeFinalResults.C:349
 MakeFinalResults.C:350
 MakeFinalResults.C:351
 MakeFinalResults.C:352
 MakeFinalResults.C:353
 MakeFinalResults.C:354
 MakeFinalResults.C:355
 MakeFinalResults.C:356
 MakeFinalResults.C:357
 MakeFinalResults.C:358
 MakeFinalResults.C:359
 MakeFinalResults.C:360
 MakeFinalResults.C:361
 MakeFinalResults.C:362
 MakeFinalResults.C:363
 MakeFinalResults.C:364
 MakeFinalResults.C:365
 MakeFinalResults.C:366
 MakeFinalResults.C:367
 MakeFinalResults.C:368
 MakeFinalResults.C:369
 MakeFinalResults.C:370
 MakeFinalResults.C:371
 MakeFinalResults.C:372
 MakeFinalResults.C:373
 MakeFinalResults.C:374
 MakeFinalResults.C:375
 MakeFinalResults.C:376
 MakeFinalResults.C:377
 MakeFinalResults.C:378
 MakeFinalResults.C:379
 MakeFinalResults.C:380
 MakeFinalResults.C:381
 MakeFinalResults.C:382
 MakeFinalResults.C:383
 MakeFinalResults.C:384
 MakeFinalResults.C:385
 MakeFinalResults.C:386
 MakeFinalResults.C:387
 MakeFinalResults.C:388
 MakeFinalResults.C:389
 MakeFinalResults.C:390
 MakeFinalResults.C:391
 MakeFinalResults.C:392
 MakeFinalResults.C:393
 MakeFinalResults.C:394
 MakeFinalResults.C:395
 MakeFinalResults.C:396
 MakeFinalResults.C:397
 MakeFinalResults.C:398
 MakeFinalResults.C:399
 MakeFinalResults.C:400
 MakeFinalResults.C:401
 MakeFinalResults.C:402
 MakeFinalResults.C:403
 MakeFinalResults.C:404
 MakeFinalResults.C:405
 MakeFinalResults.C:406
 MakeFinalResults.C:407
 MakeFinalResults.C:408
 MakeFinalResults.C:409
 MakeFinalResults.C:410
 MakeFinalResults.C:411
 MakeFinalResults.C:412
 MakeFinalResults.C:413
 MakeFinalResults.C:414
 MakeFinalResults.C:415
 MakeFinalResults.C:416
 MakeFinalResults.C:417
 MakeFinalResults.C:418
 MakeFinalResults.C:419
 MakeFinalResults.C:420
 MakeFinalResults.C:421
 MakeFinalResults.C:422
 MakeFinalResults.C:423
 MakeFinalResults.C:424
 MakeFinalResults.C:425
 MakeFinalResults.C:426
 MakeFinalResults.C:427
 MakeFinalResults.C:428
 MakeFinalResults.C:429
 MakeFinalResults.C:430
 MakeFinalResults.C:431
 MakeFinalResults.C:432
 MakeFinalResults.C:433
 MakeFinalResults.C:434
 MakeFinalResults.C:435
 MakeFinalResults.C:436
 MakeFinalResults.C:437
 MakeFinalResults.C:438
 MakeFinalResults.C:439
 MakeFinalResults.C:440
 MakeFinalResults.C:441
 MakeFinalResults.C:442
 MakeFinalResults.C:443
 MakeFinalResults.C:444
 MakeFinalResults.C:445
 MakeFinalResults.C:446
 MakeFinalResults.C:447
 MakeFinalResults.C:448
 MakeFinalResults.C:449
 MakeFinalResults.C:450
 MakeFinalResults.C:451
 MakeFinalResults.C:452
 MakeFinalResults.C:453
 MakeFinalResults.C:454
 MakeFinalResults.C:455
 MakeFinalResults.C:456
 MakeFinalResults.C:457
 MakeFinalResults.C:458
 MakeFinalResults.C:459
 MakeFinalResults.C:460
 MakeFinalResults.C:461
 MakeFinalResults.C:462
 MakeFinalResults.C:463
 MakeFinalResults.C:464
 MakeFinalResults.C:465
 MakeFinalResults.C:466
 MakeFinalResults.C:467
 MakeFinalResults.C:468
 MakeFinalResults.C:469
 MakeFinalResults.C:470
 MakeFinalResults.C:471
 MakeFinalResults.C:472
 MakeFinalResults.C:473
 MakeFinalResults.C:474
 MakeFinalResults.C:475
 MakeFinalResults.C:476
 MakeFinalResults.C:477
 MakeFinalResults.C:478
 MakeFinalResults.C:479
 MakeFinalResults.C:480
 MakeFinalResults.C:481
 MakeFinalResults.C:482
 MakeFinalResults.C:483
 MakeFinalResults.C:484
 MakeFinalResults.C:485
 MakeFinalResults.C:486
 MakeFinalResults.C:487
 MakeFinalResults.C:488
 MakeFinalResults.C:489
 MakeFinalResults.C:490
 MakeFinalResults.C:491
 MakeFinalResults.C:492
 MakeFinalResults.C:493
 MakeFinalResults.C:494
 MakeFinalResults.C:495
 MakeFinalResults.C:496
 MakeFinalResults.C:497
 MakeFinalResults.C:498
 MakeFinalResults.C:499
 MakeFinalResults.C:500
 MakeFinalResults.C:501
 MakeFinalResults.C:502
 MakeFinalResults.C:503
 MakeFinalResults.C:504
 MakeFinalResults.C:505
 MakeFinalResults.C:506
 MakeFinalResults.C:507
 MakeFinalResults.C:508
 MakeFinalResults.C:509
 MakeFinalResults.C:510
 MakeFinalResults.C:511
 MakeFinalResults.C:512
 MakeFinalResults.C:513
 MakeFinalResults.C:514
 MakeFinalResults.C:515
 MakeFinalResults.C:516
 MakeFinalResults.C:517
 MakeFinalResults.C:518
 MakeFinalResults.C:519
 MakeFinalResults.C:520
 MakeFinalResults.C:521
 MakeFinalResults.C:522
 MakeFinalResults.C:523
 MakeFinalResults.C:524
 MakeFinalResults.C:525
 MakeFinalResults.C:526
 MakeFinalResults.C:527
 MakeFinalResults.C:528
 MakeFinalResults.C:529
 MakeFinalResults.C:530
 MakeFinalResults.C:531
 MakeFinalResults.C:532
 MakeFinalResults.C:533
 MakeFinalResults.C:534
 MakeFinalResults.C:535
 MakeFinalResults.C:536
 MakeFinalResults.C:537
 MakeFinalResults.C:538
 MakeFinalResults.C:539
 MakeFinalResults.C:540
 MakeFinalResults.C:541
 MakeFinalResults.C:542
 MakeFinalResults.C:543
 MakeFinalResults.C:544
 MakeFinalResults.C:545
 MakeFinalResults.C:546
 MakeFinalResults.C:547
 MakeFinalResults.C:548
 MakeFinalResults.C:549
 MakeFinalResults.C:550
 MakeFinalResults.C:551
 MakeFinalResults.C:552
 MakeFinalResults.C:553
 MakeFinalResults.C:554
 MakeFinalResults.C:555
 MakeFinalResults.C:556
 MakeFinalResults.C:557
 MakeFinalResults.C:558
 MakeFinalResults.C:559
 MakeFinalResults.C:560
 MakeFinalResults.C:561
 MakeFinalResults.C:562
 MakeFinalResults.C:563
 MakeFinalResults.C:564
 MakeFinalResults.C:565
 MakeFinalResults.C:566
 MakeFinalResults.C:567
 MakeFinalResults.C:568
 MakeFinalResults.C:569
 MakeFinalResults.C:570
 MakeFinalResults.C:571
 MakeFinalResults.C:572
 MakeFinalResults.C:573
 MakeFinalResults.C:574
 MakeFinalResults.C:575
 MakeFinalResults.C:576
 MakeFinalResults.C:577
 MakeFinalResults.C:578
 MakeFinalResults.C:579
 MakeFinalResults.C:580
 MakeFinalResults.C:581
 MakeFinalResults.C:582
 MakeFinalResults.C:583
 MakeFinalResults.C:584
 MakeFinalResults.C:585
 MakeFinalResults.C:586
 MakeFinalResults.C:587
 MakeFinalResults.C:588
 MakeFinalResults.C:589
 MakeFinalResults.C:590
 MakeFinalResults.C:591
 MakeFinalResults.C:592
 MakeFinalResults.C:593
 MakeFinalResults.C:594
 MakeFinalResults.C:595
 MakeFinalResults.C:596
 MakeFinalResults.C:597
 MakeFinalResults.C:598
 MakeFinalResults.C:599
 MakeFinalResults.C:600
 MakeFinalResults.C:601
 MakeFinalResults.C:602
 MakeFinalResults.C:603
 MakeFinalResults.C:604
 MakeFinalResults.C:605
 MakeFinalResults.C:606
 MakeFinalResults.C:607
 MakeFinalResults.C:608
 MakeFinalResults.C:609
 MakeFinalResults.C:610
 MakeFinalResults.C:611
 MakeFinalResults.C:612
 MakeFinalResults.C:613
 MakeFinalResults.C:614
 MakeFinalResults.C:615
 MakeFinalResults.C:616
 MakeFinalResults.C:617
 MakeFinalResults.C:618
 MakeFinalResults.C:619
 MakeFinalResults.C:620
 MakeFinalResults.C:621
 MakeFinalResults.C:622
 MakeFinalResults.C:623
 MakeFinalResults.C:624
 MakeFinalResults.C:625
 MakeFinalResults.C:626
 MakeFinalResults.C:627
 MakeFinalResults.C:628
 MakeFinalResults.C:629
 MakeFinalResults.C:630
 MakeFinalResults.C:631
 MakeFinalResults.C:632
 MakeFinalResults.C:633
 MakeFinalResults.C:634
 MakeFinalResults.C:635
 MakeFinalResults.C:636
 MakeFinalResults.C:637
 MakeFinalResults.C:638
 MakeFinalResults.C:639
 MakeFinalResults.C:640
 MakeFinalResults.C:641
 MakeFinalResults.C:642
 MakeFinalResults.C:643
 MakeFinalResults.C:644
 MakeFinalResults.C:645
 MakeFinalResults.C:646
 MakeFinalResults.C:647
 MakeFinalResults.C:648
 MakeFinalResults.C:649
 MakeFinalResults.C:650
 MakeFinalResults.C:651
 MakeFinalResults.C:652
 MakeFinalResults.C:653
 MakeFinalResults.C:654
 MakeFinalResults.C:655
 MakeFinalResults.C:656
 MakeFinalResults.C:657
 MakeFinalResults.C:658
 MakeFinalResults.C:659
 MakeFinalResults.C:660
 MakeFinalResults.C:661
 MakeFinalResults.C:662
 MakeFinalResults.C:663
 MakeFinalResults.C:664
 MakeFinalResults.C:665
 MakeFinalResults.C:666
 MakeFinalResults.C:667
 MakeFinalResults.C:668
 MakeFinalResults.C:669
 MakeFinalResults.C:670
 MakeFinalResults.C:671
 MakeFinalResults.C:672
 MakeFinalResults.C:673
 MakeFinalResults.C:674
 MakeFinalResults.C:675
 MakeFinalResults.C:676
 MakeFinalResults.C:677
 MakeFinalResults.C:678
 MakeFinalResults.C:679
 MakeFinalResults.C:680
 MakeFinalResults.C:681
 MakeFinalResults.C:682
 MakeFinalResults.C:683
 MakeFinalResults.C:684
 MakeFinalResults.C:685
 MakeFinalResults.C:686
 MakeFinalResults.C:687
 MakeFinalResults.C:688
 MakeFinalResults.C:689
 MakeFinalResults.C:690
 MakeFinalResults.C:691
 MakeFinalResults.C:692
 MakeFinalResults.C:693
 MakeFinalResults.C:694
 MakeFinalResults.C:695
 MakeFinalResults.C:696
 MakeFinalResults.C:697
 MakeFinalResults.C:698
 MakeFinalResults.C:699
 MakeFinalResults.C:700
 MakeFinalResults.C:701
 MakeFinalResults.C:702
 MakeFinalResults.C:703
 MakeFinalResults.C:704
 MakeFinalResults.C:705
 MakeFinalResults.C:706
 MakeFinalResults.C:707
 MakeFinalResults.C:708
 MakeFinalResults.C:709
 MakeFinalResults.C:710
 MakeFinalResults.C:711
 MakeFinalResults.C:712
 MakeFinalResults.C:713
 MakeFinalResults.C:714
 MakeFinalResults.C:715
 MakeFinalResults.C:716
 MakeFinalResults.C:717
 MakeFinalResults.C:718
 MakeFinalResults.C:719
 MakeFinalResults.C:720
 MakeFinalResults.C:721
 MakeFinalResults.C:722
 MakeFinalResults.C:723
 MakeFinalResults.C:724
 MakeFinalResults.C:725
 MakeFinalResults.C:726
 MakeFinalResults.C:727
 MakeFinalResults.C:728
 MakeFinalResults.C:729
 MakeFinalResults.C:730
 MakeFinalResults.C:731
 MakeFinalResults.C:732
 MakeFinalResults.C:733
 MakeFinalResults.C:734
 MakeFinalResults.C:735
 MakeFinalResults.C:736
 MakeFinalResults.C:737
 MakeFinalResults.C:738
 MakeFinalResults.C:739
 MakeFinalResults.C:740
 MakeFinalResults.C:741
 MakeFinalResults.C:742
 MakeFinalResults.C:743
 MakeFinalResults.C:744
 MakeFinalResults.C:745
 MakeFinalResults.C:746
 MakeFinalResults.C:747
 MakeFinalResults.C:748
 MakeFinalResults.C:749
 MakeFinalResults.C:750
 MakeFinalResults.C:751
 MakeFinalResults.C:752
 MakeFinalResults.C:753
 MakeFinalResults.C:754
 MakeFinalResults.C:755
 MakeFinalResults.C:756
 MakeFinalResults.C:757
 MakeFinalResults.C:758
 MakeFinalResults.C:759
 MakeFinalResults.C:760
 MakeFinalResults.C:761
 MakeFinalResults.C:762
 MakeFinalResults.C:763
 MakeFinalResults.C:764
 MakeFinalResults.C:765
 MakeFinalResults.C:766
 MakeFinalResults.C:767
 MakeFinalResults.C:768
 MakeFinalResults.C:769
 MakeFinalResults.C:770
 MakeFinalResults.C:771
 MakeFinalResults.C:772
 MakeFinalResults.C:773
 MakeFinalResults.C:774
 MakeFinalResults.C:775
 MakeFinalResults.C:776
 MakeFinalResults.C:777
 MakeFinalResults.C:778
 MakeFinalResults.C:779
 MakeFinalResults.C:780
 MakeFinalResults.C:781
 MakeFinalResults.C:782
 MakeFinalResults.C:783
 MakeFinalResults.C:784
 MakeFinalResults.C:785
 MakeFinalResults.C:786
 MakeFinalResults.C:787
 MakeFinalResults.C:788
 MakeFinalResults.C:789
 MakeFinalResults.C:790
 MakeFinalResults.C:791
 MakeFinalResults.C:792
 MakeFinalResults.C:793
 MakeFinalResults.C:794
 MakeFinalResults.C:795
 MakeFinalResults.C:796
 MakeFinalResults.C:797
 MakeFinalResults.C:798
 MakeFinalResults.C:799
 MakeFinalResults.C:800
 MakeFinalResults.C:801
 MakeFinalResults.C:802
 MakeFinalResults.C:803
 MakeFinalResults.C:804
 MakeFinalResults.C:805
 MakeFinalResults.C:806
 MakeFinalResults.C:807
 MakeFinalResults.C:808
 MakeFinalResults.C:809
 MakeFinalResults.C:810
 MakeFinalResults.C:811
 MakeFinalResults.C:812
 MakeFinalResults.C:813
 MakeFinalResults.C:814
 MakeFinalResults.C:815
 MakeFinalResults.C:816
 MakeFinalResults.C:817
 MakeFinalResults.C:818
 MakeFinalResults.C:819
 MakeFinalResults.C:820
 MakeFinalResults.C:821
 MakeFinalResults.C:822
 MakeFinalResults.C:823
 MakeFinalResults.C:824
 MakeFinalResults.C:825
 MakeFinalResults.C:826
 MakeFinalResults.C:827
 MakeFinalResults.C:828
 MakeFinalResults.C:829
 MakeFinalResults.C:830
 MakeFinalResults.C:831
 MakeFinalResults.C:832
 MakeFinalResults.C:833
 MakeFinalResults.C:834
 MakeFinalResults.C:835
 MakeFinalResults.C:836
 MakeFinalResults.C:837
 MakeFinalResults.C:838
 MakeFinalResults.C:839
 MakeFinalResults.C:840
 MakeFinalResults.C:841
 MakeFinalResults.C:842
 MakeFinalResults.C:843
 MakeFinalResults.C:844
 MakeFinalResults.C:845
 MakeFinalResults.C:846
 MakeFinalResults.C:847
 MakeFinalResults.C:848
 MakeFinalResults.C:849
 MakeFinalResults.C:850
 MakeFinalResults.C:851
 MakeFinalResults.C:852
 MakeFinalResults.C:853
 MakeFinalResults.C:854
 MakeFinalResults.C:855
 MakeFinalResults.C:856
 MakeFinalResults.C:857
 MakeFinalResults.C:858
 MakeFinalResults.C:859
 MakeFinalResults.C:860
 MakeFinalResults.C:861
 MakeFinalResults.C:862
 MakeFinalResults.C:863
 MakeFinalResults.C:864
 MakeFinalResults.C:865
 MakeFinalResults.C:866
 MakeFinalResults.C:867
 MakeFinalResults.C:868
 MakeFinalResults.C:869
 MakeFinalResults.C:870
 MakeFinalResults.C:871
 MakeFinalResults.C:872
 MakeFinalResults.C:873
 MakeFinalResults.C:874
 MakeFinalResults.C:875
 MakeFinalResults.C:876
 MakeFinalResults.C:877
 MakeFinalResults.C:878
 MakeFinalResults.C:879
 MakeFinalResults.C:880
 MakeFinalResults.C:881
 MakeFinalResults.C:882
 MakeFinalResults.C:883
 MakeFinalResults.C:884
 MakeFinalResults.C:885
 MakeFinalResults.C:886
 MakeFinalResults.C:887
 MakeFinalResults.C:888
 MakeFinalResults.C:889
 MakeFinalResults.C:890
 MakeFinalResults.C:891
 MakeFinalResults.C:892
 MakeFinalResults.C:893
 MakeFinalResults.C:894
 MakeFinalResults.C:895
 MakeFinalResults.C:896
 MakeFinalResults.C:897
 MakeFinalResults.C:898
 MakeFinalResults.C:899
 MakeFinalResults.C:900
 MakeFinalResults.C:901
 MakeFinalResults.C:902
 MakeFinalResults.C:903
 MakeFinalResults.C:904
 MakeFinalResults.C:905
 MakeFinalResults.C:906
 MakeFinalResults.C:907
 MakeFinalResults.C:908
 MakeFinalResults.C:909
 MakeFinalResults.C:910
 MakeFinalResults.C:911
 MakeFinalResults.C:912
 MakeFinalResults.C:913
 MakeFinalResults.C:914
 MakeFinalResults.C:915
 MakeFinalResults.C:916
 MakeFinalResults.C:917
 MakeFinalResults.C:918
 MakeFinalResults.C:919
 MakeFinalResults.C:920
 MakeFinalResults.C:921
 MakeFinalResults.C:922
 MakeFinalResults.C:923
 MakeFinalResults.C:924
 MakeFinalResults.C:925
 MakeFinalResults.C:926
 MakeFinalResults.C:927
 MakeFinalResults.C:928
 MakeFinalResults.C:929
 MakeFinalResults.C:930
 MakeFinalResults.C:931
 MakeFinalResults.C:932
 MakeFinalResults.C:933
 MakeFinalResults.C:934
 MakeFinalResults.C:935
 MakeFinalResults.C:936
 MakeFinalResults.C:937
 MakeFinalResults.C:938
 MakeFinalResults.C:939
 MakeFinalResults.C:940
 MakeFinalResults.C:941
 MakeFinalResults.C:942
 MakeFinalResults.C:943
 MakeFinalResults.C:944
 MakeFinalResults.C:945
 MakeFinalResults.C:946
 MakeFinalResults.C:947
 MakeFinalResults.C:948
 MakeFinalResults.C:949
 MakeFinalResults.C:950
 MakeFinalResults.C:951
 MakeFinalResults.C:952
 MakeFinalResults.C:953
 MakeFinalResults.C:954
 MakeFinalResults.C:955
 MakeFinalResults.C:956
 MakeFinalResults.C:957
 MakeFinalResults.C:958
 MakeFinalResults.C:959
 MakeFinalResults.C:960
 MakeFinalResults.C:961
 MakeFinalResults.C:962
 MakeFinalResults.C:963
 MakeFinalResults.C:964
 MakeFinalResults.C:965
 MakeFinalResults.C:966
 MakeFinalResults.C:967
 MakeFinalResults.C:968
 MakeFinalResults.C:969
 MakeFinalResults.C:970
 MakeFinalResults.C:971
 MakeFinalResults.C:972
 MakeFinalResults.C:973
 MakeFinalResults.C:974
 MakeFinalResults.C:975
 MakeFinalResults.C:976
 MakeFinalResults.C:977
 MakeFinalResults.C:978
 MakeFinalResults.C:979
 MakeFinalResults.C:980
 MakeFinalResults.C:981
 MakeFinalResults.C:982
 MakeFinalResults.C:983
 MakeFinalResults.C:984
 MakeFinalResults.C:985
 MakeFinalResults.C:986
 MakeFinalResults.C:987
 MakeFinalResults.C:988
 MakeFinalResults.C:989
 MakeFinalResults.C:990
 MakeFinalResults.C:991
 MakeFinalResults.C:992
 MakeFinalResults.C:993
 MakeFinalResults.C:994
 MakeFinalResults.C:995
 MakeFinalResults.C:996
 MakeFinalResults.C:997
 MakeFinalResults.C:998
 MakeFinalResults.C:999
 MakeFinalResults.C:1000
 MakeFinalResults.C:1001
 MakeFinalResults.C:1002
 MakeFinalResults.C:1003
 MakeFinalResults.C:1004
 MakeFinalResults.C:1005
 MakeFinalResults.C:1006
 MakeFinalResults.C:1007
 MakeFinalResults.C:1008
 MakeFinalResults.C:1009
 MakeFinalResults.C:1010
 MakeFinalResults.C:1011
 MakeFinalResults.C:1012
 MakeFinalResults.C:1013
 MakeFinalResults.C:1014
 MakeFinalResults.C:1015
 MakeFinalResults.C:1016
 MakeFinalResults.C:1017
 MakeFinalResults.C:1018
 MakeFinalResults.C:1019
 MakeFinalResults.C:1020
 MakeFinalResults.C:1021
 MakeFinalResults.C:1022
 MakeFinalResults.C:1023
 MakeFinalResults.C:1024
 MakeFinalResults.C:1025
 MakeFinalResults.C:1026
 MakeFinalResults.C:1027
 MakeFinalResults.C:1028
 MakeFinalResults.C:1029
 MakeFinalResults.C:1030
 MakeFinalResults.C:1031
 MakeFinalResults.C:1032
 MakeFinalResults.C:1033
 MakeFinalResults.C:1034
 MakeFinalResults.C:1035
 MakeFinalResults.C:1036
 MakeFinalResults.C:1037
 MakeFinalResults.C:1038
 MakeFinalResults.C:1039
 MakeFinalResults.C:1040
 MakeFinalResults.C:1041
 MakeFinalResults.C:1042
 MakeFinalResults.C:1043
 MakeFinalResults.C:1044
 MakeFinalResults.C:1045
 MakeFinalResults.C:1046
 MakeFinalResults.C:1047
 MakeFinalResults.C:1048
 MakeFinalResults.C:1049
 MakeFinalResults.C:1050
 MakeFinalResults.C:1051
 MakeFinalResults.C:1052
 MakeFinalResults.C:1053
 MakeFinalResults.C:1054
 MakeFinalResults.C:1055
 MakeFinalResults.C:1056
 MakeFinalResults.C:1057
 MakeFinalResults.C:1058
 MakeFinalResults.C:1059
 MakeFinalResults.C:1060
 MakeFinalResults.C:1061
 MakeFinalResults.C:1062
 MakeFinalResults.C:1063
 MakeFinalResults.C:1064
 MakeFinalResults.C:1065
 MakeFinalResults.C:1066
 MakeFinalResults.C:1067
 MakeFinalResults.C:1068
 MakeFinalResults.C:1069
 MakeFinalResults.C:1070
 MakeFinalResults.C:1071
 MakeFinalResults.C:1072
 MakeFinalResults.C:1073
 MakeFinalResults.C:1074
 MakeFinalResults.C:1075
 MakeFinalResults.C:1076
 MakeFinalResults.C:1077
 MakeFinalResults.C:1078
 MakeFinalResults.C:1079
 MakeFinalResults.C:1080
 MakeFinalResults.C:1081
 MakeFinalResults.C:1082
 MakeFinalResults.C:1083
 MakeFinalResults.C:1084
 MakeFinalResults.C:1085
 MakeFinalResults.C:1086
 MakeFinalResults.C:1087
 MakeFinalResults.C:1088
 MakeFinalResults.C:1089
 MakeFinalResults.C:1090
 MakeFinalResults.C:1091
 MakeFinalResults.C:1092
 MakeFinalResults.C:1093
 MakeFinalResults.C:1094
 MakeFinalResults.C:1095
 MakeFinalResults.C:1096
 MakeFinalResults.C:1097
 MakeFinalResults.C:1098
 MakeFinalResults.C:1099
 MakeFinalResults.C:1100
 MakeFinalResults.C:1101
 MakeFinalResults.C:1102
 MakeFinalResults.C:1103
 MakeFinalResults.C:1104
 MakeFinalResults.C:1105
 MakeFinalResults.C:1106
 MakeFinalResults.C:1107
 MakeFinalResults.C:1108
 MakeFinalResults.C:1109
 MakeFinalResults.C:1110
 MakeFinalResults.C:1111
 MakeFinalResults.C:1112
 MakeFinalResults.C:1113
 MakeFinalResults.C:1114
 MakeFinalResults.C:1115
 MakeFinalResults.C:1116
 MakeFinalResults.C:1117
 MakeFinalResults.C:1118
 MakeFinalResults.C:1119
 MakeFinalResults.C:1120
 MakeFinalResults.C:1121
 MakeFinalResults.C:1122
 MakeFinalResults.C:1123
 MakeFinalResults.C:1124
 MakeFinalResults.C:1125
 MakeFinalResults.C:1126
 MakeFinalResults.C:1127
 MakeFinalResults.C:1128
 MakeFinalResults.C:1129
 MakeFinalResults.C:1130
 MakeFinalResults.C:1131
 MakeFinalResults.C:1132
 MakeFinalResults.C:1133
 MakeFinalResults.C:1134
 MakeFinalResults.C:1135
 MakeFinalResults.C:1136
 MakeFinalResults.C:1137
 MakeFinalResults.C:1138
 MakeFinalResults.C:1139
 MakeFinalResults.C:1140
 MakeFinalResults.C:1141
 MakeFinalResults.C:1142
 MakeFinalResults.C:1143
 MakeFinalResults.C:1144