#include <AliPID.h>
#include <AliOADBContainer.h>
#include <AliTRDPIDResponseObject.h>
+#include <AliTRDdEdxParams.h>
#include <AliTOFPIDParams.h>
#include <AliHMPIDPIDParams.h>
fTuneMConData(kFALSE),
fTuneMConDataMask(kDetTOF|kDetTPC),
fIsMC(isMC),
-fCachePID(kTRUE),
+fCachePID(kFALSE),
fOADBPath(),
fCustomTPCpidResponse(),
fBeamType("PP"),
fUseTPCEtaCorrection(kFALSE),
fUseTPCMultiplicityCorrection(kFALSE),
fTRDPIDResponseObject(NULL),
+fTRDdEdxParams(NULL),
fTOFtail(0.9),
fTOFPIDParams(NULL),
fHMPIDPIDParams(NULL),
//
delete fArrPidResponseMaster;
delete fTRDPIDResponseObject;
+ delete fTRDdEdxParams;
delete fTOFPIDParams;
}
fUseTPCEtaCorrection(other.fUseTPCEtaCorrection),
fUseTPCMultiplicityCorrection(other.fUseTPCMultiplicityCorrection),
fTRDPIDResponseObject(NULL),
+fTRDdEdxParams(NULL),
fTOFtail(0.9),
fTOFPIDParams(NULL),
fHMPIDPIDParams(NULL),
fUseTPCEtaCorrection=other.fUseTPCEtaCorrection;
fUseTPCMultiplicityCorrection=other.fUseTPCMultiplicityCorrection;
fTRDPIDResponseObject=NULL;
+ fTRDdEdxParams=NULL;
fEMCALPIDParams=NULL;
fTOFtail=0.9;
fTOFPIDParams=NULL;
return nSigma;
}
+//______________________________________________________________________________
+Float_t AliPIDResponse::NumberOfSigmasTRD(const AliVParticle *vtrack, AliPID::EParticleType type) const
+{
+ //
+ // Calculate the number of sigmas in the TRD
+ //
+ return NumberOfSigmas(kTRD, vtrack, type);
+}
+
//______________________________________________________________________________
Float_t AliPIDResponse::NumberOfSigmasTOF(const AliVParticle *vtrack, AliPID::EParticleType type) const
{
switch (detector){
case kITS: return GetSignalDeltaITS(track,type,val,ratio); break;
case kTPC: return GetSignalDeltaTPC(track,type,val,ratio); break;
+ case kTRD: return GetSignalDeltaTRD(track,type,val,ratio); break;
case kTOF: return GetSignalDeltaTOF(track,type,val,ratio); break;
case kHMPID: return GetSignalDeltaHMPID(track,type,val,ratio); break;
default: return kDetNoSignal;
SetTPCEtaMaps();
SetTRDPidResponseMaster();
+ //has to precede InitializeTRDResponse(), otherwise the read-out fTRDdEdxParams is not pased in TRDResponse!
+ SetTRDdEdxParams();
InitializeTRDResponse();
SetEMCALPidResponseMaster();
fBeamTypeNum=kPP;
fMCperiodTPC="LHC10F6A";
if (fCurrentAliRootRev >= 62714)
- fMCperiodTPC="LHC13B2_FIXn1";
+ fMCperiodTPC="LHC14E2";
}
// for the moment use LHC12b parameters up to LHC12d
if (fRun>=177312 /*&& fRun<=179356*/) {
fBeamTypeNum=kPP;
fMCperiodTPC="LHC10F6A";
if (fCurrentAliRootRev >= 62714)
- fMCperiodTPC="LHC13B2_FIXn1";
+ fMCperiodTPC="LHC14E2";
}
// if (fRun>=179357 && fRun<=183173) { fLHCperiod="LHC12C"; fBeamType="PP"; fBeamTypeNum=kPP;/*fMCperiodTPC="";*/ }
// if (fRun>=183174 && fRun<=186345) { fLHCperiod="LHC12D"; fBeamType="PP"; fBeamTypeNum=kPP;/*fMCperiodTPC="";*/ }
if (fCurrentFile.Contains("LHC12f1") || fCurrentFile.Contains("LHC12i3")) fMCperiodTPC="LHC12F1";
// exception for 12c4
if (fCurrentFile.Contains("LHC12c4")) fMCperiodTPC="LHC12C4";
- // exception for 12d and 13d pp periods
- if (fBeamType=="PP" && fCurrentAliRootRev >= 61605) fMCperiodTPC="LHC13D1";
+ // exception for 13d1 11d anchored prod
+ if (fLHCperiod=="LHC11D" && fCurrentFile.Contains("LHC13d1")) fMCperiodTPC="LHC13D1";
}
//______________________________________________________________________________
// Set PID Params and references to the TRD PID response
//
fTRDResponse.SetPIDResponseObject(fTRDPIDResponseObject);
+ fTRDResponse.SetdEdxParams(fTRDdEdxParams);
}
//______________________________________________________________________________
AliDebug(1,Form("Slice Range set to %d - %d",TRDslicesForPID[0],TRDslicesForPID[1]));
}
+//______________________________________________________________________________
+void AliPIDResponse::SetTRDdEdxParams()
+{
+ if(fTRDdEdxParams) return;
+
+ const TString containerName = "TRDdEdxParamsContainer";
+ AliOADBContainer cont(containerName.Data());
+
+ const TString filePathNamePackage=Form("%s/COMMON/PID/data/TRDdEdxParams.root", fOADBPath.Data());
+
+ const Int_t statusCont = cont.InitFromFile(filePathNamePackage.Data(), cont.GetName());
+ if (statusCont){
+ AliFatal("Failed initializing settings from OADB");
+ }
+ else{
+ AliInfo(Form("Loading %s from %s\n", cont.GetName(), filePathNamePackage.Data()));
+
+ fTRDdEdxParams = (AliTRDdEdxParams*)(cont.GetObject(fRun, "default"));
+ //fTRDdEdxParams->Print();
+
+ if(!fTRDdEdxParams){
+ AliError(Form("TRD dEdx Params default not found"));
+ }
+ }
+}
+
//______________________________________________________________________________
void AliPIDResponse::SetTOFPidResponseMaster()
{
switch (detector){
case kITS: return GetNumberOfSigmasITS(track, type); break;
case kTPC: return GetNumberOfSigmasTPC(track, type); break;
+ case kTRD: return GetNumberOfSigmasTRD(track, type); break;
case kTOF: return GetNumberOfSigmasTOF(track, type); break;
case kHMPID: return GetNumberOfSigmasHMPID(track, type); break;
case kEMCAL: return GetNumberOfSigmasEMCAL(track, type); break;
AliVTrack *track=(AliVTrack*)vtrack;
const EDetPidStatus pidStatus=GetTPCPIDStatus(track);
- if (pidStatus!=kDetPidOk) return -999.;
+ if (pidStatus==kDetNoSignal) return -999.;
// the following call is needed in order to fill the transient data member
// fTPCsignalTuned which is used in the TPCPIDResponse to judge
return fTPCResponse.GetNumberOfSigmas(track, type, AliTPCPIDResponse::kdEdxDefault, fUseTPCEtaCorrection, fUseTPCMultiplicityCorrection);
}
+//______________________________________________________________________________
+Float_t AliPIDResponse::GetNumberOfSigmasTRD(const AliVParticle *vtrack, AliPID::EParticleType type) const
+{
+ //
+ // Calculate the number of sigmas in the TRD
+ //
+
+ AliVTrack *track=(AliVTrack*)vtrack;
+
+ const EDetPidStatus pidStatus=GetTRDPIDStatus(track);
+ if (pidStatus!=kDetPidOk) return -999.;
+
+ return fTRDResponse.GetNumberOfSigmas(track,type);
+}
+
//______________________________________________________________________________
Float_t AliPIDResponse::GetNumberOfSigmasTOF(const AliVParticle *vtrack, AliPID::EParticleType type) const
{
return GetTPCPIDStatus(track);
}
+//______________________________________________________________________________
+AliPIDResponse::EDetPidStatus AliPIDResponse::GetSignalDeltaTRD(const AliVParticle *vtrack, AliPID::EParticleType type, Double_t &val, Bool_t ratio/*=kFALSE*/) const
+{
+ //
+ // Signal minus expected Signal for TRD
+ //
+ AliVTrack *track=(AliVTrack*)vtrack;
+ val=fTRDResponse.GetSignalDelta(track,type,ratio);
+
+ return GetTRDPIDStatus(track);
+}
+
//______________________________________________________________________________
AliPIDResponse::EDetPidStatus AliPIDResponse::GetSignalDeltaTOF(const AliVParticle *vtrack, AliPID::EParticleType type, Double_t &val, Bool_t ratio/*=kFALSE*/) const
{
for (Int_t j=0; j<nSpecies; j++) p[j]=1./nSpecies;
const EDetPidStatus pidStatus=GetTPCPIDStatus(track);
- if (pidStatus!=kDetPidOk) return pidStatus;
+ if (pidStatus==kDetNoSignal) return pidStatus;
Double_t dedx=track->GetTPCsignal();
Bool_t mismatch=kTRUE/*, heavy=kTRUE*/;
for (Int_t j=0; j<nSpecies; j++) p[j]=1./nSpecies;
}
- return kDetPidOk;
+ return pidStatus;
}
//______________________________________________________________________________
AliPIDResponse::EDetPidStatus AliPIDResponse::GetComputeTOFProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const
//mismatch
const EDetPidStatus tpcStatus=GetTPCPIDStatus(track);
- if (tpcStatus!=kDetPidOk) return 0.;
+ if (tpcStatus==kDetNoSignal) return 0.;
const Double_t meanCorrFactor = 0.11/fTOFtail; // Correction factor on the mean because of the tail (should be ~ 0.1 with tail = 1.1)
Bool_t mismatch = kTRUE/*, heavy = kTRUE*/;