31 #include "AliAODPid.h"
33 #include "AliPIDResponse.h"
34 #include "AliAODpidUtil.h"
35 #include "AliESDtrack.h"
47 fCutTOFmismatch(0.01),
48 fMinNClustersTPCPID(0),
59 fForceTOFforKaons(kFALSE),
65 fLownSigmaCompatTOF(-3.),
66 fUpnSigmaCompatTOF(3.),
76 fPtThresholdTPC(999999.),
77 fMaxTrackMomForCombinedPID(999999.),
79 fPidCombined(new AliPIDCombined()),
80 fTPCResponse(new AliTPCPIDResponse()),
82 fCombDetectors(kTPCTOF),
106 for(Int_t i=0; i<3; i++){
113 for (Int_t s=0;s<AliPID::kSPECIES;s++) {
114 for (Int_t d=0;d<4;d++) {
134 for (Int_t ispecies=0;ispecies<AliPID::kSPECIES;++ispecies) {
138 for (Int_t s=0;s<AliPID::kSPECIES;s++) {
139 for (Int_t d=0;d<4;d++) {
150 fnNSigma(pid.fnNSigma),
152 fTOFSigma(pid.fTOFSigma),
153 fCutTOFmismatch(pid.fCutTOFmismatch),
154 fMinNClustersTPCPID(pid.fMinNClustersTPCPID),
155 fnPriors(pid.fnPriors),
157 fnPLimit(pid.fnPLimit),
165 fForceTOFforKaons(pid.fForceTOFforKaons),
166 fCompat(pid.fCompat),
167 fPCompatTOF(pid.fPCompatTOF),
168 fUseAsymTOF(pid.fUseAsymTOF),
169 fLownSigmaTOF(pid.fLownSigmaTOF),
170 fUpnSigmaTOF(pid.fUpnSigmaTOF),
171 fLownSigmaCompatTOF(pid.fLownSigmaCompatTOF),
172 fUpnSigmaCompatTOF(pid.fUpnSigmaCompatTOF),
173 fnNSigmaCompat(pid.fnNSigmaCompat),
176 fOnePad(pid.fOnePad),
177 fMCLowEn2011(pid.fMCLowEn2011),
178 fppLowEn2011(pid.fppLowEn2011),
180 fTOFdecide(pid.fTOFdecide),
181 fOldPid(pid.fOldPid),
182 fPtThresholdTPC(pid.fPtThresholdTPC),
183 fMaxTrackMomForCombinedPID(pid.fMaxTrackMomForCombinedPID),
187 fCombDetectors(pid.fCombDetectors),
188 fUseCombined(pid.fUseCombined),
189 fDefaultPriors(pid.fDefaultPriors)
208 for(Int_t i=0;i<AliPID::kSPECIES;i++){
211 for(Int_t i=0; i<3; i++){
227 for (Int_t s=0;s<AliPID::kSPECIES;s++) {
228 for (Int_t d=0;d<4;d++) {
257 if(specie==3)
return kTRUE;
270 if(specie==2)
return kTRUE;
282 if(specie==4)
return kTRUE;
295 if(specie==0)
return kTRUE;
307 Double_t nsigmaMin=999.;
308 for(Int_t ipart=0;ipart<5;ipart++){
310 nsigma=TMath::Abs(nsigma);
311 if((nsigma<nsigmaMin) && (nsigma<
fnSigma[0])) {
319 nsigma=TMath::Abs(nsigma);
335 Double_t nsigmaMin=999.;
336 for(Int_t ipart=0;ipart<5;ipart++){
338 nsigma=TMath::Abs(nsigma);
339 if((nsigma<nsigmaMin) && (nsigma<
fnSigma[4])) {
347 nsigma=TMath::Abs(nsigma);
363 Double_t nsigmaMin=999.;
364 for(Int_t ipart=0;ipart<5;ipart++){
366 nsigma=TMath::Abs(nsigma);
367 if((nsigma<nsigmaMin)&& (nsigma<
fnSigma[3])){
374 Double_t nSigmaMin,nSigmaMax;
383 if(nsigma<nSigmaMin || nsigma>nSigmaMax) pid=-1;
393 if(specie<0)
return -1;
397 Double_t nSigmaMin,nSigmaMax;
406 if(nsigma<nSigmaMin || nsigma>nSigmaMax) pid=-1;
415 const Double_t *pid=track->PID();
418 for (Int_t i=0; i<10; i++) {
419 if (pid[i]>max) {k=i; max=pid[i];}
422 if(k==2) type[0]=kTRUE;
423 if(k==3) type[1]=kTRUE;
424 if(k==4) type[2]=kTRUE;
431 AliPIDResponse::EDetPidStatus status =
fPidResponse->CheckPIDStatus(AliPIDResponse::kITS,track);
432 if (status != AliPIDResponse::kDetPidOk)
return kFALSE;
438 AliPIDResponse::EDetPidStatus status =
fPidResponse->CheckPIDStatus(AliPIDResponse::kTPC,track);
439 if (status != AliPIDResponse::kDetPidOk)
return kFALSE;
440 UInt_t nclsTPCPID = track->GetTPCsignalN();
447 AliPIDResponse::EDetPidStatus status =
fPidResponse->CheckPIDStatus(AliPIDResponse::kTOF,track);
448 if (status != AliPIDResponse::kDetPidOk)
return kFALSE;
449 Float_t probMis =
fPidResponse->GetTOFMismatchProbability(track);
451 if ((track->GetStatus()&AliESDtrack::kTOFpid )==0 &&
452 track->GetStatus()&AliESDtrack::kITSrefit )
return kFALSE;
458 AliPIDResponse::EDetPidStatus status =
fPidResponse->CheckPIDStatus(AliPIDResponse::kTRD,track);
459 if (status != AliPIDResponse::kDetPidOk)
return kFALSE;
470 AliError(
"Wrong detector name");
478 AliAODPid *pidObj = track->GetDetPid();
479 Double_t mom = pidObj->GetTPCmomentum();
484 nsigma=TMath::Abs(nsigma);
497 Double_t ptrack=track->P();
511 if(!okTPC && !okTOF)
return 0;
532 if(!okTOF &&
fTPC)
return tTPCinfo;
544 if(!okTOF)
return tTPCinfo;
548 if(tTPCinfo+tTOFinfo==0 &&
fITS){
554 return tTPCinfo+tTOFinfo;
573 if(
fTPC && !okTOF)
return tTPCinfo;
577 if(tTOFinfo==1 && tTPCinfo==1)
return 1;
579 if(tTPCinfo+tTOFinfo==0 &&
fITS){
591 if(
fTPC &&
fTOF)
if(!okTPC && !okTOF)
return 0;
627 Double_t nSigmaTPC=0.;
629 nSigmaTPC=
fPidResponse->NumberOfSigmasTPC(track,(AliPID::EParticleType)specie);
630 if(nSigmaTPC<-990.) nSigmaTPC=0.;
632 Double_t nSigmaTOF=0.;
634 nSigmaTOF=
fPidResponse->NumberOfSigmasTOF(track,(AliPID::EParticleType)specie);
636 Int_t iPart=specie-2;
637 if(iPart<0 || iPart>2)
return -1;
639 Double_t nSigma2=nSigmaTPC*nSigmaTPC+nSigmaTOF*nSigmaTOF;
653 if (
fTPC &&
fTOF && !okTPC && !okTOF) {
659 tTPCinfo =
CheckBands((AliPID::EParticleType) specie, AliPIDResponse::kTPC, track);
664 if (!okTOF &&
fTPC) {
667 tTOFinfo =
CheckBands((AliPID::EParticleType) specie, AliPIDResponse::kTOF, track);
678 if (tTPCinfo+tTOFinfo == 0 &&
fITS) {
680 return tTPCinfo+tTOFinfo;
682 Int_t tITSinfo =
CheckBands((AliPID::EParticleType) specie, AliPIDResponse::kITS, track);
685 return tTPCinfo+tTOFinfo;
700 if(!okTPC && !okTOF)
return 0;
704 Double_t nsigmaTPC[5]={999.,999.,999.,999.,999.};
705 Double_t nsigmaTOF[5]={999.,999.,999.,999.,999.};
706 Double_t nsigmaMin=999.;
707 Double_t
nsigma[5]={999.,999.,999.,999.,999.};
710 for(Int_t ipart=0;ipart<5;ipart++){
711 if(
GetnSigmaTPC(track,ipart,nsigmaTPC[ipart])<1) nsigmaTPC[ipart]=0.;
714 for(Int_t ipart=0;ipart<5;ipart++){nsigmaTPC[ipart]=0.;}
718 for(Int_t ipart=0;ipart<5;ipart++){
719 if(
GetnSigmaTOF(track,ipart,nsigmaTOF[ipart])<1) nsigmaTOF[ipart]=0.;
722 for(Int_t ipart=0;ipart<5;ipart++){nsigmaTOF[ipart]=0.;}
725 for(Int_t ipart=0;ipart<5;ipart++){
726 nsigma[ipart]=TMath::Sqrt(nsigmaTPC[ipart]*nsigmaTPC[ipart]+nsigmaTOF[ipart]*nsigmaTOF[ipart]);
727 if(nsigma[ipart]<nsigmaMin) {nsigmaMin=nsigma[ipart];pid=ipart;}
730 if(pid==specie)
return 1;
746 if(tTPCres==specie)
return 1;
755 if(tTOFres==specie)
return 1;
759 if(tITSres==specie)
return 1;
762 AliError(
"You should enable just one detector if you don't want to match");
774 alephParameters[0] = 1.44405/50.;
775 alephParameters[1] = 2.35409e+01;
776 alephParameters[2] = TMath::Exp(-2.90330e+01);
777 alephParameters[3] = 2.10681e+00;
778 alephParameters[4] = 4.62254e+00;
782 alephParameters[0]=0.0207667;
783 alephParameters[1]=29.9936;
784 alephParameters[2]=3.87866e-11;
785 alephParameters[3]=2.17291;
786 alephParameters[4]=7.1623;
788 alephParameters[0]=0.029021;
789 alephParameters[1]=25.4181;
790 alephParameters[2]=4.66596e-08;
791 alephParameters[3]=1.90008;
792 alephParameters[4]=4.63783;
794 alephParameters[0] = 2.15898/50.;
795 alephParameters[1] = 1.75295e+01;
796 alephParameters[2] = 3.40030e-09;
797 alephParameters[3] = 1.96178e+00;
798 alephParameters[4] = 3.91720e+00;
806 alephParameters[0] =1.34490e+00/50.;
807 alephParameters[1] = 2.69455e+01;
808 alephParameters[2] = TMath::Exp(-2.97552e+01);
809 alephParameters[3] = 2.35339e+00;
810 alephParameters[4] = 5.98079e+00;
820 alephParameters[0] = 5.10207e+00/50.;
821 alephParameters[1] = 7.94982e+00;
822 alephParameters[2] = TMath::Exp(-9.07942e+00);
823 alephParameters[3] = 2.38808e+00;
824 alephParameters[4] = 1.68165e+00;
828 alephParameters[0]=0.031642;
829 alephParameters[1]=22.353;
830 alephParameters[2]=4.16239e-12;
831 alephParameters[3]=2.61952;
832 alephParameters[4]=5.76086;
836 alephParameters[0] = 0.0283086/0.97;
837 alephParameters[1] = 2.63394e+01;
838 alephParameters[2] = 5.04114e-11;
839 alephParameters[3] = 2.12543e+00;
840 alephParameters[4] = 4.88663e+00;
852 Double_t alephParameters[5];
854 fTPCResponse->SetBetheBlochParameters(alephParameters[0],alephParameters[1],alephParameters[2],alephParameters[3],alephParameters[4]);
867 Double_t nsigmaITS=-999;
870 Double_t mom=track->P();
871 AliAODPid *pidObj = track->GetDetPid();
872 Double_t dedx=pidObj->GetITSsignal();
874 AliITSPIDResponse itsResponse;
875 AliPID::EParticleType type=AliPID::EParticleType(species);
876 nsigmaITS = itsResponse.GetNumberOfSigmas(mom,dedx,type);
881 AliPID::EParticleType type=AliPID::EParticleType(species);
882 nsigmaITS =
fPidResponse->NumberOfSigmasITS(track,type);
897 Double_t nsigmaTPC=-999;
900 AliAODPid *pidObj = track->GetDetPid();
901 Double_t dedx=pidObj->GetTPCsignal();
902 Double_t mom = pidObj->GetTPCmomentum();
904 UShort_t nTPCClus=pidObj->GetTPCsignalN();
905 if(nTPCClus==0) {nTPCClus=track->GetTPCNcls();}
906 AliPID::EParticleType type=AliPID::EParticleType(species);
907 nsigmaTPC =
fTPCResponse->GetNumberOfSigmas(mom,dedx,nTPCClus,type);
911 AliPID::EParticleType type=AliPID::EParticleType(species);
912 nsigmaTPC =
fPidResponse->NumberOfSigmasTPC(track,type);
926 nsigma =
fPidResponse->NumberOfSigmasTOF(track,(AliPID::EParticleType)species);
929 AliFatal(
"To use TOF PID you need to attach AliPIDResponseTask");
939 if (detectors.Contains(
"ITS")) {
941 AliInfo(
"Nothing to be done");
950 }
else if (detectors.Contains(
"TPC")) {
954 if(nsigma>nsigmaCut)
return kTRUE;
958 }
else if (detectors.Contains(
"TOF")) {
962 if(nsigma>nsigmaCut)
return kTRUE;
978 if(nsigma>nsigmaK)
return kTRUE;
1032 fPriors =
new Double_t[npriors];
1043 fPLimit =
new Double_t[npLim];
1052 for (Int_t ispecies=0;ispecies<AliPID::kSPECIES;++ispecies) {
1056 nt+=AliPID::ParticleName(ispecies);
1058 TDirectory *current = gDirectory;
1059 TFile *priorFile=TFile::Open(priorFileName);
1061 TH1F* h3=
static_cast<TH1F*
>(priorFile->Get(
"priors3step9"));
1062 TH1F* h2=
static_cast<TH1F*
>(priorFile->Get(
"priors2step9"));
1063 TH1F* h1=
static_cast<TH1F*
>(priorFile->Get(
"priors1step9"));
1065 fPriorsH[AliPID::kProton] =
new TH1F(*h3);
1066 fPriorsH[AliPID::kKaon ] =
new TH1F(*h2);
1067 fPriorsH[AliPID::kPion ] =
new TH1F(*h1);
1070 TF1 *salt=
new TF1(
"salt",
"1.e-10",0,10);
1071 fPriorsH[AliPID::kProton]->Add(salt);
1072 fPriorsH[AliPID::kKaon ]->Add(salt);
1073 fPriorsH[AliPID::kPion ]->Add(salt);
1083 for (Int_t ispecies=0;ispecies<AliPID::kSPECIES;++ispecies) {
1084 fPidCombined->SetPriorDistribution(static_cast<AliPID::EParticleType>(ispecies),
fPriorsH[ispecies]);
1091 fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF);
1094 fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetITS);
1097 fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC);
1100 fPidCombined->SetDetectorMask(AliPIDResponse::kDetTOF);
1109 printf(
"Detectors used for PID: ");
1110 if(
fITS) printf(
"ITS ");
1111 if(
fTPC) printf(
"TPC ");
1112 if(
fTRD) printf(
"TRD ");
1113 if(
fTOF) printf(
"TOF ");
1120 printf(
"Use OLD PID");
1121 printf(
" fMC = %d\n",
fMC);
1122 printf(
" fPbPb = %d\n",
fPbPb);
1123 printf(
" fOnePad = %d\n",
fOnePad);
1127 printf(
"--- Matching algorithm = %d ---\n",
fMatch);
1131 printf(
"nSigmaTOF = %.2f\n",
fnSigma[3]);
1136 printf(
"nSigmaTPC:\n");
1141 printf(
"nSigmaTPC = %.2f\n",
fnSigma[0]);
1146 printf(
"Cuts on sqrt(nSigmaTPC^2+nSigmaTOF^2):\n");
1151 printf(
"nSigma ranges:\n");
1152 printf(
" Pions: %.2f<nSigmaTPC<%.2f %.2f<nSigmaTOF<%.2f\n",
1154 printf(
" Kaons: %.2f<nSigmaTPC<%.2f %.2f<nSigmaTOF<%.2f\n",
1156 printf(
" Protons: %.2f<nSigmaTPC<%.2f %.2f<nSigmaTOF<%.2f\n",
1158 }
else if (
fMatch == 10) {
1159 printf(
"Asymmetric PID using identification/compatibility bands as a function of track momentum p\n");
1160 printf(
"The following bands are set:\n");
1161 TString species[] = {
"electron",
"muon",
"pion",
"kaon",
"proton"};
1162 TString detectors[] = {
"ITS",
"TPC",
"TRD",
"TOF"};
1163 for (Int_t s=0;s<AliPID::kSPECIES;s++) {
1164 for (Int_t d=0;d<4;d++) {
1166 printf(
" Identification band %s %s\n", species[s].
Data(), detectors[d].
Data());
1169 printf(
" Compatibility band %s %s\n", species[s].
Data(), detectors[d].
Data());
1178 Int_t spe = (Int_t) specie;
1179 Int_t det = (Int_t) detector;
1181 if (spe >= AliPID::kSPECIES || det > 3 || !min || !max) {
1182 AliError(
"Identification band not set");
1189 axis = min->GetXaxis();
1191 TF1 *minFunc =
new TF1(Form(
"IdMin_%d_%d", spe, det), histFunc, axis->GetBinLowEdge(axis->GetFirst()), axis->GetBinUpEdge(axis->GetLast()), 0,
"HistFunc");
1193 axis = max->GetXaxis();
1195 TF1 *maxFunc =
new TF1(Form(
"IdMax_%d_%d", spe, det), histFunc, axis->GetBinLowEdge(axis->GetFirst()), axis->GetBinUpEdge(axis->GetLast()), 0,
"HistFunc");
1197 SetIdBand(specie, detector, minFunc, maxFunc);
1202 Int_t spe = (Int_t) specie;
1203 Int_t det = (Int_t) detector;
1205 if (spe >= AliPID::kSPECIES || det > 3 || !min || !max) {
1206 AliError(
"Identification band not set");
1223 Int_t spe = (Int_t) specie;
1224 Int_t det = (Int_t) detector;
1226 if (spe >= AliPID::kSPECIES || det > 3 || !min || !max) {
1227 AliError(
"Compatibility band not set");
1234 axis = min->GetXaxis();
1236 TF1 *minFunc =
new TF1(Form(
"CompMin_%d_%d", spe, det), histFunc, axis->GetBinLowEdge(axis->GetFirst()), axis->GetBinUpEdge(axis->GetLast()), 0,
"HistFunc");
1238 axis = max->GetXaxis();
1240 TF1 *maxFunc =
new TF1(Form(
"CompMax_%d_%d", spe, det), histFunc, axis->GetBinLowEdge(axis->GetFirst()), axis->GetBinUpEdge(axis->GetLast()), 0,
"HistFunc");
1247 Int_t spe = (Int_t) specie;
1248 Int_t det = (Int_t) detector;
1250 if (spe >= AliPID::kSPECIES || det > 3 || !min || !max) {
1251 AliError(
"Compatibility band not set");
1269 case AliPIDResponse::kITS:
1272 case AliPIDResponse::kTPC:
1275 case AliPIDResponse::kTRD:
1278 case AliPIDResponse::kTOF:
1290 case AliPIDResponse::kITS:
1293 case AliPIDResponse::kTPC:
1296 case AliPIDResponse::kTOF:
1309 Int_t spe = (Int_t) specie;
1310 Int_t det = (Int_t) detector;
1320 Double_t P = track->P();
1323 Float_t minContent, maxContent;
1324 Bool_t hasAnyBand = kFALSE;
1330 if (IdBandMin && IdBandMax) {
1331 minContent = IdBandMin->IsInside(&P) ? IdBandMin->Eval(P) : 0;
1332 maxContent = IdBandMax->IsInside(&P) ? IdBandMax->Eval(P) : 0;
1333 if (minContent != 0 || maxContent != 0) {
1336 if ((minContent == 0 || nSigma >= minContent) && (maxContent == 0 || nSigma <= maxContent)) {
1346 if (CompBandMin && CompBandMax) {
1347 minContent = CompBandMin->IsInside(&P) ? CompBandMin->Eval(P) : 0;
1348 maxContent = CompBandMax->IsInside(&P) ? CompBandMax->Eval(P) : 0;
1349 if (minContent != 0 || maxContent != 0) {
1352 if ((minContent == 0 || nSigma >= minContent) && (maxContent == 0 || nSigma <= maxContent)) {
1374 TF1 *TPCCompBandMinK =
new TF1(
"TPCCompBandMinK",
"[0]", 0, 24); TPCCompBandMinK->SetParameter(0, -3.2);
1375 TF1 *TPCCompBandMaxK =
new TF1(
"TPCCompBandMaxK",
"[0]", 0, 24); TPCCompBandMaxK->SetParameter(0, 2.8);
1376 SetCompBand(AliPID::kKaon, AliPIDResponse::kTPC, TPCCompBandMinK, TPCCompBandMaxK);
1378 TF1 *TPCIdBandMinK =
new TF1(
"TPCIdBandMinK",
"[0]", 0, 24); TPCIdBandMinK->SetParameter(0, -2.2);
1379 TF1 *TPCIdBandMaxK =
new TF1(
"TPCIdBandMaxK",
"[0]", 0, 24); TPCIdBandMaxK->SetParameter(0, 1.8);
1380 SetIdBand(AliPID::kKaon, AliPIDResponse::kTPC, TPCIdBandMinK, TPCIdBandMaxK);
1383 TF1 *TPCCompBandMinPi =
new TF1(
"TPCCompBandMinPi",
"[0]", 0, 24); TPCCompBandMinPi->SetParameter(0, -3.14);
1384 TF1 *TPCCompBandMaxPi =
new TF1(
"TPCCompBandMaxPi",
"[0]", 0, 24); TPCCompBandMaxPi->SetParameter(0, 2.86);
1385 SetCompBand(AliPID::kPion, AliPIDResponse::kTPC, TPCCompBandMinPi, TPCCompBandMaxPi);
1387 TF1 *TPCIdBandMinPi =
new TF1(
"TPCIdBandMinPi",
"[0]", 0, 24); TPCIdBandMinPi->SetParameter(0, -2.14);
1388 TF1 *TPCIdBandMaxPi =
new TF1(
"TPCIdBandMaxPi",
"[0]", 0, 24); TPCIdBandMaxPi->SetParameter(0, 1.86);
1389 SetIdBand(AliPID::kPion, AliPIDResponse::kTPC, TPCIdBandMinPi, TPCIdBandMaxPi);
1392 TF1 *TOFCompBandMinK =
new TF1(
"TOFCompBandMinK",
"[0]", 2, 24); TOFCompBandMinK->SetParameter(0, -3.1);
1393 TF1 *TOFCompBandMaxK =
new TF1(
"TOFCompBandMaxK",
"[0]", 2, 24); TOFCompBandMaxK->SetParameter(0, 2.9);
1394 SetCompBand(AliPID::kKaon, AliPIDResponse::kTOF, TOFCompBandMinK, TOFCompBandMaxK);
1396 TF1 *TOFIdBandMinK =
new TF1(
"TOFIdBandMinK",
"[0]", 0, 2); TOFIdBandMinK->SetParameter(0, -3.1);
1397 TF1 *TOFIdBandMaxK =
new TF1(
"TOFIdBandMaxK",
"[0]", 0, 2); TOFIdBandMaxK->SetParameter(0, 2.9);
1398 SetIdBand(AliPID::kKaon, AliPIDResponse::kTOF, TOFIdBandMinK, TOFIdBandMaxK);
1401 TF1 *TOFCompBandMinPi =
new TF1(
"TOFCompBandMinPi",
"[0]", 2, 24); TOFCompBandMinPi->SetParameter(0, -3.15);
1402 TF1 *TOFCompBandMaxPi =
new TF1(
"TOFCompBandMaxPi",
"[0]", 2, 24); TOFCompBandMaxPi->SetParameter(0, 2.85);
1403 SetCompBand(AliPID::kPion, AliPIDResponse::kTOF, TOFCompBandMinPi, TOFCompBandMaxPi);
1405 TF1 *TOFIdBandMinPi =
new TF1(
"TOFIdBandMinPi",
"[0]", 0, 2); TOFIdBandMinPi->SetParameter(0, -3.15);
1406 TF1 *TOFIdBandMaxPi =
new TF1(
"TOFIdBandMaxPi",
"[0]", 0, 2); TOFIdBandMaxPi->SetParameter(0, 2.85);
1407 SetIdBand(AliPID::kPion, AliPIDResponse::kTOF, TOFIdBandMinPi, TOFIdBandMaxPi);
1419 Double_t TPCIdBandMinKBins[] = {0, 0.4, 0.5, 0.6, 0.9, 24};
1420 TH1F *TPCIdBandMinK =
new TH1F(
"TPCIdBandMinK",
"TPC Id Band Min K", 5, TPCIdBandMinKBins);
1421 TPCIdBandMinK->SetBinContent(1, -3);
1422 TPCIdBandMinK->SetBinContent(2, -2);
1423 TPCIdBandMinK->SetBinContent(3, -3);
1424 TPCIdBandMinK->SetBinContent(4, -2);
1425 TPCIdBandMinK->SetBinContent(5, -3);
1427 Double_t TPCIdBandMaxKBins[] = {0, 0.6, 0.7, 24};
1428 TH1F *TPCIdBandMaxK =
new TH1F(
"TPCIdBandMaxK",
"TPC Id Band Max K", 3, TPCIdBandMaxKBins);
1429 TPCIdBandMaxK->SetBinContent(1, 3);
1430 TPCIdBandMaxK->SetBinContent(2, 2);
1431 TPCIdBandMaxK->SetBinContent(3, 3);
1433 SetIdBand(AliPID::kKaon, AliPIDResponse::kTPC, TPCIdBandMinK, TPCIdBandMaxK);
1434 GetIdBandMin(AliPID::kKaon, AliPIDResponse::kTPC)->SetNpx(5000);
1435 GetIdBandMax(AliPID::kKaon, AliPIDResponse::kTPC)->SetNpx(5000);
1438 Double_t TPCIdBandMinpiBins[] = {0, 24};
1439 TH1F *TPCIdBandMinpi =
new TH1F(
"TPCIdBandMinpi",
"TPC Id Band Min pi", 1, TPCIdBandMinpiBins);
1440 TPCIdBandMinpi->SetBinContent(1, -3);
1442 Double_t TPCIdBandMaxpiBins[] = {0, 0.7, 0.9, 1.3, 1.4, 24};
1443 TH1F *TPCIdBandMaxpi =
new TH1F(
"TPCIdBandMaxpi",
"TPC Id Band Max pi", 5, TPCIdBandMaxpiBins);
1444 TPCIdBandMaxpi->SetBinContent(1, 3);
1445 TPCIdBandMaxpi->SetBinContent(2, 2);
1446 TPCIdBandMaxpi->SetBinContent(3, 3);
1447 TPCIdBandMaxpi->SetBinContent(4, 2);
1448 TPCIdBandMaxpi->SetBinContent(5, 3);
1450 SetIdBand(AliPID::kPion, AliPIDResponse::kTPC, TPCIdBandMinpi, TPCIdBandMaxpi);
1451 GetIdBandMin(AliPID::kPion, AliPIDResponse::kTPC)->SetNpx(5000);
1452 GetIdBandMax(AliPID::kPion, AliPIDResponse::kTPC)->SetNpx(5000);
1455 TF1 *TOFIdBandMinK =
new TF1(
"TOFIdBandMinK",
"[0]", 0, 24); TOFIdBandMinK->SetParameter(0, -3);
1456 TF1 *TOFIdBandMaxK =
new TF1(
"TOFIdBandMaxK",
"[0]", 0, 24); TOFIdBandMaxK->SetParameter(0, 3);
1458 SetIdBand(AliPID::kKaon, AliPIDResponse::kTOF, TOFIdBandMinK, TOFIdBandMaxK);
1461 TF1 *TOFIdBandMinPi =
new TF1(
"TOFIdBandMinPi",
"[0]", 0, 24); TOFIdBandMinPi->SetParameter(0, -3);
1462 TF1 *TOFIdBandMaxPi =
new TF1(
"TOFIdBandMaxPi",
"[0]", 0, 24); TOFIdBandMaxPi->SetParameter(0, 3);
1464 SetIdBand(AliPID::kPion, AliPIDResponse::kTOF, TOFIdBandMinPi, TOFIdBandMaxPi);
1476 TF1 *TPCCompBandMinK =
new TF1(
"TPCCompBandMinK",
"[0]", 0, 24); TPCCompBandMinK->SetParameter(0, -3);
1477 TF1 *TPCCompBandMaxK =
new TF1(
"TPCCompBandMaxK",
"[0]", 0, 24); TPCCompBandMaxK->SetParameter(0, 3);
1479 SetCompBand(AliPID::kKaon, AliPIDResponse::kTPC, TPCCompBandMinK, TPCCompBandMaxK);
1481 Double_t TPCIdBandMinKBins[6] = {0, 0.45, 0.55, 0.7, 1.1, 24};
1482 TH1F *TPCIdBandMinK =
new TH1F(
"TPCIdBandMinK",
"TPC Id Band Min K", 5, TPCIdBandMinKBins);
1483 TPCIdBandMinK->SetBinContent(1, -2);
1484 TPCIdBandMinK->SetBinContent(2, -1);
1485 TPCIdBandMinK->SetBinContent(3, -2);
1486 TPCIdBandMinK->SetBinContent(4, -1);
1487 TPCIdBandMinK->SetBinContent(5, -2);
1489 Double_t TPCIdBandMaxKBins[4] = {0, 0.5, 0.7, 24};
1490 TH1F *TPCIdBandMaxK =
new TH1F(
"TPCIdBandMaxK",
"TPC Id Band Max K", 3, TPCIdBandMaxKBins);
1491 TPCIdBandMaxK->SetBinContent(1, 2);
1492 TPCIdBandMaxK->SetBinContent(2, 1);
1493 TPCIdBandMaxK->SetBinContent(3, 2);
1495 SetIdBand(AliPID::kKaon, AliPIDResponse::kTPC, TPCIdBandMinK, TPCIdBandMaxK);
1496 GetIdBandMin(AliPID::kKaon, AliPIDResponse::kTPC)->SetNpx(5000);
1497 GetIdBandMax(AliPID::kKaon, AliPIDResponse::kTPC)->SetNpx(5000);
1500 TF1 *TPCCompBandMinpi =
new TF1(
"TPCCompBandMinpi",
"[0]", 0, 24); TPCCompBandMinpi->SetParameter(0, -3);
1501 TF1 *TPCCompBandMaxpi =
new TF1(
"TPCCompBandMaxpi",
"[0]", 0, 24); TPCCompBandMaxpi->SetParameter(0, 3);
1503 SetCompBand(AliPID::kPion, AliPIDResponse::kTPC, TPCCompBandMinpi, TPCCompBandMaxpi);
1505 Double_t TPCIdBandMinpiBins[2] = {0, 24};
1506 TH1F *TPCIdBandMinpi =
new TH1F(
"TPCIdBandMinpi",
"TPC Id Band Min pi", 1, TPCIdBandMinpiBins);
1507 TPCIdBandMinpi->SetBinContent(1, -2);
1509 Double_t TPCIdBandMaxpiBins[4] = {0, 0.7, 1.7, 24};
1510 TH1F *TPCIdBandMaxpi =
new TH1F(
"TPCIdBandMaxpi",
"TPC Id Band Max pi", 3, TPCIdBandMaxpiBins);
1511 TPCIdBandMaxpi->SetBinContent(1, 2);
1512 TPCIdBandMaxpi->SetBinContent(2, 1);
1513 TPCIdBandMaxpi->SetBinContent(3, 2);
1515 SetIdBand(AliPID::kPion, AliPIDResponse::kTPC, TPCIdBandMinpi, TPCIdBandMaxpi);
1516 GetIdBandMin(AliPID::kPion, AliPIDResponse::kTPC)->SetNpx(5000);
1517 GetIdBandMax(AliPID::kPion, AliPIDResponse::kTPC)->SetNpx(5000);
1520 TF1 *TOFCompBandMinK =
new TF1(
"TOFCompBandMinK",
"[0]", 2, 24); TOFCompBandMinK->SetParameter(0, -3);
1521 TF1 *TOFCompBandMaxK =
new TF1(
"TOFCompBandMaxK",
"[0]", 2, 24); TOFCompBandMaxK->SetParameter(0, 3);
1523 SetCompBand(AliPID::kKaon, AliPIDResponse::kTOF, TOFCompBandMinK, TOFCompBandMaxK);
1525 TF1 *TOFIdBandMinK =
new TF1(
"TOFIdBandMinK",
"[0]", 0, 2); TOFIdBandMinK->SetParameter(0, -3);
1526 TF1 *TOFIdBandMaxK =
new TF1(
"TOFIdBandMaxK",
"[0]", 0, 2); TOFIdBandMaxK->SetParameter(0, 3);
1528 SetIdBand(AliPID::kKaon, AliPIDResponse::kTOF, TOFIdBandMinK, TOFIdBandMaxK);
1531 TF1 *TOFCompBandMinpi =
new TF1(
"TOFCompBandMinpi",
"[0]", 2, 24); TOFCompBandMinpi->SetParameter(0, -3);
1532 TF1 *TOFCompBandMaxpi =
new TF1(
"TOFCompBandMaxpi",
"[0]", 2, 24); TOFCompBandMaxpi->SetParameter(0, 3);
1534 SetCompBand(AliPID::kPion, AliPIDResponse::kTOF, TOFCompBandMinpi, TOFCompBandMaxpi);
1536 TF1 *TOFIdBandMinpi =
new TF1(
"TOFIdBandMinpi",
"[0]", 0, 2); TOFIdBandMinpi->SetParameter(0, -3);
1537 TF1 *TOFIdBandMaxpi =
new TF1(
"TOFIdBandMaxpi",
"[0]", 0, 2); TOFIdBandMaxpi->SetParameter(0, 3);
1539 SetIdBand(AliPID::kPion, AliPIDResponse::kTOF, TOFIdBandMinpi, TOFIdBandMaxpi);
void SetIdAsymmetricPID()
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
void SetPriorsHistos(TString priorFileName)
Int_t fnNSigmaCompat
upper nsigma TOF (for fUseAsymTOF)
Double_t fLownSigmaTOF
flag for using asymmetrig nSigmaCut in TOF for fMatch==1
Bool_t fppLowEn2011
MC for low energy MC.
Bool_t CheckITSPIDStatus(AliAODTrack *track) const
Bool_t IsTOFPiKexcluded(AliAODTrack *track, Double_t nsigmaK)
general method to perform PID using raw signals
Double_t fPtThresholdTPC
old PID method implemented
Int_t GetnSigmaTOF(AliAODTrack *track, Int_t species, Double_t &sigma) const
Double_t * fPLimit
limit of p intervals for asimmetric PID: fPLimit<p[0], fPLimit[0]<p<fPLimit[1], p>fPLimit[1] ...
Int_t RawSignalPID(AliAODTrack *track, TString detector) const
AliTPCPIDResponse * fTPCResponse
! TPC response
Bool_t IsKaonRaw(AliAODTrack *track, TString detector) const
Double_t fMaxnSigmaCombined[3]
Bool_t fMCLowEn2011
real data with one pad clusters
Float_t NumberOfSigmas(AliPID::EParticleType specie, AliPIDResponse::EDetector detector, AliAODTrack *track)
TF1 * GetIdBandMin(AliPID::EParticleType specie, AliPIDResponse::EDetector detector)
Int_t GetnSigmaTPC(AliAODTrack *track, Int_t species, Double_t &sigma) const
Bool_t CheckTOFPIDStatus(AliAODTrack *track) const
Bool_t CheckTPCPIDStatus(AliAODTrack *track) const
void SetPriors(Double_t *priors, Int_t npriors)
TF1 * fIdBandMax[AliPID::kSPECIES][4]
Bool_t IsElectronRaw(AliAODTrack *track, TString detector) const
TF1 * fIdBandMin[AliPID::kSPECIES][4]
use default priors for combined PID
Bool_t fMC
max. of nSigma range for pi,K,p in TOF (match==5)
Bool_t fCompat
force TOF for kaons in mode fMatch==5
Bool_t fITS
switch to include or exclude TOF
Int_t ApplyPidTPCRaw(AliAODTrack *track, Int_t specie) const
Double_t fMaxnSigmaTOF[3]
min. of nSigma range for pi,K,p in TOF (match==5)
Int_t ApplyPidITSRaw(AliAODTrack *track, Int_t specie) const
void SetCompBand(AliPID::EParticleType specie, AliPIDResponse::EDetector detector, TH1F *min, TH1F *max)
TH1F * fPriorsH[AliPID::kSPECIES]
Int_t MatchTPCTOFMin(AliAODTrack *track, Int_t specie)
PID nSigma strategy closer to the Bayesian approach with Max. prob.
Double_t fMaxTrackMomForCombinedPID
pT threshold to use TPC PID
Double_t fMinnSigmaTOF[3]
max. of nSigma range for pi,K,p in TPC (match==5)
Double_t fMinnSigmaTPC[3]
nSigma cut for pi,K,p (TPC^2+TOF^2)
TF1 * fCompBandMin[AliPID::kSPECIES][4]
TF1 * GetIdBandMax(AliPID::EParticleType specie, AliPIDResponse::EDetector detector)
Bool_t fOnePad
MC(kTRUE) or real data (kFALSE, default option)
void SetIdBand(AliPID::EParticleType specie, AliPIDResponse::EDetector detector, TH1F *min, TH1F *max)
Assymetric PID using histograms.
Int_t CheckBands(AliPID::EParticleType specie, AliPIDResponse::EDetector detector, AliAODTrack *track)
AliPIDResponse * fPidResponse
momentum threshold to use PID
void DrawPrior(AliPID::EParticleType type)
Double_t * fPriors
set of priors
AliPIDCombined * GetPidCombined() const
void GetTPCBetheBlochParams(Double_t alephParameters[5]) const
Bool_t fOldPid
real data PbPb
void SetShiftedAsymmetricPID()
Some suggested asymmetric PID.
Bool_t fDefaultPriors
detectors to be involved for combined PID
Bool_t CheckStatus(AliAODTrack *track, TString detectors) const
Double_t fPCompatTOF
compatibility region : useful only if fMatch=1
Bool_t IsExcluded(AliAODTrack *track, Int_t labelTrack, Double_t nsigmaCut, TString detector)
Bool_t fForceTOFforKaons
switch to combine the info from more detectors: 1 = || , 2 = &, 3 = p region
Bool_t fTOF
switch to include or exclude TPC
Int_t MakeRawPid(AliAODTrack *track, Int_t specie)
Int_t fMatch
switch to include or exclude TRD
Int_t MatchTPCTOF(AliAODTrack *track, Int_t specie)
void SetIdCompAsymmetricPID()
void SetSigma(Double_t *sigma)
Int_t fnPriors
Minimum TPC PID clusters cut.
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Bool_t fTOFdecide
real data PbPb
Int_t ApplyPidTOFRaw(AliAODTrack *track, Int_t specie) const
void SetPriorDistribution(AliPID::EParticleType type, TH1F *prior)
Double_t fMaxnSigmaTPC[3]
min. of nSigma range for pi,K,p in TPC (match==5)
UInt_t fMinNClustersTPCPID
Cut of TOF mismatch probability.
Double_t fLownSigmaCompatTOF
upper nsigma TOF (for fUseAsymTOF)
Int_t GetnSigmaITS(AliAODTrack *track, Int_t species, Double_t &sigma) const
AliPIDCombined * fPidCombined
! combined PID object
Bool_t IsPionRaw(AliAODTrack *track, TString detector) const
Bool_t CheckDetectorPIDStatus(AliPIDResponse::EDetector detector, AliAODTrack *track)
Int_t ApplyTOFCompatibilityBand(AliAODTrack *track, Int_t specie) const
Double_t * fnSigma
sigma for the raw signal PID: 0-2 for TPC, 3 for TOF, 4 for ITS
Bool_t fTPC
asimmetric PID required
Bool_t fUseAsymTOF
compatibility p limit for TOF
Double_t fUpnSigmaCompatTOF
lower nsigma TOF (for fUseAsymTOF)
Bool_t fTRD
switch to include or exclude ITS
void SetMatch(Int_t match)
void SetPLimit(Double_t *plim, Int_t npLim)
Bool_t TPCRawAsym(AliAODTrack *track, Int_t specie) const
Bool_t fPbPb
Data for low energy pp 2011.
Double_t fUpnSigmaTOF
lower nsigma TOF (for fUseAsymTOF)
ECombDetectors fCombDetectors
priors histos
void CombinedProbability(AliAODTrack *track, Bool_t *type) const
Bool_t IsProtonRaw(AliAODTrack *track, TString detector) const
Double_t * fnSigmaCompat
0: n sigma for TPC compatibility band, 1: for TOF
Double_t fCutTOFmismatch
TOF precision.
Bool_t CheckTRDPIDStatus(AliAODTrack *track) const
TF1 * fCompBandMax[AliPID::kSPECIES][4]