return 0;
}
//_________________________________________________________________________
-void AliAODpidUtil::MakeTPCPID(AliAODTrack *track,Double_t *p) const
+void AliAODpidUtil::MakeTPCPID(const AliAODTrack *track,Double_t *p) const
{
//
// TPC pid using bethe-bloch and gaussian response
if ((track->GetStatus()&AliESDtrack::kTPCin )==0) return;
- Double_t mom = track->P();
AliAODPid *pidObj = track->GetDetPid();
- if (pidObj) mom = pidObj->GetTPCmomentum();
- UShort_t nTPCClus=pidObj->GetTPCsignalN();
-
- Double_t dedx=pidObj->GetTPCsignal();
+ Double_t mom = track->P();
+ Double_t dedx = 0.;
+ UShort_t nTPCClus = 0;
+ if (pidObj) {
+ nTPCClus = pidObj->GetTPCsignalN();
+ dedx = pidObj->GetTPCsignal();
+ mom = pidObj->GetTPCmomentum();
+ }
+
Bool_t mismatch=kTRUE;
for (Int_t j=0; j<AliPID::kSPECIES; j++) {
}
if (mismatch)
- for (Int_t j=0; j<AliPID::kSPECIES; j++) p[j]=1/AliPID::kSPECIES;
+ for (Int_t j=0; j<AliPID::kSPECIES; j++) p[j]=1./AliPID::kSPECIES;
return;
}
//_________________________________________________________________________
-void AliAODpidUtil::MakeITSPID(AliAODTrack *track,Double_t *p) const
+void AliAODpidUtil::MakeITSPID(const AliAODTrack *track,Double_t *p) const
{
//
// ITS PID
Double_t mom=track->P();
AliAODPid *pidObj = track->GetDetPid();
- Double_t dedx = pidObj->GetITSsignal();
+ Double_t dedx = 0.;
+ if (pidObj) {
+ dedx = pidObj->GetITSsignal();
+ }
+
Bool_t mismatch = kTRUE;
Bool_t isSA = kTRUE;
if(track->GetStatus() & AliESDtrack::kTPCin){
}
//_________________________________________________________________________
-void AliAODpidUtil::MakeTOFPID(AliAODTrack *track, Double_t *p) const
+void AliAODpidUtil::MakeTOFPID(const AliAODTrack *track, Double_t *p) const
{
//
// TOF PID using gaussian response
}
if (mismatch)
- for (Int_t j=0; j<AliPID::kSPECIES; j++) p[j]=1/AliPID::kSPECIES;
+ for (Int_t j=0; j<AliPID::kSPECIES; j++) p[j]=1./AliPID::kSPECIES;
return;
}
//_________________________________________________________________________
-void AliAODpidUtil::MakeTRDPID(AliAODTrack *track,Double_t *p) const
+void AliAODpidUtil::MakeTRDPID(const AliAODTrack *track,Double_t *p) const
{
// Method to recalculate the TRD PID probabilities
fTRDResponse.GetResponse(pidObj->GetTRDnSlices(),dedx,mom,p,norm);
return;
}
+
+//_________________________________________________________________________
+Float_t AliAODpidUtil::NumberOfSigmasTPC(const AliAODTrack *track, AliPID::EParticleType type) const {
+
+ Double_t mom = 0.0;
+ AliAODPid *pidObj = 0x0;
+ if (track) {
+ mom = track->P();
+ pidObj = track->GetDetPid();
+ }
+ UShort_t nTPCClus=0;
+ Double_t tpcSignal=0.0;
+ if (pidObj) {
+ nTPCClus=pidObj->GetTPCsignalN();
+ mom = pidObj->GetTPCmomentum();
+ tpcSignal = pidObj->GetTPCsignal();
+ }
+ return fTPCResponse.GetNumberOfSigmas(mom,tpcSignal,nTPCClus,type);
+}
+
+//_________________________________________________________________________
+Float_t AliAODpidUtil::NumberOfSigmasTOF(const AliAODTrack *track, AliPID::EParticleType type) const {
+ Double_t times[AliPID::kSPECIES]={0.};
+ Double_t sigmaTOFPid[AliPID::kSPECIES]={0.};
+ AliAODPid *pidObj = 0x0;
+ Double_t mom = 0.0;
+ if (track) {
+ pidObj = track->GetDetPid();
+ mom = track->P();
+ }
+ Double_t tofSignal = 0.0;
+ if (pidObj) {
+ pidObj->GetIntegratedTimes(times);
+ pidObj->GetTOFpidResolution(sigmaTOFPid);
+ tofSignal = pidObj->GetTOFsignal();
+ }
+ if (sigmaTOFPid[type]>0) return (tofSignal - times[type])/sigmaTOFPid[type];
+ else return (tofSignal - times[type])/fTOFResponse.GetExpectedSigma(mom,times[type],AliPID::ParticleMass(type));
+}
+
+//_________________________________________________________________________
+Float_t AliAODpidUtil::NumberOfSigmasITS(const AliAODTrack *track, AliPID::EParticleType type) const {
+ AliAODPid *pidObj = 0x0;
+ UChar_t clumap=0;
+ Float_t mom=0.0;
+ UShort_t nTPCClus=0;
+ if (track) {
+ pidObj = track->GetDetPid();
+ clumap=track->GetITSClusterMap();
+ mom=track->P();
+ nTPCClus=track->GetTPCNcls();
+ }
+ Int_t nPointsForPid=0;
+ for(Int_t i=2; i<6; i++){
+ if(clumap&(1<<i)) ++nPointsForPid;
+ }
+ Float_t dEdx=0.0;
+ if (pidObj) dEdx=pidObj->GetITSsignal();
+ Bool_t isSA=kTRUE;
+ if(nTPCClus>0) isSA=kFALSE;
+ return fITSResponse.GetNumberOfSigmas(mom,dEdx,type,nPointsForPid,isSA);
+}