The number of bins is now the same as in the equivalent AOD task
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / LambdaK0PbPb / AliAnalysisTaskCTauPbPb.cxx
index da5de2a..3403a46 100644 (file)
@@ -31,7 +31,7 @@ extern TROOT *gROOT;
 
 ClassImp(AliAnalysisTaskCTauPbPb)
 
-static Int_t    nbins=102;  // number of bins
+static Int_t    nbins=100;  // number of bins
 static Double_t lMin=0.0, lMax=100.;
 static Double_t pMin=0.0, pMax=10.;
 static Double_t yMax=0.5;
@@ -257,6 +257,33 @@ static Bool_t AcceptCascade(const AliESDcascade *cs, const AliESDEvent *esd) {
   return kTRUE;
 }
 
+static Bool_t AcceptPID(const AliPIDResponse *pidResponse, 
+                       const AliESDtrack *ptrack, AliStack *stack) {
+
+  Bool_t isProton=kTRUE;
+
+  if (stack) {
+    // MC PID
+    Int_t ntrk=stack->GetNtrack();
+    Int_t plab=TMath::Abs(ptrack->GetLabel());
+    if (plab>=0)
+      if (plab<ntrk) {
+         TParticle *pp=stack->Particle(plab);
+         if (pp->GetPdgCode() != kProton) isProton=kFALSE;
+      }
+  } else {
+    // Real PID
+    const AliExternalTrackParam *par=ptrack->GetInnerParam();
+    if (par)
+    if (par->GetP()<1.) {
+       Double_t nsig=pidResponse->NumberOfSigmasTPC(ptrack,AliPID::kProton);
+       if (TMath::Abs(nsig) > 3.) isProton=kFALSE;
+    }
+  }
+  
+  return isProton; 
+}
+
 void AliAnalysisTaskCTauPbPb::UserExec(Option_t *)
 {
 
@@ -353,10 +380,9 @@ void AliAnalysisTaskCTauPbPb::UserExec(Option_t *)
   }
 
 
-  Int_t ntrk=esd->GetNumberOfTracks();
+  Int_t ntrk1=esd->GetNumberOfTracks();
   Int_t mult=0;
-  Double_t nsig;
-  for (Int_t i=0; i<ntrk; i++) {
+  for (Int_t i=0; i<ntrk1; i++) {
     AliESDtrack *t=esd->GetTrack(i);
     if (!t->IsOn(AliESDtrack::kTPCrefit)) continue;
     Float_t xy,z0;
@@ -371,7 +397,7 @@ void AliAnalysisTaskCTauPbPb::UserExec(Option_t *)
     Double_t dedx=t->GetTPCsignal()/47.;
     fdEdx->Fill(p,dedx,1);
 
-    nsig=pidResponse->NumberOfSigmasTPC(t,AliPID::kProton);
+    Double_t nsig=pidResponse->NumberOfSigmasTPC(t,AliPID::kProton);
     if (TMath::Abs(nsig) < 3.) fdEdxPid->Fill(p,dedx,1);
 
   }
@@ -390,28 +416,30 @@ void AliAnalysisTaskCTauPbPb::UserExec(Option_t *)
       AliESDtrack *ptrack=esd->GetTrack(pidx);
 
       Double_t x,y,z; v0->GetXYZ(x,y,z);
-      Double_t dx=x-xv, dy=y-yv;
-      Double_t lt=TMath::Sqrt(dx*dx + dy*dy);
+      Double_t dx1=x-xv, dy1=y-yv;
+      Double_t lt=TMath::Sqrt(dx1*dx1 + dy1*dy1);
 
       Double_t pt=v0->Pt();
 
       Bool_t ctK=kTRUE; if (0.4977*lt/pt > 3*2.68) ctK=kFALSE;
       Bool_t ctL=kTRUE; if (1.1157*lt/pt > 3*7.89) ctL=kFALSE;
 
+      Bool_t isProton=AcceptPID(pidResponse, ptrack, stack);
+
       //+++++++ MC
       if (stack) {
          Int_t ntrk=stack->GetNtrack();
 
          Int_t nlab=TMath::Abs(ntrack->GetLabel());
-         Int_t plab=TMath::Abs(ptrack->GetLabel());
-
          if (nlab<0) goto noas;      
          if (nlab>=ntrk) goto noas;      
+         TParticle *np=stack->Particle(nlab);
+
+         Int_t plab=TMath::Abs(ptrack->GetLabel());
          if (plab<0) goto noas;      
          if (plab>=ntrk) goto noas;      
-
-         TParticle *np=stack->Particle(nlab);
          TParticle *pp=stack->Particle(plab);
+
          Int_t i0=pp->GetFirstMother();
          //if (np->GetFirstMother() != i0) goto noas;
 
@@ -490,12 +518,8 @@ void AliAnalysisTaskCTauPbPb::UserExec(Option_t *)
       }
       
       if (ctL)
+      if (isProton)
       if (TMath::Abs(v0->RapLambda())<yMax) {
-         Double_t p=ptrack->GetInnerParam()->GetP();
-         if (p<1.) {
-            nsig=pidResponse->NumberOfSigmasTPC(ptrack,AliPID::kProton);
-            if (TMath::Abs(nsig) > 3.) continue;
-        }
          v0->ChangeMassHypothesis(kLambda0);
 
          mass=v0->GetEffMass();
@@ -537,15 +561,14 @@ void AliAnalysisTaskCTauPbPb::UserExec(Option_t *)
 
       Double_t pt=cs->Pt();
 
+      Int_t pidx=TMath::Abs(v0->GetPindex());
+      AliESDtrack *ptrack=esd->GetTrack(pidx);
+
+      Bool_t isProton=AcceptPID(pidResponse, ptrack, stack);
+
       Int_t charge=cs->Charge();      
+      if (isProton)
       if (charge < 0) {         
-         Int_t pidx=TMath::Abs(v0->GetPindex());
-         AliESDtrack *ptrack=esd->GetTrack(pidx);
-         Double_t p=ptrack->GetInnerParam()->GetP();
-         if (p<1.) {
-            nsig=pidResponse->NumberOfSigmasTPC(ptrack,AliPID::kProton);
-            if (TMath::Abs(nsig) > 3.) continue;
-        }
          cs->ChangeMassHypothesis(kine0,kXiMinus);
          Double_t mass=cs->GetEffMassXi();
         pt=cs->Pt();