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++) {
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;
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);
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);
364 for(
Int_t ipart=0;ipart<5;ipart++){
366 nsigma=TMath::Abs(nsigma);
367 if((nsigma<nsigmaMin)&& (nsigma<
fnSigma[3])){
383 if(nsigma<nSigmaMin || nsigma>nSigmaMax) pid=-1;
393 if(specie<0)
return -1;
406 if(nsigma<nSigmaMin || nsigma>nSigmaMax) pid=-1;
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;
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);
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;
627 nSigmaTPC=
fPidResponse->NumberOfSigmasTPC(track,(AliPID::EParticleType)specie);
628 if(nSigmaTPC<-990.) nSigmaTPC=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.};
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;
852 fTPCResponse->SetBetheBlochParameters(alephParameters[0],alephParameters[1],alephParameters[2],alephParameters[3],alephParameters[4]);
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);
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;
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"));
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);
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());
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);
1203 if (spe >= AliPID::kSPECIES || det > 3 || !min || !max) {
1204 AliError(
"Identification band not set");
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");
1248 if (spe >= AliPID::kSPECIES || det > 3 || !min || !max) {
1249 AliError(
"Compatibility band not set");
1273 case AliPIDResponse::kTRD:
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 fUseCombined
detectors to be involved for combined PID
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]