fCachePID(kFALSE),
fOADBPath(),
fCustomTPCpidResponse(),
+fCustomTPCetaMaps(),
fBeamType("PP"),
fLHCperiod(),
fMCperiodTPC(),
fCachePID(other.fCachePID),
fOADBPath(other.fOADBPath),
fCustomTPCpidResponse(other.fCustomTPCpidResponse),
+fCustomTPCetaMaps(other.fCustomTPCetaMaps),
fBeamType("PP"),
fLHCperiod(),
fMCperiodTPC(),
fITSPIDmethod=other.fITSPIDmethod;
fOADBPath=other.fOADBPath;
fCustomTPCpidResponse=other.fCustomTPCpidResponse;
+ fCustomTPCetaMaps=other.fCustomTPCetaMaps;
fTuneMConData=other.fTuneMConData;
fTuneMConDataMask=other.fTuneMConDataMask;
fIsMC=other.fIsMC;
fTPCResponse.SetEtaCorrMap(0x0);
fTPCResponse.SetSigmaParams(0x0, 0);
+
+ TString fileNameMaps(Form("%s/COMMON/PID/data/TPCetaMaps.root", fOADBPath.Data()));
+ if (!fCustomTPCetaMaps.IsNull()) fileNameMaps=fCustomTPCetaMaps;
+
// Load the eta correction maps
AliOADBContainer etaMapsCont(Form("TPCetaMaps_%s_pass%d", dataType.Data(), recopass));
- Int_t statusCont = etaMapsCont.InitFromFile(Form("%s/COMMON/PID/data/TPCetaMaps.root", fOADBPath.Data()),
- Form("TPCetaMaps_%s_pass%d", dataType.Data(), recopass));
+ Int_t statusCont = etaMapsCont.InitFromFile(fileNameMaps.Data(), Form("TPCetaMaps_%s_pass%d", dataType.Data(), recopass));
if (statusCont) {
AliError("Failed initializing TPC eta correction maps from OADB -> Disabled eta correction");
fUseTPCEtaCorrection = kFALSE;
}
else {
- AliInfo(Form("Loading TPC eta correction map from %s/COMMON/PID/data/TPCetaMaps.root", fOADBPath.Data()));
+ AliInfo(Form("Loading TPC eta correction map from %s", fileNameMaps.Data()));
TH2D* etaMap = 0x0;
fUseTPCEtaCorrection = kFALSE;
}
else {
- AliInfo(Form("Loaded TPC eta correction map (refine factors %.2f/%.2f) from %s/COMMON/PID/data/TPCetaMaps.root: %s (MD5(map) = %s)",
- refineFactorMapX, refineFactorMapY, fOADBPath.Data(), fTPCResponse.GetEtaCorrMap()->GetTitle(),
+ AliInfo(Form("Loaded TPC eta correction map (refine factors %.2f/%.2f) from %s: %s (MD5(map) = %s)",
+ refineFactorMapX, refineFactorMapY, fileNameMaps.Data(), fTPCResponse.GetEtaCorrMap()->GetTitle(),
GetChecksum(fTPCResponse.GetEtaCorrMap()).Data()));
}
// Load the sigma parametrisation (1/dEdx vs tanTheta_local (~eta))
AliOADBContainer etaSigmaMapsCont(Form("TPCetaSigmaMaps_%s_pass%d", dataType.Data(), recopass));
- statusCont = etaSigmaMapsCont.InitFromFile(Form("%s/COMMON/PID/data/TPCetaMaps.root", fOADBPath.Data()),
- Form("TPCetaSigmaMaps_%s_pass%d", dataType.Data(), recopass));
+ statusCont = etaSigmaMapsCont.InitFromFile(fileNameMaps.Data(), Form("TPCetaSigmaMaps_%s_pass%d", dataType.Data(), recopass));
if (statusCont) {
AliError("Failed initializing TPC eta sigma maps from OADB -> Using old sigma parametrisation");
}
else {
- AliInfo(Form("Loading TPC eta sigma map from %s/COMMON/PID/data/TPCetaMaps.root", fOADBPath.Data()));
+ AliInfo(Form("Loading TPC eta sigma map from %s", fileNameMaps.Data()));
TObjArray* etaSigmaPars = 0x0;
fTPCResponse.SetSigmaParams(0x0, 0);
}
else {
- AliInfo(Form("Loaded TPC sigma correction map (refine factors %.2f/%.2f) from %s/COMMON/PID/data/TPCetaMaps.root: %s (MD5(map) = %s, sigmaPar0 = %f)",
- refineFactorSigmaMapX, refineFactorSigmaMapY, fOADBPath.Data(), fTPCResponse.GetSigmaPar1Map()->GetTitle(),
+ AliInfo(Form("Loaded TPC sigma correction map (refine factors %.2f/%.2f) from %s: %s (MD5(map) = %s, sigmaPar0 = %f)",
+ refineFactorSigmaMapX, refineFactorSigmaMapY, fileNameMaps.Data(), fTPCResponse.GetSigmaPar1Map()->GetTitle(),
GetChecksum(fTPCResponse.GetSigmaPar1Map()).Data(), sigmaPar0));
}
delete fArrPidResponseMaster;
fArrPidResponseMaster=NULL;
- TString fileName(Form("%s/COMMON/PID/data/TPCPIDResponse.root", fOADBPath.Data()));
TFile *f=NULL;
- if (!fCustomTPCpidResponse.IsNull()) fileName=fCustomTPCpidResponse;
TString fileNamePIDresponse(Form("%s/COMMON/PID/data/TPCPIDResponse.root", fOADBPath.Data()));
+ if (!fCustomTPCpidResponse.IsNull()) fileNamePIDresponse=fCustomTPCpidResponse;
+
f=TFile::Open(fileNamePIDresponse.Data());
if (f && f->IsOpen() && !f->IsZombie()){
fArrPidResponseMaster=dynamic_cast<TObjArray*>(f->Get("TPCPIDResponse"));
}
AliDebug(1,Form("Slice Range set to %d - %d",TRDslicesForPID[0],TRDslicesForPID[1]));
}
-
//______________________________________________________________________________
void AliPIDResponse::SetTRDdEdxParams()
{
return pidStatus;
}
//______________________________________________________________________________
- AliPIDResponse::EDetPidStatus AliPIDResponse::GetComputeTOFProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const
+ AliPIDResponse::EDetPidStatus AliPIDResponse::GetComputeTOFProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[],Bool_t kNoMism) const
{
//
// Compute PID probabilities for TOF
// Beam type --> fBeamTypeNum
// N TOF cluster --> TOF header --> to get the TOF header we need to add a virtual method in AliVTrack extended to ESD and AOD tracks
// isMC --> fIsMC
-
+ Float_t pt = track->Pt();
+ Float_t mismPropagationFactor[10] = {1.,1.,1.,1.,1.,1.,1.,1.,1.,1.};
+ if(! kNoMism){ // this flag allows to disable mismatch for iterative procedure to get priors
+ mismPropagationFactor[3] = 1 + TMath::Exp(1 - 1.12*pt);// it has to be alligned with the one in AliPIDCombined
+ mismPropagationFactor[4] = 1 + 1./(4.71114 - 5.72372*pt + 2.94715*pt*pt);// it has to be alligned with the one in AliPIDCombined
+
Int_t nTOFcluster = 0;
if(track->GetTOFHeader() && track->GetTOFHeader()->GetTriggerMask()){ // N TOF clusters available
nTOFcluster = track->GetTOFHeader()->GetNumberOfTOFclusters();
- if(fIsMC) nTOFcluster *= 1.5; // +50% in MC
+ if(fIsMC) nTOFcluster = Int_t(nTOFcluster * 1.5); // +50% in MC
}
else{
switch(fBeamTypeNum){
+ case kPP: // pp
+ nTOFcluster = 80;
+ break;
+ case kPPB: // pPb 5.05 ATeV
+ nTOFcluster = Int_t(308 - 2.12*fCurrCentrality + TMath::Exp(4.917 -0.1604*fCurrCentrality));
+ break;
+ case kPBPB: // PbPb 2.76 ATeV
+ nTOFcluster = Int_t(TMath::Exp(9.4 - 0.022*fCurrCentrality));
+ break;
+ }
+ }
+
+ switch(fBeamTypeNum){ // matching window factors for 3 cm and 10 cm (about (10/3)^2)
case kPP: // pp 7 TeV
- nTOFcluster = 50;
+ nTOFcluster *= 10;
break;
case kPPB: // pPb 5.05 ATeV
- nTOFcluster = 50 + (100-fCurrCentrality)*50;
+ nTOFcluster *= 10;
break;
- case kPBPB: // PbPb 2.76 ATeV
- nTOFcluster = 50 + (100-fCurrCentrality)*150;
+ case kPBPB: // pPb 5.05 ATeV
+ // nTOFcluster *= 1;
break;
}
+
+
+ fgTOFmismatchProb=fTOFResponse.GetMismatchProbability(track->GetTOFsignal(),track->Eta()) * nTOFcluster *6E-6 * (1 + 2.90505e-01/pt/pt); // mism weight * tof occupancy (including matching window factor) * pt dependence
+
}
- //fTOFResponse.GetMismatchProbability(track->GetTOFsignal(),track->Eta()) * 0.01; // for future implementation of mismatch (i.e. 1% mismatch that should be extended for PbPb, pPb)
-
// set flat distribution (no decision)
for (Int_t j=0; j<nSpecies; j++) p[j]=1./nSpecies;
else
p[j] = TMath::Exp(-(nsigmas - fTOFtail*0.5)*fTOFtail)/sig;
- p[j] += fgTOFmismatchProb;
+ p[j] += fgTOFmismatchProb*mismPropagationFactor[j];
}
return kDetPidOk;
void SetCustomTPCpidResponse(const char* tpcpid) { fCustomTPCpidResponse = tpcpid; }
const char* GetCustomTPCpidResponse() const { return fCustomTPCpidResponse.Data(); }
+ void SetCustomTPCetaMaps(const char* tpcEtaMaps) { fCustomTPCetaMaps = tpcEtaMaps; }
+ const char* GetCustomTPCetaMaps() const { return fCustomTPCetaMaps.Data(); }
+
void InitialiseEvent(AliVEvent *event, Int_t pass, Int_t run=-1);
void SetCurrentFile(const char* file) { fCurrentFile=file; }
AliPIDResponse(const AliPIDResponse &other);
AliPIDResponse& operator=(const AliPIDResponse &other);
+ EBeamType GetBeamType() const {return fBeamTypeNum;};
+
protected:
AliITSPIDResponse fITSResponse; //PID response function of the ITS
TString fOADBPath; // OADB path to use
TString fCustomTPCpidResponse; // Custom TPC Pid Response file for debugging purposes
+ TString fCustomTPCetaMaps; // Custom TPC eta map file for debugging purposes
TString fBeamType; //! beam type (PP) or (PBPB)
TString fLHCperiod; //! LHC period
EDetPidStatus GetComputePIDProbability (EDetector detCode, const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
EDetPidStatus GetComputeITSProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
EDetPidStatus GetComputeTPCProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
- EDetPidStatus GetComputeTOFProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
+ EDetPidStatus GetComputeTOFProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[],Bool_t kNoMism=kFALSE) const;
EDetPidStatus GetComputeEMCALProbability(const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
EDetPidStatus GetComputePHOSProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
EDetPidStatus GetComputeHMPIDProbability(const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;