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;
432 if (status != AliPIDResponse::kDetPidOk)
return kFALSE;
439 if (status != AliPIDResponse::kDetPidOk)
return kFALSE;
440 UInt_t nclsTPCPID = track->GetTPCsignalN();
448 if (status != AliPIDResponse::kDetPidOk)
return kFALSE;
449 Float_t probMis =
fPidResponse->GetTOFMismatchProbability(track);
456 AliPIDResponse::EDetPidStatus status =
fPidResponse->CheckPIDStatus(AliPIDResponse::kTRD,track);
457 if (status != AliPIDResponse::kDetPidOk)
return kFALSE;
468 AliError(
"Wrong detector name");
476 AliAODPid *pidObj = track->GetDetPid();
477 Double_t mom = pidObj->GetTPCmomentum();
482 nsigma=TMath::Abs(nsigma);
495 Double_t ptrack=track->P();
509 if(!okTPC && !okTOF)
return 0;
530 if(!okTOF &&
fTPC)
return tTPCinfo;
542 if(!okTOF)
return tTPCinfo;
546 if(tTPCinfo+tTOFinfo==0 &&
fITS){
552 return tTPCinfo+tTOFinfo;
571 if(
fTPC && !okTOF)
return tTPCinfo;
575 if(tTOFinfo==1 && tTPCinfo==1)
return 1;
577 if(tTPCinfo+tTOFinfo==0 &&
fITS){
589 if(
fTPC &&
fTOF)
if(!okTPC && !okTOF)
return 0;
625 Double_t nSigmaTPC=0.;
627 nSigmaTPC=
fPidResponse->NumberOfSigmasTPC(track,(AliPID::EParticleType)specie);
628 if(nSigmaTPC<-990.) nSigmaTPC=0.;
630 Double_t nSigmaTOF=0.;
632 nSigmaTOF=
fPidResponse->NumberOfSigmasTOF(track,(AliPID::EParticleType)specie);
634 Int_t iPart=specie-2;
635 if(iPart<0 || iPart>2)
return -1;
637 Double_t nSigma2=nSigmaTPC*nSigmaTPC+nSigmaTOF*nSigmaTOF;
651 if (
fTPC &&
fTOF && !okTPC && !okTOF) {
662 if (!okTOF &&
fTPC) {
676 if (tTPCinfo+tTOFinfo == 0 &&
fITS) {
678 return tTPCinfo+tTOFinfo;
683 return tTPCinfo+tTOFinfo;
698 if(!okTPC && !okTOF)
return 0;
702 Double_t nsigmaTPC[5]={999.,999.,999.,999.,999.};
703 Double_t nsigmaTOF[5]={999.,999.,999.,999.,999.};
704 Double_t nsigmaMin=999.;
705 Double_t
nsigma[5]={999.,999.,999.,999.,999.};
708 for(Int_t ipart=0;ipart<5;ipart++){
709 if(
GetnSigmaTPC(track,ipart,nsigmaTPC[ipart])<1) nsigmaTPC[ipart]=0.;
712 for(Int_t ipart=0;ipart<5;ipart++){nsigmaTPC[ipart]=0.;}
716 for(Int_t ipart=0;ipart<5;ipart++){
717 if(
GetnSigmaTOF(track,ipart,nsigmaTOF[ipart])<1) nsigmaTOF[ipart]=0.;
720 for(Int_t ipart=0;ipart<5;ipart++){nsigmaTOF[ipart]=0.;}
723 for(Int_t ipart=0;ipart<5;ipart++){
724 nsigma[ipart]=TMath::Sqrt(nsigmaTPC[ipart]*nsigmaTPC[ipart]+nsigmaTOF[ipart]*nsigmaTOF[ipart]);
725 if(nsigma[ipart]<nsigmaMin) {nsigmaMin=nsigma[ipart];pid=ipart;}
728 if(pid==specie)
return 1;
744 if(tTPCres==specie)
return 1;
753 if(tTOFres==specie)
return 1;
757 if(tITSres==specie)
return 1;
760 AliError(
"You should enable just one detector if you don't want to match");
772 alephParameters[0] = 1.44405/50.;
773 alephParameters[1] = 2.35409e+01;
774 alephParameters[2] = TMath::Exp(-2.90330e+01);
775 alephParameters[3] = 2.10681e+00;
776 alephParameters[4] = 4.62254e+00;
780 alephParameters[0]=0.0207667;
781 alephParameters[1]=29.9936;
782 alephParameters[2]=3.87866e-11;
783 alephParameters[3]=2.17291;
784 alephParameters[4]=7.1623;
786 alephParameters[0]=0.029021;
787 alephParameters[1]=25.4181;
788 alephParameters[2]=4.66596e-08;
789 alephParameters[3]=1.90008;
790 alephParameters[4]=4.63783;
792 alephParameters[0] = 2.15898/50.;
793 alephParameters[1] = 1.75295e+01;
794 alephParameters[2] = 3.40030e-09;
795 alephParameters[3] = 1.96178e+00;
796 alephParameters[4] = 3.91720e+00;
804 alephParameters[0] =1.34490e+00/50.;
805 alephParameters[1] = 2.69455e+01;
806 alephParameters[2] = TMath::Exp(-2.97552e+01);
807 alephParameters[3] = 2.35339e+00;
808 alephParameters[4] = 5.98079e+00;
818 alephParameters[0] = 5.10207e+00/50.;
819 alephParameters[1] = 7.94982e+00;
820 alephParameters[2] = TMath::Exp(-9.07942e+00);
821 alephParameters[3] = 2.38808e+00;
822 alephParameters[4] = 1.68165e+00;
826 alephParameters[0]=0.031642;
827 alephParameters[1]=22.353;
828 alephParameters[2]=4.16239e-12;
829 alephParameters[3]=2.61952;
830 alephParameters[4]=5.76086;
834 alephParameters[0] = 0.0283086/0.97;
835 alephParameters[1] = 2.63394e+01;
836 alephParameters[2] = 5.04114e-11;
837 alephParameters[3] = 2.12543e+00;
838 alephParameters[4] = 4.88663e+00;
850 Double_t alephParameters[5];
852 fTPCResponse->SetBetheBlochParameters(alephParameters[0],alephParameters[1],alephParameters[2],alephParameters[3],alephParameters[4]);
865 Double_t nsigmaITS=-999;
868 Double_t mom=track->P();
869 AliAODPid *pidObj = track->GetDetPid();
870 Double_t dedx=pidObj->GetITSsignal();
872 AliITSPIDResponse itsResponse;
873 AliPID::EParticleType type=AliPID::EParticleType(species);
874 nsigmaITS = itsResponse.GetNumberOfSigmas(mom,dedx,type);
879 AliPID::EParticleType type=AliPID::EParticleType(species);
880 nsigmaITS =
fPidResponse->NumberOfSigmasITS(track,type);
895 Double_t nsigmaTPC=-999;
898 AliAODPid *pidObj = track->GetDetPid();
899 Double_t dedx=pidObj->GetTPCsignal();
900 Double_t mom = pidObj->GetTPCmomentum();
902 UShort_t nTPCClus=pidObj->GetTPCsignalN();
903 if(nTPCClus==0) {nTPCClus=track->GetTPCNcls();}
904 AliPID::EParticleType type=AliPID::EParticleType(species);
905 nsigmaTPC =
fTPCResponse->GetNumberOfSigmas(mom,dedx,nTPCClus,type);
909 AliPID::EParticleType type=AliPID::EParticleType(species);
910 nsigmaTPC =
fPidResponse->NumberOfSigmasTPC(track,type);
924 nsigma =
fPidResponse->NumberOfSigmasTOF(track,(AliPID::EParticleType)species);
927 AliFatal(
"To use TOF PID you need to attach AliPIDResponseTask");
937 if (detectors.Contains(
"ITS")) {
939 AliInfo(
"Nothing to be done");
948 }
else if (detectors.Contains(
"TPC")) {
952 if(nsigma>nsigmaCut)
return kTRUE;
956 }
else if (detectors.Contains(
"TOF")) {
960 if(nsigma>nsigmaCut)
return kTRUE;
976 if(nsigma>nsigmaK)
return kTRUE;
1030 fPriors =
new Double_t[npriors];
1041 fPLimit =
new Double_t[npLim];
1050 for (Int_t ispecies=0;ispecies<AliPID::kSPECIES;++ispecies) {
1054 nt+=AliPID::ParticleName(ispecies);
1056 TDirectory *current = gDirectory;
1057 TFile *priorFile=TFile::Open(priorFileName);
1059 TH1F* h3=
static_cast<TH1F*
>(priorFile->Get(
"priors3step9"));
1060 TH1F* h2=
static_cast<TH1F*
>(priorFile->Get(
"priors2step9"));
1061 TH1F* h1=
static_cast<TH1F*
>(priorFile->Get(
"priors1step9"));
1063 fPriorsH[AliPID::kProton] =
new TH1F(*h3);
1064 fPriorsH[AliPID::kKaon ] =
new TH1F(*h2);
1065 fPriorsH[AliPID::kPion ] =
new TH1F(*h1);
1068 TF1 *salt=
new TF1(
"salt",
"1.e-10",0,10);
1069 fPriorsH[AliPID::kProton]->Add(salt);
1070 fPriorsH[AliPID::kKaon ]->Add(salt);
1071 fPriorsH[AliPID::kPion ]->Add(salt);
1081 for (Int_t ispecies=0;ispecies<AliPID::kSPECIES;++ispecies) {
1082 fPidCombined->SetPriorDistribution(static_cast<AliPID::EParticleType>(ispecies),
fPriorsH[ispecies]);
1089 fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF);
1092 fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetITS);
1095 fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC);
1098 fPidCombined->SetDetectorMask(AliPIDResponse::kDetTOF);
1107 printf(
"Detectors used for PID: ");
1108 if(
fITS) printf(
"ITS ");
1109 if(
fTPC) printf(
"TPC ");
1110 if(
fTRD) printf(
"TRD ");
1111 if(
fTOF) printf(
"TOF ");
1118 printf(
"Use OLD PID");
1119 printf(
" fMC = %d\n",
fMC);
1120 printf(
" fPbPb = %d\n",
fPbPb);
1121 printf(
" fOnePad = %d\n",
fOnePad);
1125 printf(
"--- Matching algorithm = %d ---\n",
fMatch);
1129 printf(
"nSigmaTOF = %.2f\n",
fnSigma[3]);
1134 printf(
"nSigmaTPC:\n");
1139 printf(
"nSigmaTPC = %.2f\n",
fnSigma[0]);
1144 printf(
"Cuts on sqrt(nSigmaTPC^2+nSigmaTOF^2):\n");
1149 printf(
"nSigma ranges:\n");
1150 printf(
" Pions: %.2f<nSigmaTPC<%.2f %.2f<nSigmaTOF<%.2f\n",
1152 printf(
" Kaons: %.2f<nSigmaTPC<%.2f %.2f<nSigmaTOF<%.2f\n",
1154 printf(
" Protons: %.2f<nSigmaTPC<%.2f %.2f<nSigmaTOF<%.2f\n",
1156 }
else if (
fMatch == 10) {
1157 printf(
"Asymmetric PID using identification/compatibility bands as a function of track momentum p\n");
1158 printf(
"The following bands are set:\n");
1159 TString species[] = {
"electron",
"muon",
"pion",
"kaon",
"proton"};
1160 TString detectors[] = {
"ITS",
"TPC",
"TRD",
"TOF"};
1161 for (Int_t s=0;s<AliPID::kSPECIES;s++) {
1162 for (Int_t d=0;d<4;d++) {
1164 printf(
" Identification band %s %s\n", species[s].
Data(), detectors[d].
Data());
1167 printf(
" Compatibility band %s %s\n", species[s].
Data(), detectors[d].
Data());
1176 Int_t spe = (Int_t) specie;
1177 Int_t det = (Int_t) detector;
1179 if (spe >= AliPID::kSPECIES || det > 3 || !min || !max) {
1180 AliError(
"Identification band not set");
1187 axis = min->GetXaxis();
1189 TF1 *minFunc =
new TF1(Form(
"IdMin_%d_%d", spe, det), histFunc, axis->GetBinLowEdge(axis->GetFirst()), axis->GetBinUpEdge(axis->GetLast()), 0,
"HistFunc");
1191 axis = max->GetXaxis();
1193 TF1 *maxFunc =
new TF1(Form(
"IdMax_%d_%d", spe, det), histFunc, axis->GetBinLowEdge(axis->GetFirst()), axis->GetBinUpEdge(axis->GetLast()), 0,
"HistFunc");
1195 SetIdBand(specie, detector, minFunc, maxFunc);
1200 Int_t spe = (Int_t) specie;
1201 Int_t det = (Int_t) detector;
1203 if (spe >= AliPID::kSPECIES || det > 3 || !min || !max) {
1204 AliError(
"Identification band not set");
1221 Int_t spe = (Int_t) specie;
1222 Int_t det = (Int_t) detector;
1224 if (spe >= AliPID::kSPECIES || det > 3 || !min || !max) {
1225 AliError(
"Compatibility band not set");
1232 axis = min->GetXaxis();
1234 TF1 *minFunc =
new TF1(Form(
"CompMin_%d_%d", spe, det), histFunc, axis->GetBinLowEdge(axis->GetFirst()), axis->GetBinUpEdge(axis->GetLast()), 0,
"HistFunc");
1236 axis = max->GetXaxis();
1238 TF1 *maxFunc =
new TF1(Form(
"CompMax_%d_%d", spe, det), histFunc, axis->GetBinLowEdge(axis->GetFirst()), axis->GetBinUpEdge(axis->GetLast()), 0,
"HistFunc");
1245 Int_t spe = (Int_t) specie;
1246 Int_t det = (Int_t) detector;
1248 if (spe >= AliPID::kSPECIES || det > 3 || !min || !max) {
1249 AliError(
"Compatibility band not set");
1273 case AliPIDResponse::kTRD:
1307 Int_t spe = (Int_t) specie;
1308 Int_t det = (Int_t) detector;
1318 Double_t P = track->P();
1321 Float_t minContent, maxContent;
1322 Bool_t hasAnyBand = kFALSE;
1328 if (IdBandMin && IdBandMax) {
1329 minContent = IdBandMin->IsInside(&P) ? IdBandMin->Eval(P) : 0;
1330 maxContent = IdBandMax->IsInside(&P) ? IdBandMax->Eval(P) : 0;
1331 if (minContent != 0 || maxContent != 0) {
1334 if ((minContent == 0 || nSigma >= minContent) && (maxContent == 0 || nSigma <= maxContent)) {
1344 if (CompBandMin && CompBandMax) {
1345 minContent = CompBandMin->IsInside(&P) ? CompBandMin->Eval(P) : 0;
1346 maxContent = CompBandMax->IsInside(&P) ? CompBandMax->Eval(P) : 0;
1347 if (minContent != 0 || maxContent != 0) {
1350 if ((minContent == 0 || nSigma >= minContent) && (maxContent == 0 || nSigma <= maxContent)) {
1372 TF1 *TPCCompBandMinK =
new TF1(
"TPCCompBandMinK",
"[0]", 0, 24); TPCCompBandMinK->SetParameter(0, -3.2);
1373 TF1 *TPCCompBandMaxK =
new TF1(
"TPCCompBandMaxK",
"[0]", 0, 24); TPCCompBandMaxK->SetParameter(0, 2.8);
1376 TF1 *TPCIdBandMinK =
new TF1(
"TPCIdBandMinK",
"[0]", 0, 24); TPCIdBandMinK->SetParameter(0, -2.2);
1377 TF1 *TPCIdBandMaxK =
new TF1(
"TPCIdBandMaxK",
"[0]", 0, 24); TPCIdBandMaxK->SetParameter(0, 1.8);
1381 TF1 *TPCCompBandMinPi =
new TF1(
"TPCCompBandMinPi",
"[0]", 0, 24); TPCCompBandMinPi->SetParameter(0, -3.14);
1382 TF1 *TPCCompBandMaxPi =
new TF1(
"TPCCompBandMaxPi",
"[0]", 0, 24); TPCCompBandMaxPi->SetParameter(0, 2.86);
1385 TF1 *TPCIdBandMinPi =
new TF1(
"TPCIdBandMinPi",
"[0]", 0, 24); TPCIdBandMinPi->SetParameter(0, -2.14);
1386 TF1 *TPCIdBandMaxPi =
new TF1(
"TPCIdBandMaxPi",
"[0]", 0, 24); TPCIdBandMaxPi->SetParameter(0, 1.86);
1390 TF1 *TOFCompBandMinK =
new TF1(
"TOFCompBandMinK",
"[0]", 2, 24); TOFCompBandMinK->SetParameter(0, -3.1);
1391 TF1 *TOFCompBandMaxK =
new TF1(
"TOFCompBandMaxK",
"[0]", 2, 24); TOFCompBandMaxK->SetParameter(0, 2.9);
1394 TF1 *TOFIdBandMinK =
new TF1(
"TOFIdBandMinK",
"[0]", 0, 2); TOFIdBandMinK->SetParameter(0, -3.1);
1395 TF1 *TOFIdBandMaxK =
new TF1(
"TOFIdBandMaxK",
"[0]", 0, 2); TOFIdBandMaxK->SetParameter(0, 2.9);
1399 TF1 *TOFCompBandMinPi =
new TF1(
"TOFCompBandMinPi",
"[0]", 2, 24); TOFCompBandMinPi->SetParameter(0, -3.15);
1400 TF1 *TOFCompBandMaxPi =
new TF1(
"TOFCompBandMaxPi",
"[0]", 2, 24); TOFCompBandMaxPi->SetParameter(0, 2.85);
1403 TF1 *TOFIdBandMinPi =
new TF1(
"TOFIdBandMinPi",
"[0]", 0, 2); TOFIdBandMinPi->SetParameter(0, -3.15);
1404 TF1 *TOFIdBandMaxPi =
new TF1(
"TOFIdBandMaxPi",
"[0]", 0, 2); TOFIdBandMaxPi->SetParameter(0, 2.85);
1417 Double_t TPCIdBandMinKBins[] = {0, 0.4, 0.5, 0.6, 0.9, 24};
1418 TH1F *TPCIdBandMinK =
new TH1F(
"TPCIdBandMinK",
"TPC Id Band Min K", 5, TPCIdBandMinKBins);
1419 TPCIdBandMinK->SetBinContent(1, -3);
1420 TPCIdBandMinK->SetBinContent(2, -2);
1421 TPCIdBandMinK->SetBinContent(3, -3);
1422 TPCIdBandMinK->SetBinContent(4, -2);
1423 TPCIdBandMinK->SetBinContent(5, -3);
1425 Double_t TPCIdBandMaxKBins[] = {0, 0.6, 0.7, 24};
1426 TH1F *TPCIdBandMaxK =
new TH1F(
"TPCIdBandMaxK",
"TPC Id Band Max K", 3, TPCIdBandMaxKBins);
1427 TPCIdBandMaxK->SetBinContent(1, 3);
1428 TPCIdBandMaxK->SetBinContent(2, 2);
1429 TPCIdBandMaxK->SetBinContent(3, 3);
1436 Double_t TPCIdBandMinpiBins[] = {0, 24};
1437 TH1F *TPCIdBandMinpi =
new TH1F(
"TPCIdBandMinpi",
"TPC Id Band Min pi", 1, TPCIdBandMinpiBins);
1438 TPCIdBandMinpi->SetBinContent(1, -3);
1440 Double_t TPCIdBandMaxpiBins[] = {0, 0.7, 0.9, 1.3, 1.4, 24};
1441 TH1F *TPCIdBandMaxpi =
new TH1F(
"TPCIdBandMaxpi",
"TPC Id Band Max pi", 5, TPCIdBandMaxpiBins);
1442 TPCIdBandMaxpi->SetBinContent(1, 3);
1443 TPCIdBandMaxpi->SetBinContent(2, 2);
1444 TPCIdBandMaxpi->SetBinContent(3, 3);
1445 TPCIdBandMaxpi->SetBinContent(4, 2);
1446 TPCIdBandMaxpi->SetBinContent(5, 3);
1453 TF1 *TOFIdBandMinK =
new TF1(
"TOFIdBandMinK",
"[0]", 0, 24); TOFIdBandMinK->SetParameter(0, -3);
1454 TF1 *TOFIdBandMaxK =
new TF1(
"TOFIdBandMaxK",
"[0]", 0, 24); TOFIdBandMaxK->SetParameter(0, 3);
1459 TF1 *TOFIdBandMinPi =
new TF1(
"TOFIdBandMinPi",
"[0]", 0, 24); TOFIdBandMinPi->SetParameter(0, -3);
1460 TF1 *TOFIdBandMaxPi =
new TF1(
"TOFIdBandMaxPi",
"[0]", 0, 24); TOFIdBandMaxPi->SetParameter(0, 3);
1474 TF1 *TPCCompBandMinK =
new TF1(
"TPCCompBandMinK",
"[0]", 0, 24); TPCCompBandMinK->SetParameter(0, -3);
1475 TF1 *TPCCompBandMaxK =
new TF1(
"TPCCompBandMaxK",
"[0]", 0, 24); TPCCompBandMaxK->SetParameter(0, 3);
1479 Double_t TPCIdBandMinKBins[6] = {0, 0.45, 0.55, 0.7, 1.1, 24};
1480 TH1F *TPCIdBandMinK =
new TH1F(
"TPCIdBandMinK",
"TPC Id Band Min K", 5, TPCIdBandMinKBins);
1481 TPCIdBandMinK->SetBinContent(1, -2);
1482 TPCIdBandMinK->SetBinContent(2, -1);
1483 TPCIdBandMinK->SetBinContent(3, -2);
1484 TPCIdBandMinK->SetBinContent(4, -1);
1485 TPCIdBandMinK->SetBinContent(5, -2);
1487 Double_t TPCIdBandMaxKBins[4] = {0, 0.5, 0.7, 24};
1488 TH1F *TPCIdBandMaxK =
new TH1F(
"TPCIdBandMaxK",
"TPC Id Band Max K", 3, TPCIdBandMaxKBins);
1489 TPCIdBandMaxK->SetBinContent(1, 2);
1490 TPCIdBandMaxK->SetBinContent(2, 1);
1491 TPCIdBandMaxK->SetBinContent(3, 2);
1498 TF1 *TPCCompBandMinpi =
new TF1(
"TPCCompBandMinpi",
"[0]", 0, 24); TPCCompBandMinpi->SetParameter(0, -3);
1499 TF1 *TPCCompBandMaxpi =
new TF1(
"TPCCompBandMaxpi",
"[0]", 0, 24); TPCCompBandMaxpi->SetParameter(0, 3);
1503 Double_t TPCIdBandMinpiBins[2] = {0, 24};
1504 TH1F *TPCIdBandMinpi =
new TH1F(
"TPCIdBandMinpi",
"TPC Id Band Min pi", 1, TPCIdBandMinpiBins);
1505 TPCIdBandMinpi->SetBinContent(1, -2);
1507 Double_t TPCIdBandMaxpiBins[4] = {0, 0.7, 1.7, 24};
1508 TH1F *TPCIdBandMaxpi =
new TH1F(
"TPCIdBandMaxpi",
"TPC Id Band Max pi", 3, TPCIdBandMaxpiBins);
1509 TPCIdBandMaxpi->SetBinContent(1, 2);
1510 TPCIdBandMaxpi->SetBinContent(2, 1);
1511 TPCIdBandMaxpi->SetBinContent(3, 2);
1518 TF1 *TOFCompBandMinK =
new TF1(
"TOFCompBandMinK",
"[0]", 2, 24); TOFCompBandMinK->SetParameter(0, -3);
1519 TF1 *TOFCompBandMaxK =
new TF1(
"TOFCompBandMaxK",
"[0]", 2, 24); TOFCompBandMaxK->SetParameter(0, 3);
1523 TF1 *TOFIdBandMinK =
new TF1(
"TOFIdBandMinK",
"[0]", 0, 2); TOFIdBandMinK->SetParameter(0, -3);
1524 TF1 *TOFIdBandMaxK =
new TF1(
"TOFIdBandMaxK",
"[0]", 0, 2); TOFIdBandMaxK->SetParameter(0, 3);
1529 TF1 *TOFCompBandMinpi =
new TF1(
"TOFCompBandMinpi",
"[0]", 2, 24); TOFCompBandMinpi->SetParameter(0, -3);
1530 TF1 *TOFCompBandMaxpi =
new TF1(
"TOFCompBandMaxpi",
"[0]", 2, 24); TOFCompBandMaxpi->SetParameter(0, 3);
1534 TF1 *TOFIdBandMinpi =
new TF1(
"TOFIdBandMinpi",
"[0]", 0, 2); TOFIdBandMinpi->SetParameter(0, -3);
1535 TF1 *TOFIdBandMaxpi =
new TF1(
"TOFIdBandMaxpi",
"[0]", 0, 2); TOFIdBandMaxpi->SetParameter(0, 3);
void SetIdAsymmetricPID()
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
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
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]