]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGHF/hfe/AliHFEpidTPC.cxx
check the leading particle in the cone, apply the isolation cone condition just on...
[u/mrichter/AliRoot.git] / PWGHF / hfe / AliHFEpidTPC.cxx
index f8678bfa8df1137046df2aa6e53f76d235b16b5a..d17d5b7a7b1e7b7b89623e192ae12836eb7be9b2 100644 (file)
@@ -50,10 +50,12 @@ AliHFEpidTPC::AliHFEpidTPC() :
   AliHFEpidBase()
   , fLineCrossingsEnabled(0)
   , fkEtaCorrection(NULL)
+  , fkCentralityCorrection(NULL)
   , fHasCutModel(kFALSE)
   , fUseOnlyOROC(kFALSE)
   , fNsigmaTPC(3)
   , fRejectionEnabled(0)
+  , fUsedEdx(kFALSE)
 {
   //
   // default  constructor
@@ -75,10 +77,12 @@ AliHFEpidTPC::AliHFEpidTPC(const char* name) :
   AliHFEpidBase(name)
   , fLineCrossingsEnabled(0)
   , fkEtaCorrection(NULL)
+  , fkCentralityCorrection(NULL)
   , fHasCutModel(kFALSE)
   , fUseOnlyOROC(kFALSE)
   , fNsigmaTPC(3)
   , fRejectionEnabled(0)
+  , fUsedEdx(kFALSE)
 {
   //
   // default  constructor
@@ -98,10 +102,12 @@ AliHFEpidTPC::AliHFEpidTPC(const AliHFEpidTPC &ref) :
   AliHFEpidBase("")
   , fLineCrossingsEnabled(0)
   , fkEtaCorrection(NULL)
+  , fkCentralityCorrection(NULL)
   , fHasCutModel(ref.fHasCutModel)
   , fUseOnlyOROC(ref.fUseOnlyOROC)
   , fNsigmaTPC(2)
   , fRejectionEnabled(0)
+  , fUsedEdx(kFALSE)
 {
   //
   // Copy constructor
@@ -127,7 +133,8 @@ void AliHFEpidTPC::Copy(TObject &o) const{
   //
   AliHFEpidTPC &target = dynamic_cast<AliHFEpidTPC &>(o);
 
-  target.fkEtaCorrection =fkEtaCorrection;
+  target.fkEtaCorrection = fkEtaCorrection;
+  target.fkCentralityCorrection = fkCentralityCorrection;
   target.fLineCrossingsEnabled = fLineCrossingsEnabled;
   target.fHasCutModel = fHasCutModel;
   target.fUseOnlyOROC = fUseOnlyOROC;
@@ -178,7 +185,7 @@ Int_t AliHFEpidTPC::IsSelected(const AliHFEpidObject *track, AliHFEpidQAmanager
   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())));
@@ -191,18 +198,25 @@ Int_t AliHFEpidTPC::IsSelected(const AliHFEpidObject *track, AliHFEpidQAmanager
       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 {
@@ -217,7 +231,7 @@ Int_t AliHFEpidTPC::IsSelected(const AliHFEpidObject *track, AliHFEpidQAmanager
   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
@@ -250,8 +264,8 @@ Int_t AliHFEpidTPC::IsSelected(const AliHFEpidObject *track, AliHFEpidQAmanager
       
       //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;
     
@@ -272,7 +286,7 @@ Bool_t AliHFEpidTPC::CutSigmaModel(const AliHFEpidObject * const track) const {
   //
   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));
@@ -311,13 +325,32 @@ void AliHFEpidTPC::ApplyEtaCorrection(AliVTrack *track, AliHFEpidObject::Analysi
            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{
   //
@@ -371,7 +404,10 @@ Double_t AliHFEpidTPC::GetP(const AliVParticle *track, AliHFEpidObject::Analysis
     // 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();