ROOT logo
/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
*                                                                        *
* Author: The ALICE Off-line Project.                                    *
* Contributors are mentioned in the code where appropriate.              *
*                                                                        *
* Permission to use, copy, modify and distribute this software and its   *
* documentation strictly for non-commercial purposes is hereby granted   *
* without fee, provided that the above copyright notice appears in all   *
* copies and that both the copyright notice and this permission notice   *
* appear in the supporting documentation. The authors make no claims     *
* about the suitability of this software for any purpose. It is          *
* provided "as is" without express or implied warranty.                  *
**************************************************************************/
//
// Post analysis code
// Drawing nice pictures containing
//  - Efficiency
//  - Signal/Background
//  - PID Performance
//  More Post Analysis code will be added in time
//
//  Autor: Markus Fasel
//

#include <TAxis.h>
#include <TCanvas.h>
#include <TFile.h>
#include <TH1D.h>
#include <TLegend.h>
#include <TList.h>
#include "AliCFContainer.h"
#include "AliCFEffGrid.h"

#include "AliHFEcontainer.h"
#include "AliHFEcuts.h"
#include "AliHFEpostAnalysis.h"

ClassImp(AliHFEpostAnalysis)

//____________________________________________________________
AliHFEpostAnalysis::AliHFEpostAnalysis():
  TObject(),
  fResults(NULL),
  fAnalysisObjects(0),
  fEfficiencyContainer(NULL),
  fPIDperformance(NULL),
  fSignalToBackgroundMC(NULL)
{
  //
  // Default Constructor
  //
}

//____________________________________________________________
AliHFEpostAnalysis::AliHFEpostAnalysis(const AliHFEpostAnalysis &ref):
  TObject(ref),
  fResults(ref.fResults),
  fAnalysisObjects(ref.fAnalysisObjects),
  fEfficiencyContainer(ref.fEfficiencyContainer),
  fPIDperformance(ref.fPIDperformance),
  fSignalToBackgroundMC(ref.fSignalToBackgroundMC)
{
  //
  // Copy Constructor
  //
}

//____________________________________________________________
AliHFEpostAnalysis& AliHFEpostAnalysis::operator=(const AliHFEpostAnalysis &ref){
  //
  // Assignment Operator
  //
  if(this == &ref) return *this;
  TObject::operator=(ref);
  fResults = ref.fResults;
  fAnalysisObjects = ref.fAnalysisObjects;
  fPIDperformance = ref.fPIDperformance;
  fSignalToBackgroundMC = ref.fSignalToBackgroundMC;

  return *this;
}

//____________________________________________________________
AliHFEpostAnalysis::~AliHFEpostAnalysis(){
  //
  // Do not delete objects where we are not owner
  //
  if(fResults) delete fResults;
}

//____________________________________________________________
Int_t AliHFEpostAnalysis::SetTaskQA(const TList *input){
  //
  // Publish the results to the post analysis
  //
  Int_t nFound = 0;
  fPIDperformance = dynamic_cast<THnSparseF *>(input->FindObject("PIDperformance"));
  if(!fPIDperformance){
    AliError("Histogram fPIDperformance not found in the List of Outputs");
  } else {
    SETBIT(fAnalysisObjects, kPIDperf);
    nFound++;
  }
  fSignalToBackgroundMC = dynamic_cast<THnSparseF *>(input->FindObject("SignalToBackgroundMC"));
  if(!fSignalToBackgroundMC){
    AliError("Histogram fSignalToBackgroundMC not found in the list of outputs");
  } else {
    SETBIT(fAnalysisObjects, kSigBackg);
    nFound++;
  }
  AliInfo(Form("Found %d analysis objects", nFound));
  return nFound;
}

//____________________________________________________________
void AliHFEpostAnalysis::StoreOutput(const char *filename){
  //
  // Save the results produced in a rootfile
  //
  if(fResults){
    TFile *outfile = new TFile(filename, "RECREATE");
    outfile->cd();
    fResults->Write("HFEresults", TObject::kSingleKey);
    outfile->Close();
    delete outfile;
  }
}

//____________________________________________________________
void AliHFEpostAnalysis::DrawMCSignal2Background(){
  //
  // Draw the MC signal/background plots
  //
  if(!fSignalToBackgroundMC) return;

  // First Select everything within the first ITS Layer
  fSignalToBackgroundMC->GetAxis(5)->SetRange(2,2);
  TH1 *hEff[3], *hSB[3];
  // Select for different charge
  hEff[0] = CreateHistoSignalToBackgroundMC(0, 0);
  hEff[1] = CreateHistoSignalToBackgroundMC(0, 1);
  hEff[2] = CreateHistoSignalToBackgroundMC(0, 2);

  hSB[0] = CreateHistoSignalToBackgroundMC(1, 0);
  hSB[1] = CreateHistoSignalToBackgroundMC(1, 1);
  hSB[2] = CreateHistoSignalToBackgroundMC(1, 2);
 
  // Undo projections
  fSignalToBackgroundMC->GetAxis(5)->SetRange(0, fSignalToBackgroundMC->GetAxis(4)->GetNbins());

  // Prepare Canvas
  TCanvas *cMCSB = new TCanvas("cMCSB", "MC Sig/Backg studies", 800, 400);
  cMCSB->Divide(2);
  TLegend *leg;
  TH1 **sample[2] = {&hEff[0], &hSB[0]};
  const char *chargename[3] = {"All Charges", "Negative Charge", "Positive Charge"};
  for(Int_t isample = 0; isample < 2; isample++){
    leg = new TLegend(0.7, 0.1, 0.89, 0.3);
    leg->SetBorderSize(1); 
    leg->SetFillColor(kWhite);
    cMCSB->cd(isample + 1);
    for(Int_t icharge = 0; icharge < 3; icharge++){
      sample[isample][icharge]->Draw(icharge > 0?  "psame" : "p");
      leg->AddEntry(sample[isample][icharge], chargename[icharge], "p");
    }
    leg->Draw();
    gPad->Update();
  }
}

//____________________________________________________________
TH1 *AliHFEpostAnalysis::CreateHistoSignalToBackgroundMC(Int_t mode, Int_t charge){ 
  //
  // Make Efficiency / SB histograms for different charges
  //
  TH1 *hNom = NULL, *hDenom = NULL;
  if(charge) fSignalToBackgroundMC->GetAxis(3)->SetRange(charge, charge);
  // For Signal electrons we project axis 4 to everything > 0
  fSignalToBackgroundMC->GetAxis(4)->SetRange(2,3);
  hNom = fSignalToBackgroundMC->Projection(0);
  hNom->SetName("nom");
  fSignalToBackgroundMC->GetAxis(4)->SetRange(0, fSignalToBackgroundMC->GetAxis(4)->GetLast() + 1);
  if(mode == 1) fSignalToBackgroundMC->GetAxis(4)->SetRange(1,1);
  hDenom =  fSignalToBackgroundMC->Projection(0);
  hDenom->SetName("denom");
  if(mode == 1)  fSignalToBackgroundMC->GetAxis(4)->SetRange(0, fSignalToBackgroundMC->GetAxis(4)->GetLast() + 1);
  if(charge) fSignalToBackgroundMC->GetAxis(3)->SetRange(0, fSignalToBackgroundMC->GetAxis(3)->GetLast() + 1);

  TH1 *hEff = dynamic_cast<TH1D *>(hNom->Clone());
  if(hEff){
    TString hname, cname;
    hname = mode ? "sigToBack" : "sigEff";
    Color_t mycolor = kBlack;
    switch(charge){
      case 0: mycolor = kBlue; cname = "All"; break;
      case 1: mycolor = kBlack; cname = "Neg"; break;
      case 2: mycolor = kRed; cname ="Pos"; break;
      default: break;
    }
    hname += cname;
    hEff->SetName(hname);
    hEff->SetTitle(mode ? "Signal/Background" : "Signal/(Signal+Background)");
    hEff->Divide(hDenom);

    // Make nice plots
    hEff->GetXaxis()->SetTitle("p_{T} / GeV/c");
    hEff->GetYaxis()->SetTitle("Efficiency");
    hEff->SetStats(kFALSE);
    hEff->SetLineColor(kBlack);
    hEff->SetLineWidth(1);
    hEff->SetMarkerStyle(22);
    hEff->SetMarkerColor(mycolor);
  }

  delete hNom; delete hDenom;
  return hEff;
}

//____________________________________________________________
void AliHFEpostAnalysis::DrawEfficiency(){
  //
  // Draw the Efficiency
  // We show: 
  // + InAcceptance / Generated
  // + Signal / Generated
  // + Selected / Generated
  // + Selected / InAcceptance (Reconstructible)
  //
  TCanvas *cEff = new TCanvas("cEff", "Efficiency", 800, 600);
  cEff->Divide(2,2);
  if(!fEfficiencyContainer) return;
  AliCFContainer *tracks = fEfficiencyContainer->MakeMergedCFContainer("trackContCombined", "MC + Rec(reco) Track Information", "MCTrackCont:recTrackContReco");
  AliCFEffGrid *effCalc = new AliCFEffGrid("effCalc", "Efficiency Calculation Grid", *tracks);
  effCalc->CalculateEfficiency(AliHFEcuts::kStepMCInAcceptance, AliHFEcuts::kStepMCGenerated);
  TH1 *effReconstructibleP = effCalc->Project(0);
  effReconstructibleP->SetName("effReconstructibleP");
  effReconstructibleP->SetTitle("Efficiency of reconstructible tracks");
  effReconstructibleP->GetXaxis()->SetTitle("p_{T} / GeV/c");
  effReconstructibleP->GetYaxis()->SetTitle("Efficiency");
  effReconstructibleP->GetYaxis()->SetRangeUser(0.,1.);
  effReconstructibleP->SetMarkerStyle(22);
  effReconstructibleP->SetMarkerColor(kBlue);
  effReconstructibleP->SetLineColor(kBlack);
  effReconstructibleP->SetStats(kFALSE);
  cEff->cd(1);
  effReconstructibleP->Draw("e");
  effCalc->CalculateEfficiency(AliHFEcuts::kStepMCGeneratedZOutNoPileUpCentralityFine, AliHFEcuts::kStepMCGenerated);
  TH1 *effSignal = effCalc->Project(0);
  effSignal->SetName("effSignal");
  effSignal->SetTitle("Efficiency of Signal Electrons");
  effSignal->GetXaxis()->SetTitle("p_{T} / GeV/c");
  effSignal->GetYaxis()->SetTitle("Efficiency");
  effSignal->GetYaxis()->SetRangeUser(0., 1.);
  effSignal->SetMarkerStyle(22);
  effSignal->SetMarkerColor(kBlue);
  effSignal->SetLineColor(kBlack);
  effSignal->SetStats(kFALSE);
  cEff->cd(2);
  effSignal->Draw("e");
  effCalc->CalculateEfficiency(tracks->GetNStep() - 1, AliHFEcuts::kStepMCGenerated);
  TH1 *effPIDP = effCalc->Project(0);
  effPIDP->SetName("effPIDP");
  effPIDP->SetTitle("Efficiency of selected tracks");
  effPIDP->GetXaxis()->SetTitle("p_{T} / GeV/c");
  effPIDP->GetYaxis()->SetTitle("Efficiency");
  effPIDP->GetYaxis()->SetRangeUser(0.,1.);
  effPIDP->SetMarkerStyle(22);
  effPIDP->SetMarkerColor(kBlue);
  effPIDP->SetLineColor(kBlack);
  effPIDP->SetStats(kFALSE);
  cEff->cd(3);
  effPIDP->Draw("e");
  effCalc->CalculateEfficiency(tracks->GetNStep() - 1, AliHFEcuts::kStepMCInAcceptance);
  TH1 *effPIDAcc = effCalc->Project(0);
  effPIDAcc->SetName("effPIDAcc");
  effPIDAcc->SetTitle("Efficiency of selected tracks in acceptance");
  effPIDAcc->GetXaxis()->SetTitle("p_{T} / GeV/c");
  effPIDAcc->GetYaxis()->SetTitle("Efficiency");
  effPIDAcc->GetYaxis()->SetRangeUser(0.,1.);
  effPIDAcc->SetMarkerStyle(22);
  effPIDAcc->SetMarkerColor(kBlue);
  effPIDAcc->SetLineColor(kBlack);
  effPIDAcc->SetStats(kFALSE);
  cEff->cd(4);
  effPIDAcc->Draw("e");
  delete effCalc;
}

//____________________________________________________________
void AliHFEpostAnalysis::DrawPIDperformance(){
  //
  // Plotting Ratio histograms
  // + All electrons / all candidates (Purity for Electrons)
  // + All signal electrons / all electrons (Purity for signals)
  //

  if(!fPIDperformance) return;
  // Make projection
  TH1 *electronPurity[3], *signalPurity[3], *fakeContamination[3];
  electronPurity[0] = CreateHistoPIDperformance(0, 0);
  electronPurity[1] = CreateHistoPIDperformance(0, 1);
  electronPurity[2] = CreateHistoPIDperformance(0, 2);

  signalPurity[0] = CreateHistoPIDperformance(1, 0);
  signalPurity[1] = CreateHistoPIDperformance(1, 1);
  signalPurity[2] = CreateHistoPIDperformance(1, 2);

  fakeContamination[0] = CreateHistoPIDperformance(2, 0);
  fakeContamination[1] = CreateHistoPIDperformance(2, 1);
  fakeContamination[2] = CreateHistoPIDperformance(2, 2);

  // Draw output
  TCanvas *cRatios = new TCanvas("cRatios", "Ratio Plots", 800, 600);
  const char *chargename[3] = {"All Charges", "Negative Charge", "Positive Charge"};
  cRatios->Divide(2,2);
  TH1 **sample[3] = {&electronPurity[0], &signalPurity[0], &fakeContamination[0]};
  TLegend *leg;
  for(Int_t isample = 0; isample < 3; isample++){
    cRatios->cd(isample + 1);
    leg = new TLegend(0.7, 0.1, 0.89, 0.3);
    leg->SetBorderSize(1);
    leg->SetFillColor(kWhite);
    for(Int_t icharge = 0; icharge < 3; icharge++){
      leg->AddEntry(sample[isample][icharge], chargename[icharge], "p");
      sample[isample][icharge]->Draw(icharge > 0 ? "esame" : "e");
    }
    leg->Draw();
    gPad->Update();
  }
}

//____________________________________________________________
TH1 *AliHFEpostAnalysis::CreateHistoPIDperformance(Int_t mode, Int_t charge){
  //
  // Make Histograms for PID performance plots
  //
  fPIDperformance->GetAxis(4)->SetRange(0, fPIDperformance->GetAxis(4)->GetNbins()+1);
  fPIDperformance->GetAxis(3)->SetRange(0, fPIDperformance->GetAxis(3)->GetNbins() + 1);

  TH1 *hNom = NULL, *hDenom = NULL;
  TString hname, htitle, cname;
  Color_t mycolor = kBlack;
  if(charge) fPIDperformance->GetAxis(3)->SetRange(charge, charge);
  // Normalisation by all candidates - no restriction in axis 4 - only for mode == 1 
  if(mode == 1) fPIDperformance->GetAxis(4)->SetRange(2,3);
  hDenom = fPIDperformance->Projection(0);
  hDenom->Sumw2();
  hDenom->SetName("hDenom");
  if(mode == 1) fPIDperformance->GetAxis(4)->SetRange(0, fPIDperformance->GetAxis(4)->GetNbins() + 1);
  // Nominator need a restriction in the 4th axis
  switch(mode){
    case 0: // Electron purity
      fPIDperformance->GetAxis(4)->SetRange(2,3);
      hname = "electronPurity";
      htitle = "Electron Purity";
      break;
    case 1: // Signal purity
      fPIDperformance->GetAxis(4)->SetRange(3,3);   // here signal not divided into charm and beauty
      hname = "signalPurity";
      htitle = "Signal Purity";
      break;
    case 2: // Fake contamination
      fPIDperformance->GetAxis(4)->SetRange(1,1);
      hname = "fakeContamination";
      htitle = "Contamination of misidentified hadrons";
      break;
    default: break;
  }
  switch(charge){
    case 0: 
      cname = "All"; 
      mycolor = kBlue;
      break;
    case 1: 
      cname = "Neg"; 
      mycolor = kBlack;
      break;
    case 2: 
      cname = "Pos"; 
      mycolor = kRed;
      break;
  }
  hname += cname;
  hNom = fPIDperformance->Projection(0);
  hNom->Sumw2();
  hNom->SetName("hNom");
  // Reset axis
  fPIDperformance->GetAxis(4)->SetRange(0, fPIDperformance->GetAxis(4)->GetNbins()+1);
  if(charge) fPIDperformance->GetAxis(3)->SetRange(0, fPIDperformance->GetAxis(3)->GetNbins() + 1);

  // Create Efficiency histogram
  TH1 *hEff = dynamic_cast<TH1D *>(hNom->Clone());
  if(hEff){
    hEff->SetName(hname.Data());
    hEff->SetTitle(htitle.Data());
    hEff->Divide(hDenom);
    hEff->Scale(100.);
    hEff->GetXaxis()->SetTitle("p_{T} / GeV/c");
    hEff->GetYaxis()->SetTitle(mode < 2 ? "Purity / %" : "Contamination / %");
    hEff->GetYaxis()->SetRangeUser(0., 100.);
    hEff->SetStats(kFALSE);
    hEff->SetLineColor(kBlack);
    hEff->SetLineWidth(1);
    hEff->SetMarkerColor(mycolor);
    hEff->SetMarkerStyle(22);
    delete hNom; delete hDenom;
  }
  return hEff;
}

//____________________________________________________________
void AliHFEpostAnalysis::DrawCutEfficiency(Bool_t MC, Int_t source){
  //
  // Calculate efficiency for each cut step
  // Starting from MC steps 
  //
  TCanvas *output = new TCanvas("effCut", "Cut Step efficiency", 800, 600);
  output->cd();
  TLegend *leg = new TLegend(0.6, 0.7, 0.89, 0.89);
  leg->SetHeader("Cut Step:");
  leg->SetBorderSize(0);
  leg->SetFillColor(kWhite);
  leg->SetFillStyle(0);

  AliCFContainer *tracks = fEfficiencyContainer->MakeMergedCFContainer("mergedTracks", "Container for MC and reconstructed Track information", "MCTrackCont:recTrackContReco");
  Int_t nStepMC = fEfficiencyContainer->GetCFContainer("MCTrackCont")->GetNStep();
  AliDebug(1, Form("Number of MC Cut Steps: %d", nStepMC));
  const Int_t markerStart = 24;
  const Int_t colorStart = 1;
  TH1 *hTemp = NULL;

  if(MC){
    if(source > -1 && source < 4){
      AliInfo(Form("Setting source to %d", source));
      for(Int_t istep = 0; istep < tracks->GetNStep(); istep++) tracks->GetAxis(4, istep)->SetRange(source + 1, source + 1);
    }
  }
  AliCFEffGrid effcalc("cutEfficiency", "Cut step efficiency calculation", *tracks);
  Bool_t first = kTRUE;
  // Calculate efficiency for MC Steps
  Int_t histcounter = 0;
  if(MC){
    //
    // Draw plots related to MC values
    //
    effcalc.CalculateEfficiency(AliHFEcuts::kStepMCInAcceptance, AliHFEcuts::kStepMCGenerated);
    hTemp = effcalc.Project(0);
    hTemp->SetName(Form("hEff%d", histcounter));
    hTemp->SetTitle("Cut Step Efficiency");
    hTemp->SetMarkerColor(colorStart + histcounter);
    hTemp->SetMarkerStyle(markerStart + histcounter);
    hTemp->GetXaxis()->SetTitle("p / GeV/c");
    hTemp->GetYaxis()->SetTitle("Efficiency");
    hTemp->GetYaxis()->SetRangeUser(0., 2.);
    hTemp->SetStats(kFALSE);
    hTemp->Draw("ep");
    leg->AddEntry(hTemp, tracks->GetStepTitle(AliHFEcuts::kStepMCInAcceptance), "p");
    histcounter++;
    effcalc.CalculateEfficiency(nStepMC, AliHFEcuts::kStepMCGenerated);
    hTemp = effcalc.Project(0);
    hTemp->SetName("hEff2");
    hTemp->SetTitle("Cut Step Efficiency");
    hTemp->SetMarkerColor(colorStart + histcounter);
    hTemp->SetMarkerStyle(markerStart + histcounter);
    hTemp->GetXaxis()->SetTitle("p / GeV/c");
    hTemp->GetYaxis()->SetTitle("Efficiency");
    hTemp->GetYaxis()->SetRangeUser(0., 2.);
    hTemp->SetStats(kFALSE);
    hTemp->Draw("epsame");
    leg->AddEntry(hTemp, tracks->GetStepTitle(nStepMC), "p");
    first = kFALSE;
    histcounter++;
  }
  for(Int_t istep = nStepMC+1; istep < tracks->GetNStep(); istep++){
    effcalc.CalculateEfficiency(istep, istep - 1); 
    hTemp = effcalc.Project(0);
    hTemp->SetName(Form("hEff%d", istep));
    hTemp->SetTitle("Cut Step Efficiency");
    hTemp->SetMarkerColor(colorStart + histcounter);
    hTemp->SetMarkerStyle(markerStart + histcounter);
    hTemp->SetStats(kFALSE);
    hTemp->Draw(first ? "ep" : "epsame");
    hTemp->GetXaxis()->SetTitle("P / GeV/c");
    hTemp->GetYaxis()->SetTitle("Efficiency");
    hTemp->GetYaxis()->SetRangeUser(0., 2.);
    leg->AddEntry(hTemp, tracks->GetStepTitle(istep), "p");
    first = kFALSE;
    histcounter++;
  }
  leg->Draw();
  delete tracks;
}
 AliHFEpostAnalysis.cxx:1
 AliHFEpostAnalysis.cxx:2
 AliHFEpostAnalysis.cxx:3
 AliHFEpostAnalysis.cxx:4
 AliHFEpostAnalysis.cxx:5
 AliHFEpostAnalysis.cxx:6
 AliHFEpostAnalysis.cxx:7
 AliHFEpostAnalysis.cxx:8
 AliHFEpostAnalysis.cxx:9
 AliHFEpostAnalysis.cxx:10
 AliHFEpostAnalysis.cxx:11
 AliHFEpostAnalysis.cxx:12
 AliHFEpostAnalysis.cxx:13
 AliHFEpostAnalysis.cxx:14
 AliHFEpostAnalysis.cxx:15
 AliHFEpostAnalysis.cxx:16
 AliHFEpostAnalysis.cxx:17
 AliHFEpostAnalysis.cxx:18
 AliHFEpostAnalysis.cxx:19
 AliHFEpostAnalysis.cxx:20
 AliHFEpostAnalysis.cxx:21
 AliHFEpostAnalysis.cxx:22
 AliHFEpostAnalysis.cxx:23
 AliHFEpostAnalysis.cxx:24
 AliHFEpostAnalysis.cxx:25
 AliHFEpostAnalysis.cxx:26
 AliHFEpostAnalysis.cxx:27
 AliHFEpostAnalysis.cxx:28
 AliHFEpostAnalysis.cxx:29
 AliHFEpostAnalysis.cxx:30
 AliHFEpostAnalysis.cxx:31
 AliHFEpostAnalysis.cxx:32
 AliHFEpostAnalysis.cxx:33
 AliHFEpostAnalysis.cxx:34
 AliHFEpostAnalysis.cxx:35
 AliHFEpostAnalysis.cxx:36
 AliHFEpostAnalysis.cxx:37
 AliHFEpostAnalysis.cxx:38
 AliHFEpostAnalysis.cxx:39
 AliHFEpostAnalysis.cxx:40
 AliHFEpostAnalysis.cxx:41
 AliHFEpostAnalysis.cxx:42
 AliHFEpostAnalysis.cxx:43
 AliHFEpostAnalysis.cxx:44
 AliHFEpostAnalysis.cxx:45
 AliHFEpostAnalysis.cxx:46
 AliHFEpostAnalysis.cxx:47
 AliHFEpostAnalysis.cxx:48
 AliHFEpostAnalysis.cxx:49
 AliHFEpostAnalysis.cxx:50
 AliHFEpostAnalysis.cxx:51
 AliHFEpostAnalysis.cxx:52
 AliHFEpostAnalysis.cxx:53
 AliHFEpostAnalysis.cxx:54
 AliHFEpostAnalysis.cxx:55
 AliHFEpostAnalysis.cxx:56
 AliHFEpostAnalysis.cxx:57
 AliHFEpostAnalysis.cxx:58
 AliHFEpostAnalysis.cxx:59
 AliHFEpostAnalysis.cxx:60
 AliHFEpostAnalysis.cxx:61
 AliHFEpostAnalysis.cxx:62
 AliHFEpostAnalysis.cxx:63
 AliHFEpostAnalysis.cxx:64
 AliHFEpostAnalysis.cxx:65
 AliHFEpostAnalysis.cxx:66
 AliHFEpostAnalysis.cxx:67
 AliHFEpostAnalysis.cxx:68
 AliHFEpostAnalysis.cxx:69
 AliHFEpostAnalysis.cxx:70
 AliHFEpostAnalysis.cxx:71
 AliHFEpostAnalysis.cxx:72
 AliHFEpostAnalysis.cxx:73
 AliHFEpostAnalysis.cxx:74
 AliHFEpostAnalysis.cxx:75
 AliHFEpostAnalysis.cxx:76
 AliHFEpostAnalysis.cxx:77
 AliHFEpostAnalysis.cxx:78
 AliHFEpostAnalysis.cxx:79
 AliHFEpostAnalysis.cxx:80
 AliHFEpostAnalysis.cxx:81
 AliHFEpostAnalysis.cxx:82
 AliHFEpostAnalysis.cxx:83
 AliHFEpostAnalysis.cxx:84
 AliHFEpostAnalysis.cxx:85
 AliHFEpostAnalysis.cxx:86
 AliHFEpostAnalysis.cxx:87
 AliHFEpostAnalysis.cxx:88
 AliHFEpostAnalysis.cxx:89
 AliHFEpostAnalysis.cxx:90
 AliHFEpostAnalysis.cxx:91
 AliHFEpostAnalysis.cxx:92
 AliHFEpostAnalysis.cxx:93
 AliHFEpostAnalysis.cxx:94
 AliHFEpostAnalysis.cxx:95
 AliHFEpostAnalysis.cxx:96
 AliHFEpostAnalysis.cxx:97
 AliHFEpostAnalysis.cxx:98
 AliHFEpostAnalysis.cxx:99
 AliHFEpostAnalysis.cxx:100
 AliHFEpostAnalysis.cxx:101
 AliHFEpostAnalysis.cxx:102
 AliHFEpostAnalysis.cxx:103
 AliHFEpostAnalysis.cxx:104
 AliHFEpostAnalysis.cxx:105
 AliHFEpostAnalysis.cxx:106
 AliHFEpostAnalysis.cxx:107
 AliHFEpostAnalysis.cxx:108
 AliHFEpostAnalysis.cxx:109
 AliHFEpostAnalysis.cxx:110
 AliHFEpostAnalysis.cxx:111
 AliHFEpostAnalysis.cxx:112
 AliHFEpostAnalysis.cxx:113
 AliHFEpostAnalysis.cxx:114
 AliHFEpostAnalysis.cxx:115
 AliHFEpostAnalysis.cxx:116
 AliHFEpostAnalysis.cxx:117
 AliHFEpostAnalysis.cxx:118
 AliHFEpostAnalysis.cxx:119
 AliHFEpostAnalysis.cxx:120
 AliHFEpostAnalysis.cxx:121
 AliHFEpostAnalysis.cxx:122
 AliHFEpostAnalysis.cxx:123
 AliHFEpostAnalysis.cxx:124
 AliHFEpostAnalysis.cxx:125
 AliHFEpostAnalysis.cxx:126
 AliHFEpostAnalysis.cxx:127
 AliHFEpostAnalysis.cxx:128
 AliHFEpostAnalysis.cxx:129
 AliHFEpostAnalysis.cxx:130
 AliHFEpostAnalysis.cxx:131
 AliHFEpostAnalysis.cxx:132
 AliHFEpostAnalysis.cxx:133
 AliHFEpostAnalysis.cxx:134
 AliHFEpostAnalysis.cxx:135
 AliHFEpostAnalysis.cxx:136
 AliHFEpostAnalysis.cxx:137
 AliHFEpostAnalysis.cxx:138
 AliHFEpostAnalysis.cxx:139
 AliHFEpostAnalysis.cxx:140
 AliHFEpostAnalysis.cxx:141
 AliHFEpostAnalysis.cxx:142
 AliHFEpostAnalysis.cxx:143
 AliHFEpostAnalysis.cxx:144
 AliHFEpostAnalysis.cxx:145
 AliHFEpostAnalysis.cxx:146
 AliHFEpostAnalysis.cxx:147
 AliHFEpostAnalysis.cxx:148
 AliHFEpostAnalysis.cxx:149
 AliHFEpostAnalysis.cxx:150
 AliHFEpostAnalysis.cxx:151
 AliHFEpostAnalysis.cxx:152
 AliHFEpostAnalysis.cxx:153
 AliHFEpostAnalysis.cxx:154
 AliHFEpostAnalysis.cxx:155
 AliHFEpostAnalysis.cxx:156
 AliHFEpostAnalysis.cxx:157
 AliHFEpostAnalysis.cxx:158
 AliHFEpostAnalysis.cxx:159
 AliHFEpostAnalysis.cxx:160
 AliHFEpostAnalysis.cxx:161
 AliHFEpostAnalysis.cxx:162
 AliHFEpostAnalysis.cxx:163
 AliHFEpostAnalysis.cxx:164
 AliHFEpostAnalysis.cxx:165
 AliHFEpostAnalysis.cxx:166
 AliHFEpostAnalysis.cxx:167
 AliHFEpostAnalysis.cxx:168
 AliHFEpostAnalysis.cxx:169
 AliHFEpostAnalysis.cxx:170
 AliHFEpostAnalysis.cxx:171
 AliHFEpostAnalysis.cxx:172
 AliHFEpostAnalysis.cxx:173
 AliHFEpostAnalysis.cxx:174
 AliHFEpostAnalysis.cxx:175
 AliHFEpostAnalysis.cxx:176
 AliHFEpostAnalysis.cxx:177
 AliHFEpostAnalysis.cxx:178
 AliHFEpostAnalysis.cxx:179
 AliHFEpostAnalysis.cxx:180
 AliHFEpostAnalysis.cxx:181
 AliHFEpostAnalysis.cxx:182
 AliHFEpostAnalysis.cxx:183
 AliHFEpostAnalysis.cxx:184
 AliHFEpostAnalysis.cxx:185
 AliHFEpostAnalysis.cxx:186
 AliHFEpostAnalysis.cxx:187
 AliHFEpostAnalysis.cxx:188
 AliHFEpostAnalysis.cxx:189
 AliHFEpostAnalysis.cxx:190
 AliHFEpostAnalysis.cxx:191
 AliHFEpostAnalysis.cxx:192
 AliHFEpostAnalysis.cxx:193
 AliHFEpostAnalysis.cxx:194
 AliHFEpostAnalysis.cxx:195
 AliHFEpostAnalysis.cxx:196
 AliHFEpostAnalysis.cxx:197
 AliHFEpostAnalysis.cxx:198
 AliHFEpostAnalysis.cxx:199
 AliHFEpostAnalysis.cxx:200
 AliHFEpostAnalysis.cxx:201
 AliHFEpostAnalysis.cxx:202
 AliHFEpostAnalysis.cxx:203
 AliHFEpostAnalysis.cxx:204
 AliHFEpostAnalysis.cxx:205
 AliHFEpostAnalysis.cxx:206
 AliHFEpostAnalysis.cxx:207
 AliHFEpostAnalysis.cxx:208
 AliHFEpostAnalysis.cxx:209
 AliHFEpostAnalysis.cxx:210
 AliHFEpostAnalysis.cxx:211
 AliHFEpostAnalysis.cxx:212
 AliHFEpostAnalysis.cxx:213
 AliHFEpostAnalysis.cxx:214
 AliHFEpostAnalysis.cxx:215
 AliHFEpostAnalysis.cxx:216
 AliHFEpostAnalysis.cxx:217
 AliHFEpostAnalysis.cxx:218
 AliHFEpostAnalysis.cxx:219
 AliHFEpostAnalysis.cxx:220
 AliHFEpostAnalysis.cxx:221
 AliHFEpostAnalysis.cxx:222
 AliHFEpostAnalysis.cxx:223
 AliHFEpostAnalysis.cxx:224
 AliHFEpostAnalysis.cxx:225
 AliHFEpostAnalysis.cxx:226
 AliHFEpostAnalysis.cxx:227
 AliHFEpostAnalysis.cxx:228
 AliHFEpostAnalysis.cxx:229
 AliHFEpostAnalysis.cxx:230
 AliHFEpostAnalysis.cxx:231
 AliHFEpostAnalysis.cxx:232
 AliHFEpostAnalysis.cxx:233
 AliHFEpostAnalysis.cxx:234
 AliHFEpostAnalysis.cxx:235
 AliHFEpostAnalysis.cxx:236
 AliHFEpostAnalysis.cxx:237
 AliHFEpostAnalysis.cxx:238
 AliHFEpostAnalysis.cxx:239
 AliHFEpostAnalysis.cxx:240
 AliHFEpostAnalysis.cxx:241
 AliHFEpostAnalysis.cxx:242
 AliHFEpostAnalysis.cxx:243
 AliHFEpostAnalysis.cxx:244
 AliHFEpostAnalysis.cxx:245
 AliHFEpostAnalysis.cxx:246
 AliHFEpostAnalysis.cxx:247
 AliHFEpostAnalysis.cxx:248
 AliHFEpostAnalysis.cxx:249
 AliHFEpostAnalysis.cxx:250
 AliHFEpostAnalysis.cxx:251
 AliHFEpostAnalysis.cxx:252
 AliHFEpostAnalysis.cxx:253
 AliHFEpostAnalysis.cxx:254
 AliHFEpostAnalysis.cxx:255
 AliHFEpostAnalysis.cxx:256
 AliHFEpostAnalysis.cxx:257
 AliHFEpostAnalysis.cxx:258
 AliHFEpostAnalysis.cxx:259
 AliHFEpostAnalysis.cxx:260
 AliHFEpostAnalysis.cxx:261
 AliHFEpostAnalysis.cxx:262
 AliHFEpostAnalysis.cxx:263
 AliHFEpostAnalysis.cxx:264
 AliHFEpostAnalysis.cxx:265
 AliHFEpostAnalysis.cxx:266
 AliHFEpostAnalysis.cxx:267
 AliHFEpostAnalysis.cxx:268
 AliHFEpostAnalysis.cxx:269
 AliHFEpostAnalysis.cxx:270
 AliHFEpostAnalysis.cxx:271
 AliHFEpostAnalysis.cxx:272
 AliHFEpostAnalysis.cxx:273
 AliHFEpostAnalysis.cxx:274
 AliHFEpostAnalysis.cxx:275
 AliHFEpostAnalysis.cxx:276
 AliHFEpostAnalysis.cxx:277
 AliHFEpostAnalysis.cxx:278
 AliHFEpostAnalysis.cxx:279
 AliHFEpostAnalysis.cxx:280
 AliHFEpostAnalysis.cxx:281
 AliHFEpostAnalysis.cxx:282
 AliHFEpostAnalysis.cxx:283
 AliHFEpostAnalysis.cxx:284
 AliHFEpostAnalysis.cxx:285
 AliHFEpostAnalysis.cxx:286
 AliHFEpostAnalysis.cxx:287
 AliHFEpostAnalysis.cxx:288
 AliHFEpostAnalysis.cxx:289
 AliHFEpostAnalysis.cxx:290
 AliHFEpostAnalysis.cxx:291
 AliHFEpostAnalysis.cxx:292
 AliHFEpostAnalysis.cxx:293
 AliHFEpostAnalysis.cxx:294
 AliHFEpostAnalysis.cxx:295
 AliHFEpostAnalysis.cxx:296
 AliHFEpostAnalysis.cxx:297
 AliHFEpostAnalysis.cxx:298
 AliHFEpostAnalysis.cxx:299
 AliHFEpostAnalysis.cxx:300
 AliHFEpostAnalysis.cxx:301
 AliHFEpostAnalysis.cxx:302
 AliHFEpostAnalysis.cxx:303
 AliHFEpostAnalysis.cxx:304
 AliHFEpostAnalysis.cxx:305
 AliHFEpostAnalysis.cxx:306
 AliHFEpostAnalysis.cxx:307
 AliHFEpostAnalysis.cxx:308
 AliHFEpostAnalysis.cxx:309
 AliHFEpostAnalysis.cxx:310
 AliHFEpostAnalysis.cxx:311
 AliHFEpostAnalysis.cxx:312
 AliHFEpostAnalysis.cxx:313
 AliHFEpostAnalysis.cxx:314
 AliHFEpostAnalysis.cxx:315
 AliHFEpostAnalysis.cxx:316
 AliHFEpostAnalysis.cxx:317
 AliHFEpostAnalysis.cxx:318
 AliHFEpostAnalysis.cxx:319
 AliHFEpostAnalysis.cxx:320
 AliHFEpostAnalysis.cxx:321
 AliHFEpostAnalysis.cxx:322
 AliHFEpostAnalysis.cxx:323
 AliHFEpostAnalysis.cxx:324
 AliHFEpostAnalysis.cxx:325
 AliHFEpostAnalysis.cxx:326
 AliHFEpostAnalysis.cxx:327
 AliHFEpostAnalysis.cxx:328
 AliHFEpostAnalysis.cxx:329
 AliHFEpostAnalysis.cxx:330
 AliHFEpostAnalysis.cxx:331
 AliHFEpostAnalysis.cxx:332
 AliHFEpostAnalysis.cxx:333
 AliHFEpostAnalysis.cxx:334
 AliHFEpostAnalysis.cxx:335
 AliHFEpostAnalysis.cxx:336
 AliHFEpostAnalysis.cxx:337
 AliHFEpostAnalysis.cxx:338
 AliHFEpostAnalysis.cxx:339
 AliHFEpostAnalysis.cxx:340
 AliHFEpostAnalysis.cxx:341
 AliHFEpostAnalysis.cxx:342
 AliHFEpostAnalysis.cxx:343
 AliHFEpostAnalysis.cxx:344
 AliHFEpostAnalysis.cxx:345
 AliHFEpostAnalysis.cxx:346
 AliHFEpostAnalysis.cxx:347
 AliHFEpostAnalysis.cxx:348
 AliHFEpostAnalysis.cxx:349
 AliHFEpostAnalysis.cxx:350
 AliHFEpostAnalysis.cxx:351
 AliHFEpostAnalysis.cxx:352
 AliHFEpostAnalysis.cxx:353
 AliHFEpostAnalysis.cxx:354
 AliHFEpostAnalysis.cxx:355
 AliHFEpostAnalysis.cxx:356
 AliHFEpostAnalysis.cxx:357
 AliHFEpostAnalysis.cxx:358
 AliHFEpostAnalysis.cxx:359
 AliHFEpostAnalysis.cxx:360
 AliHFEpostAnalysis.cxx:361
 AliHFEpostAnalysis.cxx:362
 AliHFEpostAnalysis.cxx:363
 AliHFEpostAnalysis.cxx:364
 AliHFEpostAnalysis.cxx:365
 AliHFEpostAnalysis.cxx:366
 AliHFEpostAnalysis.cxx:367
 AliHFEpostAnalysis.cxx:368
 AliHFEpostAnalysis.cxx:369
 AliHFEpostAnalysis.cxx:370
 AliHFEpostAnalysis.cxx:371
 AliHFEpostAnalysis.cxx:372
 AliHFEpostAnalysis.cxx:373
 AliHFEpostAnalysis.cxx:374
 AliHFEpostAnalysis.cxx:375
 AliHFEpostAnalysis.cxx:376
 AliHFEpostAnalysis.cxx:377
 AliHFEpostAnalysis.cxx:378
 AliHFEpostAnalysis.cxx:379
 AliHFEpostAnalysis.cxx:380
 AliHFEpostAnalysis.cxx:381
 AliHFEpostAnalysis.cxx:382
 AliHFEpostAnalysis.cxx:383
 AliHFEpostAnalysis.cxx:384
 AliHFEpostAnalysis.cxx:385
 AliHFEpostAnalysis.cxx:386
 AliHFEpostAnalysis.cxx:387
 AliHFEpostAnalysis.cxx:388
 AliHFEpostAnalysis.cxx:389
 AliHFEpostAnalysis.cxx:390
 AliHFEpostAnalysis.cxx:391
 AliHFEpostAnalysis.cxx:392
 AliHFEpostAnalysis.cxx:393
 AliHFEpostAnalysis.cxx:394
 AliHFEpostAnalysis.cxx:395
 AliHFEpostAnalysis.cxx:396
 AliHFEpostAnalysis.cxx:397
 AliHFEpostAnalysis.cxx:398
 AliHFEpostAnalysis.cxx:399
 AliHFEpostAnalysis.cxx:400
 AliHFEpostAnalysis.cxx:401
 AliHFEpostAnalysis.cxx:402
 AliHFEpostAnalysis.cxx:403
 AliHFEpostAnalysis.cxx:404
 AliHFEpostAnalysis.cxx:405
 AliHFEpostAnalysis.cxx:406
 AliHFEpostAnalysis.cxx:407
 AliHFEpostAnalysis.cxx:408
 AliHFEpostAnalysis.cxx:409
 AliHFEpostAnalysis.cxx:410
 AliHFEpostAnalysis.cxx:411
 AliHFEpostAnalysis.cxx:412
 AliHFEpostAnalysis.cxx:413
 AliHFEpostAnalysis.cxx:414
 AliHFEpostAnalysis.cxx:415
 AliHFEpostAnalysis.cxx:416
 AliHFEpostAnalysis.cxx:417
 AliHFEpostAnalysis.cxx:418
 AliHFEpostAnalysis.cxx:419
 AliHFEpostAnalysis.cxx:420
 AliHFEpostAnalysis.cxx:421
 AliHFEpostAnalysis.cxx:422
 AliHFEpostAnalysis.cxx:423
 AliHFEpostAnalysis.cxx:424
 AliHFEpostAnalysis.cxx:425
 AliHFEpostAnalysis.cxx:426
 AliHFEpostAnalysis.cxx:427
 AliHFEpostAnalysis.cxx:428
 AliHFEpostAnalysis.cxx:429
 AliHFEpostAnalysis.cxx:430
 AliHFEpostAnalysis.cxx:431
 AliHFEpostAnalysis.cxx:432
 AliHFEpostAnalysis.cxx:433
 AliHFEpostAnalysis.cxx:434
 AliHFEpostAnalysis.cxx:435
 AliHFEpostAnalysis.cxx:436
 AliHFEpostAnalysis.cxx:437
 AliHFEpostAnalysis.cxx:438
 AliHFEpostAnalysis.cxx:439
 AliHFEpostAnalysis.cxx:440
 AliHFEpostAnalysis.cxx:441
 AliHFEpostAnalysis.cxx:442
 AliHFEpostAnalysis.cxx:443
 AliHFEpostAnalysis.cxx:444
 AliHFEpostAnalysis.cxx:445
 AliHFEpostAnalysis.cxx:446
 AliHFEpostAnalysis.cxx:447
 AliHFEpostAnalysis.cxx:448
 AliHFEpostAnalysis.cxx:449
 AliHFEpostAnalysis.cxx:450
 AliHFEpostAnalysis.cxx:451
 AliHFEpostAnalysis.cxx:452
 AliHFEpostAnalysis.cxx:453
 AliHFEpostAnalysis.cxx:454
 AliHFEpostAnalysis.cxx:455
 AliHFEpostAnalysis.cxx:456
 AliHFEpostAnalysis.cxx:457
 AliHFEpostAnalysis.cxx:458
 AliHFEpostAnalysis.cxx:459
 AliHFEpostAnalysis.cxx:460
 AliHFEpostAnalysis.cxx:461
 AliHFEpostAnalysis.cxx:462
 AliHFEpostAnalysis.cxx:463
 AliHFEpostAnalysis.cxx:464
 AliHFEpostAnalysis.cxx:465
 AliHFEpostAnalysis.cxx:466
 AliHFEpostAnalysis.cxx:467
 AliHFEpostAnalysis.cxx:468
 AliHFEpostAnalysis.cxx:469
 AliHFEpostAnalysis.cxx:470
 AliHFEpostAnalysis.cxx:471
 AliHFEpostAnalysis.cxx:472
 AliHFEpostAnalysis.cxx:473
 AliHFEpostAnalysis.cxx:474
 AliHFEpostAnalysis.cxx:475
 AliHFEpostAnalysis.cxx:476
 AliHFEpostAnalysis.cxx:477
 AliHFEpostAnalysis.cxx:478
 AliHFEpostAnalysis.cxx:479
 AliHFEpostAnalysis.cxx:480
 AliHFEpostAnalysis.cxx:481
 AliHFEpostAnalysis.cxx:482
 AliHFEpostAnalysis.cxx:483
 AliHFEpostAnalysis.cxx:484
 AliHFEpostAnalysis.cxx:485
 AliHFEpostAnalysis.cxx:486
 AliHFEpostAnalysis.cxx:487
 AliHFEpostAnalysis.cxx:488
 AliHFEpostAnalysis.cxx:489
 AliHFEpostAnalysis.cxx:490
 AliHFEpostAnalysis.cxx:491
 AliHFEpostAnalysis.cxx:492
 AliHFEpostAnalysis.cxx:493