ROOT logo
#ifndef ALIPID_H
#define ALIPID_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

///////////////////////////////////////////////////////////////////////////////
///                                                                          //
/// particle id probability densities                                        //
///                                                                          //
///////////////////////////////////////////////////////////////////////////////

/* $Id$ */


#include <TObject.h>
#include <TMath.h>

class AliPID : public TObject {
 public:
  enum {
    kSPECIES = 5,     // Number of default particle species recognized by the PID
    kSPECIESC = 9,    // Number of default particles + light nuclei recognized by the PID
    kSPECIESCN = 14,  // Number of charged+neutral particle species recognized by the PHOS/EMCAL PID
  };
  enum EParticleType {
    kElectron = 0, 
    kMuon = 1, 
    kPion = 2, 
    kKaon = 3, 
    kProton = 4, 

    kDeuteron = 5,
    kTriton = 6,
    kHe3 = 7,
    kAlpha = 8,
    
    kPhoton = 9,
    kPi0 = 10, 
    kNeutron = 11, 
    kKaon0 = 12, 
    kEleCon = 13,
    
    kUnknown = 14
  };
  
  static Int_t         ParticleCharge(Int_t iType) {
     if(!fgkParticleMass[0]) Init(); 
     return fgkParticleCharge[iType];
  }
  static Float_t       ParticleMass(Int_t iType) {
     if(!fgkParticleMass[0]) Init(); 
     return fgkParticleMass[iType];
  }
  static Float_t       ParticleMassZ(Int_t iType) {
     if(!fgkParticleMass[0]) Init(); 
     return fgkParticleMassZ[iType];
  }
  static const char*   ParticleName(Int_t iType) 
    {return fgkParticleName[iType];};
  static const char*   ParticleShortName(Int_t iType) 
    {return fgkParticleShortName[iType];};
  static const char*   ParticleLatexName(Int_t iType) 
    {return fgkParticleLatexName[iType];};
  static Int_t         ParticleCode(Int_t iType) 
    {return fgkParticleCode[iType];};

  AliPID();
  AliPID(const Double_t* probDensity, Bool_t charged = kTRUE);
  AliPID(const Float_t* probDensity, Bool_t charged = kTRUE);
  AliPID(const AliPID& pid);
  AliPID& operator = (const AliPID& pid);

  Double_t             GetProbability(EParticleType iType,
				      const Double_t* prior) const;
  Double_t             GetProbability(EParticleType iType) const;
  void                 GetProbabilities(Double_t* probabilities,
					const Double_t* prior) const;
  void                 GetProbabilities(Double_t* probabilities) const;
  EParticleType        GetMostProbable(const Double_t* prior) const;
  EParticleType        GetMostProbable() const;
  
  void                 SetProbabilities(const Double_t* probabilities,
                                        Bool_t charged = kTRUE);

  static void          SetPriors(const Double_t* prior,
				 Bool_t charged = kTRUE);
  static void          SetPrior(EParticleType iType, Double_t prior);

  AliPID&              operator *= (const AliPID& pid);

 private:

  static void          Init();

  Bool_t               fCharged;                           // flag for charged/neutral
  Double_t             fProbDensity[kSPECIESCN];           // probability densities
  static Double_t      fgPrior[kSPECIESCN];                // a priori probabilities

  static /*const*/ Float_t fgkParticleMass[kSPECIESCN+1];  // particle masses
  static /*const*/ Float_t fgkParticleMassZ[kSPECIESCN+1]; // particle masses/charge
  static /*const*/ Char_t  fgkParticleCharge[kSPECIESCN+1]; // particle charge (in e units!)
  static const char*   fgkParticleName[kSPECIESCN+1];      // particle names
  static const char*   fgkParticleShortName[kSPECIESCN+1]; // particle names
  static const char*   fgkParticleLatexName[kSPECIESCN+1]; // particle names
  static const Int_t   fgkParticleCode[kSPECIESCN+1];      // particle codes

  ClassDef(AliPID, 4)                                      // particle id probability densities
};


AliPID operator * (const AliPID& pid1, const AliPID& pid2);


#endif
 AliPID.h:1
 AliPID.h:2
 AliPID.h:3
 AliPID.h:4
 AliPID.h:5
 AliPID.h:6
 AliPID.h:7
 AliPID.h:8
 AliPID.h:9
 AliPID.h:10
 AliPID.h:11
 AliPID.h:12
 AliPID.h:13
 AliPID.h:14
 AliPID.h:15
 AliPID.h:16
 AliPID.h:17
 AliPID.h:18
 AliPID.h:19
 AliPID.h:20
 AliPID.h:21
 AliPID.h:22
 AliPID.h:23
 AliPID.h:24
 AliPID.h:25
 AliPID.h:26
 AliPID.h:27
 AliPID.h:28
 AliPID.h:29
 AliPID.h:30
 AliPID.h:31
 AliPID.h:32
 AliPID.h:33
 AliPID.h:34
 AliPID.h:35
 AliPID.h:36
 AliPID.h:37
 AliPID.h:38
 AliPID.h:39
 AliPID.h:40
 AliPID.h:41
 AliPID.h:42
 AliPID.h:43
 AliPID.h:44
 AliPID.h:45
 AliPID.h:46
 AliPID.h:47
 AliPID.h:48
 AliPID.h:49
 AliPID.h:50
 AliPID.h:51
 AliPID.h:52
 AliPID.h:53
 AliPID.h:54
 AliPID.h:55
 AliPID.h:56
 AliPID.h:57
 AliPID.h:58
 AliPID.h:59
 AliPID.h:60
 AliPID.h:61
 AliPID.h:62
 AliPID.h:63
 AliPID.h:64
 AliPID.h:65
 AliPID.h:66
 AliPID.h:67
 AliPID.h:68
 AliPID.h:69
 AliPID.h:70
 AliPID.h:71
 AliPID.h:72
 AliPID.h:73
 AliPID.h:74
 AliPID.h:75
 AliPID.h:76
 AliPID.h:77
 AliPID.h:78
 AliPID.h:79
 AliPID.h:80
 AliPID.h:81
 AliPID.h:82
 AliPID.h:83
 AliPID.h:84
 AliPID.h:85
 AliPID.h:86
 AliPID.h:87
 AliPID.h:88
 AliPID.h:89
 AliPID.h:90
 AliPID.h:91
 AliPID.h:92
 AliPID.h:93
 AliPID.h:94
 AliPID.h:95
 AliPID.h:96
 AliPID.h:97
 AliPID.h:98
 AliPID.h:99
 AliPID.h:100
 AliPID.h:101
 AliPID.h:102
 AliPID.h:103
 AliPID.h:104
 AliPID.h:105
 AliPID.h:106
 AliPID.h:107
 AliPID.h:108
 AliPID.h:109
 AliPID.h:110
 AliPID.h:111
 AliPID.h:112
 AliPID.h:113
 AliPID.h:114
 AliPID.h:115