]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG2/SPECTRA/AliProtonAnalysisBase.cxx
Fix for the hybrid TPC approach when looking if the track is inside the phase space
[u/mrichter/AliRoot.git] / PWG2 / SPECTRA / AliProtonAnalysisBase.cxx
index 1b533a8bb7df5cd126764b73996b0b1b6f55772b..d35e468dba3517e97722a353fc3a1c3ec11bca56 100644 (file)
@@ -61,7 +61,7 @@ AliProtonAnalysisBase::AliProtonAnalysisBase() :
   fMaxDCA3DFlag(kFALSE), fMaxDCA3DTPCFlag(kFALSE),
   fMaxConstrainChi2Flag(kFALSE),
   fITSRefitFlag(kFALSE), fTPCRefitFlag(kFALSE),
-  fESDpidFlag(kFALSE), fTPCpidFlag(kFALSE),
+  fESDpidFlag(kFALSE), fTPCpidFlag(kFALSE), fTOFpidFlag(kFALSE),
   fPointOnITSLayer1Flag(0), fPointOnITSLayer2Flag(0),
   fPointOnITSLayer3Flag(0), fPointOnITSLayer4Flag(0),
   fPointOnITSLayer5Flag(0), fPointOnITSLayer6Flag(0),
@@ -73,7 +73,7 @@ AliProtonAnalysisBase::AliProtonAnalysisBase() :
   fDebugMode(kFALSE) {
   //Default constructor
   for(Int_t i = 0; i < 5; i++) fPartFrac[i] = 0.0;
-  for(Int_t i = 0; i < 5; i++) {
+  for(Int_t i = 0; i < 24; i++) {
     fdEdxMean[i] = 0.0;
     fdEdxSigma[i] = 0.0;
   }
@@ -111,7 +111,7 @@ Bool_t AliProtonAnalysisBase::IsInPhaseSpace(AliESDtrack* const track) {
   Double_t gPt = 0.0, gPx = 0.0, gPy = 0.0, gPz = 0.0;
   Double_t eta = 0.0;
 
-  if(kTPC) {
+  if((fProtonAnalysisMode == kTPC) || (fProtonAnalysisMode == kHybrid)) {
     AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
     if(!tpcTrack) {
       gPt = 0.0; gPx = 0.0; gPy = 0.0; gPz = 0.0; eta = -10.0;
@@ -123,7 +123,7 @@ Bool_t AliProtonAnalysisBase::IsInPhaseSpace(AliESDtrack* const track) {
       gPz = tpcTrack->Pz();
       eta = tpcTrack->Eta();
     }
-  }
+  }//standalone TPC or Hybrid TPC approaches
   else {
     gPt = track->Pt();
     gPx = track->Px();
@@ -164,7 +164,7 @@ Bool_t AliProtonAnalysisBase::IsAccepted(AliESDEvent *esd,
   Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};  //The impact parameters and their covariance.
   Double_t dca3D = 0.0;
   
-  if((kTPC)&&(!kHybrid)) {
+  if((fProtonAnalysisMode == kTPC)||(fProtonAnalysisMode == kHybrid)) {
     AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
     if(!tpcTrack) {
       gPt = 0.0; gPx = 0.0; gPy = 0.0; gPz = 0.0;
@@ -180,25 +180,8 @@ Bool_t AliProtonAnalysisBase::IsAccepted(AliESDEvent *esd,
                               esd->GetMagneticField(),
                               100.,dca,cov);
     }
-  }
-  else if(kHybrid) {
-     AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
-    if(!tpcTrack) {
-      gPt = 0.0; gPx = 0.0; gPy = 0.0; gPz = 0.0;
-      dca[0] = -100.; dca[1] = -100.;
-      cov[0] = -100.; cov[1] = -100.; cov[2] = -100.;
-    }
-    else {
-      gPt = tpcTrack->Pt();
-      gPx = tpcTrack->Px();
-      gPy = tpcTrack->Py();
-      gPz = tpcTrack->Pz();
-      tpcTrack->PropagateToDCA(vertex,
-                              esd->GetMagneticField(),
-                              100.,dca,cov);
-    }
-  }
-  else{
+  }//standalone TPC or hybrid TPC approaches
+  else {
     gPt = track->Pt();
     gPx = track->Px();
     gPy = track->Py();
@@ -428,6 +411,13 @@ Bool_t AliProtonAnalysisBase::IsAccepted(AliESDEvent *esd,
       return kFALSE;
     }
   }
+  if(fTOFpidFlag) {
+    if ((track->GetStatus() & AliESDtrack::kTOFpid) == 0) {
+      if(fDebugMode)
+       Printf("IsAccepted: Track rejected because it has no TOF pid flag");
+      return kFALSE;
+    }
+  }
 
   return kTRUE;
 }
@@ -439,7 +429,7 @@ Float_t AliProtonAnalysisBase::GetSigmaToVertex(AliESDtrack* esdTrack) const {
   Float_t b[2];
   Float_t bRes[2];
   Float_t bCov[3];
-  if((kTPC)&&(!kHybrid))
+  if((fProtonAnalysisMode == kTPC)&&(fProtonAnalysisMode != kHybrid))
     esdTrack->GetImpactParametersTPC(b,bCov);
   else
     esdTrack->GetImpactParameters(b,bCov);
@@ -688,6 +678,10 @@ TCanvas *AliProtonAnalysisBase::GetListOfCuts() {
   if(fMaxChi2PerTPCClusterFlag) listOfCuts += fMaxChi2PerTPCCluster;
   else listOfCuts += "Not used";
   l.DrawLatex(0.1,0.5,listOfCuts.Data());
+  listOfCuts = "Minimum number of TPC points for the dE/dx: ";
+  if(fMinTPCdEdxPointsFlag) listOfCuts += fMinTPCdEdxPoints;
+  else listOfCuts += "Not used";
+  l.DrawLatex(0.1,0.3,listOfCuts.Data());
 
   c->cd(4)->SetFillColor(4);
   l.DrawLatex(0.3,0.9,"Tracking related cuts");
@@ -819,7 +813,7 @@ Bool_t AliProtonAnalysisBase::IsProton(AliESDtrack *track) {
     Double_t dEdxMean = fdEdxMean[nbinP];
     Double_t dEdxSigma = fdEdxSigma[nbinP];
     if((tpcSignal <= dEdxMean + fNSigma*dEdxSigma)&&
-       (tpcSignal <= dEdxMean + fNSigma*dEdxSigma))
+       (tpcSignal >= dEdxMean - fNSigma*dEdxSigma))
       return kTRUE;
   }//kSigma1 PID method
   //Another definition of an N-sigma area around the dE/dx vs P band