X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PWGHF%2FvertexingHF%2FAliAODPidHF.cxx;h=dbc49f3b90f9229a5b808ed62dcc2fb6f975e1e7;hb=f78c506b5a881040c01a0e6b568553abf59e5df5;hp=a0aa95294804a8c55a01fa64b2e92cc463af51f8;hpb=e51f1625a6e1dee830eb70900c2dcf67fe46be35;p=u%2Fmrichter%2FAliRoot.git diff --git a/PWGHF/vertexingHF/AliAODPidHF.cxx b/PWGHF/vertexingHF/AliAODPidHF.cxx old mode 100755 new mode 100644 index a0aa9529480..dbc49f3b90f --- a/PWGHF/vertexingHF/AliAODPidHF.cxx +++ b/PWGHF/vertexingHF/AliAODPidHF.cxx @@ -39,42 +39,48 @@ ClassImp(AliAODPidHF) //------------------------------ AliAODPidHF::AliAODPidHF(): - TObject(), - fnNSigma(5), - fnSigma(0), - fTOFSigma(160.), - fCutTOFmismatch(0.01), - fMinNClustersTPCPID(0), - fnPriors(5), - fPriors(0), - fnPLimit(2), - fPLimit(0), - fAsym(kFALSE), - fTPC(kFALSE), - fTOF(kFALSE), - fITS(kFALSE), - fTRD(kFALSE), - fMatch(0), - fCompat(kFALSE), - fPCompatTOF(1.5), - fnNSigmaCompat(2), - fnSigmaCompat(0), - fMC(kFALSE), - fOnePad(kFALSE), - fMCLowEn2011(kFALSE), - fppLowEn2011(kFALSE), - fPbPb(kFALSE), - fTOFdecide(kFALSE), - fOldPid(kFALSE), - fPtThresholdTPC(999999.), - fMaxTrackMomForCombinedPID(999999.), - fPidResponse(0), - fPidCombined(new AliPIDCombined()), - fTPCResponse(new AliTPCPIDResponse()), - fPriorsH(), - fCombDetectors(kTPCTOF), - fUseCombined(kFALSE), - fDefaultPriors(kTRUE) +TObject(), +fnNSigma(5), +fnSigma(0), +fTOFSigma(160.), +fCutTOFmismatch(0.01), +fMinNClustersTPCPID(0), +fnPriors(5), +fPriors(0), +fnPLimit(2), +fPLimit(0), +fAsym(kFALSE), +fTPC(kFALSE), +fTOF(kFALSE), +fITS(kFALSE), +fTRD(kFALSE), +fMatch(0), +fForceTOFforKaons(kFALSE), +fCompat(kFALSE), +fPCompatTOF(1.5), +fUseAsymTOF(kFALSE), +fLownSigmaTOF(-3.), +fUpnSigmaTOF(3.), +fLownSigmaCompatTOF(-3.), +fUpnSigmaCompatTOF(3.), +fnNSigmaCompat(2), +fnSigmaCompat(0), +fMC(kFALSE), +fOnePad(kFALSE), +fMCLowEn2011(kFALSE), +fppLowEn2011(kFALSE), +fPbPb(kFALSE), +fTOFdecide(kFALSE), +fOldPid(kFALSE), +fPtThresholdTPC(999999.), +fMaxTrackMomForCombinedPID(999999.), +fPidResponse(0), +fPidCombined(new AliPIDCombined()), +fTPCResponse(new AliTPCPIDResponse()), +fPriorsH(), +fCombDetectors(kTPCTOF), +fUseCombined(kFALSE), +fDefaultPriors(kTRUE) { // // Default constructor @@ -103,7 +109,7 @@ AliAODPidHF::AliAODPidHF(): fMinnSigmaTOF[i]=-3; fMaxnSigmaTOF[i]=3; } - + } //---------------------- AliAODPidHF::~AliAODPidHF() @@ -114,7 +120,7 @@ AliAODPidHF::~AliAODPidHF() if(fPriors) delete [] fPriors; if(fnSigmaCompat) delete [] fnSigmaCompat; delete fPidCombined; - + delete fTPCResponse; for (Int_t ispecies=0;ispecies performance to be checked Double_t nsigmaMin=999.; for(Int_t ipart=0;ipart<5;ipart++){ if(GetnSigmaTPC(track,ipart,nsigma)==1){ - nsigma=TMath::Abs(nsigma); - if((nsigmafnSigma[0]) pid=-1; + if (nsigma>fnSigma[0]) pid=-1; else pid=specie; } } - + return pid; } //---------------------------- Int_t AliAODPidHF::ApplyPidITSRaw(AliAODTrack *track,Int_t specie) const{ -// truncated mean, ITS PID + // truncated mean, ITS PID Double_t nsigma=-999.; Int_t pid=-1; @@ -299,17 +311,17 @@ Int_t AliAODPidHF::ApplyPidITSRaw(AliAODTrack *track,Int_t specie) const{ Double_t nsigmaMin=999.; for(Int_t ipart=0;ipart<5;ipart++){ if(GetnSigmaITS(track,ipart,nsigma)==1){ - nsigma=TMath::Abs(nsigma); - if((nsigmafnSigma[4]) pid=-1; + if (nsigma>fnSigma[4]) pid=-1; else pid=specie; } } @@ -318,98 +330,76 @@ Int_t AliAODPidHF::ApplyPidITSRaw(AliAODTrack *track,Int_t specie) const{ } //---------------------------- Int_t AliAODPidHF::ApplyPidTOFRaw(AliAODTrack *track,Int_t specie) const{ -// n-sigma cut, TOF PID - + // n-sigma cut, TOF PID + Double_t nsigma=-999.; Int_t pid=-1; - - if(specie<0){ - Double_t nsigmaMin=999.; + + if(specie<0){ + Double_t nsigmaMin=999.; for(Int_t ipart=0;ipart<5;ipart++){ if(GetnSigmaTOF(track,ipart,nsigma)==1){ - nsigma=TMath::Abs(nsigma); - if((nsigmafnSigma[3]) pid=-1; + if(nsigmanSigmaMax) pid=-1; else pid=specie; } } - return pid; - /* - Double_t time[AliPID::kSPECIESN]; - Double_t sigmaTOFPid[AliPID::kSPECIES]; - AliAODPid *pidObj = track->GetDetPid(); - pidObj->GetIntegratedTimes(time); - Double_t sigTOF=pidObj->GetTOFsignal(); - - AliAODEvent *event=(AliAODEvent*)track->GetAODEvent(); - if (event) { - AliTOFHeader* tofH=(AliTOFHeader*)event->GetTOFHeader(); - if (tofH && fPidResponse) { // reading new AOD with new aliroot - AliTOFPIDResponse TOFres = (AliTOFPIDResponse)fPidResponse->GetTOFResponse(); - sigTOF -= TOFres.GetStartTime(track->P()); - if (specie<0) { - for (Int_t ipart = 0; ipart<5; ipart++) { - sigmaTOFPid[ipart]=TOFres.GetExpectedSigma(track->P(),time[ipart],AliPID::ParticleMass(ipart)); - } - } - else sigmaTOFPid[specie]=TOFres.GetExpectedSigma(track->P(),time[specie],AliPID::ParticleMass(specie)); //fTOFResponse is set in InitialiseEvent - } else pidObj->GetTOFpidResolution(sigmaTOFPid); // reading old AOD with new aliroot - } else pidObj->GetTOFpidResolution(sigmaTOFPid); //reading old AOD with old aliroot - - Int_t pid=-1; - - if(specie<0){ - Double_t sigmaTOFtrack; - if (sigmaTOFPid[4]>0) sigmaTOFtrack=sigmaTOFPid[4]; - else sigmaTOFtrack=fTOFSigma; - Double_t nsigmaMax=sigmaTOFtrack*fnSigma[3]; - for(Int_t ipart=0;ipart<5;ipart++){ - Double_t nsigma=TMath::Abs(sigTOF-time[ipart]); - if (sigmaTOFPid[ipart]>0) sigmaTOFtrack=sigmaTOFPid[ipart]; - else sigmaTOFtrack=fTOFSigma; // backward compatibility for old AODs - if((nsigma0) sigmaTOFtrack=sigmaTOFPid[specie]; - else sigmaTOFtrack=fTOFSigma; // backward compatibility for old AODs - if (nsigma>fnSigma[3]*sigmaTOFtrack) { - pid=-1; - }else{ - pid=specie; - } + return pid; +} +//---------------------------- +Int_t AliAODPidHF::ApplyTOFCompatibilityBand(AliAODTrack *track,Int_t specie) const{ + // n-sigma cut, TOF PID + + if(specie<0) return -1; + Double_t nsigma=-999.; + Int_t pid=-1; + + Double_t nSigmaMin,nSigmaMax; + if(fUseAsymTOF){ + nSigmaMin=fLownSigmaCompatTOF; + nSigmaMax=fUpnSigmaCompatTOF; + }else{ + nSigmaMin=-fnSigmaCompat[1]; + nSigmaMax=fnSigmaCompat[1]; } - return pid; - */ + if(GetnSigmaTOF(track,specie,nsigma)==1){ + if(nsigmanSigmaMax) pid=-1; + else pid=specie; + } + return pid; } //------------------------------ void AliAODPidHF::CombinedProbability(AliAODTrack *track,Bool_t *type) const{ -// combined PID stored inside the AOD track - - const Double_t *pid=track->PID(); - Float_t max=0.; - Int_t k=-1; - for (Int_t i=0; i<10; i++) { - if (pid[i]>max) {k=i; max=pid[i];} - } - - if(k==2) type[0]=kTRUE; - if(k==3) type[1]=kTRUE; - if(k==4) type[2]=kTRUE; - - return; + // combined PID stored inside the AOD track + + const Double_t *pid=track->PID(); + Float_t max=0.; + Int_t k=-1; + for (Int_t i=0; i<10; i++) { + if (pid[i]>max) {k=i; max=pid[i];} + } + + if(k==2) type[0]=kTRUE; + if(k==3) type[1]=kTRUE; + if(k==4) type[2]=kTRUE; + + return; } //-------------------------------- Bool_t AliAODPidHF::CheckITSPIDStatus(AliAODTrack *track) const{ @@ -431,7 +421,7 @@ Bool_t AliAODPidHF::CheckTPCPIDStatus(AliAODTrack *track) const{ Bool_t AliAODPidHF::CheckTOFPIDStatus(AliAODTrack *track) const{ // Check if the track is good for TOF PID AliPIDResponse::EDetPidStatus status = fPidResponse->CheckPIDStatus(AliPIDResponse::kTOF,track); - if (status != AliPIDResponse::kDetPidOk) return kFALSE; + if (status != AliPIDResponse::kDetPidOk) return kFALSE; Float_t probMis = fPidResponse->GetTOFMismatchProbability(track); if (probMis > fCutTOFmismatch) return kFALSE; if ((track->GetStatus()&AliESDtrack::kTOFpid )==0 && @@ -460,39 +450,39 @@ Bool_t AliAODPidHF::CheckStatus(AliAODTrack *track,TString detectors) const{ //-------------------------------------------- Bool_t AliAODPidHF::TPCRawAsym(AliAODTrack* track,Int_t specie) const{ // TPC nsigma cut PID, different sigmas in different p bins - + AliAODPid *pidObj = track->GetDetPid(); Double_t mom = pidObj->GetTPCmomentum(); if(mom>fPtThresholdTPC) return kTRUE; - + Double_t nsigma; if(GetnSigmaTPC(track,specie,nsigma)!=1) return kFALSE; nsigma=TMath::Abs(nsigma); - - + + if(momfPLimit[0] && nsigmafPLimit[1] && nsigmaP(); if(ptrack>fMaxTrackMomForCombinedPID) return 1; - + Bool_t okTPC=CheckTPCPIDStatus(track); if(ptrack>fPtThresholdTPC) okTPC=kFALSE; Bool_t okTOF=CheckTOFPIDStatus(track); - + if(fMatch==1){ //TOF || TPC (a la' Andrea R.) - // convention: + // convention: // for the single detectors: -1 = kFALSE, 1 = kTRUE, 0 = compatible // the method returns the sum of the response of the 2 detectors - + if(fTPC && fTOF) { if(!okTPC && !okTOF) return 0; } @@ -501,34 +491,31 @@ Int_t AliAODPidHF::MatchTPCTOF(AliAODTrack *track, Int_t specie){ if(fTPC && okTPC){ tTPCinfo=-1; if(fAsym) { - if(TPCRawAsym(track,specie)) tTPCinfo=1; + if(TPCRawAsym(track,specie)) tTPCinfo=1; }else{ - if(ApplyPidTPCRaw(track,specie)==specie) tTPCinfo=1; + if(ApplyPidTPCRaw(track,specie)==specie) tTPCinfo=1; } if(fCompat && tTPCinfo<0){ - Double_t sig0tmp=fnSigma[0]; - SetSigma(0,fnSigmaCompat[0]); - if(ApplyPidTPCRaw(track,specie)==specie) tTPCinfo=0; - SetSigma(0,sig0tmp); - } + Double_t sig0tmp=fnSigma[0]; + SetSigma(0,fnSigmaCompat[0]); + if(ApplyPidTPCRaw(track,specie)==specie) tTPCinfo=0; + SetSigma(0,sig0tmp); + } } - + Int_t tTOFinfo=0; if(fTOF){ if(!okTOF && fTPC) return tTPCinfo; tTOFinfo=-1; if(ApplyPidTOFRaw(track,specie)==specie) tTOFinfo=1; if(fCompat && tTOFinfo>0){ - if(ptrack>fPCompatTOF) { - Double_t sig0tmp=fnSigma[3]; - SetSigma(3,fnSigmaCompat[1]); - if(ApplyPidTOFRaw(track,specie)==specie) tTOFinfo=0; - SetSigma(3,sig0tmp); - } + if(ptrack>fPCompatTOF) { + if(ApplyTOFCompatibilityBand(track,specie)==specie) tTOFinfo=0; + } } } - - + + if(tTPCinfo+tTOFinfo==0 && fTOFdecide){ if(!okTOF) return tTPCinfo; return tTOFinfo; @@ -542,29 +529,29 @@ Int_t AliAODPidHF::MatchTPCTOF(AliAODTrack *track, Int_t specie){ } return tTPCinfo+tTOFinfo; } - + if(fMatch==2){ //TPC & TOF (a la' Yifei) // convention: -1 = kFALSE, 1 = kTRUE, 0 = not identified - Int_t tTPCinfo=0; - + Int_t tTPCinfo=0; + if(fTPC && okTPC) { tTPCinfo=1; if(fAsym){ - if(!TPCRawAsym(track,specie)) tTPCinfo=-1; + if(!TPCRawAsym(track,specie)) tTPCinfo=-1; }else{ - if(ApplyPidTPCRaw(track,specie)!=specie) tTPCinfo=-1; + if(ApplyPidTPCRaw(track,specie)!=specie) tTPCinfo=-1; } } - + Int_t tTOFinfo=1; if(fTOF){ if(fTPC && !okTOF) return tTPCinfo; if(ApplyPidTPCRaw(track,specie)!=specie) tTOFinfo=-1; } - + if(tTOFinfo==1 && tTPCinfo==1) return 1; - + if(tTPCinfo+tTOFinfo==0 && fITS){ if(!CheckITSPIDStatus(track)) return tTPCinfo+tTOFinfo; Int_t tITSinfo = -1; @@ -573,21 +560,21 @@ Int_t AliAODPidHF::MatchTPCTOF(AliAODTrack *track, Int_t specie){ } return -1; } - + if(fMatch==3){ //TPC for p=fPLimit[0] (a la' Andrea A.) // convention (temporary): -1 = kFALSE, 1 = kTRUE, 0 = not identified if(fTPC && fTOF) if(!okTPC && !okTOF) return 0; - - + + Int_t tTPCinfo=-1; - if(ptrack>=fPLimit[0] && ptrack=fPLimit[0] && ptrack "circular cut" in nSigmaTPC, nSimgaTOF plane // ---> nsigmaTPC^2+nsigmaTOF^2 < cut^2 - // fMatch == 5 ---> "rectangular cut" in nSigmaTPC, nsigmaTOF plane + // fMatch == 5 ---> "rectangular cut" in nSigmaTPC, nsigmaTOF plane // ---> ns1NumberOfSigmasTPC(track,(AliPID::EParticleType)specie); @@ -630,36 +617,37 @@ Int_t AliAODPidHF::MatchTPCTOF(AliAODTrack *track, Int_t specie){ else return -1; } else if(fMatch==5){ + if(fForceTOFforKaons && iPart==1 && !okTOF) return -1; if((nSigmaTPC>fMinnSigmaTPC[iPart] && nSigmaTPCfMinnSigmaTOF[iPart] && nSigmaTOFfMinnSigmaTOF[iPart] && nSigmaTOF0){ - return MatchTPCTOF(track,specie); + return MatchTPCTOF(track,specie); }else{ if(fTPC && !fTOF && !fITS) { Int_t tTPCres=0; if(!fAsym){ - tTPCres=ApplyPidTPCRaw(track,specie); - if(tTPCres==specie) return 1; - else return tTPCres; + tTPCres=ApplyPidTPCRaw(track,specie); + if(tTPCres==specie) return 1; + else return tTPCres; }else{ - if(TPCRawAsym(track,specie)) tTPCres=1; - else tTPCres=-1; + if(TPCRawAsym(track,specie)) tTPCres=1; + else tTPCres=-1; } return tTPCres; }else if(fTOF && !fTPC && !fITS) { - Int_t tTOFres=ApplyPidTOFRaw(track,specie); - if(tTOFres==specie) return 1; + Int_t tTOFres=ApplyPidTOFRaw(track,specie); + if(tTOFres==specie) return 1; else return tTOFres; }else if(fITS && !fTPC && !fTOF) { Int_t tITSres=ApplyPidITSRaw(track,specie); @@ -669,13 +657,13 @@ Int_t AliAODPidHF::MakeRawPid(AliAODTrack *track, Int_t specie){ AliError("You should enable just one detector if you don't want to match"); return 0; } - } + } } //-------------------------------------------- void AliAODPidHF::GetTPCBetheBlochParams(Double_t alephParameters[5]) const { // TPC bethe bloch parameters if(fMC) { // MC - + if(fPbPb) { // PbPb MC alephParameters[0] = 1.44405/50.; @@ -686,23 +674,23 @@ void AliAODPidHF::GetTPCBetheBlochParams(Double_t alephParameters[5]) const { } else { // pp MC if(fMCLowEn2011){ - alephParameters[0]=0.0207667; - alephParameters[1]=29.9936; - alephParameters[2]=3.87866e-11; - alephParameters[3]=2.17291; - alephParameters[4]=7.1623; + alephParameters[0]=0.0207667; + alephParameters[1]=29.9936; + alephParameters[2]=3.87866e-11; + alephParameters[3]=2.17291; + alephParameters[4]=7.1623; }else if(fOnePad){ - alephParameters[0]=0.029021; - alephParameters[1]=25.4181; - alephParameters[2]=4.66596e-08; - alephParameters[3]=1.90008; - alephParameters[4]=4.63783; + alephParameters[0]=0.029021; + alephParameters[1]=25.4181; + alephParameters[2]=4.66596e-08; + alephParameters[3]=1.90008; + alephParameters[4]=4.63783; }else{ - alephParameters[0] = 2.15898/50.; - alephParameters[1] = 1.75295e+01; - alephParameters[2] = 3.40030e-09; - alephParameters[3] = 1.96178e+00; - alephParameters[4] = 3.91720e+00; + alephParameters[0] = 2.15898/50.; + alephParameters[1] = 1.75295e+01; + alephParameters[2] = 3.40030e-09; + alephParameters[3] = 1.96178e+00; + alephParameters[4] = 3.91720e+00; } } @@ -710,24 +698,24 @@ void AliAODPidHF::GetTPCBetheBlochParams(Double_t alephParameters[5]) const { if(fOnePad) { // pp 1-pad (since LHC10d) - alephParameters[0] =1.34490e+00/50.; - alephParameters[1] = 2.69455e+01; - alephParameters[2] = TMath::Exp(-2.97552e+01); - alephParameters[3] = 2.35339e+00; + alephParameters[0] =1.34490e+00/50.; + alephParameters[1] = 2.69455e+01; + alephParameters[2] = TMath::Exp(-2.97552e+01); + alephParameters[3] = 2.35339e+00; alephParameters[4] = 5.98079e+00; - } else if(fPbPb) { // PbPb + } else if(fPbPb) { // PbPb - // alephParameters[0] = 1.25202/50.; - // alephParameters[1] = 2.74992e+01; - // alephParameters[2] = TMath::Exp(-3.31517e+01); - // alephParameters[3] = 2.46246; + // alephParameters[0] = 1.25202/50.; + // alephParameters[1] = 2.74992e+01; + // alephParameters[2] = TMath::Exp(-3.31517e+01); + // alephParameters[3] = 2.46246; // alephParameters[4] = 6.78938; - alephParameters[0] = 5.10207e+00/50.; - alephParameters[1] = 7.94982e+00; - alephParameters[2] = TMath::Exp(-9.07942e+00); - alephParameters[3] = 2.38808e+00; + alephParameters[0] = 5.10207e+00/50.; + alephParameters[1] = 7.94982e+00; + alephParameters[2] = TMath::Exp(-9.07942e+00); + alephParameters[3] = 2.38808e+00; alephParameters[4] = 1.68165e+00; } else if(fppLowEn2011){ // pp low energy @@ -736,7 +724,7 @@ void AliAODPidHF::GetTPCBetheBlochParams(Double_t alephParameters[5]) const { alephParameters[1]=22.353; alephParameters[2]=4.16239e-12; alephParameters[3]=2.61952; - alephParameters[4]=5.76086; + alephParameters[4]=5.76086; } else { // pp no 1-pad (LHC10bc) @@ -749,56 +737,56 @@ void AliAODPidHF::GetTPCBetheBlochParams(Double_t alephParameters[5]) const { } } - + } //----------------------- void AliAODPidHF::SetBetheBloch() { // Set Bethe Bloch Parameters - - Double_t alephParameters[5]; - GetTPCBetheBlochParams(alephParameters); - fTPCResponse->SetBetheBlochParameters(alephParameters[0],alephParameters[1],alephParameters[2],alephParameters[3],alephParameters[4]); - - return; + + Double_t alephParameters[5]; + GetTPCBetheBlochParams(alephParameters); + fTPCResponse->SetBetheBlochParameters(alephParameters[0],alephParameters[1],alephParameters[2],alephParameters[3],alephParameters[4]); + + return; } //-------------------------------------------------------------------------- Int_t AliAODPidHF::GetnSigmaITS(AliAODTrack *track,Int_t species, Double_t &nsigma) const{ // get n sigma for ITS - - + + if (!CheckITSPIDStatus(track)) return -1; - + Double_t nsigmaITS=-999; - + if (fOldPid) { Double_t mom=track->P(); AliAODPid *pidObj = track->GetDetPid(); Double_t dedx=pidObj->GetITSsignal(); - + AliITSPIDResponse itsResponse; AliPID::EParticleType type=AliPID::EParticleType(species); nsigmaITS = itsResponse.GetNumberOfSigmas(mom,dedx,type); - + } // old pid else { // new pid - + AliPID::EParticleType type=AliPID::EParticleType(species); nsigmaITS = fPidResponse->NumberOfSigmasITS(track,type); - + } //new pid - + nsigma = nsigmaITS; - + return 1; - + } //-------------------------------------------------------------------------- Int_t AliAODPidHF::GetnSigmaTPC(AliAODTrack *track, Int_t species, Double_t &nsigma) const{ - // get n sigma for TPC - + // get n sigma for TPC + if(!CheckTPCPIDStatus(track)) return -1; Double_t nsigmaTPC=-999; @@ -820,15 +808,15 @@ Int_t AliAODPidHF::GetnSigmaTPC(AliAODTrack *track, Int_t species, Double_t &nsi nsigma=nsigmaTPC; } return 1; -} +} //----------------------------- Int_t AliAODPidHF::GetnSigmaTOF(AliAODTrack *track,Int_t species, Double_t &nsigma) const{ // get n sigma for TOF - + if(!CheckTOFPIDStatus(track)) return -1; - + if(fPidResponse){ nsigma = fPidResponse->NumberOfSigmasTOF(track,(AliPID::EParticleType)species); return 1; @@ -842,91 +830,91 @@ Int_t AliAODPidHF::GetnSigmaTOF(AliAODTrack *track,Int_t species, Double_t &nsig //----------------------- Bool_t AliAODPidHF::IsExcluded(AliAODTrack *track, Int_t labelTrack, Double_t nsigmaCut, TString detectors) { // Exclude a given hypothesis (labelTracks) in detector - + if (detectors.Contains("ITS")) { - + AliInfo("Nothing to be done"); /* - Double_t nsigma=0.; - if (GetnSigmaITS(track,labelTrack,nsigma)==1){ - if(nsigma>nsigmaCut) return kTRUE; - } - */ + Double_t nsigma=0.; + if (GetnSigmaITS(track,labelTrack,nsigma)==1){ + if(nsigma>nsigmaCut) return kTRUE; + } + */ return kFALSE; - + } else if (detectors.Contains("TPC")) { - + Double_t nsigma=0.; if (GetnSigmaTPC(track,labelTrack,nsigma)==1){ if(nsigma>nsigmaCut) return kTRUE; } return kFALSE; - + } else if (detectors.Contains("TOF")) { - + Double_t nsigma=0.; if (GetnSigmaTOF(track,labelTrack,nsigma)==1){ if(nsigma>nsigmaCut) return kTRUE; } return kFALSE; - + } return kFALSE; - + } //----------------------- Bool_t AliAODPidHF::IsTOFPiKexcluded(AliAODTrack *track,Double_t nsigmaK){ // TOF proton compatibility - + if(!CheckTOFPIDStatus(track)) return 0; - + Double_t nsigma; if(GetnSigmaTOF(track,3,nsigma)==1){ if(nsigma>nsigmaK) return kTRUE; - } + } return kFALSE; /* Double_t time[AliPID::kSPECIESN]; - Double_t sigmaTOFPid[AliPID::kSPECIES]; - AliAODPid *pidObj = track->GetDetPid(); - pidObj->GetIntegratedTimes(time); - Double_t sigTOF=pidObj->GetTOFsignal(); - - AliAODEvent *event=(AliAODEvent*)track->GetAODEvent(); - if (event) { + Double_t sigmaTOFPid[AliPID::kSPECIES]; + AliAODPid *pidObj = track->GetDetPid(); + pidObj->GetIntegratedTimes(time); + Double_t sigTOF=pidObj->GetTOFsignal(); + + AliAODEvent *event=(AliAODEvent*)track->GetAODEvent(); + if (event) { AliTOFHeader* tofH=(AliTOFHeader*)event->GetTOFHeader(); - if (tofH && fPidResponse) { - AliTOFPIDResponse TOFres = (AliTOFPIDResponse)fPidResponse->GetTOFResponse(); - sigTOF -= TOFres.GetStartTime(track->P()); - sigmaTOFPid[3]=TOFres.GetExpectedSigma(track->P(),time[3],AliPID::ParticleMass(3)); + if (tofH && fPidResponse) { + AliTOFPIDResponse TOFres = (AliTOFPIDResponse)fPidResponse->GetTOFResponse(); + sigTOF -= TOFres.GetStartTime(track->P()); + sigmaTOFPid[3]=TOFres.GetExpectedSigma(track->P(),time[3],AliPID::ParticleMass(3)); } else pidObj->GetTOFpidResolution(sigmaTOFPid); - } else pidObj->GetTOFpidResolution(sigmaTOFPid); - Double_t sigmaTOFtrack; - if (sigmaTOFPid[3]>0) sigmaTOFtrack=sigmaTOFPid[3]; - else sigmaTOFtrack=fTOFSigma; // backward compatibility for old AODs - - if((sigTOF-time[3])>nsigmaK*sigmaTOFtrack)return kTRUE;// K, Pi excluded (->LIKELY A PROTON) - - return kFALSE; - */ + } else pidObj->GetTOFpidResolution(sigmaTOFPid); + Double_t sigmaTOFtrack; + if (sigmaTOFPid[3]>0) sigmaTOFtrack=sigmaTOFPid[3]; + else sigmaTOFtrack=fTOFSigma; // backward compatibility for old AODs + + if((sigTOF-time[3])>nsigmaK*sigmaTOFtrack)return kTRUE;// K, Pi excluded (->LIKELY A PROTON) + + return kFALSE; + */ } //-------------------------------------------------------------------------- void AliAODPidHF::SetPriorDistribution(AliPID::EParticleType type,TH1F *prior){ - + // // method setting the prior distributions to the AliPIDCombined object of the AliAODPidHF data member // all the checks are done directly in the AliPIDCombined object // - + GetPidCombined()->SetPriorDistribution(type,prior); } //-------------------------------------------------------------------------- void AliAODPidHF::DrawPrior(AliPID::EParticleType type){ - + // // Drawing prior distribution for type "type" - + new TCanvas(); GetPidCombined()->GetPriorDistribution(type)->Draw(); } @@ -934,7 +922,7 @@ void AliAODPidHF::DrawPrior(AliPID::EParticleType type){ //----------------------------- void AliAODPidHF::SetPriorsHistos(TString priorFileName){ // Set histograms with priors - + for (Int_t ispecies=0;ispeciesSetSelectedSpecies(AliPID::kSPECIES); if(!fDefaultPriors){ for (Int_t ispecies=0;ispeciesSetPriorDistribution(static_cast(ispecies),fPriorsH[ispecies]); } }else{ - fPidCombined->SetDefaultTPCPriors(); + fPidCombined->SetDefaultTPCPriors(); } switch (fCombDetectors){ - case kTPCTOF: - fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF); - break; - case kTPCAndTOF: - fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC & AliPIDResponse::kDetTOF); - break; - case kTPCITS: - fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetITS); - break; - case kTPC: - fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC); - break; - case kTOF: - fPidCombined->SetDetectorMask(AliPIDResponse::kDetTOF); - break; + case kTPCTOF: + fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF); + break; + case kTPCAndTOF: + fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC & AliPIDResponse::kDetTOF); + break; + case kTPCITS: + fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetITS); + break; + case kTPC: + fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC); + break; + case kTOF: + fPidCombined->SetDetectorMask(AliPIDResponse::kDetTOF); + break; } } +//----------------------------- +void AliAODPidHF::PrintAll() const { + // print the configuration + printf("Detectors used for PID: "); + if(fITS) printf("ITS "); + if(fTPC) printf("TPC "); + if(fTRD) printf("TRD "); + if(fTOF) printf("TOF "); + printf("\n"); + printf("Minimum TPC PID clusters = %d\n",fMinNClustersTPCPID); + printf("Maximum momentum for using TPC PID = %f\n",fPtThresholdTPC); + printf("TOF Mismatch probablility cut = %f\n",fCutTOFmismatch); + printf("Maximum momentum for combined PID TPC PID = %f\n",fMaxTrackMomForCombinedPID); + if(fOldPid){ + printf("Use OLD PID"); + printf(" fMC = %d\n",fMC); + printf(" fPbPb = %d\n",fPbPb); + printf(" fOnePad = %d\n",fOnePad); + printf(" fMCLowEn2011 = %d\n",fMCLowEn2011); + printf(" fppLowEn2011 = %d\n",fppLowEn2011); + } + printf("--- Matching algorithm = %d ---\n",fMatch); + if(fMatch==1){ + if(fITS) printf("nSigmaITS = %.2f\n",fnSigma[4]); + if(fTOF){ + printf("nSigmaTOF = %.2f\n",fnSigma[3]); + if(fCompat) printf("Compatibility band at nSigmaTOF=%.2f for p>%.2f\n",fnSigmaCompat[1],fPCompatTOF); + } + if(fTPC){ + if(fAsym){ + printf("nSigmaTPC:\n"); + printf(" pt<%.2f \t nsigmaTPC= %.2f\n",fPLimit[0],fnSigma[0]); + printf(" %.2f%.2f \t nsigmaTPC= %.2f\n",fPLimit[1],fnSigma[2]); + }else{ + printf("nSigmaTPC = %.2f\n",fnSigma[0]); + } + if(fCompat) printf("Compatibility band at nSigmaTPC=%.2f\n",fnSigmaCompat[0]); + } + }else if(fMatch==4){ + printf("Cuts on sqrt(nSigmaTPC^2+nSigmaTOF^2):\n"); + printf(" Pions: nSigma = %.2f\n",fMaxnSigmaCombined[0]); + printf(" Kaons: nSigma = %.2f\n",fMaxnSigmaCombined[1]); + printf(" Protons: nSigma = %.2f\n",fMaxnSigmaCombined[2]); + }else if(fMatch==5){ + printf("nSigma ranges:\n"); + printf(" Pions: %.2f