ROOT logo
#include "CommonDefs.C"

const Char_t *destdir = "plots";

enum EHisto_t {
  kPrimaryTracks,
  kReconstructedTracks,
  kNHistos
};
const Char_t *histoName[kNHistos] = {
  "hPrimaryTracks",
  "hReconstructedTracks"
};

enum EParam_t {
  kCentrality,
  kPt,
  kEta,
  kPhi,
  kY,
  kNParams
};

TrackingEff(const Char_t *filename, Int_t evMax = kMaxInt)
{

  /* include path for ACLic */
  gSystem->AddIncludePath("-I$ALICE_ROOT/include");
  gSystem->AddIncludePath("-I$ALICE_ROOT/TOF");
  /* load libraries */
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  /* build analysis task class */
  gROOT->LoadMacro("AliAnalysisParticle.cxx+g");
  gROOT->LoadMacro("AliAnalysisEvent.cxx+g");
  gROOT->LoadMacro("AliAnalysisTrack.cxx+g");
 
  /* open file, get tree and connect */
  TFile *filein = TFile::Open(filename);
  TTree *treein = (TTree *)filein->Get("aodTree");
  printf("got \"aodTree\": %d entries\n", treein->GetEntries());
  AliAnalysisEvent *analysisEvent = new AliAnalysisEvent();
  TClonesArray *analysisTrackArray = new TClonesArray("AliAnalysisTrack");
  AliAnalysisTrack *analysisTrack = NULL;
  TClonesArray *analysisParticleArray = new TClonesArray("AliAnalysisParticle");
  AliAnalysisParticle *analysisParticle = NULL;
  treein->SetBranchAddress("AnalysisEvent", &analysisEvent);
  treein->SetBranchAddress("AnalysisTrack", &analysisTrackArray);
  treein->SetBranchAddress("AnalysisParticle", &analysisParticleArray);

  /* binning */
  for (Int_t iy = 0; iy < NyBins + 1; iy++)
    yBin[iy] = yMin + iy * yStep;
  for (Int_t ieta = 0; ieta < NetaBins + 1; ieta++)
    etaBin[ieta] = etaMin + ieta * etaStep;
  for (Int_t iphi = 0; iphi < NphiBins + 1; iphi++)
    phiBin[iphi] = phiMin + iphi * phiStep;
  /* THnSparse */
  Int_t NparamBins[kNParams] = {NcentralityBins, NptBins, NetaBins, NphiBins, NyBins};
  Double_t *paramBin[kNParams] = {centralityBin, ptBin, etaBin, phiBin, yBin};
  THnSparseF *hHisto[kNHistos][AliPID::kSPECIES][kNCharges];
  for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++)
    for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
      for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
	hHisto[ihisto][ipart][icharge] = new THnSparseF(Form("hHisto_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]), "", kNParams, NparamBins);
	for (Int_t iparam = 0; iparam < kNParams; iparam++)
	  hHisto[ihisto][ipart][icharge]->SetBinEdges(iparam, paramBin[iparam]);
      }

  /* selected particle array */
  AliAnalysisParticle *selParticle[1000000];
  for (Int_t idx = 0; idx < 1000000; idx++)
    selParticle[idx] = NULL;

  /* filled slot array */
  Int_t filledSlot[1000000];
  Int_t nFilledSlots = 0;


  /* loop over events */
  Double_t param[kNParams];
  Int_t part, charge;
  for (Int_t iev = 0; iev < treein->GetEntries() && iev < evMax; iev++) {
    /* get event */
    treein->GetEvent(iev);
    if (iev % 1000 == 0) printf("iev = %d\n", iev);
    /* check vertex */
    if (!analysisEvent->AcceptVertex()) continue;
    /* check collision candidate */
    if (!analysisEvent->IsCollisionCandidate()) continue;
    /* check centrality quality */
    if (analysisEvent->GetCentralityQuality() != 0.) continue;
    param[kCentrality] = analysisEvent->GetCentralityPercentile(centralityEstimator);

    /*** ACCEPTED EVENT ***/
    
    /* reset filled slots selected particle array */
    for (Int_t islot = 0; islot < nFilledSlots; islot++)
      selParticle[filledSlot[islot]] = NULL;
    /* reset filled slots */
    nFilledSlots = 0;

    /* loop over primaries */
    for (Int_t iprim = 0; iprim < analysisParticleArray->GetEntries(); iprim++) {
      /* get and check particle */
      analysisParticle = (AliAnalysisParticle *)analysisParticleArray->At(iprim);
      if (!analysisParticle || analysisParticle->GetPID() == -1 || analysisParticle->GetLabel() < 0 || analysisParticle->GetSign() == 0.) continue;

      /* check rapidity */
      if (analysisParticle->GetY() - rapidityShift > rapidityMaxCut ||
	  analysisParticle->GetY() - rapidityShift < rapidityMinCut)
	continue;

      /*** ACCEPTED PARTICLE ***/

      /* get particle info */
      part = analysisParticle->GetPID();
      param[kPt] = analysisParticle->GetPt();
      param[kEta] = analysisParticle->GetEta();
      param[kPhi] = analysisParticle->GetPhi();
      charge = analysisParticle->GetSign() > 0. ? kPositive : kNegative;

      /* fill histo and slot */
      hHisto[kPrimaryTracks][part][charge]->Fill(param);
      selParticle[analysisParticle->GetLabel()] = analysisParticle;
      filledSlot[nFilledSlots] = analysisParticle->GetLabel();
      nFilledSlots++;
      
    }

    /* loop over tracks */
    for (Int_t itrk = 0; itrk < analysisTrackArray->GetEntries(); itrk++) {
      /* get and check track */
      analysisTrack = (AliAnalysisTrack *)analysisTrackArray->At(itrk);
      if (!analysisTrack) continue;
      /* check accepted track */
      if (!analysisTrack->AcceptTrack()) continue;
      /* get corresponding particle */
      analysisParticle = selParticle[TMath::Abs(analysisTrack->GetLabel())];
      if (!analysisParticle) continue;

      /*** ACCEPTED PARTICLE WITH RECONSTRUCTED TRACK ***/
      
      /* get particle info */
      part = analysisParticle->GetPID();
      param[kPt] = analysisParticle->GetPt();
      param[kEta] = analysisParticle->GetEta();
      param[kPhi] = analysisParticle->GetPhi();
      charge = analysisParticle->GetSign() > 0. ? kPositive : kNegative;

      /* fill reconstructed histo */
      hHisto[kReconstructedTracks][part][charge]->Fill(param);
      
    }

  }

  TFile *fileout = TFile::Open(Form("TrackingEff.%s", filename), "RECREATE");
  for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++)
    for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
      for (Int_t icharge = 0; icharge < kNCharges; icharge++)
	hHisto[ihisto][ipart][icharge]->Write();
  fileout->Close();

  TString str = Form("TrackingEff.%s", filename);
  TrackingEff_efficiencyPt(str.Data());
  
}

//_____________________________________________________________________________-

TrackingEff_efficiencyPt(const Char_t *filename)
{

  /* get data */
  TFile *filein = TFile::Open(filename);
  THnSparseF *hHisto[kNHistos][AliPID::kSPECIES][kNCharges];
  TH1D *hHistoPt_MB[kNHistos][AliPID::kSPECIES][kNCharges], *hHistoPt_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges];
  TH1D *hHistoAllPt_MB[kNHistos], *hHistoAllPt_centrality[NcentralityBins][kNHistos];
  /* loop over histos */
  for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {

    /* INCLUSIVE */

    hHistoAllPt_MB[ihisto] = new TH1D(Form("hHistoAllPt_MB_%s", histoName[ihisto]), "", NptBins, ptBin);
    for (Int_t icent = 0; icent < NcentralityBins; icent++)
      hHistoAllPt_centrality[icent][ihisto] = new TH1D(Form("hHistoAllPt_centrality%d_%s", icent, histoName[ihisto]), "", NptBins, ptBin);

    /* SINGLE PARTICLE */

    for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
      for (Int_t icharge = 0; icharge < kNCharges; icharge++) {

	/* get histo */
	hHisto[ihisto][ipart][icharge] = (THnSparseF *)filein->Get(Form("hHisto_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));

	/* MB projection */
	hHistoPt_MB[ihisto][ipart][icharge] = hHisto[ihisto][ipart][icharge]->Projection(kPt);
	hHistoPt_MB[ihisto][ipart][icharge]->SetName(Form("hHistoPt_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
	hHistoPt_MB[ihisto][ipart][icharge]->Sumw2();
	hHistoAllPt_MB[ihisto]->Add(hHistoPt_MB[ihisto][ipart][icharge]);
	
	/* centrality projection */
	for (Int_t icent = 0; icent < NcentralityBins; icent++) {
	  hHisto[ihisto][ipart][icharge]->GetAxis(kCentrality)->SetRange(icent + 1, icent + 1);
	  hHistoPt_centrality[icent][ihisto][ipart][icharge] = hHisto[ihisto][ipart][icharge]->Projection(kPt);
	  hHistoPt_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hHistoPt_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
	  hHistoPt_centrality[icent][ihisto][ipart][icharge]->Sumw2();
	  hHistoAllPt_centrality[icent][ihisto]->Add(hHistoPt_centrality[icent][ihisto][ipart][icharge]);
	}
      }
    }
  }    
  
  /* output */
  TString str = filename;
  str.Insert(str.Length() - TString(".root").Length(), ".efficiencyPt");
  TFile *fileout = TFile::Open(str.Data(), "RECREATE");
  
  /* efficiencies/fractions and write */
  TH1D *hEfficiencyPt_MB[kNHistos][AliPID::kSPECIES][kNCharges], *hEfficiencyPt_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges], *hEfficiencyPt_ratioMB_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges];
  TH1D *hEfficiencyAllPt_MB[kNHistos], *hEfficiencyAllPt_centrality[NcentralityBins][kNHistos], *hEfficiencyAllPt_ratioMB_centrality[NcentralityBins][kNHistos];

  for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {

    if (ihisto == kPrimaryTracks) continue;

    /* INCLUSIVE */

    /* MB efficiency */
    hEfficiencyAllPt_MB[ihisto] = new TH1D(*hHistoAllPt_MB[ihisto]);
    hEfficiencyAllPt_MB[ihisto]->SetName(Form("hEfficiencyAllPt_MB_%s", histoName[ihisto]));
    hEfficiencyAllPt_MB[ihisto]->SetLineWidth(2);
    hEfficiencyAllPt_MB[ihisto]->SetLineColor(1);
    hEfficiencyAllPt_MB[ihisto]->SetMarkerStyle(20);
    hEfficiencyAllPt_MB[ihisto]->SetMarkerColor(1);
    hEfficiencyAllPt_MB[ihisto]->Divide(hEfficiencyAllPt_MB[ihisto], hHistoAllPt_MB[kPrimaryTracks], 1, 1, "B");
    hEfficiencyAllPt_MB[ihisto]->Write();
    
    /* multiplicity/centrality efficiency */
    for (Int_t icent = 0; icent < NcentralityBins; icent++) {
      hEfficiencyAllPt_centrality[icent][ihisto] = new TH1D(*hHistoAllPt_centrality[icent][ihisto]);
      hEfficiencyAllPt_centrality[icent][ihisto]->SetName(Form("hEfficiencyAllPt_centrality%d_%s", icent, histoName[ihisto]));
      hEfficiencyAllPt_centrality[icent][ihisto]->SetLineWidth(2);
      hEfficiencyAllPt_centrality[icent][ihisto]->SetLineColor(multcentColor[icent]);
      hEfficiencyAllPt_centrality[icent][ihisto]->SetMarkerStyle(20);
      hEfficiencyAllPt_centrality[icent][ihisto]->SetMarkerColor(multcentColor[icent]);
      hEfficiencyAllPt_centrality[icent][ihisto]->Divide(hEfficiencyAllPt_centrality[icent][ihisto], hHistoAllPt_centrality[icent][kPrimaryTracks], 1, 1, "B");
      hEfficiencyAllPt_centrality[icent][ihisto]->Write();
      
      /* ratio wrt. MB */
      hEfficiencyAllPt_ratioMB_centrality[icent][ihisto] = new TH1D(*hEfficiencyAllPt_centrality[icent][ihisto]);
      hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetName(Form("hEfficiencyAllPt_ratioMB_centrality%d_%s", icent, histoName[ihisto]));
      hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetLineWidth(2);
      hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetLineColor(multcentColor[icent]);
      hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetMarkerStyle(20);
      hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetMarkerColor(multcentColor[icent]);
      hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->Divide(hEfficiencyAllPt_MB[ihisto]);
      hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->Write();
    }
    
    /* SINGLE PARTICLE */

    for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
      for (Int_t icharge = 0; icharge < kNCharges; icharge++) {

 	/* MB efficiency */
	hEfficiencyPt_MB[ihisto][ipart][icharge] = new TH1D(*hHistoPt_MB[ihisto][ipart][icharge]);
	hEfficiencyPt_MB[ihisto][ipart][icharge]->SetName(Form("hEfficiencyPt_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
	hEfficiencyPt_MB[ihisto][ipart][icharge]->SetLineWidth(2);
	hEfficiencyPt_MB[ihisto][ipart][icharge]->SetLineColor(1);
	hEfficiencyPt_MB[ihisto][ipart][icharge]->SetMarkerStyle(20);
	hEfficiencyPt_MB[ihisto][ipart][icharge]->SetMarkerColor(1);
	hEfficiencyPt_MB[ihisto][ipart][icharge]->Divide(hEfficiencyPt_MB[ihisto][ipart][icharge], hHistoPt_MB[kPrimaryTracks][ipart][icharge], 1, 1, "B");
	hEfficiencyPt_MB[ihisto][ipart][icharge]->Write();
	
	/* multiplicity/centrality efficiency */
	for (Int_t icent = 0; icent < NcentralityBins; icent++) {
	  hEfficiencyPt_centrality[icent][ihisto][ipart][icharge] = new TH1D(*hHistoPt_centrality[icent][ihisto][ipart][icharge]);
	  hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hEfficiencyPt_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
	  hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->SetLineWidth(2);
	  hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->SetLineColor(multcentColor[icent]);
	  hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->SetMarkerStyle(20);
	  hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->SetMarkerColor(multcentColor[icent]);
	  hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->Divide(hEfficiencyPt_centrality[icent][ihisto][ipart][icharge], hHistoPt_centrality[icent][kPrimaryTracks][ipart][icharge], 1, 1, "B");
	  hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->Write();
	  
	  /* ratio wrt. MB */
	  hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge] = new TH1D(*hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]);
	  hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hEfficiencyPt_ratioMB_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
	  hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetLineWidth(2);
	  hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetLineColor(multcentColor[icent]);
	  hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetMarkerStyle(20);
	  hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetMarkerColor(multcentColor[icent]);
	  hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->Divide(hEfficiencyPt_MB[ihisto][ipart][icharge]);
	  hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->Write();
	}
	
      }       
    }
  }
  
  fileout->Close();
	     
  TrackingEff_trackingEfficiency(str.Data());
}

//_____________________________________________________________________________-

TrackingEff_efficiencyEta(const Char_t *filename)
{

  /* get data */
  TFile *filein = TFile::Open(filename);
  THnSparseF *hHisto[kNHistos][AliPID::kSPECIES][kNCharges];
  TH1D *hHistoEta_MB[kNHistos][AliPID::kSPECIES][kNCharges], *hHistoEta_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges];
  TH1D *hHistoEta_MB_pt[NptsubBins][kNHistos][AliPID::kSPECIES][kNCharges], *hHistoEta_centrality_pt[NcentralityBins][NptsubBins][kNHistos][AliPID::kSPECIES][kNCharges];
  /* loop over histos */
  for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++)
    for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
      for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
	
	/* get histo */
	hHisto[ihisto][ipart][icharge] = (THnSparseF *)filein->Get(Form("hHisto_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
	
	/* MB projection */
	hHisto[ihisto][ipart][icharge]->GetAxis(kPt)->SetRange(0, 0);
	hHisto[ihisto][ipart][icharge]->GetAxis(kCentrality)->SetRange(0, 0);
	hHistoEta_MB[ihisto][ipart][icharge] = hHisto[ihisto][ipart][icharge]->Projection(kEta);
	hHistoEta_MB[ihisto][ipart][icharge]->SetName(Form("hHistoEta_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
	hHistoEta_MB[ihisto][ipart][icharge]->Sumw2();
	/* pt bins */
	for (Int_t ipt = 0; ipt < NptsubBins; ipt++) {
	  hHisto[ihisto][ipart][icharge]->GetAxis(kPt)->SetRange(ptsubBinMin[ipt] + 1, ptsubBinMax[ipt] + 1);
	  hHisto[ihisto][ipart][icharge]->GetAxis(kCentrality)->SetRange(0, 0);
	  hHistoEta_MB_pt[ipt][ihisto][ipart][icharge] = hHisto[ihisto][ipart][icharge]->Projection(kEta);
	  hHistoEta_MB_pt[ipt][ihisto][ipart][icharge]->SetName(Form("hHistoEta_MB_pt%d_%s_%s_%s", ipt, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
	  hHistoEta_MB_pt[ipt][ihisto][ipart][icharge]->Sumw2();
	}
	
	/* centrality projection */
	for (Int_t icent = 0; icent < NcentralityBins; icent++) {
	  hHisto[ihisto][ipart][icharge]->GetAxis(kPt)->SetRange(0, 0);
	  hHisto[ihisto][ipart][icharge]->GetAxis(kCentrality)->SetRange(icent + 1, icent + 1);
	  hHistoEta_centrality[icent][ihisto][ipart][icharge] = hHisto[ihisto][ipart][icharge]->Projection(kEta);
	  hHistoEta_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hHistoEta_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
	  hHistoEta_centrality[icent][ihisto][ipart][icharge]->Sumw2();
	  /* pt bins */
	  for (Int_t ipt = 0; ipt < NptsubBins; ipt++) {
	    hHisto[ihisto][ipart][icharge]->GetAxis(kPt)->SetRange(ptsubBinMin[ipt] + 1, ptsubBinMax[ipt] + 1);
	    hHisto[ihisto][ipart][icharge]->GetAxis(kCentrality)->SetRange(icent + 1, icent + 1);
	    hHistoEta_centrality_pt[icent][ipt][ihisto][ipart][icharge] = hHisto[ihisto][ipart][icharge]->Projection(kEta);
	    hHistoEta_centrality_pt[icent][ipt][ihisto][ipart][icharge]->SetName(Form("hHistoEta_centrality%d_pt%d_%s_%s_%s", icent, ipt, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
	    hHistoEta_centrality_pt[icent][ipt][ihisto][ipart][icharge]->Sumw2();
	  }
	}
      }
  
  /* output */
  TString str = filename;
  str.Insert(str.Length() - TString(".root").Length(), ".efficiencyEta");
  TFile *fileout = TFile::Open(str.Data(), "RECREATE");
  
  /* efficiencies/fractions and write */
  TH1D *hEfficiencyEta_MB[kNHistos][AliPID::kSPECIES][kNCharges], *hEfficiencyEta_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges], *hEfficiencyEta_ratioMB_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges];
  TH1D *hEfficiencyEta_MB_pt[NptsubBins][kNHistos][AliPID::kSPECIES][kNCharges], *hEfficiencyEta_centrality_pt[NcentralityBins][NptsubBins][kNHistos][AliPID::kSPECIES][kNCharges], *hEfficiencyEta_ratioMB_centrality_pt[NcentralityBins][NptsubBins][kNHistos][AliPID::kSPECIES][kNCharges];
  
  for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {
    for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
      for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
	
	if (ihisto == kPrimaryTracks) continue;
	
	/* MB efficiency */
	hEfficiencyEta_MB[ihisto][ipart][icharge] = new TH1D(*hHistoEta_MB[ihisto][ipart][icharge]);
	hEfficiencyEta_MB[ihisto][ipart][icharge]->SetName(Form("hEfficiencyEta_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
	hEfficiencyEta_MB[ihisto][ipart][icharge]->SetLineWidth(2);
	hEfficiencyEta_MB[ihisto][ipart][icharge]->SetLineColor(1);
	hEfficiencyEta_MB[ihisto][ipart][icharge]->SetMarkerStyle(20);
	hEfficiencyEta_MB[ihisto][ipart][icharge]->SetMarkerColor(1);
	hEfficiencyEta_MB[ihisto][ipart][icharge]->Divide(hEfficiencyEta_MB[ihisto][ipart][icharge], hHistoEta_MB[kPrimaryTracks][ipart][icharge], 1, 1, "B");
	hEfficiencyEta_MB[ihisto][ipart][icharge]->Write();
	/* pt bins */
	for (Int_t ipt = 0; ipt < NptsubBins; ipt++) {
	  hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge] = new TH1D(*hHistoEta_MB_pt[ipt][ihisto][ipart][icharge]);
	  hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->SetName(Form("hEfficiencyEta_MB_pt%d_%s_%s_%s", ipt, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
	  hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->SetLineWidth(2);
	  hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->SetLineColor(1);
	  hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->SetMarkerStyle(20);
	  hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->SetMarkerColor(1);
	  hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->Divide(hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge], hHistoEta_MB_pt[ipt][kPrimaryTracks][ipart][icharge], 1, 1, "B");
	  hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->Write();
	}
	
	/* multiplicity/centrality efficiency */
	for (Int_t icent = 0; icent < NcentralityBins; icent++) {
	  hEfficiencyEta_centrality[icent][ihisto][ipart][icharge] = new TH1D(*hHistoEta_centrality[icent][ihisto][ipart][icharge]);
	  hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hEfficiencyEta_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
	  hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->SetLineWidth(2);
	  hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->SetLineColor(multcentColor[icent]);
	  hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->SetMarkerStyle(20);
	  hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->SetMarkerColor(multcentColor[icent]);
	  hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->Divide(hEfficiencyEta_centrality[icent][ihisto][ipart][icharge], hHistoEta_centrality[icent][kPrimaryTracks][ipart][icharge], 1, 1, "B");
	  hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->Write();
	  
	  /* ratio wrt. MB */
	  hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge] = new TH1D(*hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]);
	  hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hEfficiencyEta_ratioMB_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
	  hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetLineWidth(2);
	  hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetLineColor(multcentColor[icent]);
	  hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetMarkerStyle(20);
	  hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetMarkerColor(multcentColor[icent]);
	  hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->Divide(hEfficiencyEta_MB[ihisto][ipart][icharge]);
	  hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->Write();
	}
	
      }       
  }
  
  fileout->Close();
  
}

//_____________________________________________________________________________-

TrackingEff_centralityDependence(const Char_t *filename)
{

  Double_t fitMin[AliPID::kSPECIES] = {0.5, 0.5, 0.5, 0.5, 0.5};
  Double_t fitMax[AliPID::kSPECIES] = {3.0, 3.0, 3.0, 3.0, 5.0};

  TF1 *pol0 = (TF1 *)gROOT->GetFunction("pol0");
  TF1 *pol1 = (TF1 *)gROOT->GetFunction("pol1");
  pol0->SetRange(0., 5.0);
  TFile *filein = TFile::Open(filename);

  /* output */
  TString str = filename;
  str.Insert(str.Length() - TString(".root").Length(), ".centralityDependence");
  TFile *fileout = TFile::Open(str.Data(), "RECREATE");

  TH1D *hEfficiencyPt_ratioMB;
  TH1D *hEfficiencyCentrality[kNHistos][AliPID::kSPECIES][kNCharges];
  TH1D *hChi2Centrality[kNHistos][AliPID::kSPECIES][kNCharges];
  TH1D *hEfficiencyAllCentrality[kNHistos];
  TH1F *hHistoEffRatio = new TH1F("hHistoEffRatio", "", 100, 0.5, 1.5);
  for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {
    if (ihisto == kPrimaryTracks) continue;

    /* INCLUSIVE */

    hEfficiencyAllCentrality[ihisto] = new TH1D(Form("hEfficiencyAllCentrality_ratioMB_%s", histoName[ihisto]), "", NcentralityBins, centralityBin);
    hEfficiencyAllCentrality[ihisto]->SetLineWidth(2);
    hEfficiencyAllCentrality[ihisto]->SetLineColor(1);
    hEfficiencyAllCentrality[ihisto]->SetMarkerStyle(20);
    hEfficiencyAllCentrality[ihisto]->SetMarkerColor(1);
    
    for (Int_t icent = 0; icent < NcentralityBins; icent++) {
      
      hEfficiencyPt_ratioMB = (TH1D *)filein->Get(Form("hEfficiencyAllPt_ratioMB_centrality%d_%s", icent, histoName[ihisto]));
      hEfficiencyPt_ratioMB->Fit(pol0, "q0", "", 0., 5.0);
      hEfficiencyAllCentrality[ihisto]->SetBinContent(icent + 1, pol0->GetParameter(0));
      hEfficiencyAllCentrality[ihisto]->SetBinError(icent + 1, pol0->GetParError(0));
      hEfficiencyPt_ratioMB->Add(pol0, -1.);
      hEfficiencyPt_ratioMB->Write();
      
    }
    hEfficiencyAllCentrality[ihisto]->Write();
    
    
    /* SINGLE PARTICLE */
    
    for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++)
      for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
	
	hEfficiencyCentrality[ihisto][ipart][icharge] = new TH1D(Form("hEfficiencyCentrality_ratioMB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]), "", NcentralityBins, centralityBin);
	hEfficiencyCentrality[ihisto][ipart][icharge]->SetLineWidth(2);
	hEfficiencyCentrality[ihisto][ipart][icharge]->SetLineColor(particleColor[ipart]);
	hEfficiencyCentrality[ihisto][ipart][icharge]->SetMarkerStyle(chargeMarker[icharge]);
	hEfficiencyCentrality[ihisto][ipart][icharge]->SetMarkerColor(particleColor[ipart]);
	
	for (Int_t icent = 0; icent < NcentralityBins; icent++) {
	 
	  hEfficiencyPt_ratioMB = (TH1D *)filein->Get(Form("hEfficiencyPt_ratioMB_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));

	  hEfficiencyPt_ratioMB->Fit(pol0, "q0", "", fitMin[ipart], fitMax[ipart]);
	  hEfficiencyCentrality[ihisto][ipart][icharge]->SetBinContent(icent + 1, pol0->GetParameter(0));
	  hEfficiencyCentrality[ihisto][ipart][icharge]->SetBinError(icent + 1, pol0->GetParError(0));
	  pol0->SetRange(fitMin[ipart], fitMax[ipart]);
	  hEfficiencyPt_ratioMB->Add(pol0, -1.);
	  hEfficiencyPt_ratioMB->Write();

	}

	hEfficiencyCentrality[ihisto][ipart][icharge]->Write();
      }
  }
  
  fileout->Close();
}

//_____________________________________________________________________________-

TrackingEff_centralityDependenceFit(const Char_t *filename, Int_t ihisto = kReconstructedTracks)
{

  const Char_t *particleLabel[5][2] = {"", "", "", "", "#pi^{+}", "#pi^{-}", "K^{+}", "K^{-}", "p", "#bar{p}"};

  TF1 *fCentralityDependence = new TF1("fCentralityDependence", "[0] + [1] * (1. - TMath::Exp(-x / [2]))", 0., 90.);
  fCentralityDependence->SetParameter(0, 0.98);
  fCentralityDependence->SetParameter(1, 0.05);
  fCentralityDependence->SetParameter(2, 50.);

  TFile *filein = TFile::Open(filename);
  TH1D *hEfficiencyAllCentrality;
  TH1D *hEfficiencyCentrality[AliPID::kSPECIES][kNCharges];
  hEfficiencyAllCentrality = (TH1D *)filein->Get(Form("hEfficiencyAllCentrality_ratioMB_%s", histoName[ihisto]));
  TCanvas *cFit = new TCanvas("cFit");
  hEfficiencyAllCentrality->Fit(fCentralityDependence);
  hEfficiencyAllCentrality->SetMaximum(1.05);
  hEfficiencyAllCentrality->SetMinimum(0.95);
  TCanvas *cRatios = new TCanvas("cRatios");
  cRatios->Divide(2, 3);
  for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++) {
    for (Int_t icharge = 0; icharge < 2; icharge++) {
      cRatios->cd(icharge + 1 + 2 * (ipart - 2));
      cRatios->cd(icharge + 1 + 2 * (ipart - 2))->SetGridx();
      cRatios->cd(icharge + 1 + 2 * (ipart - 2))->SetGridy();
      hEfficiencyCentrality[ipart][icharge] = (TH1D *)filein->Get(Form("hEfficiencyCentrality_ratioMB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
      hEfficiencyCentrality[ipart][icharge]->Divide(fCentralityDependence);
      hEfficiencyCentrality[ipart][icharge]->SetMaximum(1.05);
      hEfficiencyCentrality[ipart][icharge]->SetMinimum(0.95);
      hEfficiencyCentrality[ipart][icharge]->SetTitle(Form("%s;centrality percentile;efficiency ratio wrt. fitted centrality dependence", particleLabel[ipart][icharge]));
      hEfficiencyCentrality[ipart][icharge]->SetStats(kFALSE);
      hEfficiencyCentrality[ipart][icharge]->Draw();
    }
  }
  

}


//_____________________________________________________________________________-

TrackingEff_efficiencyPt_MB_plot(const Char_t *filename)
{
  TrackingEff_efficiencyPt_MB_plot(filename, kReconstructedTracks, 2, 0, 20, 4);
  TrackingEff_efficiencyPt_MB_plot(filename, kReconstructedTracks, 2, 1, 25, 4);
  TrackingEff_efficiencyPt_MB_plot(filename, kReconstructedTracks, 3, 0, 20, 8);
  TrackingEff_efficiencyPt_MB_plot(filename, kReconstructedTracks, 3, 1, 25, 8);
  TrackingEff_efficiencyPt_MB_plot(filename, kReconstructedTracks, 4, 0, 20, 2);
  TrackingEff_efficiencyPt_MB_plot(filename, kReconstructedTracks, 4, 1, 25, 2);
}

TH1D *
TrackingEff_efficiencyPt_MB_plot(const Char_t *filename, Int_t ihisto = kReconstructedTracks, Int_t ipart, Int_t icharge, Int_t marker = 20, Int_t color = 2, Option_t *opt = "")
{
  
  TCanvas *cCanvas1 = new TCanvas("cCanvas1");
  TCanvas *cCanvas2 = new TCanvas("cCanvas2");
  
  Double_t ptMin[AliPID::kSPECIES] = {0.5, 0.5, 0.5, 0.5, 0.5};
  Double_t ptMax[AliPID::kSPECIES] = {3.0, 3.0, 3.0, 3.0, 5.0};

  TF1 *fEff = new TF1("fEff", "[0] + [1] * x - [2] * TMath::Exp(-[3] * TMath::Power(x, [4]))", 0.5, 5.0);
  fEff->SetParameter(0, 0.8);
  fEff->SetParameter(1, -0.01);
  fEff->SetParameter(2, 2.0);
  fEff->SetParameter(3, 1.);
  fEff->SetParameter(4, 2.);

  TFile *fileout = TFile::Open(Form("%s/efficiencyPt_MB_%s_%s.root", destdir, AliPID::ParticleName(ipart), chargeName[icharge]), "RECREATE");

  TFile *filein = TFile::Open(filename);
  TH1D *hEfficiencyPt = (TH1D *)filein->Get(Form("hEfficiencyPt_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
  hEfficiencyPt->Fit(fEff, "0", "IME", 0.5, 5.0);
  hEfficiencyPt->SetTitle(Form("%s;p_{T} (GeV/c);acceptance #times efficiency;", partChargeName[ipart][icharge]));
  hEfficiencyPt->SetMinimum(0.4);
  hEfficiencyPt->SetMaximum(0.8);
  hEfficiencyPt->SetMarkerStyle(marker);
  hEfficiencyPt->SetMarkerColor(color);
  hEfficiencyPt->SetMarkerSize(1.5);
  hEfficiencyPt->SetLineWidth(2);
  hEfficiencyPt->SetLineColor(color);
  hEfficiencyPt->GetXaxis()->SetRangeUser(ptMin[ipart] + 0.001, ptMax[ipart] - 0.001);
  hEfficiencyPt->SetStats(kFALSE);
  cCanvas1->cd();
  hEfficiencyPt->DrawCopy();
  fEff->DrawCopy("same");
  fileout->cd();
  hEfficiencyPt->Write("hEfficiencyPt");
  fEff->Write("fEff");
  
  cCanvas1->SetGridx();
  cCanvas1->SetGridy();
  cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_%s_%s.C", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
  cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_%s_%s.png", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
  cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_%s_%s.eps", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
  
  TH1D *hRatioPt = new TH1D(*hEfficiencyPt);
  hRatioPt->Divide(fEff);
  hRatioPt->SetTitle(Form("%s;p_{T} (GeV/c);ratio wrt. fitted dependence;", partChargeName[ipart][icharge]));
  hRatioPt->SetMinimum(0.9);
  hRatioPt->SetMaximum(1.1);
  cCanvas2->cd();
  hRatioPt->DrawCopy();
  fileout->cd();
  hRatioPt->Write("hRatioPt");

  cCanvas2->SetGridx();
  cCanvas2->SetGridy();
  cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_%s_%s.C", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
  cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_%s_%s.png", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
  cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_%s_%s.eps", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
  

  fileout->Close();

  //  hEfficiencyPt->Add(fEff, -1.);
  return hEfficiencyPt;
}

//_____________________________________________________________________________-

TH1D *
TrackingEff_efficiencyPt_centrality_all_plot(const Char_t *filename, Int_t ihisto = kReconstructedTracks, Int_t marker = 20, Int_t color = 1, Option_t *opt = "")
{
  
  TCanvas *cCanvas1 = new TCanvas("cCanvas1");
  TCanvas *cCanvas2 = new TCanvas("cCanvas2");
  
  Double_t ptMin[AliPID::kSPECIES] = {0.5, 0.5, 0.5, 0.5, 0.5};
  Double_t ptMax[AliPID::kSPECIES] = {3.0, 3.0, 3.0, 3.0, 5.0};
  
  TF1 *fEff = new TF1("fEff", "[5] * ([0] + [1] * x - [2] * TMath::Exp(-[3] * TMath::Power(x, [4])))", 0.5, 5.0);
  fEff->SetParameter(0, 0.8);
  fEff->SetParameter(1, -0.01);
  fEff->SetParameter(2, 2.0);
  fEff->SetParameter(3, 1.);
  fEff->SetParameter(4, 2.);
  fEff->FixParameter(5, 1.);

  TFile *fileout = TFile::Open(Form("%s/efficiencyPt_MB_all.root", destdir), "RECREATE");
  
  TFile *filein = TFile::Open(filename);
  TH1D *hEfficiencyPt = (TH1D *)filein->Get(Form("hEfficiencyAllPt_MB_%s", histoName[ihisto]));
  hEfficiencyPt->Fit(fEff, "0", "IME", 0.5, 5.0);
  hEfficiencyPt->SetTitle("all particles;p_{T} (GeV/c);acceptance #times efficiency;");
  hEfficiencyPt->SetMinimum(0.4);
  hEfficiencyPt->SetMaximum(0.8);
  hEfficiencyPt->SetMarkerStyle(marker);
  hEfficiencyPt->SetMarkerColor(color);
  hEfficiencyPt->SetMarkerSize(1.5);
  hEfficiencyPt->SetLineWidth(2);
  hEfficiencyPt->SetLineColor(color);
  hEfficiencyPt->GetXaxis()->SetRangeUser(0.5 + 0.001, 5.0 - 0.001);
  hEfficiencyPt->SetStats(kFALSE);
  cCanvas1->cd();
  hEfficiencyPt->DrawCopy();
  fEff->DrawCopy("same");
  fileout->cd();
  hEfficiencyPt->Write("hEfficiencyPt");
  fEff->Write("fEff");

  cCanvas1->SetGridx();
  cCanvas1->SetGridy();
  cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_all.C", destdir));
  cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_all.png", destdir));
  cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_all.eps", destdir));

  TH1D *hRatioPt = new TH1D(*hEfficiencyPt);
  hRatioPt->Divide(fEff);
  hRatioPt->SetTitle("all particles;p_{T} (GeV/c);ratio wrt. fitted dependence;");
  hRatioPt->SetMinimum(0.9);
  hRatioPt->SetMaximum(1.1);
  cCanvas2->cd();
  hRatioPt->DrawCopy();
  fileout->cd();
  hRatioPt->Write("hRatioPt");

  cCanvas2->SetGridx();
  cCanvas2->SetGridy();
  cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_all.C", destdir));
  cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_all.png", destdir));
  cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_all.eps", destdir));
  
  /* fix efficiency shape and release scale factor */
  fEff->FixParameter(0, fEff->GetParameter(0));
  fEff->FixParameter(1, fEff->GetParameter(1));
  fEff->FixParameter(2, fEff->GetParameter(2));
  fEff->FixParameter(3, fEff->GetParameter(3));
  fEff->FixParameter(4, fEff->GetParameter(4));
  fEff->ReleaseParameter(5);
  
  TH1D *hEfficiencyCent = new TH1D("hEfficiencyCent", "all particles;centrality percentile;acceptance x efficiency scale factor;", NcentralityBins, centralityBin);
  hEfficiencyCent->SetMinimum(0.95);
  hEfficiencyCent->SetMaximum(1.05);
  hEfficiencyCent->SetMarkerStyle(marker);
  hEfficiencyCent->SetMarkerColor(color);
  hEfficiencyCent->SetMarkerSize(1.5);
  hEfficiencyCent->SetLineWidth(2);
  hEfficiencyCent->SetLineColor(color);
  hEfficiencyCent->SetStats(kFALSE);
  
  
  TH1D *hEfficiencyPt_cent[NcentralityBins];
  TH1D *hRatioPt_cent[NcentralityBins];
  for (Int_t icent = 0; icent < NcentralityBins; icent++) {
    
  
    hEfficiencyPt_cent[icent] = (TH1D *)filein->Get(Form("hEfficiencyAllPt_centrality%d_%s", icent, histoName[ihisto]));
    hEfficiencyPt_cent[icent]->Fit(fEff, "0", "IME", 1.0, 3.0);
    hEfficiencyPt_cent[icent]->Fit(fEff, "", "IME", 0.5, 5.0);
    
    hEfficiencyPt_cent[icent]->SetTitle(Form("all particles (%d-%d\%);p_{T} (GeV/c);acceptance #times efficiency;", (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1]));
    hEfficiencyPt_cent[icent]->SetMinimum(0.2);
    hEfficiencyPt_cent[icent]->SetMaximum(0.8);
    hEfficiencyPt_cent[icent]->SetMarkerStyle(marker);
    hEfficiencyPt_cent[icent]->SetMarkerColor(color);
    hEfficiencyPt_cent[icent]->SetMarkerSize(1.5);
    hEfficiencyPt_cent[icent]->SetLineWidth(2);
    hEfficiencyPt_cent[icent]->SetLineColor(color);
    hEfficiencyPt_cent[icent]->GetXaxis()->SetRangeUser(0.5 + 0.001, 5.0 - 0.001);
    hEfficiencyPt_cent[icent]->SetStats(kFALSE);
    cCanvas1->cd();
    hEfficiencyPt_cent[icent]->DrawCopy();
    fEff->DrawCopy("same");
    fileout->cd();
    hEfficiencyPt_cent[icent]->Write(Form("hEfficiencyPt_cent%d", icent));
    fEff->Write(Form("fEff_cent%d", icent));
    
    hEfficiencyCent->SetBinContent(icent + 1, fEff->GetParameter(5));
    hEfficiencyCent->SetBinError(icent + 1, fEff->GetParError(5));
    
    cCanvas1->SetGridx();
    cCanvas1->SetGridy();
    cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_all.C", destdir, icent));
    cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_all.png", destdir, icent));
    cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_all.eps", destdir, icent));
    
    hRatioPt_cent[icent] = new TH1D(*hEfficiencyPt_cent[icent]);
    hRatioPt_cent[icent]->Divide(fEff);
    hRatioPt_cent[icent]->SetTitle(Form("all particles (%d-%d\%);p_{T} (GeV/c);ratio wrt. fitted dependence;", (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1]));
    hRatioPt_cent[icent]->SetMinimum(0.9);
    hRatioPt_cent[icent]->SetMaximum(1.1);
    cCanvas2->cd();
    hRatioPt_cent[icent]->DrawCopy();
    fileout->cd();
    hRatioPt_cent[icent]->Write(Form("hRatio_cent%d", icent));

    cCanvas2->SetGridx();
    cCanvas2->SetGridy();
    cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_all.C", destdir, icent));
    cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_all.png", destdir, icent));
    cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_all.eps", destdir, icent));

    
  }

  TF1 *fEffCent = new TF1("fEffCent", "[0] - [1] * TMath::Exp(-[2] * TMath::Power(x, [3]))", 0., 90.);
  fEffCent->SetParameter(0, 1.02);
  fEffCent->SetParameter(1, 0.04);
  fEffCent->SetParameter(2, 0.001);
  fEffCent->SetParameter(3, 2.);
  hEfficiencyCent->Fit(fEffCent, "q0", "IME", 0., 90.);
  
  TCanvas *cCanvas3 = new TCanvas("cCanvas3");
  hEfficiencyCent->DrawCopy();
  fEffCent->DrawCopy("same");
  fileout->cd();
  hEfficiencyCent->Write("hEfficiencyCent");
  fEffCent->Write("fEffCent");
  
  cCanvas3->SetGridx();
  cCanvas3->SetGridy();
  cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_all.C", destdir));
  cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_all.png", destdir));
  cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_all.eps", destdir));

  TCanvas *cCanvas4 = new TCanvas("cCanvas4");

  TH1D *hRatioCent = new TH1D(*hEfficiencyCent);
  hRatioCent->Divide(fEffCent);
  hRatioCent->SetTitle(Form("all particles;centrality percentile;ratio wrt. fitted dependence;"));
  hRatioCent->SetMinimum(0.95);
  hRatioCent->SetMaximum(1.05);
  cCanvas4->cd();
  hRatioCent->DrawCopy();
  fileout->cd();
  hRatioCent->Write("hRatioCent");

  cCanvas4->SetGridx();
  cCanvas4->SetGridy();
  cCanvas4->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_ratioFit_all.C", destdir));
  cCanvas4->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_ratioFit_all.png", destdir));
  cCanvas4->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_ratioFit_all.eps", destdir));
  
  fileout->Close();

  //  hEfficiencyPt->Add(fEff, -1.);
  return hEfficiencyCent;
}


//_____________________________________________________________________________-

TrackingEff_efficiencyPt_centrality_plot(const Char_t *filename)
{
  TrackingEff_efficiencyPt_centrality_plot(filename, kReconstructedTracks, 2, 0, 20, 4);
  TrackingEff_efficiencyPt_centrality_plot(filename, kReconstructedTracks, 2, 1, 25, 4);
  TrackingEff_efficiencyPt_centrality_plot(filename, kReconstructedTracks, 3, 0, 20, 8);
  TrackingEff_efficiencyPt_centrality_plot(filename, kReconstructedTracks, 3, 1, 25, 8);
  TrackingEff_efficiencyPt_centrality_plot(filename, kReconstructedTracks, 4, 0, 20, 2);
  TrackingEff_efficiencyPt_centrality_plot(filename, kReconstructedTracks, 4, 1, 25, 2);
}

TH1D *
TrackingEff_efficiencyPt_centrality_plot(const Char_t *filename, Int_t ihisto = kReconstructedTracks, Int_t ipart, Int_t icharge, Int_t marker = 20, Int_t color = 2, Option_t *opt = "")
{

  TVirtualFitter::SetMaxIterations(1000000);

  /* load HistoUtils */
  gROOT->LoadMacro("HistoUtils.C");
  
  TCanvas *cCanvas1 = new TCanvas("cCanvas1");
  TCanvas *cCanvas2 = new TCanvas("cCanvas2");
  TCanvas *cCanvas5 = new TCanvas("cCanvas5");

  Double_t ptMin[AliPID::kSPECIES] = {0.5, 0.5, 0.5, 0.5, 0.5};
  Double_t ptMax[AliPID::kSPECIES] = {3.0, 3.0, 3.0, 3.0, 5.0};

  /* fit minimum-bias efficiency pt */

  TF1 *fEff = new TF1("fEff", "([0] * TMath::Exp(-TMath::Power([1] / x, [2])) + [3] * x) * TMath::Exp(TMath::Power([4] / x, [5]))", ptMin[ipart], ptMax[ipart]);
  fEff->SetParameter(0, 0.5);
  fEff->SetParameter(1, 0.1);
  fEff->SetParameter(2, 2.);
  fEff->SetParameter(3, 0.);
  fEff->SetParameter(4, 0.001);
  fEff->SetParameter(5, 1.);
  Int_t nPars = fEff->GetNpar();
  Int_t scalePar = 0.;
  TF1 *fEffCopy = new TF1(*fEff);

  TFile *fileout = TFile::Open(Form("%s/efficiencyPt_centrality_%s_%s.root", destdir, AliPID::ParticleName(ipart), chargeName[icharge]), "RECREATE");

  TFile *filein = TFile::Open(filename);
  TH1D *hEfficiencyPt = (TH1D *)filein->Get(Form("hEfficiencyPt_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
  hEfficiencyPt->Fit(fEff, "0", "IMRE", ptMin[ipart], ptMax[ipart]);

  /* build efficiency profile */
  for (Int_t ipar = 0; ipar < nPars; ipar++) {
    fEffCopy->SetParameter(ipar, fEff->GetParameter(ipar));
    fEffCopy->SetParError(ipar, fEff->GetParError(ipar));
  }
  TProfile *pEfficiencyPt = new TProfile(Form("pEfficiencyPt_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]), Form("%s;p_{T} (GeV/c);acceptance #times efficiency;", partChargeName[ipart][icharge]), NptBins, ptBin, "s");
  HistoUtils_Function2Profile(fEffCopy, pEfficiencyPt);

  /* draw */
  cCanvas1->cd();
  pEfficiencyPt->SetMarkerStyle(marker);
  pEfficiencyPt->SetMarkerColor(color);
  pEfficiencyPt->SetMarkerSize(0);
  pEfficiencyPt->SetLineWidth(2);
  pEfficiencyPt->SetLineColor(color);
  pEfficiencyPt->SetFillStyle(3001);
  pEfficiencyPt->SetFillColor(color);
  pEfficiencyPt->GetXaxis()->SetRangeUser(ptMin[ipart] + 0.001, ptMax[ipart] - 0.001);
  pEfficiencyPt->SetStats(kFALSE);
  pEfficiencyPt->DrawCopy("E2");

  hEfficiencyPt->SetTitle(Form("%s;p_{T} (GeV/c);acceptance #times efficiency;", partChargeName[ipart][icharge]));
  hEfficiencyPt->SetMarkerStyle(marker);
  hEfficiencyPt->SetMarkerColor(color);
  hEfficiencyPt->SetMarkerSize(1.5);
  hEfficiencyPt->SetLineWidth(2);
  hEfficiencyPt->SetLineColor(color);
  hEfficiencyPt->GetXaxis()->SetRangeUser(ptMin[ipart] + 0.001, ptMax[ipart] - 0.001);
  hEfficiencyPt->SetStats(kFALSE);
  hEfficiencyPt->DrawCopy("same");
  fEff->DrawCopy("same");
  cCanvas1->Update();

  /* write */
  fileout->cd();
  pEfficiencyPt->Write("pEfficiencyPt");
  hEfficiencyPt->Write("hEfficiencyPt");
  fEff->Write("fEff");

  TH1D *hEfficiencyCent = new TH1D("hEfficiencyCent", Form("%s;centrality percentile;acceptance x efficiency scale factor;", partChargeName[ipart][icharge]), NcentralityBins, centralityBin);
  hEfficiencyCent->SetMinimum(0.9);
  hEfficiencyCent->SetMaximum(1.1);
  hEfficiencyCent->SetMarkerStyle(marker);
  hEfficiencyCent->SetMarkerColor(color);
  hEfficiencyCent->SetMarkerSize(1.5);
  hEfficiencyCent->SetLineWidth(2);
  hEfficiencyCent->SetLineColor(color);
  hEfficiencyCent->SetStats(kFALSE);
  
  TProfile *pEfficiencyPt_cent[NcentralityBins];
  TH1D *hEfficiencyPt_cent[NcentralityBins];
  TH1D *hRatioPt_cent[NcentralityBins];

  /* fix efficiency shape and release scale factor */
  for (Int_t ipar = 0; ipar < nPars; ipar++)
    fEff->FixParameter(ipar, fEff->GetParameter(ipar));
  fEff->ReleaseParameter(scalePar);
    
  gStyle->SetOptStat(1100);
  for (Int_t icent = 0; icent < NcentralityBins; icent++) {

    hEfficiencyPt_cent[icent] = (TH1D *)filein->Get(Form("hEfficiencyPt_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
    hEfficiencyPt_cent[icent]->Fit(fEff, "", "IME", ptMin[ipart], ptMax[ipart]);
    
    /* build efficiency profile */
    fEffCopy->SetParameter(scalePar, fEff->GetParameter(scalePar));
    fEffCopy->SetParError(scalePar, fEff->GetParError(scalePar));
    pEfficiencyPt_cent[icent] = new TProfile(Form("pEfficiencyPt_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]), Form("%s;p_{T} (GeV/c);acceptance #times efficiency;", partChargeName[ipart][icharge]), NptBins, ptBin, "s");
    HistoUtils_Function2Profile(fEffCopy, pEfficiencyPt_cent[icent]);
    
    /* draw */
    cCanvas1->cd();
    pEfficiencyPt_cent[icent]->SetMarkerStyle(marker);
    pEfficiencyPt_cent[icent]->SetMarkerColor(color);
    pEfficiencyPt_cent[icent]->SetMarkerSize(0);
    pEfficiencyPt_cent[icent]->SetLineWidth(2);
    pEfficiencyPt_cent[icent]->SetLineColor(color);
    pEfficiencyPt_cent[icent]->SetFillStyle(3001);
    pEfficiencyPt_cent[icent]->SetFillColor(color);
    pEfficiencyPt_cent[icent]->GetXaxis()->SetRangeUser(ptMin[ipart] + 0.001, ptMax[ipart] - 0.001);
    pEfficiencyPt_cent[icent]->SetStats(kFALSE);
    pEfficiencyPt_cent[icent]->DrawCopy("E2");
    
    hEfficiencyPt_cent[icent]->SetTitle(Form("%s (%d-%d\%);p_{T} (GeV/c);acceptance #times efficiency;", partChargeName[ipart][icharge], (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1]));
    hEfficiencyPt_cent[icent]->SetMarkerStyle(marker);
    hEfficiencyPt_cent[icent]->SetMarkerColor(color);
    hEfficiencyPt_cent[icent]->SetMarkerSize(1.5);
    hEfficiencyPt_cent[icent]->SetLineWidth(2);
    hEfficiencyPt_cent[icent]->SetLineColor(color);
    hEfficiencyPt_cent[icent]->GetXaxis()->SetRangeUser(ptMin[ipart] + 0.001, ptMax[ipart] - 0.001);
    hEfficiencyPt_cent[icent]->SetStats(kFALSE);
    hEfficiencyPt_cent[icent]->DrawCopy("same");
    fEff->DrawCopy("same");
    cCanvas1->Update();

    fileout->cd();
    pEfficiencyPt_cent[icent]->Write(Form("pEfficiencyPt_cent%d", icent));
    hEfficiencyPt_cent[icent]->Write(Form("hEfficiencyPt_cent%d", icent));
    fEff->Write(Form("fEff_cent%d", icent));

    hEfficiencyCent->SetBinContent(icent + 1, fEff->GetParameter(5));
    hEfficiencyCent->SetBinError(icent + 1, fEff->GetParError(5));

    cCanvas1->SetGridx();
    cCanvas1->SetGridy();
    cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_%s_%s.C", destdir, icent, AliPID::ParticleName(ipart), chargeName[icharge]));
    cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_%s_%s.png", destdir, icent, AliPID::ParticleName(ipart), chargeName[icharge]));
    cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_%s_%s.eps", destdir, icent, AliPID::ParticleName(ipart), chargeName[icharge]));

    hRatioPt_cent[icent] = new TH1D(*hEfficiencyPt_cent[icent]);
    hRatioPt_cent[icent]->Divide(fEff);
    hRatioPt_cent[icent]->SetTitle(Form("%s (%d-%d\%);p_{T} (GeV/c);ratio wrt. fitted dependence;", partChargeName[ipart][icharge], (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1]));
    hRatioPt_cent[icent]->SetMinimum(0.75);
    hRatioPt_cent[icent]->SetMaximum(1.25);
    cCanvas2->cd();
    hRatioPt_cent[icent]->DrawCopy();
    fileout->cd();
    hRatioPt_cent[icent]->Write(Form("hRatioPt_cent%d", icent));
    

    cCanvas2->SetGridx();
    cCanvas2->SetGridy();
    cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_%s_%s.C", destdir, icent, AliPID::ParticleName(ipart), chargeName[icharge]));
    cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_%s_%s.png", destdir, icent, AliPID::ParticleName(ipart), chargeName[icharge]));
    cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_%s_%s.eps", destdir, icent, AliPID::ParticleName(ipart), chargeName[icharge]));
    
  }

  TCanvas *cCanvas3 = new TCanvas("cCanvas3");
  hEfficiencyCent->DrawCopy();
  fileout->cd();
  hEfficiencyCent->Write("hEfficiencyCent");
  
  cCanvas3->SetGridx();
  cCanvas3->SetGridy();
  cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_%s_%s.C", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
  cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_%s_%s.png", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
  cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_%s_%s.eps", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));

  //  hEfficiencyPt->Add(fEff, -1.);
  return hEfficiencyCent;
}

TrackingEff_trackingEfficiency(const Char_t *filename, Bool_t useGFcorrection =kTRUE)
{

  Int_t marker[2] = {20, 21};
  Int_t color[AliPID::kSPECIES] = {1, 1, 4, 8, 2};
  Char_t *partLatex[AliPID::kSPECIES][2] = {
    "", "", "#pi^{+}", "K^{+}", "p",
    "", "", "#pi^{-}", "K^{-}", "#bar{p}"
  };

  TFile *filein = TFile::Open(filename);
  if (useGFcorrection)
    TFile *fileout = TFile::Open("TOF_trackingEfficiency.root", "RECREATE");
  else
    TFile *fileout = TFile::Open("TOF_trackingEfficiency_noGF.root", "RECREATE");
  TH1D *hEff;
  TF1 *fGF;
  Char_t title[1024];
  for (Int_t icent = -1; icent < NcentralityBins; icent++)
    for (Int_t icharge = 0; icharge < kNCharges; icharge++)
      for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++) {
	if (icent == -1)
	  hEff = (TH1D *)filein->Get(Form("hEfficiencyPt_MB_hReconstructedTracks_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
	else
	  hEff = (TH1D *)filein->Get(Form("hEfficiencyPt_centrality%d_hReconstructedTracks_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
	/* geant-fluka correction */
	fGF = TrackingEff_geantflukaCorrection(ipart, icharge);
	if (useGFcorrection)
	  hEff->Divide(fGF);
	if (icent == -1)
	  sprintf(title, "%s (MB);p_{T} (GeV/c);tracking efficiency;", partLatex[ipart][icharge]);
	else
	  sprintf(title, "%s (%d-%d%%);p_{T} (GeV/c);tracking efficiency;", partLatex[ipart][icharge], (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1]);
	hEff->SetMarkerStyle(marker[icharge]);
	hEff->SetMarkerColor(color[ipart]);
	hEff->SetLineColor(1);
	hEff->SetLineWidth(1);
	hEff->SetTitle(title);
	if (icent == -1)
	  hEff->SetName(Form("hTrackingEff_MB_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
	else
	  hEff->SetName(Form("hTrackingEff_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
	fileout->cd();
	hEff->Write();
      }

  fileout->Close();
}

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