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

//-----------------------------------------------------------------//
//                                                                 //
//           Implementation of the TOF PID class                   //
//      Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch         //
//                                                                 //
//-----------------------------------------------------------------//

#include "TMath.h"
#include "AliLog.h"
#include "TF1.h"
#include "TH1F.h"
#include "TH1D.h"
#include "TFile.h"
#include "TRandom.h"

#include "AliTOFPIDResponse.h"

ClassImp(AliTOFPIDResponse)

TF1 *AliTOFPIDResponse::fTOFtailResponse = NULL; // function to generate a TOF tail
TH1F *AliTOFPIDResponse::fHmismTOF = NULL; // TOF mismatch distribution
TH1D *AliTOFPIDResponse::fHchannelTOFdistr=NULL;  // TOF channel distance distribution

//_________________________________________________________________________
AliTOFPIDResponse::AliTOFPIDResponse(): 
  fSigma(0),
  fPmax(0),         // zero at 0.5 GeV/c for pp
  fTime0(0)
{
  fPar[0] = 0.008;
  fPar[1] = 0.008;
  fPar[2] = 0.002;
  fPar[3] = 40.0;

  if(!fTOFtailResponse){
    fTOFtailResponse = new TF1("fTOFtail","[0]*TMath::Exp(-(x-[1])*(x-[1])/2/[2]/[2])* (x < [1]+[3]*[2]) + (x > [1]+[3]*[2])*[0]*TMath::Exp(-(x-[1]-[3]*[2]*0.5)*[3]/[2] * 0.0111)*0.018",-1000,1000);
    fTOFtailResponse->SetParameter(0,1);
    fTOFtailResponse->SetParameter(1,-26);
    fTOFtailResponse->SetParameter(2,1);
    fTOFtailResponse->SetParameter(3,0.89);
    fTOFtailResponse->SetNpx(10000);
  }
    

  // Reset T0 info
  ResetT0info();
  SetMomBoundary();
}
//_________________________________________________________________________
AliTOFPIDResponse::AliTOFPIDResponse(Double_t *param):
  fSigma(param[0]),
  fPmax(0),          // zero at 0.5 GeV/c for pp
  fTime0(0)
{
  //
  //  The main constructor
  //
  //

  //fPmax=TMath::Exp(-0.5*3*3)/fSigma; // ~3 sigma at 0.5 GeV/c for PbPb 

  fPar[0] = 0.008;
  fPar[1] = 0.008;
  fPar[2] = 0.002;
  fPar[3] = 40.0;

  if(!fTOFtailResponse){
    fTOFtailResponse = new TF1("fTOFtail","[0]*TMath::Exp(-(x-[1])*(x-[1])/2/[2]/[2])* (x < [1]+[3]*[2]) + (x > [1]+[3]*[2])*[0]*TMath::Exp(-(x-[1]-[3]*[2]*0.5)*[3]/[2] * 0.0111)*0.018",-1000,1000);
    fTOFtailResponse->SetParameter(0,1);
    fTOFtailResponse->SetParameter(1,-26);
    fTOFtailResponse->SetParameter(2,1);
    fTOFtailResponse->SetParameter(3,0.89);
    fTOFtailResponse->SetNpx(10000);
  }

  // Reset T0 info
  ResetT0info();
  SetMomBoundary();
}
//_________________________________________________________________________
void AliTOFPIDResponse::SetTOFtail(Float_t tail){
  if(!fTOFtailResponse){
    fTOFtailResponse = new TF1("fTOFtail","[0]*TMath::Exp(-(x-[1])*(x-[1])/2/[2]/[2])* (x < [1]+[3]*[2]) + (x > [1]+[3]*[2])*[0]*TMath::Exp(-(x-[1]-[3]*[2]*0.5)*[3]/[2] * 0.0111)*0.018",-1000,1000);
    fTOFtailResponse->SetParameter(0,1);
    fTOFtailResponse->SetParameter(1,-26);
    fTOFtailResponse->SetParameter(2,1);
    fTOFtailResponse->SetParameter(3,tail);
    fTOFtailResponse->SetNpx(10000);
  }
  else{
    fTOFtailResponse->SetParameter(3,tail);
  }
}
void AliTOFPIDResponse::SetTOFtailAllPara(Float_t mean,Float_t tail){
  if(!fTOFtailResponse){
    fTOFtailResponse = new TF1("fTOFtail","[0]*TMath::Exp(-(x-[1])*(x-[1])/2/[2]/[2])* (x < [1]+[3]*[2]) + (x > [1]+[3]*[2])*[0]*TMath::Exp(-(x-[1]-[3]*[2]*0.5)*[3]/[2] * 0.0111)*0.018",-1000,1000);
    fTOFtailResponse->SetParameter(0,1);
    fTOFtailResponse->SetParameter(1,mean);
    fTOFtailResponse->SetParameter(2,1);
    fTOFtailResponse->SetParameter(3,tail);
    fTOFtailResponse->SetNpx(10000);
  }
  else{
    fTOFtailResponse->SetParameter(1,mean);
    fTOFtailResponse->SetParameter(3,tail);
  }  
}

//_________________________________________________________________________
Double_t 
AliTOFPIDResponse::GetMismatchProbability(Double_t time,Double_t eta) const {
  if(!fHmismTOF){
    TFile *fmism = new TFile("$ALICE_ROOT/TOF/data/TOFmismatchDistr.root");
    if(fmism) fHmismTOF = (TH1F *) fmism->Get("TOFmismDistr");
    if(!fHmismTOF){
      printf("I cannot retrive TOF mismatch histos... skipped!");
      return 1E-4;
    }
    fHmismTOF->Scale(TMath::Sqrt(2*TMath::Pi())/(fHmismTOF->Integral(1,fHmismTOF->GetNbinsX()) * fHmismTOF->GetBinWidth(1)));

    TFile *fchDist = new TFile("$ALICE_ROOT/TOF/data/TOFchannelDist.root");
    if(fchDist) fHchannelTOFdistr = (TH1D *) fchDist->Get("hTOFchanDist"); 
    if(!fHchannelTOFdistr){
      printf("I cannot retrive TOF channel distance distribution... skipped!");
      return 1E-4;
    }
  }

  Float_t etaAbs = TMath::Abs(eta);
  Int_t channel = Int_t(4334.09 - 4758.36 * etaAbs -1989.71 * etaAbs*etaAbs + 1957.62*etaAbs*etaAbs*etaAbs);
  if(channel < 1 || etaAbs > 1) channel = 1; 
  Float_t distIP = fHchannelTOFdistr->GetBinContent(channel);
	   
  Double_t mismWeight = fHmismTOF->Interpolate(time - distIP*3.35655419905265973e+01);

  return mismWeight;
}
//_________________________________________________________________________
Double_t AliTOFPIDResponse::GetExpectedSigma(Float_t mom, Float_t time, Float_t mass) const {
  //
  // Return the expected sigma of the PID signal for the specified
  // particle mass/Z.
  // If the operation is not possible, return a negative value.
  //

  Double_t dpp=fPar[0] + fPar[1]*mom + fPar[2]*mass/mom;      //mean relative pt resolution;

 
  Double_t sigma = dpp*time/(1.+ mom*mom/(mass*mass));
  
  Int_t index = GetMomBin(mom);

  Double_t t0res = fT0resolution[index];

  return TMath::Sqrt(sigma*sigma + fPar[3]*fPar[3]/mom/mom + fSigma*fSigma + t0res*t0res);

}
//_________________________________________________________________________
Double_t AliTOFPIDResponse::GetExpectedSigma(Float_t mom, Float_t time, AliPID::EParticleType  type) const {
  //
  // Return the expected sigma of the PID signal for the specified
  // particle type.
  // If the operation is not possible, return a negative value.
  //
  
  Double_t mass = AliPID::ParticleMassZ(type);
  Double_t dpp=fPar[0] + fPar[1]*mom + fPar[2]*mass/mom;      //mean relative pt resolution;

 
  Double_t sigma = dpp*time/(1.+ mom*mom/(mass*mass));
  
  Int_t index = GetMomBin(mom);

  Double_t t0res = fT0resolution[index];

  return TMath::Sqrt(sigma*sigma + fPar[3]*fPar[3]/mom/mom + fSigma*fSigma + t0res*t0res);

}
//_________________________________________________________________________
Double_t AliTOFPIDResponse::GetExpectedSignal(const AliVTrack* track,AliPID::EParticleType type) const {
  //
  // Return the expected signal of the PID signal for the particle type
  // If the operation is not possible, return a negative value.
  //
  Double_t expt[AliPID::kSPECIESC];
  track->GetIntegratedTimes(expt,AliPID::kSPECIESC);
  if (type<=AliPID::kProton) return expt[type];
  else {
    if (expt[type]<1.E-1) {
      Double_t p = track->P();
      Double_t massZ = AliPID::ParticleMassZ(type);
      return expt[0]/p*massZ*TMath::Sqrt(1.+p*p/massZ/massZ);
    } else return expt[type];
  }
}
//_________________________________________________________________________
Int_t AliTOFPIDResponse::GetMomBin(Float_t p) const{
  //
  // Returns the momentum bin index
  //

  Int_t i=0;
  while(p > fPCutMin[i] && i < fNmomBins) i++;
  if(i > 0) i--;

  return i;
}
//_________________________________________________________________________
void AliTOFPIDResponse::SetMomBoundary(){
  //
  // Set boundaries for momentum bins
  //

  fPCutMin[0] = 0.3;
  fPCutMin[1] = 0.5;
  fPCutMin[2] = 0.6;
  fPCutMin[3] = 0.7;
  fPCutMin[4] = 0.8;
  fPCutMin[5] = 0.9;
  fPCutMin[6] = 1;
  fPCutMin[7] = 1.2;
  fPCutMin[8] = 1.5;
  fPCutMin[9] = 2;
  fPCutMin[10] = 3;  
}
//_________________________________________________________________________
Float_t AliTOFPIDResponse::GetStartTime(Float_t mom) const {
  //
  // Returns event_time value as estimated by TOF combinatorial algorithm
  //

  Int_t ibin = GetMomBin(mom);
  return GetT0bin(ibin);

}
//_________________________________________________________________________
Float_t AliTOFPIDResponse::GetStartTimeRes(Float_t mom) const {
  //
  // Returns event_time resolution as estimated by TOF combinatorial algorithm
  //

  Int_t ibin = GetMomBin(mom);
  return GetT0binRes(ibin);

}
//_________________________________________________________________________
Int_t AliTOFPIDResponse::GetStartTimeMask(Float_t mom) const {
  //
  // Returns event_time mask
  //

  Int_t ibin = GetMomBin(mom);
  return GetT0binMask(ibin);

}
//_________________________________________________________________________
Double_t AliTOFPIDResponse::GetTailRandomValue(Float_t pt,Float_t eta,Float_t time,Float_t addmism) // generate a random value to add a tail to TOF time (for MC analyses)
{

  // To add mismatch
  Float_t mismAdd = addmism*0.01;
  if(pt>1.0) mismAdd /= pt;

  if(mismAdd > 0.01){ // apply additional mismatch
    if(gRandom->Rndm() < mismAdd){
      return GetMismatchRandomValue(eta)-time;
    }
  }

  if(fTOFtailResponse)
    return fTOFtailResponse->GetRandom();
  else
    return 0.0;
}
//_________________________________________________________________________
Double_t AliTOFPIDResponse::GetMismatchRandomValue(Float_t eta) // generate a random value for mismatched tracks (for MC analyses)
{
  if(!fHmismTOF){
    TFile *fmism = new TFile("$ALICE_ROOT/TOF/data/TOFmismatchDistr.root");
    if(fmism) fHmismTOF = (TH1F *) fmism->Get("TOFmismDistr");
    if(!fHmismTOF){
      printf("I cannot retrive TOF mismatch histos... skipped!");
      return -10000.;
    }
    fHmismTOF->Scale(TMath::Sqrt(2*TMath::Pi())/(fHmismTOF->Integral(1,fHmismTOF->GetNbinsX()) * fHmismTOF->GetBinWidth(1)));

    TFile *fchDist = new TFile("$ALICE_ROOT/TOF/data/TOFchannelDist.root");
    if(fchDist) fHchannelTOFdistr = (TH1D *) fchDist->Get("hTOFchanDist"); 
    if(!fHchannelTOFdistr){
      printf("I cannot retrive TOF channel distance distribution... skipped!");
      return -10000.;
    }
  }

  Float_t etaAbs = TMath::Abs(eta);
  Int_t channel = Int_t(4334.09 - 4758.36 * etaAbs -1989.71 * etaAbs*etaAbs + 1957.62*etaAbs*etaAbs*etaAbs);
  if(channel < 1 || etaAbs > 1) channel = 1; 
  Float_t distIP = fHchannelTOFdistr->GetBinContent(channel);
	   
  return fHmismTOF->GetRandom() + distIP*3.35655419905265973e+01;
}
//_________________________________________________________________________
Int_t AliTOFPIDResponse::GetTOFchannel(AliVParticle *trk) const{
  Float_t etaAbs = TMath::Abs(trk->Eta());
  Int_t channel = Int_t(4334.09 - 4758.36 * etaAbs -1989.71 * etaAbs*etaAbs + 1957.62*etaAbs*etaAbs*etaAbs);
  if(channel < 1 || etaAbs > 1) channel = 1; 
  
  return channel;
}
 AliTOFPIDResponse.cxx:1
 AliTOFPIDResponse.cxx:2
 AliTOFPIDResponse.cxx:3
 AliTOFPIDResponse.cxx:4
 AliTOFPIDResponse.cxx:5
 AliTOFPIDResponse.cxx:6
 AliTOFPIDResponse.cxx:7
 AliTOFPIDResponse.cxx:8
 AliTOFPIDResponse.cxx:9
 AliTOFPIDResponse.cxx:10
 AliTOFPIDResponse.cxx:11
 AliTOFPIDResponse.cxx:12
 AliTOFPIDResponse.cxx:13
 AliTOFPIDResponse.cxx:14
 AliTOFPIDResponse.cxx:15
 AliTOFPIDResponse.cxx:16
 AliTOFPIDResponse.cxx:17
 AliTOFPIDResponse.cxx:18
 AliTOFPIDResponse.cxx:19
 AliTOFPIDResponse.cxx:20
 AliTOFPIDResponse.cxx:21
 AliTOFPIDResponse.cxx:22
 AliTOFPIDResponse.cxx:23
 AliTOFPIDResponse.cxx:24
 AliTOFPIDResponse.cxx:25
 AliTOFPIDResponse.cxx:26
 AliTOFPIDResponse.cxx:27
 AliTOFPIDResponse.cxx:28
 AliTOFPIDResponse.cxx:29
 AliTOFPIDResponse.cxx:30
 AliTOFPIDResponse.cxx:31
 AliTOFPIDResponse.cxx:32
 AliTOFPIDResponse.cxx:33
 AliTOFPIDResponse.cxx:34
 AliTOFPIDResponse.cxx:35
 AliTOFPIDResponse.cxx:36
 AliTOFPIDResponse.cxx:37
 AliTOFPIDResponse.cxx:38
 AliTOFPIDResponse.cxx:39
 AliTOFPIDResponse.cxx:40
 AliTOFPIDResponse.cxx:41
 AliTOFPIDResponse.cxx:42
 AliTOFPIDResponse.cxx:43
 AliTOFPIDResponse.cxx:44
 AliTOFPIDResponse.cxx:45
 AliTOFPIDResponse.cxx:46
 AliTOFPIDResponse.cxx:47
 AliTOFPIDResponse.cxx:48
 AliTOFPIDResponse.cxx:49
 AliTOFPIDResponse.cxx:50
 AliTOFPIDResponse.cxx:51
 AliTOFPIDResponse.cxx:52
 AliTOFPIDResponse.cxx:53
 AliTOFPIDResponse.cxx:54
 AliTOFPIDResponse.cxx:55
 AliTOFPIDResponse.cxx:56
 AliTOFPIDResponse.cxx:57
 AliTOFPIDResponse.cxx:58
 AliTOFPIDResponse.cxx:59
 AliTOFPIDResponse.cxx:60
 AliTOFPIDResponse.cxx:61
 AliTOFPIDResponse.cxx:62
 AliTOFPIDResponse.cxx:63
 AliTOFPIDResponse.cxx:64
 AliTOFPIDResponse.cxx:65
 AliTOFPIDResponse.cxx:66
 AliTOFPIDResponse.cxx:67
 AliTOFPIDResponse.cxx:68
 AliTOFPIDResponse.cxx:69
 AliTOFPIDResponse.cxx:70
 AliTOFPIDResponse.cxx:71
 AliTOFPIDResponse.cxx:72
 AliTOFPIDResponse.cxx:73
 AliTOFPIDResponse.cxx:74
 AliTOFPIDResponse.cxx:75
 AliTOFPIDResponse.cxx:76
 AliTOFPIDResponse.cxx:77
 AliTOFPIDResponse.cxx:78
 AliTOFPIDResponse.cxx:79
 AliTOFPIDResponse.cxx:80
 AliTOFPIDResponse.cxx:81
 AliTOFPIDResponse.cxx:82
 AliTOFPIDResponse.cxx:83
 AliTOFPIDResponse.cxx:84
 AliTOFPIDResponse.cxx:85
 AliTOFPIDResponse.cxx:86
 AliTOFPIDResponse.cxx:87
 AliTOFPIDResponse.cxx:88
 AliTOFPIDResponse.cxx:89
 AliTOFPIDResponse.cxx:90
 AliTOFPIDResponse.cxx:91
 AliTOFPIDResponse.cxx:92
 AliTOFPIDResponse.cxx:93
 AliTOFPIDResponse.cxx:94
 AliTOFPIDResponse.cxx:95
 AliTOFPIDResponse.cxx:96
 AliTOFPIDResponse.cxx:97
 AliTOFPIDResponse.cxx:98
 AliTOFPIDResponse.cxx:99
 AliTOFPIDResponse.cxx:100
 AliTOFPIDResponse.cxx:101
 AliTOFPIDResponse.cxx:102
 AliTOFPIDResponse.cxx:103
 AliTOFPIDResponse.cxx:104
 AliTOFPIDResponse.cxx:105
 AliTOFPIDResponse.cxx:106
 AliTOFPIDResponse.cxx:107
 AliTOFPIDResponse.cxx:108
 AliTOFPIDResponse.cxx:109
 AliTOFPIDResponse.cxx:110
 AliTOFPIDResponse.cxx:111
 AliTOFPIDResponse.cxx:112
 AliTOFPIDResponse.cxx:113
 AliTOFPIDResponse.cxx:114
 AliTOFPIDResponse.cxx:115
 AliTOFPIDResponse.cxx:116
 AliTOFPIDResponse.cxx:117
 AliTOFPIDResponse.cxx:118
 AliTOFPIDResponse.cxx:119
 AliTOFPIDResponse.cxx:120
 AliTOFPIDResponse.cxx:121
 AliTOFPIDResponse.cxx:122
 AliTOFPIDResponse.cxx:123
 AliTOFPIDResponse.cxx:124
 AliTOFPIDResponse.cxx:125
 AliTOFPIDResponse.cxx:126
 AliTOFPIDResponse.cxx:127
 AliTOFPIDResponse.cxx:128
 AliTOFPIDResponse.cxx:129
 AliTOFPIDResponse.cxx:130
 AliTOFPIDResponse.cxx:131
 AliTOFPIDResponse.cxx:132
 AliTOFPIDResponse.cxx:133
 AliTOFPIDResponse.cxx:134
 AliTOFPIDResponse.cxx:135
 AliTOFPIDResponse.cxx:136
 AliTOFPIDResponse.cxx:137
 AliTOFPIDResponse.cxx:138
 AliTOFPIDResponse.cxx:139
 AliTOFPIDResponse.cxx:140
 AliTOFPIDResponse.cxx:141
 AliTOFPIDResponse.cxx:142
 AliTOFPIDResponse.cxx:143
 AliTOFPIDResponse.cxx:144
 AliTOFPIDResponse.cxx:145
 AliTOFPIDResponse.cxx:146
 AliTOFPIDResponse.cxx:147
 AliTOFPIDResponse.cxx:148
 AliTOFPIDResponse.cxx:149
 AliTOFPIDResponse.cxx:150
 AliTOFPIDResponse.cxx:151
 AliTOFPIDResponse.cxx:152
 AliTOFPIDResponse.cxx:153
 AliTOFPIDResponse.cxx:154
 AliTOFPIDResponse.cxx:155
 AliTOFPIDResponse.cxx:156
 AliTOFPIDResponse.cxx:157
 AliTOFPIDResponse.cxx:158
 AliTOFPIDResponse.cxx:159
 AliTOFPIDResponse.cxx:160
 AliTOFPIDResponse.cxx:161
 AliTOFPIDResponse.cxx:162
 AliTOFPIDResponse.cxx:163
 AliTOFPIDResponse.cxx:164
 AliTOFPIDResponse.cxx:165
 AliTOFPIDResponse.cxx:166
 AliTOFPIDResponse.cxx:167
 AliTOFPIDResponse.cxx:168
 AliTOFPIDResponse.cxx:169
 AliTOFPIDResponse.cxx:170
 AliTOFPIDResponse.cxx:171
 AliTOFPIDResponse.cxx:172
 AliTOFPIDResponse.cxx:173
 AliTOFPIDResponse.cxx:174
 AliTOFPIDResponse.cxx:175
 AliTOFPIDResponse.cxx:176
 AliTOFPIDResponse.cxx:177
 AliTOFPIDResponse.cxx:178
 AliTOFPIDResponse.cxx:179
 AliTOFPIDResponse.cxx:180
 AliTOFPIDResponse.cxx:181
 AliTOFPIDResponse.cxx:182
 AliTOFPIDResponse.cxx:183
 AliTOFPIDResponse.cxx:184
 AliTOFPIDResponse.cxx:185
 AliTOFPIDResponse.cxx:186
 AliTOFPIDResponse.cxx:187
 AliTOFPIDResponse.cxx:188
 AliTOFPIDResponse.cxx:189
 AliTOFPIDResponse.cxx:190
 AliTOFPIDResponse.cxx:191
 AliTOFPIDResponse.cxx:192
 AliTOFPIDResponse.cxx:193
 AliTOFPIDResponse.cxx:194
 AliTOFPIDResponse.cxx:195
 AliTOFPIDResponse.cxx:196
 AliTOFPIDResponse.cxx:197
 AliTOFPIDResponse.cxx:198
 AliTOFPIDResponse.cxx:199
 AliTOFPIDResponse.cxx:200
 AliTOFPIDResponse.cxx:201
 AliTOFPIDResponse.cxx:202
 AliTOFPIDResponse.cxx:203
 AliTOFPIDResponse.cxx:204
 AliTOFPIDResponse.cxx:205
 AliTOFPIDResponse.cxx:206
 AliTOFPIDResponse.cxx:207
 AliTOFPIDResponse.cxx:208
 AliTOFPIDResponse.cxx:209
 AliTOFPIDResponse.cxx:210
 AliTOFPIDResponse.cxx:211
 AliTOFPIDResponse.cxx:212
 AliTOFPIDResponse.cxx:213
 AliTOFPIDResponse.cxx:214
 AliTOFPIDResponse.cxx:215
 AliTOFPIDResponse.cxx:216
 AliTOFPIDResponse.cxx:217
 AliTOFPIDResponse.cxx:218
 AliTOFPIDResponse.cxx:219
 AliTOFPIDResponse.cxx:220
 AliTOFPIDResponse.cxx:221
 AliTOFPIDResponse.cxx:222
 AliTOFPIDResponse.cxx:223
 AliTOFPIDResponse.cxx:224
 AliTOFPIDResponse.cxx:225
 AliTOFPIDResponse.cxx:226
 AliTOFPIDResponse.cxx:227
 AliTOFPIDResponse.cxx:228
 AliTOFPIDResponse.cxx:229
 AliTOFPIDResponse.cxx:230
 AliTOFPIDResponse.cxx:231
 AliTOFPIDResponse.cxx:232
 AliTOFPIDResponse.cxx:233
 AliTOFPIDResponse.cxx:234
 AliTOFPIDResponse.cxx:235
 AliTOFPIDResponse.cxx:236
 AliTOFPIDResponse.cxx:237
 AliTOFPIDResponse.cxx:238
 AliTOFPIDResponse.cxx:239
 AliTOFPIDResponse.cxx:240
 AliTOFPIDResponse.cxx:241
 AliTOFPIDResponse.cxx:242
 AliTOFPIDResponse.cxx:243
 AliTOFPIDResponse.cxx:244
 AliTOFPIDResponse.cxx:245
 AliTOFPIDResponse.cxx:246
 AliTOFPIDResponse.cxx:247
 AliTOFPIDResponse.cxx:248
 AliTOFPIDResponse.cxx:249
 AliTOFPIDResponse.cxx:250
 AliTOFPIDResponse.cxx:251
 AliTOFPIDResponse.cxx:252
 AliTOFPIDResponse.cxx:253
 AliTOFPIDResponse.cxx:254
 AliTOFPIDResponse.cxx:255
 AliTOFPIDResponse.cxx:256
 AliTOFPIDResponse.cxx:257
 AliTOFPIDResponse.cxx:258
 AliTOFPIDResponse.cxx:259
 AliTOFPIDResponse.cxx:260
 AliTOFPIDResponse.cxx:261
 AliTOFPIDResponse.cxx:262
 AliTOFPIDResponse.cxx:263
 AliTOFPIDResponse.cxx:264
 AliTOFPIDResponse.cxx:265
 AliTOFPIDResponse.cxx:266
 AliTOFPIDResponse.cxx:267
 AliTOFPIDResponse.cxx:268
 AliTOFPIDResponse.cxx:269
 AliTOFPIDResponse.cxx:270
 AliTOFPIDResponse.cxx:271
 AliTOFPIDResponse.cxx:272
 AliTOFPIDResponse.cxx:273
 AliTOFPIDResponse.cxx:274
 AliTOFPIDResponse.cxx:275
 AliTOFPIDResponse.cxx:276
 AliTOFPIDResponse.cxx:277
 AliTOFPIDResponse.cxx:278
 AliTOFPIDResponse.cxx:279
 AliTOFPIDResponse.cxx:280
 AliTOFPIDResponse.cxx:281
 AliTOFPIDResponse.cxx:282
 AliTOFPIDResponse.cxx:283
 AliTOFPIDResponse.cxx:284
 AliTOFPIDResponse.cxx:285
 AliTOFPIDResponse.cxx:286
 AliTOFPIDResponse.cxx:287
 AliTOFPIDResponse.cxx:288
 AliTOFPIDResponse.cxx:289
 AliTOFPIDResponse.cxx:290
 AliTOFPIDResponse.cxx:291
 AliTOFPIDResponse.cxx:292
 AliTOFPIDResponse.cxx:293
 AliTOFPIDResponse.cxx:294
 AliTOFPIDResponse.cxx:295
 AliTOFPIDResponse.cxx:296
 AliTOFPIDResponse.cxx:297
 AliTOFPIDResponse.cxx:298
 AliTOFPIDResponse.cxx:299
 AliTOFPIDResponse.cxx:300
 AliTOFPIDResponse.cxx:301
 AliTOFPIDResponse.cxx:302
 AliTOFPIDResponse.cxx:303
 AliTOFPIDResponse.cxx:304
 AliTOFPIDResponse.cxx:305
 AliTOFPIDResponse.cxx:306
 AliTOFPIDResponse.cxx:307
 AliTOFPIDResponse.cxx:308
 AliTOFPIDResponse.cxx:309
 AliTOFPIDResponse.cxx:310
 AliTOFPIDResponse.cxx:311
 AliTOFPIDResponse.cxx:312
 AliTOFPIDResponse.cxx:313
 AliTOFPIDResponse.cxx:314
 AliTOFPIDResponse.cxx:315
 AliTOFPIDResponse.cxx:316
 AliTOFPIDResponse.cxx:317
 AliTOFPIDResponse.cxx:318
 AliTOFPIDResponse.cxx:319
 AliTOFPIDResponse.cxx:320
 AliTOFPIDResponse.cxx:321
 AliTOFPIDResponse.cxx:322
 AliTOFPIDResponse.cxx:323
 AliTOFPIDResponse.cxx:324