AliHFEpidBase()
, fLineCrossingsEnabled(0)
, fkEtaCorrection(NULL)
+ , fkCentralityCorrection(NULL)
, fHasCutModel(kFALSE)
, fUseOnlyOROC(kFALSE)
, fNsigmaTPC(3)
, fRejectionEnabled(0)
+ , fUsedEdx(kFALSE)
{
//
// default constructor
AliHFEpidBase(name)
, fLineCrossingsEnabled(0)
, fkEtaCorrection(NULL)
+ , fkCentralityCorrection(NULL)
, fHasCutModel(kFALSE)
, fUseOnlyOROC(kFALSE)
, fNsigmaTPC(3)
, fRejectionEnabled(0)
+ , fUsedEdx(kFALSE)
{
//
// default constructor
AliHFEpidBase("")
, fLineCrossingsEnabled(0)
, fkEtaCorrection(NULL)
+ , fkCentralityCorrection(NULL)
, fHasCutModel(ref.fHasCutModel)
, fUseOnlyOROC(ref.fUseOnlyOROC)
, fNsigmaTPC(2)
, fRejectionEnabled(0)
+ , fUsedEdx(kFALSE)
{
//
// Copy constructor
//
AliHFEpidTPC &target = dynamic_cast<AliHFEpidTPC &>(o);
- target.fkEtaCorrection =fkEtaCorrection;
+ target.fkEtaCorrection = fkEtaCorrection;
+ target.fkCentralityCorrection = fkCentralityCorrection;
target.fLineCrossingsEnabled = fLineCrossingsEnabled;
target.fHasCutModel = fHasCutModel;
target.fUseOnlyOROC = fUseOnlyOROC;
const AliVTrack *rectrack;
AliESDtrack esdtrack;
AliAODTrack aodtrack;
- if(fUseOnlyOROC && !fkEtaCorrection) {
+ /*if(fUseOnlyOROC && !(fkEtaCorrection || fkCentralityCorrection)) {
if(track->IsESDanalysis()){
esdtrack.~AliESDtrack();
new(&esdtrack) AliESDtrack(*(static_cast<const AliESDtrack *>(track->GetRecTrack())));
rectrack = &aodtrack;
}
}
- else if(fkEtaCorrection){
+ else if(fkEtaCorrection || fkCentralityCorrection){*/
+ if(fkEtaCorrection || fkCentralityCorrection){
// Correction available
// apply it on copy
if(track->IsESDanalysis()){
esdtrack.~AliESDtrack();
new(&esdtrack) AliESDtrack(*(static_cast<const AliESDtrack *>(track->GetRecTrack())));
- ApplyEtaCorrection(&esdtrack, anatype);
+ if(track->IsPbPb() && HasCentralityCorrection())
+ ApplyCentralityCorrection(&esdtrack, track->GetMultiplicity(), anatype);
+ if(HasEtaCorrection())
+ ApplyEtaCorrection(&esdtrack, anatype);
rectrack = &esdtrack;
} else {
aodtrack.~AliAODTrack();
new(&aodtrack) AliAODTrack(*(static_cast<const AliAODTrack *>(track->GetRecTrack())));
- ApplyEtaCorrection(&aodtrack, anatype);
+ if(track->IsPbPb() && HasCentralityCorrection())
+ ApplyCentralityCorrection(&aodtrack, track->GetMultiplicity(), anatype);
+ if(HasEtaCorrection())
+ ApplyEtaCorrection(&aodtrack, anatype);
rectrack = &aodtrack;
}
} else {
AliDebug(1, "Doing TPC PID based on n-Sigma cut approach");
// make copy of the track in order to allow for applying the correction
- Float_t nsigma = fkPIDResponse->NumberOfSigmasTPC(rectrack, AliPID::kElectron);
+ Float_t nsigma = fUsedEdx ? rectrack->GetTPCsignal() : fkPIDResponse->NumberOfSigmasTPC(rectrack, AliPID::kElectron);
AliDebug(1, Form("TPC NSigma: %f", nsigma));
// exclude crossing points:
// Determine the bethe values for each particle species
//printf("p %f, fPAsigCut[0] %f, fPAsigCut[1] %f\n",p,fPAsigCut[0],fPAsigCut[1]);
if(p >= fPAsigCut[0] && p <= fPAsigCut[1]) {
- if(nsigma >= fNAsigmaTPC[0] && nsigma <= fNAsigmaTPC[1]) pdg = 11;
- else pdg = 0;
+ if(nsigma >= fNAsigmaTPC[0] && nsigma <= fNAsigmaTPC[1]) pdg = 11;
+ else pdg = 0;
}
else pdg = 0;
//
Bool_t isSelected = kTRUE;
AliHFEpidObject::AnalysisType_t anatype = track->IsESDanalysis() ? AliHFEpidObject::kESDanalysis : AliHFEpidObject::kAODanalysis;
- Float_t nsigma = fkPIDResponse->NumberOfSigmasTPC(track->GetRecTrack(), AliPID::kElectron);
+ Float_t nsigma = fUsedEdx ? track->GetRecTrack()->GetTPCsignal() : fkPIDResponse->NumberOfSigmasTPC(track->GetRecTrack(), AliPID::kElectron);
Double_t p = GetP(track->GetRecTrack(), anatype);
Int_t centrality = track->IsPbPb() ? track->GetCentrality() + 1 : 0;
AliDebug(2, Form("Centrality: %d\n", centrality));
eta = track->Eta();
if(anatype == AliHFEpidObject::kESDanalysis){
AliESDtrack *esdtrack = static_cast<AliESDtrack *>(track);
- esdtrack->SetTPCsignal(original/fkEtaCorrection->Eval(eta), esdtrack->GetTPCsignalSigma(), esdtrack->GetTPCsignalN());
+ if(fkEtaCorrection->Eval(eta)>0.0) esdtrack->SetTPCsignal(original/fkEtaCorrection->Eval(eta), esdtrack->GetTPCsignalSigma(), esdtrack->GetTPCsignalN());
} else {
AliAODTrack *aodtrack = static_cast<AliAODTrack *>(track);
AliAODPid *pid = aodtrack->GetDetPid();
- if(pid) pid->SetTPCsignal(original);
+ if(pid && fkEtaCorrection->Eval(eta)>0.0) pid->SetTPCsignal(original/fkEtaCorrection->Eval(eta));
}
}
+
+//___________________________________________________________________
+void AliHFEpidTPC::ApplyCentralityCorrection(AliVTrack *track, Double_t centralityEstimator, AliHFEpidObject::AnalysisType_t anatype) const{
+ //
+ // Apply correction for the eta dependence
+ // N.B. This correction has to be applied on a copy track
+ //
+ AliDebug(1, Form("Applying correction function %s\n", fkCentralityCorrection->GetName()));
+ Double_t original = track->GetTPCsignal();
+ if(anatype == AliHFEpidObject::kESDanalysis){
+ AliESDtrack *esdtrack = static_cast<AliESDtrack *>(track);
+ if(fkCentralityCorrection->Eval(centralityEstimator)>0.0) esdtrack->SetTPCsignal(original/fkCentralityCorrection->Eval(centralityEstimator), esdtrack->GetTPCsignalSigma(), esdtrack->GetTPCsignalN());
+ } else {
+ AliAODTrack *aodtrack = static_cast<AliAODTrack *>(track);
+ AliAODPid *pid = aodtrack->GetDetPid();
+ if(pid && fkCentralityCorrection->Eval(centralityEstimator)>0.0) pid->SetTPCsignal(original/fkCentralityCorrection->Eval(centralityEstimator));
+ }
+}
+
//___________________________________________________________________
void AliHFEpidTPC::UseOROC(AliVTrack *track, AliHFEpidObject::AnalysisType_t anatype) const{
//
// ESD analysis: Use Inner Params for the momentum estimate
const AliESDtrack *esdtrack = dynamic_cast<const AliESDtrack *>(track);
if(esdtrack) p = esdtrack->GetInnerParam() ? esdtrack->GetInnerParam()->GetP() : esdtrack->P();
- } else {
+ }
+
+ if(anatype == AliHFEpidObject::kAODanalysis)
+ {
// AOD analysis: Use TPC momentum stored in the AliAODpid object
const AliAODTrack *aodtrack = dynamic_cast<const AliAODTrack *>(track);
if(aodtrack) p = aodtrack->GetDetPid() ? aodtrack->GetDetPid()->GetTPCmomentum() : aodtrack->P();