]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/RESONANCES/AliRsnCutV0.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / AliRsnCutV0.cxx
index f652902a74053a9667516b607e1f8e81308ecda8..49821c3f8306081ca3841d02f1de97fc3ac34b2b 100644 (file)
@@ -40,7 +40,6 @@ AliRsnCutV0::AliRsnCutV0(const char *name, Int_t hypothesis, AliPID::EParticleTy
    fMaxDaughtersDCA(0.5),
    fMinTPCcluster(70),
    fMaxRapidity(0.8),
-   fDCARptFormula(""),
    fPID(pid),
    fPID2(pid2),
    fPIDCutProton(0),
@@ -68,7 +67,6 @@ AliRsnCutV0::AliRsnCutV0(const AliRsnCutV0 &copy) :
    fMaxDaughtersDCA(copy.fMaxDaughtersDCA),
    fMinTPCcluster(copy.fMinTPCcluster),
    fMaxRapidity(copy.fMaxRapidity),
-   fDCARptFormula(copy.fDCARptFormula),   
    fPID(copy.fPID),
    fPID2(copy.fPID2),
    fPIDCutProton(copy.fPIDCutProton),
@@ -84,8 +82,6 @@ AliRsnCutV0::AliRsnCutV0(const AliRsnCutV0 &copy) :
 //
    fCutQuality.SetPtRange(0.15, 1E+20);
    fCutQuality.SetEtaRange(-0.8, 0.8);
-   fCutQuality.SetDCARPtFormula(fDCARptFormula);
-   fCutQuality.SetDCAZmax(2.0);
    fCutQuality.SetSPDminNClusters(1);
    fCutQuality.SetITSminNClusters(0);
    fCutQuality.SetITSmaxChi2(1E+20);
@@ -113,7 +109,6 @@ AliRsnCutV0 &AliRsnCutV0::operator=(const AliRsnCutV0 &copy)
    fMaxDaughtersDCA = copy.fMaxDaughtersDCA;
    fMinTPCcluster = copy.fMinTPCcluster;
    fMaxRapidity = copy.fMaxRapidity;
-   fDCARptFormula = copy.fDCARptFormula;
    fCutQuality = copy.fCutQuality;
    fPID = copy.fPID;
    fPID2 = copy.fPID2;
@@ -216,7 +211,7 @@ Bool_t AliRsnCutV0::CheckESD(AliESDv0 *v0)
       AliDebugClass(2, "Failed check on DCA to primary vertes");
       return kFALSE;
    }
-   if (TMath::Abs(v0->GetV0CosineOfPointingAngle()) < fMinCosPointAngle) {
+      if (TMath::Abs(v0->GetV0CosineOfPointingAngle()) < fMinCosPointAngle) {
       AliDebugClass(2, "Failed check on cosine of pointing angle");
       return kFALSE;
    }
@@ -229,7 +224,14 @@ Bool_t AliRsnCutV0::CheckESD(AliESDv0 *v0)
       return kFALSE;
    }
 
-
+   Double_t v0Position[3]; // from $ALICE_ROOT/ANALYSIS/AliESDV0Cuts.cxx
+  v0->GetXYZ(v0Position[0],v0Position[1],v0Position[2]);
+  Double_t radius = TMath::Sqrt(TMath::Power(v0Position[0],2) + TMath::Power(v0Position[1],2));
+  if ( ( radius < 0.8 ) || ( radius > 100 ) ) {
+    AliDebugClass(2, "Failed fiducial volume");
+    return kFALSE;   
+  }
+    
    // check PID on proton or antiproton from V0
 
    // check initialization of PID object
@@ -303,7 +305,7 @@ Bool_t AliRsnCutV0::CheckESD(AliESDv0 *v0)
 
 
    // if we reach this point, all checks were successful
-   AliDebugClass(2, "Good V0 (hallelujah)");
+   AliDebugClass(2, "Good V0");
    return kTRUE;
 }
 
@@ -322,8 +324,6 @@ Bool_t AliRsnCutV0::CheckAOD(AliAODv0 *v0)
       return kFALSE; // if kTRUE, then this V0 is recontructed
    }
 
-
-
    // retrieve pointer to owner event
    AliAODEvent *lAODEvent = fEvent->GetRefAOD();
    Double_t xPrimaryVertex = lAODEvent->GetPrimaryVertex()->GetX();
@@ -335,14 +335,21 @@ Bool_t AliRsnCutV0::CheckAOD(AliAODv0 *v0)
    AliAODTrack *pTrack = (AliAODTrack *) (v0->GetSecondaryVtx()->GetDaughter(0));
    AliAODTrack *nTrack = (AliAODTrack *) (v0->GetSecondaryVtx()->GetDaughter(1));
 
-
    // check quality cuts
    UInt_t  filtermapP = 9999;
    UInt_t  filtermapN = 9999;
    filtermapP = pTrack->GetFilterMap();
    filtermapN = nTrack->GetFilterMap();
 
-
+   //-----
+   // next lines commented out by EF - 17/01/2014 
+   // NOTE that the filter bit test on V0 daughters removes a huge amount of V0 candidates, including good ones.
+   //      Likely wrong -> requires a DCA max!
+   //      Removing the test, there's a little gain in efficiency in the
+   //      final search for Sigma* candidates
+   // NOTE that further constrains (e.g. DCA of daughters greater than xxx), 
+   //      necessary to remove background, are already in V0s. (see also below)
+   /*
    if ( !pTrack->TestFilterBit(fAODTestFilterBit)   ) {
       AliDebugClass(2, Form("Positive daughter failed quality cuts filtermapP=%d",filtermapP));
       return kFALSE;
@@ -351,32 +358,27 @@ Bool_t AliRsnCutV0::CheckAOD(AliAODv0 *v0)
       AliDebugClass(2, Form("Negative daughter failed quality cuts filtermapN=%d",filtermapN));
       return kFALSE;
    }
+   */
+
+   //----
+   // next lines are not necessary. Just left there (commented-out) to remind that the requirement on the DCA of V0 daughters
+   //      is already in the V0, so requiring dca>0.050 (with 0.050 cm the default value from the Lambda analysis)
+   //      does not remove V0s candidates
+   /*
+   Double_t dca = v0->DcaPosToPrimVertex() ;
+     AliDebugClass(2, Form("DCA of Lambda positive daughter %f",dca));
+   if(dca<0.050) {
+     AliDebugClass(2, Form("DCA of Lambda positive daughter (%f) less than 0.05",dca));
+      return kFALSE;
+   }
+   dca = v0->DcaNegToPrimVertex();
+   if(dca<0.050) {
+     AliDebugClass(2, Form("DCA of Lambda negative daughter (%f) less than 0.05",dca));
+      return kFALSE;
+   }
+   */
 
-
-
-   /*AliDebugClass(1, Form("fESDtrackCuts=%p",fESDtrackCuts));
-   if (fESDtrackCuts) { // use fESDtrackCuts to retrieve cuts values
-
-
-      AliDebugClass(2, "Checking quality cuts");
-
-
-
-      const Bool_t  CutAcceptKinkDaughters  = fESDtrackCuts->GetAcceptKinkDaughters(); // 0 = kFalse
-      const Float_t CutMaxChi2PerClusterTPC = fESDtrackCuts->GetMaxChi2PerClusterTPC();
-      const Int_t   CutMinNClusterTPC       = fESDtrackCuts->GetMinNClusterTPC();
-      const Bool_t  CutRequireTPCRefit      = fESDtrackCuts->GetRequireTPCRefit();
-      //AliDebugClass(2, Form("accept kink=%d maxchi2=%f minnclSTPC=%d requireTPCrefit=%d", CutAcceptKinkDaughters,
-      //        CutMaxChi2PerClusterTPC, CutMinNClusterTPC, CutRequireTPCRefit));
-      //AliDebugClass(2, Form("pTrack->TPCNcls=%d", pTrack->GetTPCNcls() ));
-      //AliDebugClass(2, Form("nTrack->TPCNcls=%d", nTrack->GetTPCNcls() ));
-
-
-      if(pTrack->GetTPCNcls() < CutMinNClusterTPC) {AliDebugClass(2, "Positive daughter not MinNclsTPC"); return kFALSE;}
-      if(nTrack->GetTPCNcls() < CutMinNClusterTPC) {AliDebugClass(2, "Negative daughter not MinNclsTPC"); return kFALSE;}
-
-   }*/
-
+   // EF - 17/01/2014 - next check apparently not effective!? Already in V0s?
    // filter like-sign V0
    if ( TMath::Abs( ((pTrack->Charge()) - (nTrack->Charge())) ) < 0.1) {
       AliDebugClass(2, "Failed like-sign V0 check");
@@ -403,23 +405,33 @@ Bool_t AliRsnCutV0::CheckAOD(AliAODv0 *v0)
       AliDebugClass(2, Form("Failed check on DCA to primary vertes dca=%f maxdca=%f",TMath::Abs(v0->DcaV0ToPrimVertex()),fMaxDCAVertex));
       return kFALSE;
    }
-   if (TMath::Abs( TMath::Cos(v0->OpenAngleV0()) ) < fMinCosPointAngle) {
-      AliDebugClass(2, "Failed check on cosine of pointing angle");
-      return kFALSE;
+
+   // next cut is effective (should it be in AODV0?)     
+   AliAODVertex *vertex = lAODEvent->GetPrimaryVertex();
+   Double_t cospointangle = v0->CosPointingAngle(vertex);
+   if (TMath::Abs( cospointangle )  < fMinCosPointAngle) {
+     AliDebugClass(2, "Failed check on cosine of pointing angle");
+     return kFALSE;
    }
+  // next cut is effective (should it be in AODV0?)
    if (TMath::Abs(v0->DcaV0Daughters()) > fMaxDaughtersDCA) {
       AliDebugClass(2, "Failed check on DCA between daughters");
       return kFALSE;
    }
+
    if (TMath::Abs(v0->RapLambda()) > fMaxRapidity) {
       AliDebugClass(2, "Failed check on V0 rapidity");
       return kFALSE;
    }
 
+   Double_t radius = v0->RadiusV0();
+   if ( ( radius < 0.8 ) || ( radius > 100 ) ) {
+     AliDebugClass(2, "Failed fiducial volume");
+     return kFALSE;   
+   }
 
-
-
-
+   //-----------------------------------------------------------
    // check initialization of PID object
    AliPIDResponse *pid = fEvent->GetPIDResponse();
    if (!pid) {
@@ -427,73 +439,35 @@ Bool_t AliRsnCutV0::CheckAOD(AliAODv0 *v0)
       return kFALSE;
    }
 
-   // check if TOF is matched
-   // and computes all values used in the PID cut
-   //Bool_t   isTOFpos  = MatchTOF(ptrack);
-   //Bool_t   isTOFneg  = MatchTOF(ntrack);
-   //Double_t pospTPC   = pTrack->GetTPCmomentum();
-   //Double_t negpTPC   = nTrack->GetTPCmomentum();
-   //Double_t posp      = pTrack->P();
-   //Double_t negp      = nTrack->P();
    Double_t posnsTPC   = TMath::Abs(pid->NumberOfSigmasTPC(pTrack, fPID));
    Double_t posnsTPC2  = TMath::Abs(pid->NumberOfSigmasTPC(pTrack, fPID2));
-   //Double_t posnsTOF  = TMath::Abs(pid->NumberOfSigmasTOF(ptrack, fPID));
    Double_t negnsTPC   = TMath::Abs(pid->NumberOfSigmasTPC(nTrack, fPID));
    Double_t negnsTPC2  = TMath::Abs(pid->NumberOfSigmasTPC(nTrack, fPID2));
-   //Double_t negnsTOF  = TMath::Abs(pid->NumberOfSigmasTOF(ntrack, fPID));
    Double_t maxTPC = 1E20;
    Double_t maxTPC2 = 1E20;
-   //Double_t maxTOF = 1E20;
 
    // applies the cut differently depending on the PID and the momentum
-
    if(fHypothesis==kLambda0) {
-
-
-      //if (isTOFpos) {
-      // TPC: 5sigma cut for all
-      //if (posnsTPC > 5.0) return kFALSE;
-      // TOF: 3sigma
-      // maxTOF = 3.0;
-      //return (posnsTOF <= maxTOF);
-      //} else {
-      // TPC:
-     
-     
-         maxTPC = fPIDCutProton; 
-         maxTPC2 = fPIDCutPion; 
-
-      if (! ((posnsTPC <= maxTPC) && (negnsTPC2 <= maxTPC2)) ) {
-         AliDebugClass(2, "Failed check on V0 PID");
-         return kFALSE;
-      }
+     maxTPC = fPIDCutProton; 
+     maxTPC2 = fPIDCutPion;      
+     if (! ((posnsTPC <= maxTPC) && (negnsTPC2 <= maxTPC2)) ) {
+       AliDebugClass(2, "Failed check on V0 PID");
+       return kFALSE;
+     }
    }
-
+   
    if(fHypothesis==kLambda0Bar) {
-
-      //if (isTOFneg) {
-      // TPC: 5sigma cut for all
-      //if (negnsTPC > 5.0) return kFALSE;
-      // TOF: 3sigma
-      // maxTOF = 3.0;
-      //return (negnsTOF <= maxTOF);
-      //} else {
-      // TPC:
-
-      
-         maxTPC = fPIDCutProton;
-         maxTPC2 = fPIDCutPion;
-
-      if(! ((negnsTPC <= maxTPC) && (posnsTPC2 <= maxTPC2)) ) {
-         AliDebugClass(2, "Failed check on V0 PID");
-         return kFALSE;
-      }
+     maxTPC = fPIDCutProton;
+     maxTPC2 = fPIDCutPion;
+     if(! ((negnsTPC <= maxTPC) && (posnsTPC2 <= maxTPC2)) ) {
+       AliDebugClass(2, "Failed check on V0 PID");
+       return kFALSE;
+     }
    }
-
-
-
+   
+   //---------------------------------------------------------------
    // if we reach this point, all checks were successful
-   AliDebugClass(1, "Good AOD V0 (hallelujah)");
+   AliDebugClass(1, "Good AOD V0");
    AliDebugClass(1, Form("Mass: %d %f %f %d %d", fHypothesis, fMass, mass, filtermapP, filtermapN));
    return kTRUE;