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.                  *
**************************************************************************/
//
// PID Steering Class 
// Interface to the user task
// Several strategies for Electron identification implemented.
// In addition users can combine different detectors or use
// single detector PID
// 
// Authors:
//   Markus Fasel <M.Fasel@gsi.de>
//
#include <TAxis.h>
#include <TClass.h>
#include <TF1.h>
#include <TIterator.h>
#include <TList.h>
#include <TMath.h>
#include <TObjArray.h>
#include <TObjString.h>
#include <TString.h>

#include "AliLog.h"
#include "AliPID.h"
#include "AliVParticle.h"

#include "AliHFEcontainer.h"
#include "AliHFEpid.h"
#include "AliHFEpidQAmanager.h"
#include "AliHFEpidITS.h"
#include "AliHFEpidTPC.h"
#include "AliHFEpidTRD.h"
#include "AliHFEpidTOF.h"
#include "AliHFEpidEMCAL.h"
#include "AliHFEpidMC.h"
#include "AliHFEpidBayes.h"
#include "AliHFEvarManager.h"

ClassImp(AliHFEpid)

const Char_t* AliHFEpid::fgkDetectorName[AliHFEpid::kNdetectorPID + 1] = {
  "MCPID",
  "BAYESPID",
  "ITSPID",
  "TPCPID",
  "TRDPID",
  "TOFPID",
  "EMCALPID",
  "UndefinedPID"
};

//____________________________________________________________
AliHFEpid::AliHFEpid():
  TNamed(),
  fEnabledDetectors(0),
  fNPIDdetectors(0),
  fVarManager(NULL),
  fCommonObjects(NULL)
{
  //
  // Default constructor
  //
  memset(fDetectorPID, 0, sizeof(AliHFEpidBase *) * kNdetectorPID);
  memset(fDetectorOrder, kUndefined, sizeof(UInt_t) * kNdetectorPID);
  memset(fSortedOrder, 0, sizeof(UInt_t) * kNdetectorPID);
}

//____________________________________________________________
AliHFEpid::AliHFEpid(const Char_t *name):
  TNamed(name, ""),
  fEnabledDetectors(0),
  fNPIDdetectors(0),
  fVarManager(NULL),
  fCommonObjects(NULL)
{
  //
  // Default constructor
  // Create PID objects for all detectors
  //
  memset(fDetectorPID, 0, sizeof(AliHFEpidBase *) * kNdetectorPID);
  memset(fDetectorOrder, kUndefined, sizeof(UInt_t) * kNdetectorPID);
  memset(fSortedOrder, 0, sizeof(UInt_t) * kNdetectorPID);

  fDetectorPID[kMCpid] = new AliHFEpidMC("MCPID");
  fDetectorPID[kBAYESpid] = new AliHFEpidBayes("BAYESPID");
  fDetectorPID[kTPCpid] = new AliHFEpidTPC("TPCPID");
  fDetectorPID[kTRDpid] = new AliHFEpidTRD("TRDPID");
  fDetectorPID[kITSpid] = new AliHFEpidITS("ITSPID");
  fDetectorPID[kTOFpid] = new AliHFEpidTOF("TOFPID");
  fDetectorPID[kEMCALpid] = new AliHFEpidEMCAL("EMCALPID");

}

//____________________________________________________________
AliHFEpid::AliHFEpid(const AliHFEpid &c):
  TNamed(c),
  fEnabledDetectors(c.fEnabledDetectors),
  fNPIDdetectors(c.fNPIDdetectors),
  fVarManager(c.fVarManager),
  fCommonObjects(NULL)
{
  //
  // Copy Constructor
  //
  memset(fDetectorPID, 0, sizeof(AliHFEpidBase *) * kNdetectorPID);
  c.Copy(*this);
}

//____________________________________________________________
AliHFEpid& AliHFEpid::operator=(const AliHFEpid &c){
  //
  // Assignment operator
  //
  if(&c != this) c.Copy(*this);
  return *this;
}

//____________________________________________________________
AliHFEpid::~AliHFEpid(){
  //
  // Destructor
  //
  for(Int_t idet = 0; idet < kNdetectorPID; idet++)
    if(fDetectorPID[idet]) delete fDetectorPID[idet];
  ClearCommonObjects();
}

//____________________________________________________________
void AliHFEpid::Copy(TObject &o) const{
  //
  // Make copy
  //
  
  TNamed::Copy(o);
  AliHFEpid &target = dynamic_cast<AliHFEpid &>(o);
  target.ClearCommonObjects();

  target.fEnabledDetectors = fEnabledDetectors;
  target.fNPIDdetectors = fNPIDdetectors;
  target.fVarManager = fVarManager;
 
  // Copy detector PIDs
  for(Int_t idet = 0; idet < kNdetectorPID; idet++){
    //Cleanup pointers in case of assignment
    if(target.fDetectorPID[idet])  
      delete target.fDetectorPID[idet];     
    if(fDetectorPID[idet]) 
      target.fDetectorPID[idet] = dynamic_cast<AliHFEpidBase *>(fDetectorPID[idet]->Clone());
  }
  memcpy(target.fDetectorOrder, fDetectorOrder, sizeof(UInt_t) * kNdetectorPID);
  memcpy(target.fSortedOrder, fSortedOrder, sizeof(UInt_t) * kNdetectorPID);
}

//____________________________________________________________
void AliHFEpid::AddCommonObject(TObject * const o){
  //
  // Add common object to the garbage collection
  //
  if(!fCommonObjects) fCommonObjects = new TObjArray;
  fCommonObjects->Add(o);
}

//____________________________________________________________
void AliHFEpid::ClearCommonObjects(){
  //
  // empty garbage collection
  //
  if(fCommonObjects){
    fCommonObjects->Delete();
    delete fCommonObjects;
    fCommonObjects = NULL;
  }
}

//____________________________________________________________
void AliHFEpid::SetDetectorsForAnalysis(TString detectors){
  //
  // Set detectors used in Analysis to the position corresponding to their 
  // position in the string
  // Detectors are separated by ","
  //
  TObjArray *detarray = detectors.Tokenize(",");
  TObjString *detString(NULL);
  int ndet(0);
  for(int idet = 0; idet < detarray->GetEntries(); idet++){
    detString = dynamic_cast<TObjString *>(detarray->At(idet));
    if(detString) AddDetector(detString->String(), ndet++);
  }
  AliDebug(1, Form("%d detectors used in Analysis", ndet));
}

//____________________________________________________________
void AliHFEpid::AddDetector(TString detector, UInt_t position){
  //
  // Add Detector in position 
  //
  UInt_t detectorID = kUndefined;
  detector.ToUpper();
  if(!detector.CompareTo("MC")) detectorID = kMCpid;
  else if(!detector.CompareTo("BAYES")) detectorID = kBAYESpid;
  else if(!detector.CompareTo("TPC")) detectorID = kTPCpid;
  else if(!detector.CompareTo("TRD")) detectorID = kTRDpid;
  else if(!detector.CompareTo("TOF")) detectorID = kTOFpid;
  else if(!detector.CompareTo("ITS")) detectorID = kITSpid;
  else if(!detector.CompareTo("EMCAL")) detectorID = kEMCALpid;
  else AliError("Detector not available");

  if(detectorID == kUndefined) return;
  if(IsDetectorOn(detectorID)) return;
  SwitchOnDetector(detectorID);
  fDetectorOrder[detectorID] = position;
  fNPIDdetectors++;
}

//____________________________________________________________
Bool_t AliHFEpid::InitializePID(Int_t run){
  //
  // Initializes the PID object
  //

  if(!TestBit(kDetectorsSorted)) SortDetectors();
  Bool_t status = kTRUE;
  for(Int_t idet = 0; idet < kNdetectorPID; idet++){
    if(!IsDetectorOn(idet)) continue;
    if(fDetectorPID[idet]){ 
      status &= fDetectorPID[idet]->InitializePID(run);
      if(HasMCData() && status) fDetectorPID[idet]->SetHasMCData();
    }
  }
  SetBit(kIsInit);
  PrintStatus();
  return status;
}

//____________________________________________________________
Bool_t AliHFEpid::IsSelected(const AliHFEpidObject * const track, AliHFEcontainer *cont, const Char_t *contname, AliHFEpidQAmanager *pidqa){
  //
  // Select Tracks
  //
  Bool_t isSelected = kTRUE;
  AliDebug(1, Form("Particle used for PID, QA available: %s", pidqa ? "Yes" : "No"));
  for(UInt_t idet = 0; idet < fNPIDdetectors; idet++){
    AliDebug(2, Form("Using Detector %s\n", SortedDetectorName(idet)));
    if(TMath::Abs(fDetectorPID[fSortedOrder[idet]]->IsSelected(track, pidqa)) != 11){
      isSelected = kFALSE;
      break;
    }
    AliDebug(2, "Particlae selected by detector");
    if(fVarManager && cont){
      TString reccontname = contname; reccontname += "Reco";
      AliDebug(2, Form("Filling container %s", reccontname.Data()));
      if(fVarManager->IsSignalTrack())
        fVarManager->FillContainerStepname(cont, reccontname.Data(), SortedDetectorName(idet));
      if(HasMCData()){
        TString mccontname = contname; mccontname += "MC";
        AliDebug(2, Form("MC Information available, Filling container %s", mccontname.Data()));
        if(fVarManager->IsSignalTrack()) {
          fVarManager->FillContainerStepname(cont, mccontname.Data(), SortedDetectorName(idet), kTRUE);
	        if(cont->GetCorrelationMatrix("correlationstepafterTOF")){
	          TString tstept("TOFPID"); 
	          if(!tstept.CompareTo(SortedDetectorName(idet))) {
	            fVarManager->FillCorrelationMatrix(cont->GetCorrelationMatrix("correlationstepafterTOF"));
	            //printf("Step %s\n",(const char*) SortedDetectorName(idet));
	          }
	        }
	      }
      }
      // The PID will NOT fill the double counting information
    }
  }
  return isSelected;
}

//____________________________________________________________
void AliHFEpid::SortDetectors(){
  //
  // Make sorted list of detectors
  //
  if(TestBit(kDetectorsSorted)) return; // Don't sort detectors when they are already sorted
  TMath::Sort(static_cast<UInt_t>(kNdetectorPID), fDetectorOrder, fSortedOrder, kFALSE);
  SetBit(kDetectorsSorted);
}

//____________________________________________________________
void AliHFEpid::SetPIDResponse(const AliPIDResponse * const pid){
  //
  // Set ESD PID to the Detector PID objects
  //
  for(Int_t idet = 0; idet < kNdetectorPID; idet++){
    if(fDetectorPID[idet]) fDetectorPID[idet]->SetPIDResponse(pid);
  }
}

//____________________________________________________________
const AliPIDResponse *AliHFEpid::GetPIDResponse() const {
  //
  // Return PID response function
  //
  const AliPIDResponse *response = NULL;
  for(Int_t idet = 0; idet < kNdetectorPID; idet++){
    if(fDetectorPID[idet]){
      response = fDetectorPID[idet]->GetPIDResponse();
      break;
    }
  } 
  return response;
}

//____________________________________________________________
void AliHFEpid::ConfigureTPCasymmetric(Double_t pmin, Double_t pmax, Double_t sigmamin, Double_t sigmamax){
  //
  // TPC alone, symmetric 3 sigma cut and asymmetric sigma cut in the momentum region between 2GeV/c and 10 GeV/c and sigma between -1 and 100
  //
  AliHFEpidTPC *pid = dynamic_cast<AliHFEpidTPC *>(fDetectorPID[kTPCpid]);
  if(pid){
    pid->SetTPCnSigma(3);
    pid->SetAsymmetricTPCsigmaCut(pmin, pmax, sigmamin, sigmamax);
  }
}

//____________________________________________________________
void AliHFEpid::ConfigureTPCrejectionSimple(){
  //
  // TPC alone, symmetric 3 sigma cut and 2 - -100 sigma pion rejection
  //   
  AliHFEpidTPC *pid = dynamic_cast<AliHFEpidTPC *>(fDetectorPID[kTPCpid]);
  if(pid){
    pid->SetTPCnSigma(3);
    pid->SetRejectParticle(AliPID::kPion, 0., -100., 10., 1.);
  }
}

//____________________________________________________________
void AliHFEpid::ConfigureTOF(Float_t TOFCut){
  //
  // Set Number of sigmas for TOF PID
  //
  AliHFEpidTOF *tofpid = dynamic_cast<AliHFEpidTOF *>(fDetectorPID[kTOFpid]);
  if(tofpid) tofpid->SetTOFnSigma(TOFCut);
}

//____________________________________________________________
void AliHFEpid::ConfigureTPCcentralityCut(Int_t centralityBin, const char *lowerCutParam, const Double_t * const params, Float_t upperTPCCut){
  //
  // Cofigure centrality dependent cut function for TPC PID 
  //
  ConfigureTPCcut(centralityBin, lowerCutParam, params, upperTPCCut);
}

//____________________________________________________________
void AliHFEpid::ConfigureTPCdefaultCut(const char *lowerCutParam, const Double_t * const params, Float_t upperTPCCut){
  //
  // Cofigure default cut function for TPC PID 
  //
  ConfigureTPCcut(-1, lowerCutParam, params, upperTPCCut);
}

//____________________________________________________________
void AliHFEpid::ConfigureTPCcut(Int_t centralityBin, const char *lowerCutParam, const Double_t * const params, Float_t upperTPCCut){
  //
  // Cofigure cut function for TPC PID 
  // if no function parameterizaion is given, then the default one (exponential) is chosen
  //
  
  if(HasMCData()) AliInfo("Configuring TPC for MC\n");
  AliHFEpidTPC *tpcpid = dynamic_cast<AliHFEpidTPC *>(fDetectorPID[kTPCpid]);
  //TF1 *upperCut = new TF1("upperCut", "[0] * TMath::Exp([1]*x)", 0, 20);
  TF1 *upperCut = new TF1(Form("upperCut%s", centralityBin <  0 ? "Default" : Form("Bin%d", centralityBin)), "[0]", 0, 20); // Use constant upper cut
  TF1 *lowerCut = new TF1(Form("lowerCut%s", centralityBin <  0 ? "Default" : Form("Bin%d", centralityBin)), lowerCutParam == NULL ? "[0] * TMath::Exp([1]*x) + [2]": lowerCutParam, 0, 20);

  upperCut->SetParameter(0, upperTPCCut); // pp

  if(params){
      for(Int_t ipar = 0; ipar < lowerCut->GetNpar(); ipar++)
      {
	  lowerCut->SetParameter(ipar, params[ipar]);
        //  printf("printout %i %s %f \n", centralityBin, lowerCutParam, params[ipar]);
      }
  } else {
    // Set default parameterization
    if(HasMCData()) lowerCut->SetParameter(0, -2.5);
    else lowerCut->SetParameter(0, -4.03);  //pp
    lowerCut->SetParameter(1, -0.22); // pp
    
    if(HasMCData()) lowerCut->SetParameter(2, -2.2);
    else lowerCut->SetParameter(2, 0.92); //pp
  }


  if(tpcpid){
    tpcpid->SetTPCnSigma(2);
    if(centralityBin < 0){
      tpcpid->SetUpperSigmaCutDefault(upperCut);
      tpcpid->SetLowerSigmaCutDefault(lowerCut);
    } else {
      tpcpid->SetUpperSigmaCutCentrality(upperCut, centralityBin);
      tpcpid->SetLowerSigmaCutCentrality(lowerCut, centralityBin);
    }
  }
  AddCommonObject(upperCut);
  AddCommonObject(lowerCut);
}

//____________________________________________________________
void AliHFEpid::ConfigureBayesDetectorMask(Int_t detmask){
  //
  // Configure detector mask for Bayes PID
  // if no detector mask is set the default mask is chosen
  //
  
  if(HasMCData()) AliInfo("Configuring Bayes for MC\n");
  AliHFEpidBayes *bayespid = dynamic_cast<AliHFEpidBayes *>(fDetectorPID[kBAYESpid]);

  if(bayespid)
  {
      bayespid->SetBayesDetectorMask(detmask);
      printf("detector mask in pid class %i \n",detmask);
  }

}

//____________________________________________________________
void AliHFEpid::ConfigureBayesPIDThreshold(Float_t pidthres){
  //
  // Configure pid threshold for Bayes PID
  // if no threshold is set the default threshold is chosen
  //
  
  if(HasMCData()) AliInfo("Configuring Bayes for MC\n");
  AliHFEpidBayes *bayespid = dynamic_cast<AliHFEpidBayes *>(fDetectorPID[kBAYESpid]);

  if(bayespid)
  {
      bayespid->SetBayesPIDThreshold(pidthres);
      printf("combined pidthreshold %f \n",pidthres);
  }

}

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