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.                  *
 **************************************************************************/

/* $Id$ */

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// particle id probability densities                                         //
//                                                                           //
// The AliPID class stores the probability densities for the different       //
// particle type hypotheses electron, muon, pion, kaon, proton, photon,      //
// pi0, neutron, K0 and electron conversion. These probability densities     //
// are determined from the detector response functions.                      //
// The * and *= operators are overloaded for AliPID to combine the PIDs      //
// from different detectors.                                                 //
//                                                                           //
// The Bayesian probability to be a particle of a given type can be          //
// calculated from the probability densities, if the a priori probabilities  //
// (or abundences, concentrations) of particle species are known. These      //
// priors can be given as argument to the GetProbability or GetMostProbable  //
// method or they can be set globally by calling the static method           //
// SetPriors().                                                              //
//                                                                           //
// The implementation of this class is based on the note ...                 //
// by Iouri Belikov and Karel Safarik.                                       //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include <TClass.h>
#include <TDatabasePDG.h>
#include <TPDGCode.h>

#include "AliLog.h"
#include "AliPDG.h"
#include "AliPID.h"

#define M(PID) TDatabasePDG::Instance()->GetParticle(fgkParticleCode[(PID)])->Mass()

ClassImp(AliPID)

const char* AliPID::fgkParticleName[AliPID::kSPECIESCN+1] = {
  "electron",
  "muon",
  "pion",
  "kaon",  
  "proton",
  
  "deuteron",
  "triton",
  "helium-3",
  "alpha",
  
  "photon",
  "pi0",
  "neutron",
  "kaon0",
  "eleCon",
  
  "unknown"
};

const char* AliPID::fgkParticleShortName[AliPID::kSPECIESCN+1] = {
  "e",
  "mu",
  "pi",
  "K",
  "p",

  "d",
  "t",
  "he3",
  "alpha",

  "photon",
  "pi0",
  "n",
  "K0",
  "eleCon",
  
  "unknown"
};

const char* AliPID::fgkParticleLatexName[AliPID::kSPECIESCN+1] = {
  "e",
  "#mu",
  "#pi",
  "K",
  "p",

  "d",
  "t",
  "he3",
  "#alpha",

  "#gamma",
  "#pi_{0}",
  "n",
  "K_{0}",
  "eleCon",

  "unknown"
};

const Int_t AliPID::fgkParticleCode[AliPID::kSPECIESCN+1] = {
  ::kElectron, 
  ::kMuonMinus, 
  ::kPiPlus, 
  ::kKPlus, 
  ::kProton,
  
  1000010020,
  1000010030,
  1000020030,
  1000020040,

  ::kGamma,
  ::kPi0,
  ::kNeutron,
  ::kK0,
  ::kElectron,
  0
};

/*const*/ Float_t AliPID::fgkParticleMass[AliPID::kSPECIESCN+1] = {
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  /*
  M(kElectron),  // electron
  M(kMuon), // muon
  M(kPion),    // pion
  M(kKaon),     // kaon
  M(kProton),    // proton
  M(kPhoton),     // photon
  M(kPi0),       // pi0
  M(kNeutron),   // neutron
  M(kKaon0),        // kaon0
  M(kEleCon),     // electron conversion
  M(kDeuteron), // deuteron
  M(kTriton),   // triton
  M(kHe3),      // he3
  M(kAlpha),    // alpha
  0.00000        // unknown
  */
};
/*const*/ Float_t AliPID::fgkParticleMassZ[AliPID::kSPECIESCN+1] = {
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  /*
  M(kElectron),  // electron
  M(kMuon), // muon
  M(kPion),    // pion
  M(kKaon),     // kaon
  M(kProton),    // proton
  M(kPhoton),     // photon
  M(kPi0),       // pi0
  M(kNeutron),   // neutron
  M(kKaon0),        // kaon0
  M(kEleCon),     // electron conversion
  M(kDeuteron), // deuteron
  M(kTriton),   // triton
  M(kHe3)/2,      // he3
  M(kAlpha)/2,    // alpha
  0.00000        // unknown
  */
};

Char_t AliPID::fgkParticleCharge[AliPID::kSPECIESCN+1] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };

Double_t AliPID::fgPrior[kSPECIESCN] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};


//_______________________________________________________________________
AliPID::AliPID() :
  TObject(),
  fCharged(0)
{
  //
  // Default constructor
  //
  Init();
  // set default values (= equal probabilities)
  for (Int_t i = 0; i < kSPECIESCN; i++)
    fProbDensity[i] = 1./kSPECIESCN;
}

//_______________________________________________________________________
AliPID::AliPID(const Double_t* probDensity, Bool_t charged) : 
  TObject(),
  fCharged(charged)
{
  //
  // Standard constructor
  //
  Init();
  // set given probability densities
  for (Int_t i = 0; i < kSPECIESC; i++)
    fProbDensity[i] = probDensity[i];

  for (Int_t i = kSPECIESC; i < kSPECIESCN; i++)
    fProbDensity[i] = ((charged) ? 0 : probDensity[i]);
}

//_______________________________________________________________________
AliPID::AliPID(const Float_t* probDensity, Bool_t charged) :
  TObject(),
  fCharged(charged)
{
  //
  // Standard constructor
  //
  Init();
  // set given probability densities
  for (Int_t i = 0; i < kSPECIESC; i++) 
    fProbDensity[i] = probDensity[i];

  for (Int_t i = kSPECIESC; i < kSPECIESCN; i++) 
    fProbDensity[i] = ((charged) ? 0 : probDensity[i]);
}

//_______________________________________________________________________
AliPID::AliPID(const AliPID& pid) : 
  TObject(pid),
  fCharged(pid.fCharged)
{
  //
  // copy constructor
  //
  // We do not call init here, MUST already be done
  for (Int_t i = 0; i < kSPECIESCN; i++) 
    fProbDensity[i] = pid.fProbDensity[i];
}

//_______________________________________________________________________
void AliPID::SetProbabilities(const Double_t* probDensity, Bool_t charged) 
{
  //
  // Set the probability densities
  //
  for (Int_t i = 0; i < kSPECIESC; i++) 
    fProbDensity[i] = probDensity[i];

  for (Int_t i = kSPECIESC; i < kSPECIESCN; i++) 
    fProbDensity[i] = ((charged) ? 0 : probDensity[i]);
}

//_______________________________________________________________________
AliPID& AliPID::operator = (const AliPID& pid)
{
// assignment operator

  if(this != &pid) {
    fCharged = pid.fCharged;
    for (Int_t i = 0; i < kSPECIESCN; i++) {
      fProbDensity[i] = pid.fProbDensity[i];
    }
  }
  return *this;
}

//_______________________________________________________________________
void AliPID::Init() 
{
  //
  // Initialise the masses, charges
  //
  // Initialise only once... 
  if(!fgkParticleMass[0]) {
    AliPDG::AddParticlesToPdgDataBase();
    for (Int_t i = 0; i < kSPECIESC; i++) {
      fgkParticleMass[i] = M(i);
      if (i == kHe3 || i == kAlpha) {
	fgkParticleMassZ[i] = M(i)/2.;
	fgkParticleCharge[i] = 2;
      }
      else {
	fgkParticleMassZ[i]=M(i);
	fgkParticleCharge[i]=1;
      }
    }
  }
}

//_____________________________________________________________________________
Double_t AliPID::GetProbability(EParticleType iType,
				const Double_t* prior) const
{
  //
  // Get the probability to be a particle of type "iType"
  // assuming the a priori probabilities "prior"
  //
  Double_t sum = 0.;
  Int_t nSpecies = ((fCharged) ? kSPECIESC : kSPECIESCN);
  for (Int_t i = 0; i < nSpecies; i++) {
    sum += fProbDensity[i] * prior[i];
  }
  if (sum <= 0) {
    AliError("Invalid probability densities or priors");
    return -1;
  }
  return fProbDensity[iType] * prior[iType] / sum;
}

//_____________________________________________________________________________
Double_t AliPID::GetProbability(EParticleType iType) const
{
// get the probability to be a particle of type "iType"
// assuming the globaly set a priori probabilities

  return GetProbability(iType, fgPrior);
}

//_____________________________________________________________________________
void AliPID::GetProbabilities(Double_t* probabilities,
			      const Double_t* prior) const
{
// get the probabilities to be a particle of given type
// assuming the a priori probabilities "prior"

  Double_t sum = 0.;
  Int_t nSpecies = ((fCharged) ? kSPECIESC : kSPECIESCN);
  for (Int_t i = 0; i < nSpecies; i++) {
    sum += fProbDensity[i] * prior[i];
  }
  if (sum <= 0) {
    AliError("Invalid probability densities or priors");
    for (Int_t i = 0; i < nSpecies; i++) probabilities[i] = -1;
    return;
  }
  for (Int_t i = 0; i < nSpecies; i++) {
    probabilities[i] = fProbDensity[i] * prior[i] / sum;
  }
}

//_____________________________________________________________________________
void AliPID::GetProbabilities(Double_t* probabilities) const
{
// get the probabilities to be a particle of given type
// assuming the globaly set a priori probabilities

  GetProbabilities(probabilities, fgPrior);
}

//_____________________________________________________________________________
AliPID::EParticleType AliPID::GetMostProbable(const Double_t* prior) const
{
// get the most probable particle id hypothesis
// assuming the a priori probabilities "prior"

  Double_t max = 0.;
  EParticleType id = kPion;
  Int_t nSpecies = ((fCharged) ? kSPECIESC : kSPECIESCN);
  for (Int_t i = 0; i < nSpecies; i++) {
    Double_t prob = fProbDensity[i] * prior[i];
    if (prob > max) {
      max = prob;
      id = EParticleType(i);
    }
  }
  if (max == 0) {
    AliError("Invalid probability densities or priors");
  }
  return id;
}

//_____________________________________________________________________________
AliPID::EParticleType AliPID::GetMostProbable() const
{
// get the most probable particle id hypothesis
// assuming the globaly set a priori probabilities

  return GetMostProbable(fgPrior);
}


//_____________________________________________________________________________
void AliPID::SetPriors(const Double_t* prior, Bool_t charged)
{
// use the given priors as global a priori probabilities

  Double_t sum = 0;
  for (Int_t i = 0; i < kSPECIESCN; i++) {
    if (charged && (i >= kSPECIESC)) {
      fgPrior[i] = 0;      
    } else {
      if (prior[i] < 0) {
	AliWarningClass(Form("negative prior (%g) for %ss. "
			     "Using 0 instead.", prior[i], 
			     fgkParticleName[i]));
	fgPrior[i] = 0;
      } else {
	fgPrior[i] = prior[i];
      }
    }
    sum += prior[i];
  }
  if (sum == 0) {
    AliWarningClass("all priors are zero.");
  }
}

//_____________________________________________________________________________
void AliPID::SetPrior(EParticleType iType, Double_t prior)
{
// use the given prior as global a priori probability for particles
// of type "iType"

  if (prior < 0) {
    AliWarningClass(Form("negative prior (%g) for %ss. Using 0 instead.", 
			 prior, fgkParticleName[iType]));
    prior = 0;
  }
  fgPrior[iType] = prior;
}


//_____________________________________________________________________________
AliPID& AliPID::operator *= (const AliPID& pid)
{
// combine this probability densities with the one of "pid"

  for (Int_t i = 0; i < kSPECIESCN; i++) {
    fProbDensity[i] *= pid.fProbDensity[i];
  }
  return *this;
}

//_____________________________________________________________________________
AliPID operator * (const AliPID& pid1, const AliPID& pid2)
{
// combine the two probability densities

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