#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;
TH1F *AliTOFPIDResponse::fHmismTOF = NULL;
TH1D *AliTOFPIDResponse::fHchannelTOFdistr=NULL;
AliTOFPIDResponse::AliTOFPIDResponse():
fSigma(0),
fPmax(0),
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);
}
ResetT0info();
SetMomBoundary();
}
AliTOFPIDResponse::AliTOFPIDResponse(Double_t *param):
fSigma(param[0]),
fPmax(0),
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);
}
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 {
Double_t dpp=fPar[0] + fPar[1]*mom + fPar[2]*mass/mom;
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 {
Double_t mass = AliPID::ParticleMassZ(type);
Double_t dpp=fPar[0] + fPar[1]*mom + fPar[2]*mass/mom;
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 {
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{
Int_t i=0;
while(p > fPCutMin[i] && i < fNmomBins) i++;
if(i > 0) i--;
return i;
}
void AliTOFPIDResponse::SetMomBoundary(){
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 {
Int_t ibin = GetMomBin(mom);
return GetT0bin(ibin);
}
Float_t AliTOFPIDResponse::GetStartTimeRes(Float_t mom) const {
Int_t ibin = GetMomBin(mom);
return GetT0binRes(ibin);
}
Int_t AliTOFPIDResponse::GetStartTimeMask(Float_t mom) const {
Int_t ibin = GetMomBin(mom);
return GetT0binMask(ibin);
}
Double_t AliTOFPIDResponse::GetTailRandomValue(Float_t pt,Float_t eta,Float_t time,Float_t addmism)
{
Float_t mismAdd = addmism*0.01;
if(pt>1.0) mismAdd /= pt;
if(mismAdd > 0.01){
if(gRandom->Rndm() < mismAdd){
return GetMismatchRandomValue(eta)-time;
}
}
if(fTOFtailResponse)
return fTOFtailResponse->GetRandom();
else
return 0.0;
}
Double_t AliTOFPIDResponse::GetMismatchRandomValue(Float_t eta)
{
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: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