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.                  *
**************************************************************************/
//
// Class for TPC PID
// Implements the abstract base class AliHFEpidBase
// 
// Class contains TPC specific cuts and QA histograms
// Two selection strategies are offered: Selection of certain value
// regions in the TPC dE/dx (by IsSelected), and likelihoods
//
// Authors: 
//
//   Markus Fasel <M.Fasel@gsi.de> 
//   Markus Heide <mheide@uni-muenster.de> 
//  
#include <TF1.h>
#include <TMath.h>
#include <TH2D.h>

#include "AliTPCdEdxInfo.h"
#include "AliAODPid.h"
#include "AliAODTrack.h"
#include "AliAODMCParticle.h"
#include "AliESDtrack.h"
#include "AliExternalTrackParam.h"
#include "AliLog.h"
#include "AliMCParticle.h"
#include "AliPID.h"
#include "AliPIDResponse.h"

#include "AliHFEpidTPC.h"
#include "AliHFEpidQAmanager.h"

ClassImp(AliHFEpidTPC)

//___________________________________________________________________
AliHFEpidTPC::AliHFEpidTPC() :
  // add a list here
  AliHFEpidBase()
  , fLineCrossingsEnabled(0)
  , fkEtaCorrection(NULL)
  , fkCentralityCorrection(NULL)
  , fkEtaMeanCorrection(NULL)
  , fkEtaWidthCorrection(NULL)
  , fkCentralityMeanCorrection(NULL)
  , fkCentralityWidthCorrection(NULL)
  , fkCentralityEtaCorrectionMeanJpsi(NULL)
  , fkCentralityEtaCorrectionWidthJpsi(NULL)  
  , fHasCutModel(kFALSE)
  , fUseOnlyOROC(kFALSE)
  , fNsigmaTPC(3)
  , fRejectionEnabled(0)
  , fUsedEdx(kFALSE)
{
  //
  // default  constructor
  // 

  memset(fkUpperSigmaCut, 0, sizeof(const TF1 *) * 12);
  memset(fkLowerSigmaCut, 0, sizeof(const TF1 *) * 12);

  memset(fRejection, 0, sizeof(Float_t) * 4 * AliPID::kSPECIES);
  memset(fLineCrossingSigma, 0, sizeof(Double_t) * AliPID::kSPECIES);
  memset(fPAsigCut, 0, sizeof(Float_t) * 2);
  memset(fNAsigmaTPC, 0, sizeof(Float_t) * 2);

}

//___________________________________________________________________
AliHFEpidTPC::AliHFEpidTPC(const char* name) :
  // add a list here
  AliHFEpidBase(name)
  , fLineCrossingsEnabled(0)
  , fkEtaCorrection(NULL)
  , fkCentralityCorrection(NULL)
  , fkEtaMeanCorrection(NULL)
  , fkEtaWidthCorrection(NULL)
  , fkCentralityMeanCorrection(NULL)
  , fkCentralityWidthCorrection(NULL)
  , fkCentralityEtaCorrectionMeanJpsi(NULL)
  , fkCentralityEtaCorrectionWidthJpsi(NULL)
  , fHasCutModel(kFALSE)
  , fUseOnlyOROC(kFALSE)
  , fNsigmaTPC(3)
  , fRejectionEnabled(0)
  , fUsedEdx(kFALSE)
{
  //
  // default  constructor
  // 
  //
  memset(fkUpperSigmaCut, 0, sizeof(const TF1 *) * 12);
  memset(fkLowerSigmaCut, 0, sizeof(const TF1 *) * 12);

  memset(fRejection, 0, sizeof(Float_t) * 4 * AliPID::kSPECIES);
  memset(fLineCrossingSigma, 0, sizeof(Double_t) * AliPID::kSPECIES);
  memset(fPAsigCut, 0, sizeof(Float_t) * 2);
  memset(fNAsigmaTPC, 0, sizeof(Float_t) * 2);
}

//___________________________________________________________________
AliHFEpidTPC::AliHFEpidTPC(const AliHFEpidTPC &ref) :
  AliHFEpidBase("")
  , fLineCrossingsEnabled(0)
  , fkEtaCorrection(NULL)
  , fkCentralityCorrection(NULL)
  , fkEtaMeanCorrection(NULL)
  , fkEtaWidthCorrection(NULL)
  , fkCentralityMeanCorrection(NULL)
  , fkCentralityWidthCorrection(NULL)
  , fkCentralityEtaCorrectionMeanJpsi(NULL)
  , fkCentralityEtaCorrectionWidthJpsi(NULL)
  , fHasCutModel(ref.fHasCutModel)
  , fUseOnlyOROC(ref.fUseOnlyOROC)
  , fNsigmaTPC(2)
  , fRejectionEnabled(0)
  , fUsedEdx(kFALSE)
{
  //
  // Copy constructor
  //
  ref.Copy(*this);
}

//___________________________________________________________________
AliHFEpidTPC &AliHFEpidTPC::operator=(const AliHFEpidTPC &ref){
  //
  // Assignment operator
  //
  if(this != &ref){
    ref.Copy(*this);
  } 
  return *this;
}
//___________________________________________________________________
void AliHFEpidTPC::Copy(TObject &o) const{
  //
  // Copy function 
  // called in copy constructor and assigment operator
  //
  AliHFEpidTPC &target = dynamic_cast<AliHFEpidTPC &>(o);

  target.fkEtaCorrection = fkEtaCorrection;
  target.fkCentralityCorrection = fkCentralityCorrection;
  target.fkEtaMeanCorrection = fkEtaMeanCorrection;
  target.fkEtaWidthCorrection = fkEtaWidthCorrection;
  target.fkCentralityMeanCorrection = fkCentralityMeanCorrection;
  target.fkCentralityWidthCorrection = fkCentralityWidthCorrection;
  target.fLineCrossingsEnabled = fLineCrossingsEnabled;
  target.fHasCutModel = fHasCutModel;
  target.fUseOnlyOROC = fUseOnlyOROC;
  target.fNsigmaTPC = fNsigmaTPC;
  target.fRejectionEnabled = fRejectionEnabled;

  memcpy(target.fkUpperSigmaCut, fkUpperSigmaCut, sizeof(const TF1 *) * 12);
  memcpy(target.fkLowerSigmaCut, fkLowerSigmaCut, sizeof(const TF1 *) * 12);

  memcpy(target.fLineCrossingSigma, fLineCrossingSigma, sizeof(Double_t) * AliPID::kSPECIES);
  memcpy(target.fPAsigCut, fPAsigCut, sizeof(Float_t) * 2);
  memcpy(target.fNAsigmaTPC, fNAsigmaTPC, sizeof(Float_t) * 2);
 
  AliHFEpidBase::Copy(target);
}

//___________________________________________________________________
AliHFEpidTPC::~AliHFEpidTPC(){
  //
  // Destructor
  //
}

//___________________________________________________________________
Bool_t AliHFEpidTPC::InitializePID(Int_t /*run*/){
  //
  // Add TPC dE/dx Line crossings
  //
  //AddTPCdEdxLineCrossing(AliPID::kKaon, 0.3, 0.018);
  //AddTPCdEdxLineCrossing(AliPID::kProton, 0.9, 0.054);
  return kTRUE;
}

//___________________________________________________________________
Int_t AliHFEpidTPC::IsSelected(const AliHFEpidObject *track, AliHFEpidQAmanager *pidqa) const
{
  //
  // For the TPC pid we use the 2-sigma band around the bethe bloch curve
  // for electrons
  // exclusion of the crossing points
  //

  if(!fkPIDResponse) return 0;

  AliHFEpidObject::AnalysisType_t anatype = track->IsESDanalysis() ? AliHFEpidObject::kESDanalysis : AliHFEpidObject::kAODanalysis;

  // Make clone track in order to be able to apply correction
  const AliVTrack *rectrack;
  AliESDtrack esdtrack;
  AliAODTrack aodtrack;
  Double_t correctedTPCnSigma=0.;
  Bool_t TPCnSigmaCorrected=kFALSE;
  if((fkEtaMeanCorrection&&fkEtaWidthCorrection)||
     (fkCentralityMeanCorrection&&fkCentralityWidthCorrection)){
    TPCnSigmaCorrected=kTRUE;
    correctedTPCnSigma=GetCorrectedTPCnSigma(track->GetRecTrack()->Eta(), track->GetMultiplicity(), fkPIDResponse->NumberOfSigmasTPC(track->GetRecTrack(), AliPID::kElectron));
  }
  // jpsi
  if((fkCentralityEtaCorrectionMeanJpsi)&&
     (fkCentralityEtaCorrectionWidthJpsi)){
    TPCnSigmaCorrected=kTRUE;
    correctedTPCnSigma=GetCorrectedTPCnSigmaJpsi(track->GetRecTrack()->Eta(), track->GetMultiplicity(), fkPIDResponse->NumberOfSigmasTPC(track->GetRecTrack(), AliPID::kElectron));
  }
  if(fkEtaCorrection || fkCentralityCorrection){
    // Correction available
    // apply it on copy
    if(track->IsESDanalysis()){
      esdtrack.~AliESDtrack();
      new(&esdtrack) AliESDtrack(*(static_cast<const AliESDtrack *>(track->GetRecTrack())));
      if(track->IsPbPb() && HasCentralityCorrection())
        ApplyCentralityCorrection(&esdtrack, track->GetMultiplicity(), anatype);
      if(HasEtaCorrection())
        ApplyEtaCorrection(&esdtrack, anatype);
      rectrack = &esdtrack;
    } else {
      aodtrack.~AliAODTrack();
      new(&aodtrack) AliAODTrack(*(static_cast<const AliAODTrack *>(track->GetRecTrack())));
      if(track->IsPbPb() && HasCentralityCorrection())
        ApplyCentralityCorrection(&aodtrack, track->GetMultiplicity(), anatype);
      if(HasEtaCorrection())
        ApplyEtaCorrection(&aodtrack, anatype);
      rectrack = &aodtrack;
    }
  } else {
    // Correction not available - no need to copy
    rectrack = track->GetRecTrack();
  }
  AliHFEpidObject tpctrack(*track);
  tpctrack.SetRecTrack(rectrack);
  if(TPCnSigmaCorrected)tpctrack.SetCorrectedTPCnSigma(correctedTPCnSigma);
  
  // QA before selection (after correction)
  if(pidqa) pidqa->ProcessTrack(&tpctrack, AliHFEpid::kTPCpid, AliHFEdetPIDqa::kBeforePID);
  AliDebug(1, "Doing TPC PID based on n-Sigma cut approach");
  
  // make copy of the track in order to allow for applying the correction 
  Float_t nsigma=correctedTPCnSigma;
  if(!TPCnSigmaCorrected)
    nsigma = fUsedEdx ? rectrack->GetTPCsignal() : fkPIDResponse->NumberOfSigmasTPC(rectrack, AliPID::kElectron);
  AliDebug(1, Form("TPC NSigma: %f", nsigma));
  // exclude crossing points:
  // Determine the bethe values for each particle species
  Bool_t isLineCrossing = kFALSE;
  for(Int_t ispecies = 0; ispecies < AliPID::kSPECIES; ispecies++){
    if(ispecies == AliPID::kElectron) continue;
    if(!(fLineCrossingsEnabled & 1 << ispecies)) continue;
    if(TMath::Abs(fkPIDResponse->NumberOfSigmasTPC(rectrack, (AliPID::EParticleType)ispecies)) < fLineCrossingSigma[ispecies] && TMath::Abs(nsigma) < fNsigmaTPC){
      // Point in a line crossing region, no PID possible, but !PID still possible ;-)
      isLineCrossing = kTRUE;      
      break;
    }
  }
  if(isLineCrossing) return 0;

  // Check particle rejection
  if(HasParticleRejection()){
    Int_t reject = Reject(rectrack, anatype);
    if(reject != 0) return reject;
  }

  // Check if we have an asymmetric sigma model set
  Int_t pdg = 0;
  if(fHasCutModel){
    pdg = CutSigmaModel(&tpctrack) ? 11 : 0;
  } else { 
    // Perform Asymmetric n-sigma cut if required, else perform symmetric TPC sigma cut
    Float_t p = rectrack->P();
    if(HasAsymmetricSigmaCut()) {
      
      //printf("p %f, fPAsigCut[0] %f, fPAsigCut[1] %f\n",p,fPAsigCut[0],fPAsigCut[1]);
      if(p >= fPAsigCut[0] && p <= fPAsigCut[1]) { 
	      if(nsigma >= fNAsigmaTPC[0] && nsigma <= fNAsigmaTPC[1]) pdg = 11; 
	        else pdg = 0;
      }
      else pdg = 0;
    
    }
    else {
      if(TMath::Abs(nsigma) < fNsigmaTPC ) pdg = 11;
    }
  }
  if(pidqa && pdg != 0) pidqa->ProcessTrack(&tpctrack, AliHFEpid::kTPCpid, AliHFEdetPIDqa::kAfterPID);
  return pdg;

}

//___________________________________________________________________
Bool_t AliHFEpidTPC::CutSigmaModel(const AliHFEpidObject * const track) const {
  //
  // N SigmaCut using parametrization of the cuts
  //
  Bool_t isSelected = kTRUE;
  AliHFEpidObject::AnalysisType_t anatype = track->IsESDanalysis() ? AliHFEpidObject::kESDanalysis : AliHFEpidObject::kAODanalysis;
  Float_t nsigma = fUsedEdx ? track->GetRecTrack()->GetTPCsignal() : fkPIDResponse->NumberOfSigmasTPC(track->GetRecTrack(), AliPID::kElectron);
  Double_t p = GetP(track->GetRecTrack(), anatype);
  Int_t centrality = track->IsPbPb() ? track->GetCentrality() + 1 : 0;
  AliDebug(2, Form("Centrality: %d\n", centrality));
  if(centrality > 11) return kFALSE;
  const TF1 *cutfunction;
  if((cutfunction = fkUpperSigmaCut[centrality]) && nsigma > cutfunction->Eval(p)) isSelected = kFALSE;
  if((cutfunction = fkLowerSigmaCut[centrality]) && nsigma < cutfunction->Eval(p)) isSelected = kFALSE;
  return isSelected;
}

//___________________________________________________________________
Int_t AliHFEpidTPC::Reject(const AliVParticle *track, AliHFEpidObject::AnalysisType_t anaType) const{
  //
  // reject particles based on asymmetric sigma cut
  //
  Int_t pdc[AliPID::kSPECIES] = {11,13,211,321,2212};
  Double_t p = GetP(track, anaType);
  for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
    if(!TESTBIT(fRejectionEnabled, ispec)) continue;
    // Particle rejection enabled
    if(p < fRejection[4*ispec] || p > fRejection[4*ispec+2]) continue;
    Double_t sigma = fkPIDResponse->NumberOfSigmasTPC(track, static_cast<AliPID::EParticleType>(ispec));
    if(sigma >= fRejection[4*ispec+1] && sigma <= fRejection[4*ispec+3]) return pdc[ispec] * track->Charge();
  }
  return 0;
}

//___________________________________________________________________
void AliHFEpidTPC::ApplyEtaCorrection(AliVTrack *track, AliHFEpidObject::AnalysisType_t anatype) const{
  //
  // Apply correction for the eta dependence
  // N.B. This correction has to be applied on a copy track
  //
  AliDebug(1, Form("Applying correction function %s\n", fkEtaCorrection->GetName()));
  Double_t original = track->GetTPCsignal(),
           eta = track->Eta();
  if(anatype == AliHFEpidObject::kESDanalysis){
    AliESDtrack *esdtrack = static_cast<AliESDtrack *>(track);
    if(fkEtaCorrection->Eval(eta)>0.0) esdtrack->SetTPCsignal(original/fkEtaCorrection->Eval(eta), esdtrack->GetTPCsignalSigma(), esdtrack->GetTPCsignalN());
  } else {
    AliAODTrack *aodtrack = static_cast<AliAODTrack *>(track);
    AliAODPid *pid = aodtrack->GetDetPid();
    if(pid && fkEtaCorrection->Eval(eta)>0.0) pid->SetTPCsignal(original/fkEtaCorrection->Eval(eta));
  }
}

//___________________________________________________________________
void AliHFEpidTPC::ApplyCentralityCorrection(AliVTrack *track, Double_t centralityEstimator, AliHFEpidObject::AnalysisType_t anatype) const{
  //
  // Apply correction for the eta dependence
  // N.B. This correction has to be applied on a copy track
  //
  AliDebug(1, Form("Applying correction function %s\n", fkCentralityCorrection->GetName()));
  Double_t original = track->GetTPCsignal();
  if(anatype == AliHFEpidObject::kESDanalysis){
    AliESDtrack *esdtrack = static_cast<AliESDtrack *>(track);
    if(fkCentralityCorrection->Eval(centralityEstimator)>0.0) esdtrack->SetTPCsignal(original/fkCentralityCorrection->Eval(centralityEstimator), esdtrack->GetTPCsignalSigma(), esdtrack->GetTPCsignalN());
  } else {
    AliAODTrack *aodtrack = static_cast<AliAODTrack *>(track);
    AliAODPid *pid = aodtrack->GetDetPid();
    if(pid && fkCentralityCorrection->Eval(centralityEstimator)>0.0) pid->SetTPCsignal(original/fkCentralityCorrection->Eval(centralityEstimator));
  }
}

//___________________________________________________________________
Double_t AliHFEpidTPC::GetCorrectedTPCnSigma(Double_t eta, Double_t centralityEstimator, Double_t tpcNsigma) const{
  //
  // Apply correction for the eta dependence
  // N.B. This correction has to be applied on a copy track
  //
  Double_t corrtpcNsigma = tpcNsigma;
  if(fkEtaMeanCorrection&&fkEtaWidthCorrection){
    if(TMath::Abs(fkEtaWidthCorrection->Eval(eta))>0.0000001) corrtpcNsigma=(corrtpcNsigma-fkEtaMeanCorrection->Eval(eta))/fkEtaWidthCorrection->Eval(eta);
  }
  if(fkCentralityMeanCorrection&&fkCentralityWidthCorrection) {
    if(TMath::Abs(fkCentralityWidthCorrection->Eval(centralityEstimator))>0.0000001) corrtpcNsigma=(corrtpcNsigma-fkCentralityMeanCorrection->Eval(centralityEstimator))/fkCentralityWidthCorrection->Eval(centralityEstimator);
  }
  return corrtpcNsigma;
}

//___________________________________________________________________
Double_t AliHFEpidTPC::GetCorrectedTPCnSigmaJpsi(Double_t eta, Double_t centralityEstimator, Double_t tpcNsigma) const{
  //
  // Apply correction for the eta dependence
  // N.B. This correction has to be applied on a copy track
  //
  Double_t corrtpcNsigma = tpcNsigma;
  if(fkCentralityEtaCorrectionMeanJpsi&&fkCentralityEtaCorrectionWidthJpsi){
    const TAxis *caxis = fkCentralityEtaCorrectionMeanJpsi->GetXaxis();
    const TAxis *eaxis = fkCentralityEtaCorrectionMeanJpsi->GetYaxis();
    Int_t cbin = caxis->FindFixBin(centralityEstimator);
    Int_t ebin = eaxis->FindFixBin(eta);
    //Double_t cbinlowedge = caxis->GetBinLowEdge(cbin);
    //Double_t cbinupedge = caxis->GetBinUpEdge(cbin);
    //Double_t ebinlowedge = eaxis->GetBinLowEdge(ebin);
    //Double_t ebinupedge = eaxis->GetBinUpEdge(ebin);
    Double_t center = fkCentralityEtaCorrectionMeanJpsi->GetBinContent(cbin,ebin);
    Double_t width = fkCentralityEtaCorrectionWidthJpsi->GetBinContent(cbin,ebin);
    //printf("cbin %d, cbinlowe %f, cbinupe %f, centrality %f\n",cbin,cbinlowedge,cbinupedge,centralityEstimator);
    //printf("ebin %d, ebinlowe %f, ebinupe %f, eta %f\n",ebin,ebinlowedge,ebinupedge,eta);
    //printf("mean %f, width %f\n",center,width);
    if(TMath::Abs(width)>0.0000001) corrtpcNsigma=(corrtpcNsigma-center)/width;
  }
  return corrtpcNsigma;
}

//___________________________________________________________________
void AliHFEpidTPC::UseOROC(AliVTrack *track, AliHFEpidObject::AnalysisType_t anatype) const{
  //
  // Use TPC signal from the OROC
  // N.B. This correction has to be applied on a copy track
  //
  //Double_t original = track->GetTPCsignal();
  
  if(anatype == AliHFEpidObject::kESDanalysis){
    AliESDtrack *esdtrack = static_cast<AliESDtrack *>(track);
    AliTPCdEdxInfo *dEdxInfo = track->GetTPCdEdxInfo();
    Double32_t  TPCsignalRegion[4]; // TPC dEdx signal in 4 different regions - 0 - IROC, 1- OROC medium, 2 - OROC long, 3- OROC all, (default truncation used)
    Char_t      TPCsignalNRegion[3]; // number of clusters above threshold used in the dEdx calculation
    Char_t      TPCsignalNRowRegion[3]; // number of crosed rows used in the dEdx calculation - signal below threshold included
    dEdxInfo->GetTPCSignalRegionInfo(TPCsignalRegion,TPCsignalNRegion,TPCsignalNRowRegion);
    esdtrack->SetTPCsignal(TPCsignalRegion[3],esdtrack->GetTPCsignalSigma(),(TPCsignalNRegion[1]+TPCsignalNRegion[2])); // the two last are not ok
  } else {
    AliAODTrack *aodtrack = static_cast<AliAODTrack *>(track);
    AliTPCdEdxInfo *dEdxInfo = track->GetTPCdEdxInfo();
    Double32_t  TPCsignalRegion[4]; // TPC dEdx signal in 4 different regions - 0 - IROC, 1- OROC medium, 2 - OROC long, 3- OROC all, (default truncation used)
    Char_t      TPCsignalNRegion[3]; // number of clusters above threshold used in the dEdx calculation
    Char_t      TPCsignalNRowRegion[3]; // number of crosed rows used in the dEdx calculation - signal below threshold included
    dEdxInfo->GetTPCSignalRegionInfo(TPCsignalRegion,TPCsignalNRegion,TPCsignalNRowRegion);
    AliAODPid *pid = aodtrack->GetDetPid();
    if(pid) pid->SetTPCsignal(TPCsignalRegion[3]);
    if(pid) pid->SetTPCsignalN((TPCsignalNRegion[1]+TPCsignalNRegion[2]));
  }

}
//___________________________________________________________________
void AliHFEpidTPC::AddTPCdEdxLineCrossing(Int_t species, Double_t sigma){
  //
  // Add exclusion point for the TPC PID where a dEdx line crosses the electron line
  // Stores line center and line sigma
  //
  if(species >= AliPID::kSPECIES){
    AliError("Species doesn't exist");
    return;
  }
  fLineCrossingsEnabled |= 1 << species;
  fLineCrossingSigma[species] = sigma;
}

//___________________________________________________________________
Double_t AliHFEpidTPC::GetP(const AliVParticle *track, AliHFEpidObject::AnalysisType_t anatype) const {
  //
  // Get the momentum at the inner wall of the TPC
  //
  Double_t p = -1;
  if(anatype == AliHFEpidObject::kESDanalysis){
    // ESD analysis: Use Inner Params for the momentum estimate
    const AliESDtrack *esdtrack = dynamic_cast<const AliESDtrack *>(track);
    if(esdtrack) p = esdtrack->GetInnerParam() ? esdtrack->GetInnerParam()->GetP() : esdtrack->P();
  }

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