ROOT logo
#ifndef ALIHELPERPID_H
#define ALIHELPERPID_H

class AliAODEvent;
class AliVEvent;
class TH1F;
class TH2F;
class TList;
class AliVTrack;
class AliVParticle;
class AliStack;
class TParticle;
class AliPIDResponse;  
class AliPIDCombined;  

#include "TNamed.h"

namespace AliHelperPIDNameSpace {
  
  enum PIDType_t
  {
    kNSigmaTPC = 0,
    kNSigmaTOF,
    kNSigmaTPCTOF,  // squared sum
    kBayes
  };
  
  const Int_t kNSigmaPIDType=kNSigmaTPCTOF;//number of Nsigma PID types
  
  enum AliHelperDetectorType_t
  {
    kITS = 0,
    kTPC,
    kTOF,
    kNDetectors
  };
  
  
  enum AliHelperParticleSpecies_t
  {
    kSpPion = 0,
    kSpKaon,
    kSpProton,
    kNSpecies,
    kSpUndefined=999
  }; // Particle species used in plotting
  
  
  enum AliHelperCharge_t
  {
    kChPos = 0,
    kChNeg,
    kNCharge
  };
}

using namespace AliHelperPIDNameSpace;

class AliHelperPID : public TNamed
{
 public:
  
  AliHelperPID();
  virtual  ~AliHelperPID() {}
  
  //MC or data
  Bool_t GetisMC(){return   fisMC;}
  void SetisMC(Bool_t mc){fisMC=mc;}
  //PID Type
  void SetPIDType(PIDType_t PIDType) { fPIDType = PIDType; }
  PIDType_t GetPIDType() {return fPIDType; }
  //NSigma cut
  void SetNSigmaCut(Double_t nsigma) { fNSigmaPID = nsigma; }
  Double_t GetNSigmaCut() {return fNSigmaPID; }
  //TOF PID
  void SetfRequestTOFPID(Bool_t tof){fRequestTOFPID=tof;}//fRequestTOFPID
  Bool_t GetfRequestTOFPID(){return   fRequestTOFPID;}//fRequestTOFPID
  void SetfRemoveTracksT0Fill(Bool_t tof){fRemoveTracksT0Fill=tof;}//fRemoveTracksT0Fill
  Bool_t GetfRemoveTracksT0Fill(){return   fRemoveTracksT0Fill;}//fRemoveTracksT0Fill
  //Exclusive NSIgma
  void SetfUseExclusiveNSigma(Bool_t nsigEx){fUseExclusiveNSigma=nsigEx;}//fUseExclusiveNSigma
  Bool_t GetfUseExclusiveNSigma(){return   fUseExclusiveNSigma;}//fUseExclusiveNSigma
  //lower pt fot TOF PID
  Double_t GetPtTOFPID(){return   fPtTOFPID;}
  void SetfPtTOFPID(Double_t pttof){fPtTOFPID=pttof;}
  //set PID Combined
  void SetPIDCombined(AliPIDCombined *obj){fPIDCombined=obj;}
  //void SetPIDCombined(AliPIDCombined *obj){Printf("void AliHelperPID::SetPIDCombined(AliPIDCombined *obj) not implemented");}  //FIXME Left for backward compatibility, not the PIDCombined onject is created in the constructor as done in /ANALYSIS/AliAnalysisTaskPIDCombined.cxx (Jul 15th 2014)
  AliPIDCombined *GetPIDCombined(){return fPIDCombined;}
  //set cut on beyesian probability
  void SetBayesCut(Double_t cut){fBayesCut=cut;}
  Double_t GetBayesCut(){return fBayesCut;}
  
  //getters of the other data members
  TList * GetOutputList() {return fOutputList;}//get the TList with histos
  Double_t* GetNSigmas(AliHelperParticleSpecies_t species) {return fnsigmas[species];}//get nsigma[ipart][idet], calculated in CalculateNSigmas(trk)
  Bool_t* GetfHasDoubleCounting() {return fHasDoubleCounting;}//get fHasDoubleCounting[ipart], calculated in GetDoubleCounting(trk)
  //getter of histo "name" from fOutput
  TH2F* GetHistogram2D(const char * name);//return histogram "name" from fOutputList
  
  //PID functions
  // User should call ONLY the function GetParticleSpecies and set the PID strategy in the steering macro!
  Int_t GetParticleSpecies(AliVTrack * trk, Bool_t FIllQAHistos);//calculate the PID according to the slected method.
  Int_t GetParticleSpecies(AliVParticle * part);

  Int_t GetIDBayes(AliVTrack * trk, Bool_t FIllQAHistos);//calculate the PID according to bayesian PID
  UInt_t CalcPIDCombined(const AliVTrack *track,const AliPIDResponse *PIDResponse, Int_t detMask, Double_t* prob) const;
  void CalculateNSigmas(AliVTrack * trk, Bool_t FIllQAHistos);//Calcuate nsigma[ipart][idet], fill NSigma histos
  Int_t FindMinNSigma(AliVTrack * trk, Bool_t FIllQAHistos);//retun the minimum Nsigma
  Bool_t* GetDoubleCounting(AliVTrack * trk, Bool_t FIllQAHistos);//if a particle has double counting set fHasDoubleCounting[ipart]=kTRUE (only for the second or third identity)
  Bool_t* GetAllCompatibleIdentitiesNSigma(AliVTrack * trk, Bool_t FIllQAHistos);//All the identities are true
  Int_t GetMCParticleSpecie(AliVEvent* event, AliVTrack * trk, Bool_t FIllQAHistos);//calculate the PID according to MC truth
  void CheckTOF(AliVTrack * trk);//check the TOF matching and set fHasTOFPID
  Double_t TOFBetaCalc(AliVTrack *track) const;
  Double_t GetMass(AliHelperParticleSpecies_t id) const;
  Long64_t Merge(TCollection* list);
  
 private:
  
  Bool_t fisMC;
  PIDType_t fPIDType; // PID type
  Double_t fNSigmaPID; // number of sigma for PID cut
  Double_t fBayesCut; // Cut on Bayesian probability
  AliPIDResponse   *fPIDResponse;     //! PID response object
  AliPIDCombined   *fPIDCombined;     // PIDCombined
  TList     *fOutputList;  // List Histo's
  Double_t fnsigmas[kNSpecies][kNSigmaPIDType+1]; //nsigma values
  Bool_t fHasDoubleCounting[kNSpecies];//array with compatible identities
  Bool_t fRequestTOFPID;//if true returns kSpUndefined if the TOF signal is missing
  Bool_t fRemoveTracksT0Fill;//if true remove tracks for which only StartTime from To-Fill is available (worst resolution)
  Bool_t fUseExclusiveNSigma;//if true returns the identity only if no double counting
  Double_t fPtTOFPID; //lower pt bound for the TOF pid
  Bool_t fHasTOFPID;
  
  AliHelperPID(const AliHelperPID&);
  AliHelperPID& operator=(const AliHelperPID&);
  
  ClassDef(AliHelperPID, 8);
  
};
#endif

 
 AliHelperPID.h:1
 AliHelperPID.h:2
 AliHelperPID.h:3
 AliHelperPID.h:4
 AliHelperPID.h:5
 AliHelperPID.h:6
 AliHelperPID.h:7
 AliHelperPID.h:8
 AliHelperPID.h:9
 AliHelperPID.h:10
 AliHelperPID.h:11
 AliHelperPID.h:12
 AliHelperPID.h:13
 AliHelperPID.h:14
 AliHelperPID.h:15
 AliHelperPID.h:16
 AliHelperPID.h:17
 AliHelperPID.h:18
 AliHelperPID.h:19
 AliHelperPID.h:20
 AliHelperPID.h:21
 AliHelperPID.h:22
 AliHelperPID.h:23
 AliHelperPID.h:24
 AliHelperPID.h:25
 AliHelperPID.h:26
 AliHelperPID.h:27
 AliHelperPID.h:28
 AliHelperPID.h:29
 AliHelperPID.h:30
 AliHelperPID.h:31
 AliHelperPID.h:32
 AliHelperPID.h:33
 AliHelperPID.h:34
 AliHelperPID.h:35
 AliHelperPID.h:36
 AliHelperPID.h:37
 AliHelperPID.h:38
 AliHelperPID.h:39
 AliHelperPID.h:40
 AliHelperPID.h:41
 AliHelperPID.h:42
 AliHelperPID.h:43
 AliHelperPID.h:44
 AliHelperPID.h:45
 AliHelperPID.h:46
 AliHelperPID.h:47
 AliHelperPID.h:48
 AliHelperPID.h:49
 AliHelperPID.h:50
 AliHelperPID.h:51
 AliHelperPID.h:52
 AliHelperPID.h:53
 AliHelperPID.h:54
 AliHelperPID.h:55
 AliHelperPID.h:56
 AliHelperPID.h:57
 AliHelperPID.h:58
 AliHelperPID.h:59
 AliHelperPID.h:60
 AliHelperPID.h:61
 AliHelperPID.h:62
 AliHelperPID.h:63
 AliHelperPID.h:64
 AliHelperPID.h:65
 AliHelperPID.h:66
 AliHelperPID.h:67
 AliHelperPID.h:68
 AliHelperPID.h:69
 AliHelperPID.h:70
 AliHelperPID.h:71
 AliHelperPID.h:72
 AliHelperPID.h:73
 AliHelperPID.h:74
 AliHelperPID.h:75
 AliHelperPID.h:76
 AliHelperPID.h:77
 AliHelperPID.h:78
 AliHelperPID.h:79
 AliHelperPID.h:80
 AliHelperPID.h:81
 AliHelperPID.h:82
 AliHelperPID.h:83
 AliHelperPID.h:84
 AliHelperPID.h:85
 AliHelperPID.h:86
 AliHelperPID.h:87
 AliHelperPID.h:88
 AliHelperPID.h:89
 AliHelperPID.h:90
 AliHelperPID.h:91
 AliHelperPID.h:92
 AliHelperPID.h:93
 AliHelperPID.h:94
 AliHelperPID.h:95
 AliHelperPID.h:96
 AliHelperPID.h:97
 AliHelperPID.h:98
 AliHelperPID.h:99
 AliHelperPID.h:100
 AliHelperPID.h:101
 AliHelperPID.h:102
 AliHelperPID.h:103
 AliHelperPID.h:104
 AliHelperPID.h:105
 AliHelperPID.h:106
 AliHelperPID.h:107
 AliHelperPID.h:108
 AliHelperPID.h:109
 AliHelperPID.h:110
 AliHelperPID.h:111
 AliHelperPID.h:112
 AliHelperPID.h:113
 AliHelperPID.h:114
 AliHelperPID.h:115
 AliHelperPID.h:116
 AliHelperPID.h:117
 AliHelperPID.h:118
 AliHelperPID.h:119
 AliHelperPID.h:120
 AliHelperPID.h:121
 AliHelperPID.h:122
 AliHelperPID.h:123
 AliHelperPID.h:124
 AliHelperPID.h:125
 AliHelperPID.h:126
 AliHelperPID.h:127
 AliHelperPID.h:128
 AliHelperPID.h:129
 AliHelperPID.h:130
 AliHelperPID.h:131
 AliHelperPID.h:132
 AliHelperPID.h:133
 AliHelperPID.h:134
 AliHelperPID.h:135
 AliHelperPID.h:136
 AliHelperPID.h:137
 AliHelperPID.h:138
 AliHelperPID.h:139
 AliHelperPID.h:140
 AliHelperPID.h:141
 AliHelperPID.h:142
 AliHelperPID.h:143