]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGHF/hfe/AliHFEpidTPC.cxx
Update hfe package
[u/mrichter/AliRoot.git] / PWGHF / hfe / AliHFEpidTPC.cxx
index 8d960f53569ac16daf66695f8a9f0a31fcc37ea1..f8678bfa8df1137046df2aa6e53f76d235b16b5a 100644 (file)
@@ -28,6 +28,7 @@
 #include <TF1.h>
 #include <TMath.h>
 
+#include "AliTPCdEdxInfo.h"
 #include "AliAODPid.h"
 #include "AliAODTrack.h"
 #include "AliAODMCParticle.h"
@@ -50,6 +51,7 @@ AliHFEpidTPC::AliHFEpidTPC() :
   , fLineCrossingsEnabled(0)
   , fkEtaCorrection(NULL)
   , fHasCutModel(kFALSE)
+  , fUseOnlyOROC(kFALSE)
   , fNsigmaTPC(3)
   , fRejectionEnabled(0)
 {
@@ -74,6 +76,7 @@ AliHFEpidTPC::AliHFEpidTPC(const char* name) :
   , fLineCrossingsEnabled(0)
   , fkEtaCorrection(NULL)
   , fHasCutModel(kFALSE)
+  , fUseOnlyOROC(kFALSE)
   , fNsigmaTPC(3)
   , fRejectionEnabled(0)
 {
@@ -96,6 +99,7 @@ AliHFEpidTPC::AliHFEpidTPC(const AliHFEpidTPC &ref) :
   , fLineCrossingsEnabled(0)
   , fkEtaCorrection(NULL)
   , fHasCutModel(ref.fHasCutModel)
+  , fUseOnlyOROC(ref.fUseOnlyOROC)
   , fNsigmaTPC(2)
   , fRejectionEnabled(0)
 {
@@ -126,6 +130,7 @@ void AliHFEpidTPC::Copy(TObject &o) const{
   target.fkEtaCorrection =fkEtaCorrection;
   target.fLineCrossingsEnabled = fLineCrossingsEnabled;
   target.fHasCutModel = fHasCutModel;
+  target.fUseOnlyOROC = fUseOnlyOROC;
   target.fNsigmaTPC = fNsigmaTPC;
   target.fRejectionEnabled = fRejectionEnabled;
 
@@ -173,7 +178,20 @@ Int_t AliHFEpidTPC::IsSelected(const AliHFEpidObject *track, AliHFEpidQAmanager
   const AliVTrack *rectrack;
   AliESDtrack esdtrack;
   AliAODTrack aodtrack;
-  if(fkEtaCorrection){
+  if(fUseOnlyOROC && !fkEtaCorrection) {
+    if(track->IsESDanalysis()){
+      esdtrack.~AliESDtrack();
+      new(&esdtrack) AliESDtrack(*(static_cast<const AliESDtrack *>(track->GetRecTrack())));
+      UseOROC(&esdtrack, anatype);
+      rectrack = &esdtrack;
+    } else {
+      aodtrack.~AliAODTrack();
+      new(&aodtrack) AliAODTrack(*(static_cast<const AliAODTrack *>(track->GetRecTrack())));
+      UseOROC(&aodtrack, anatype);
+      rectrack = &aodtrack;
+    }
+  }
+  else if(fkEtaCorrection){
     // Correction available
     // apply it on copy
     if(track->IsESDanalysis()){
@@ -227,10 +245,18 @@ Int_t AliHFEpidTPC::IsSelected(const AliHFEpidObject *track, AliHFEpidQAmanager
     pdg = CutSigmaModel(&tpctrack) ? 11 : 0;
   } else { 
     // Perform Asymmetric n-sigma cut if required, else perform symmetric TPC sigma cut
-    Float_t p = 0.;
-    if(HasAsymmetricSigmaCut() && (p = rectrack->P()) >= fPAsigCut[0] && p <= fPAsigCut[1]){ 
-      if(nsigma >= fNAsigmaTPC[0] && nsigma <= fNAsigmaTPC[1]) pdg = 11; 
-    } else {
+    Float_t p = rectrack->P();
+    if(HasAsymmetricSigmaCut()) {
+      
+      //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;
+      }
+      else pdg = 0;
+    
+    }
+    else {
       if(TMath::Abs(nsigma) < fNsigmaTPC ) pdg = 11;
     }
   }
@@ -292,7 +318,35 @@ void AliHFEpidTPC::ApplyEtaCorrection(AliVTrack *track, AliHFEpidObject::Analysi
     if(pid) pid->SetTPCsignal(original);
   }
 }
+//___________________________________________________________________
+void AliHFEpidTPC::UseOROC(AliVTrack *track, AliHFEpidObject::AnalysisType_t anatype) const{
+  //
+  // Use TPC signal from the OROC
+  // N.B. This correction has to be applied on a copy track
+  //
+  //Double_t original = track->GetTPCsignal();
+  
+  if(anatype == AliHFEpidObject::kESDanalysis){
+    AliESDtrack *esdtrack = static_cast<AliESDtrack *>(track);
+    AliTPCdEdxInfo *dEdxInfo = track->GetTPCdEdxInfo();
+    Double32_t  TPCsignalRegion[4]; // TPC dEdx signal in 4 different regions - 0 - IROC, 1- OROC medium, 2 - OROC long, 3- OROC all, (default truncation used)
+    Char_t      TPCsignalNRegion[3]; // number of clusters above threshold used in the dEdx calculation
+    Char_t      TPCsignalNRowRegion[3]; // number of crosed rows used in the dEdx calculation - signal below threshold included
+    dEdxInfo->GetTPCSignalRegionInfo(TPCsignalRegion,TPCsignalNRegion,TPCsignalNRowRegion);
+    esdtrack->SetTPCsignal(TPCsignalRegion[3],esdtrack->GetTPCsignalSigma(),(TPCsignalNRegion[1]+TPCsignalNRegion[2])); // the two last are not ok
+  } else {
+    AliAODTrack *aodtrack = static_cast<AliAODTrack *>(track);
+    AliTPCdEdxInfo *dEdxInfo = track->GetTPCdEdxInfo();
+    Double32_t  TPCsignalRegion[4]; // TPC dEdx signal in 4 different regions - 0 - IROC, 1- OROC medium, 2 - OROC long, 3- OROC all, (default truncation used)
+    Char_t      TPCsignalNRegion[3]; // number of clusters above threshold used in the dEdx calculation
+    Char_t      TPCsignalNRowRegion[3]; // number of crosed rows used in the dEdx calculation - signal below threshold included
+    dEdxInfo->GetTPCSignalRegionInfo(TPCsignalRegion,TPCsignalNRegion,TPCsignalNRowRegion);
+    AliAODPid *pid = aodtrack->GetDetPid();
+    if(pid) pid->SetTPCsignal(TPCsignalRegion[3]);
+    if(pid) pid->SetTPCsignalN((TPCsignalNRegion[1]+TPCsignalNRegion[2]));
+  }
 
+}
 //___________________________________________________________________
 void AliHFEpidTPC::AddTPCdEdxLineCrossing(Int_t species, Double_t sigma){
   //