]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Several updates: 1) it is no longer possible to run wo V0-daughter cuts object, 2...
authorzconesa <zconesa@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 30 Oct 2013 17:41:43 +0000 (17:41 +0000)
committerzconesa <zconesa@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 30 Oct 2013 17:41:43 +0000 (17:41 +0000)
13 files changed:
PWGHF/vertexingHF/AliRDHFCutsLctoV0.cxx
PWGHF/vertexingHF/AliRDHFCutsLctoV0.h
PWGHF/vertexingHF/ConfigVertexingHF.C
PWGHF/vertexingHF/ConfigVertexingHF_Pb_AllCent.C
PWGHF/vertexingHF/ConfigVertexingHF_Pb_AllCent_NoLS.C
PWGHF/vertexingHF/ConfigVertexingHF_Pb_AllCent_NoLS_16var.C
PWGHF/vertexingHF/ConfigVertexingHF_Pb_AllCent_NoLS_NoDstar.C
PWGHF/vertexingHF/ConfigVertexingHF_Pb_AllCent_NoLS_NoDstar_16var.C
PWGHF/vertexingHF/ConfigVertexingHF_Pb_AllCent_NoLS_PIDLc.C
PWGHF/vertexingHF/ConfigVertexingHF_Pb_Cent2080.C
PWGHF/vertexingHF/ConfigVertexingHF_highmult.C
PWGHF/vertexingHF/ConfigVertexingHF_pp_LambdaC.C
PWGHF/vertexingHF/macros/makeTFile4CutsLctoV0bachelor.C

index b508d10b2f44232ea3363d03948e497056d6ce5c..3673cb01b0b3cfffe6a2f413eef201ef6cd5e4a8 100644 (file)
@@ -155,7 +155,7 @@ AliRDHFCutsLctoV0::AliRDHFCutsLctoV0(const AliRDHFCutsLctoV0 &source) :
   if (source.fPidHFV0neg) fPidHFV0neg = new AliAODPidHF(*(source.fPidHFV0neg));
   else fPidHFV0neg = new AliAODPidHF();
 
-  if (source.fV0daughtersCuts) fV0daughtersCuts = new AliESDtrackCuts(*(source.fV0daughtersCuts));
+  if (source.fV0daughtersCuts) AddTrackCutsV0daughters(source.fV0daughtersCuts);
   else fV0daughtersCuts = new AliESDtrackCuts();
 
 }
@@ -354,12 +354,10 @@ Int_t AliRDHFCutsLctoV0::IsSelected(TObject* obj,Int_t selectionLevel) {
   //
 
   if (!fCutsRD) {
-    cout<<"Cut matrice not inizialized. Exit..."<<endl;
+    AliFatal("Cut matrice not inizialized. Exit...");
     return 0;
   }
 
-  //PrintAll();
-
   AliAODRecoCascadeHF* d = (AliAODRecoCascadeHF*)obj;
   if (!d) {
     AliDebug(2,"AliAODRecoCascadeHF null");
@@ -376,13 +374,6 @@ Int_t AliRDHFCutsLctoV0::IsSelected(TObject* obj,Int_t selectionLevel) {
     return 0;
   }
 
-  AliVTrack *cascTrk0 = dynamic_cast<AliVTrack*>(d->GetDaughter(0));
-  AliVTrack *cascTrk1 = dynamic_cast<AliVTrack*>(d->GetDaughter(1));
-  if (!cascTrk0 || !cascTrk1) {
-    AliDebug(2,"At least one of V0daughters doesn't exist");
-    return 0;
-  }
-
   AliAODv0 * v0 = dynamic_cast<AliAODv0*>(d->Getv0());
   AliAODTrack * bachelorTrack = dynamic_cast<AliAODTrack*>(d->GetBachelor());
   if (!v0 || !bachelorTrack) {
@@ -409,47 +400,33 @@ Int_t AliRDHFCutsLctoV0::IsSelected(TObject* obj,Int_t selectionLevel) {
   // Get the V0 daughter tracks
   AliAODTrack *v0positiveTrack = dynamic_cast<AliAODTrack*>(d->Getv0PositiveTrack());
   AliAODTrack *v0negativeTrack = dynamic_cast<AliAODTrack*>(d->Getv0NegativeTrack());
-  //AliVTrack *trk0 = dynamic_cast<AliVTrack*>(v0->GetDaughter(0));
-  //AliVTrack *trk1 = dynamic_cast<AliVTrack*>(v0->GetDaughter(1));
   if (!v0positiveTrack || !v0negativeTrack ) {
     AliDebug(2,"No V0 daughters' objects");
     return 0;
   }
 
-  if (v0positiveTrack->GetLabel()<0 || v0negativeTrack->GetLabel()<0) {
-    AliDebug(2,Form("At least one of V0daughters has label negative (%d %d)",v0positiveTrack->GetLabel(),v0negativeTrack->GetLabel()));
-    return 0;
-  }
-
   if (v0positiveTrack->GetID()<0 || v0negativeTrack->GetID()<0) {
     AliDebug(2,Form("At least one of V0 daughters has negative ID %d %d",v0positiveTrack->GetID(),v0negativeTrack->GetID()));
     return 0;
   }
 
   //if(fUseTrackSelectionWithFilterBits && d->HasBadDaughters()) return 0;
-  if ( fUseTrackSelectionWithFilterBits && !(bachelorTrack->TestFilterMask(BIT(4))) ) return 0;
+  if ( fUseTrackSelectionWithFilterBits && !(bachelorTrack->TestFilterMask(BIT(4))) ) {
+    AliDebug(2,"Check on the bachelor FilterBit: no BIT(4). Candidate rejected.");
+    return 0;
+  }
+
+  Int_t returnvalueTrack = 7;
 
   // selection on daughter tracks
   if (selectionLevel==AliRDHFCuts::kAll ||
       selectionLevel==AliRDHFCuts::kTracks) {
 
-    if (fIsCandTrackSPDFirst && d->Pt()<fMaxPtCandTrackSPDFirst) {
-      if (!bachelorTrack->HasPointOnITSLayer(0)) return 0;
-    }
-    if (fTrackCuts && fV0daughtersCuts) {
-      AliAODVertex *vAOD = (AliAODVertex*)d->GetPrimaryVtx();
-      Double_t pos[3]; vAOD->GetXYZ(pos);
-      Double_t cov[6]; vAOD->GetCovarianceMatrix(cov);
-      const AliESDVertex vESD(pos,cov,100.,100);
-      if ( !(IsDaughterSelected(bachelorTrack,&vESD,fTrackCuts)) ||
-          !(IsDaughterSelected(v0negativeTrack,&vESD,fV0daughtersCuts)) ||
-          !(IsDaughterSelected(v0positiveTrack,&vESD,fV0daughtersCuts)) ) return 0;
-    }
+    if (!AreLctoV0DaughtersSelected(d)) return 0;
 
   }
 
   Bool_t okLck0sp=kTRUE, okLcLpi=kTRUE, okLcLBarpi=kTRUE;
-  Bool_t okK0spipi=kTRUE, okLppi=kTRUE, okLBarpip=kTRUE;
 
   // selection on candidate
   if (selectionLevel==AliRDHFCuts::kAll ||
@@ -471,6 +448,9 @@ Int_t AliRDHFCutsLctoV0::IsSelected(TObject* obj,Int_t selectionLevel) {
     Double_t malambda = v0->MassAntiLambda();
     Double_t mLcLpi   = d->InvMassLctoLambdaPi();
 
+    Bool_t okK0spipi=kTRUE, okLppi=kTRUE, okLBarpip=kTRUE;
+    Bool_t isNotK0S = kTRUE, isNotLambda = kTRUE, isNotLambdaBar = kTRUE, isNotGamma = kTRUE;
+
     // cut on Lc mass with K0S+p hypothesis
     if (TMath::Abs(mLck0sp-mLcPDG) > fCutsRD[GetGlobalIndex(0,ptbin)]) {
       okLck0sp = kFALSE;
@@ -503,9 +483,35 @@ Int_t AliRDHFCutsLctoV0::IsSelected(TObject* obj,Int_t selectionLevel) {
       AliDebug(4,Form(" V0 mass is %2.2e and does not correspond to LambdaBar cut",malambda));
     }
 
-    okLck0sp   = okLck0sp   && okK0spipi;
-    okLcLpi    = okLcLpi    && okLppi;
-    okLcLBarpi = okLcLBarpi && okLBarpip;
+    // cut on K0S invariant mass veto
+    if (TMath::Abs(v0->MassK0Short()-mk0sPDG) < fCutsRD[GetGlobalIndex(12,ptbin)]) { // K0S invariant mass veto
+      AliDebug(4,Form(" veto on K0S invariant mass doesn't pass the cut"));
+      //return 0;
+      isNotK0S=kFALSE;
+    }
+
+    // cut on Lambda/LambdaBar invariant mass veto
+    if (TMath::Abs(v0->MassLambda()-mLPDG) < fCutsRD[GetGlobalIndex(13,ptbin)]) { // Lambda invariant mass veto
+      AliDebug(4,Form(" veto on Lambda invariant mass doesn't pass the cut"));
+      isNotLambda=kFALSE;
+      //return 0;
+    }
+      if (TMath::Abs(v0->MassAntiLambda()-mLPDG) < fCutsRD[GetGlobalIndex(13,ptbin)] ) { // LambdaBar invariant mass veto
+      AliDebug(4,Form(" veto on LambdaBar invariant mass doesn't pass the cut"));
+      isNotLambdaBar=kFALSE;
+      //return 0;
+    }
+
+    // cut on gamma invariant mass veto
+    if (v0->InvMass2Prongs(0,1,11,11) < fCutsRD[GetGlobalIndex(14,ptbin)]) { // K0S invariant mass veto
+      AliDebug(4,Form(" veto on gamma invariant mass doesn't pass the cut"));
+      isNotGamma=kFALSE;
+      //return 0;
+    }
+
+    okLck0sp   = okLck0sp   && okK0spipi && isNotLambda && isNotLambdaBar && isNotGamma;
+    okLcLpi    = okLcLpi    && okLppi    && isNotK0S    && isNotLambdaBar && isNotGamma;
+    okLcLBarpi = okLcLBarpi && okLBarpip && isNotK0S    && isNotLambda    && isNotGamma;
 
     if (!okLck0sp && !okLcLpi && !okLcLBarpi) return 0;
 
@@ -553,25 +559,6 @@ Int_t AliRDHFCutsLctoV0::IsSelected(TObject* obj,Int_t selectionLevel) {
       return 0;
     }
 
-    // cut on K0S invariant mass veto
-    if (TMath::Abs(v0->MassK0Short()-mk0sPDG) < fCutsRD[GetGlobalIndex(12,ptbin)]) { // K0S invariant mass veto
-      AliDebug(4,Form(" veto on K0S invariant mass doesn't pass the cut"));
-      return 0;
-    }
-
-    // cut on Lambda/LambdaBar invariant mass veto
-    if (TMath::Abs(v0->MassLambda()-mLPDG) < fCutsRD[GetGlobalIndex(13,ptbin)] ||
-       TMath::Abs(v0->MassAntiLambda()-mLPDG) < fCutsRD[GetGlobalIndex(13,ptbin)] ) { // Lambda/LambdaBar invariant mass veto
-      AliDebug(4,Form(" veto on K0S invariant mass doesn't pass the cut"));
-      return 0;
-    }
-
-    // cut on gamma invariant mass veto
-    if (v0->InvMass2Prongs(0,1,11,11) < fCutsRD[GetGlobalIndex(14,ptbin)]) { // K0S invariant mass veto
-      AliDebug(4,Form(" veto on gamma invariant mass doesn't pass the cut"));
-      return 0;
-    }
-
     // cut on V0 pT min
     if (v0->Pt() < fCutsRD[GetGlobalIndex(15,ptbin)]) { // V0 pT min
       AliDebug(4,Form(" V0 track Pt=%2.2e > %2.2e",v0->Pt(),fCutsRD[GetGlobalIndex(15,ptbin)]));
@@ -604,9 +591,9 @@ Int_t AliRDHFCutsLctoV0::IsSelected(TObject* obj,Int_t selectionLevel) {
 
   Int_t returnvalueTot = 0;
   if ( fUsePID )
-    returnvalueTot = CombinePIDCuts(returnvalue,returnvaluePID);
+    returnvalueTot = CombineCuts(returnvalueTrack,returnvalue,returnvaluePID);
   else
-    returnvalueTot = returnvalue;
+    returnvalueTot = CombineCuts(returnvalueTrack,returnvalue,7);
 
   return returnvalueTot;
 
@@ -618,7 +605,10 @@ Int_t AliRDHFCutsLctoV0::IsSelectedPID(AliAODRecoDecayHF* obj) {
   // fPidHFV0pos -> PID object for positive V0 daughter
   // fPidHFV0neg -> PID object for negative V0 daughter
 
-  if (!fUsePID || !obj) return 7; // all hypothesis are valid
+  if (!fUsePID || !obj) {
+    AliDebug(2,"PID selection inactive. Candidate accepted.");
+    return 7; // all hypothesis are valid
+  }
 
   if (fPidHF->GetPidResponse()==0x0 ||
       fPidHFV0pos->GetPidResponse()==0x0 ||
@@ -832,10 +822,13 @@ void AliRDHFCutsLctoV0::CheckPID(AliAODTrack *bachelor, AliAODTrack *v0Neg, AliA
 
 }
 //----------------
-Int_t AliRDHFCutsLctoV0::CombinePIDCuts(Int_t returnvalue, Int_t returnvaluePID) const {
-  // combine PID with topological cuts
+Int_t AliRDHFCutsLctoV0::CombineCuts(Int_t returnvalueTrack, Int_t returnvalue, Int_t returnvaluePID) const {
+  //
+  // combine track selection, topological cuts and PID
+  //
 
- Int_t returnvalueTot=returnvalue&returnvaluePID;
+ Int_t returnvalueTot=returnvalueTrack&returnvalue;
+ returnvalueTot=returnvalueTot&returnvaluePID;
 
  return returnvalueTot;
 }
@@ -847,7 +840,7 @@ Int_t AliRDHFCutsLctoV0::IsSelectedSingleCut(TObject* obj, Int_t selectionLevel,
   //
 
   if (!fCutsRD) {
-    cout<<"Cut matrice not inizialized. Exit..."<<endl;
+    AliDebug(2,"Cut matrice not inizialized. Exit...");
     return 0;
   }
 
@@ -867,13 +860,6 @@ Int_t AliRDHFCutsLctoV0::IsSelectedSingleCut(TObject* obj, Int_t selectionLevel,
     return 0;
   }
 
-  AliVTrack *cascTrk0 = dynamic_cast<AliVTrack*>(d->GetDaughter(0));
-  AliVTrack *cascTrk1 = dynamic_cast<AliVTrack*>(d->GetDaughter(1));
-  if (!cascTrk0 || !cascTrk1) {
-    AliDebug(2,"At least one of V0daughters doesn't exist");
-    return 0;
-  }
-
   AliAODv0 * v0 = dynamic_cast<AliAODv0*>(d->Getv0());
   AliAODTrack * bachelorTrack = dynamic_cast<AliAODTrack*>(d->GetBachelor());
   if (!v0 || !bachelorTrack) {
@@ -900,43 +886,29 @@ Int_t AliRDHFCutsLctoV0::IsSelectedSingleCut(TObject* obj, Int_t selectionLevel,
   // Get the V0 daughter tracks
   AliAODTrack *v0positiveTrack = dynamic_cast<AliAODTrack*>(d->Getv0PositiveTrack());
   AliAODTrack *v0negativeTrack = dynamic_cast<AliAODTrack*>(d->Getv0NegativeTrack());
-  //AliVTrack *trk0 = dynamic_cast<AliVTrack*>(v0->GetDaughter(0));
-  //AliVTrack *trk1 = dynamic_cast<AliVTrack*>(v0->GetDaughter(1));
   if (!v0positiveTrack || !v0negativeTrack ) {
     AliDebug(2,"No V0 daughters' objects");
     return 0;
   }
 
-  if (v0positiveTrack->GetLabel()<0 || v0negativeTrack->GetLabel()<0) {
-    AliDebug(2,Form("At least one of V0daughters has label negative (%d %d)",v0positiveTrack->GetLabel(),v0negativeTrack->GetLabel()));
-    return 0;
-  }
-
   if (v0positiveTrack->GetID()<0 || v0negativeTrack->GetID()<0) {
     AliDebug(2,Form("At least one of V0 daughters has negative ID %d %d",v0positiveTrack->GetID(),v0negativeTrack->GetID()));
     return 0;
   }
 
   //if(fUseTrackSelectionWithFilterBits && d->HasBadDaughters()) return 0;
-  if ( fUseTrackSelectionWithFilterBits && !(bachelorTrack->TestFilterMask(BIT(4))) ) return 0;
+  if ( fUseTrackSelectionWithFilterBits && !(bachelorTrack->TestFilterMask(BIT(4))) ) {
+    AliDebug(2,"Check on the bachelor FilterBit: no BIT(4). Candidate rejected.");
+    return 0;
+  }
+
 
   // selection on daughter tracks
   if (selectionLevel==AliRDHFCuts::kAll ||
       selectionLevel==AliRDHFCuts::kTracks) {
 
-    if (fIsCandTrackSPDFirst && d->Pt()<fMaxPtCandTrackSPDFirst) {
-      if (!bachelorTrack->HasPointOnITSLayer(0)) return 0;
-    }
-    if (fTrackCuts && fV0daughtersCuts) {
-      AliAODVertex *vAOD = (AliAODVertex*)d->GetPrimaryVtx();
-      Double_t pos[3]; vAOD->GetXYZ(pos);
-      Double_t cov[6]; vAOD->GetCovarianceMatrix(cov);
-      const AliESDVertex vESD(pos,cov,100.,100);
-      if ( !(IsDaughterSelected(bachelorTrack,&vESD,fTrackCuts)) ||
-          !(IsDaughterSelected(v0negativeTrack,&vESD,fV0daughtersCuts)) ||
-          !(IsDaughterSelected(v0positiveTrack,&vESD,fV0daughtersCuts)) ) return 0;
-    }
-    //if (!AreDaughtersSelected(d)) return 0;
+    if (!AreLctoV0DaughtersSelected(d)) return 0;
+
   }
 
   Bool_t okLck0sp=kFALSE, okLcLpi=kFALSE, okLcLBarpi=kFALSE;
@@ -1086,7 +1058,7 @@ Int_t AliRDHFCutsLctoV0::IsSelectedSingleCut(TObject* obj, Int_t selectionLevel,
 
   Int_t returnvalueTot = 0;
   //if ( fUsePID )
-  //returnvalueTot = CombinePIDCuts(returnvalue,returnvaluePID);
+  //returnvalueTot = CombineCuts(returnvalue,returnvaluePID);
   //else
   returnvalueTot = returnvalue;
 
@@ -1283,6 +1255,7 @@ void AliRDHFCutsLctoV0::PrintAll() const {
   printf("Physics selection: %s\n",fUsePhysicsSelection ? "Yes" : "No");
   printf("Pileup rejection: %s\n",(fOptPileup > 0) ? "Yes" : "No");
   printf("UseTrackSelectionWithFilterBits: %s\n",fUseTrackSelectionWithFilterBits ? "Yes" : "No");
+  printf("Reject kink: %s\n",fKinkReject ? "Yes" : "No");
   if(fOptPileup==1) printf(" -- Reject pileup event");
   if(fOptPileup==2) printf(" -- Reject tracks from pileup vtx");
   if(fUseCentrality>0) {
@@ -1294,7 +1267,7 @@ void AliRDHFCutsLctoV0::PrintAll() const {
     printf("Centrality class considered: %.1f-%.1f, estimated with %s",fMinCentrality,fMaxCentrality,estimator.Data());
   }
   if(fIsCandTrackSPDFirst) printf("Check for candidates with pt < %2.2f, that daughters fullfill kFirst criteria\n",fMaxPtCandTrackSPDFirst);
-  /*
+
   if(fVarNames){
     cout<<"Array of variables"<<endl;
     for(Int_t iv=0;iv<fnVars;iv++){
@@ -1333,8 +1306,15 @@ void AliRDHFCutsLctoV0::PrintAll() const {
    }
    cout<<endl;
   }
-  */
 
+  if (fTrackCuts) {
+    Float_t eta1=0, eta2=0; fTrackCuts->GetEtaRange(eta1,eta2);
+    cout << " etaRange for Bachelor: [" << eta1 << "," << eta2 << "]\n";
+  }
+  if (fV0daughtersCuts) {
+    Float_t eta3=0, eta4=0; fV0daughtersCuts->GetEtaRange(eta3,eta4);
+    cout << " etaRange for V0daughters: [" << eta3 << "," << eta4 << "]\n";
+  }
   return;
 
 }
@@ -1368,3 +1348,101 @@ Bool_t AliRDHFCutsLctoV0::IsInFiducialAcceptance(Double_t pt, Double_t y) const
   //
   return kTRUE;
 }
+//---------------------------------------------------------------------------
+Bool_t AliRDHFCutsLctoV0::AreLctoV0DaughtersSelected(AliAODRecoDecayHF *dd) const{
+  //
+  // Daughter tracks selection
+  //
+
+  AliAODRecoCascadeHF* d = (AliAODRecoCascadeHF*)dd;
+  if (!d) {
+    AliDebug(2,"AliAODRecoCascadeHF null");
+    return kFALSE;
+  }
+
+  if (!fTrackCuts) {
+    AliFatal("Cut object is not defined for bachelor. Candidate accepted.");
+    return kFALSE;
+  }
+
+  AliAODTrack * bachelorTrack = dynamic_cast<AliAODTrack*>(d->GetBachelor());
+  if (!bachelorTrack) return kFALSE;
+
+  if (fIsCandTrackSPDFirst && d->Pt()<fMaxPtCandTrackSPDFirst) {
+      if(!bachelorTrack->HasPointOnITSLayer(0)) return kFALSE;
+  }
+
+  if (fKinkReject != (!(fTrackCuts->GetAcceptKinkDaughters())) ) {
+    AliError(Form("Not compatible setting: fKinkReject=%1d - fTrackCuts->GetAcceptKinkDaughters()=%1d",fKinkReject, fTrackCuts->GetAcceptKinkDaughters()));
+    return kFALSE;
+  }
+
+  AliAODVertex *vAOD = d->GetPrimaryVtx();
+  Double_t pos[3]; vAOD->GetXYZ(pos);
+  Double_t cov[6]; vAOD->GetCovarianceMatrix(cov);
+  const AliESDVertex vESD(pos,cov,100.,100);
+
+  if (!IsDaughterSelected(bachelorTrack,&vESD,fTrackCuts)) return kFALSE;
+
+  if (!fV0daughtersCuts) {
+    AliFatal("Cut object is not defined for V0daughters. Candidate accepted.");
+    return kFALSE;
+  }
+
+  AliAODv0 * v0 = dynamic_cast<AliAODv0*>(d->Getv0());
+  if (!v0) return kFALSE;
+  AliAODTrack *v0positiveTrack = dynamic_cast<AliAODTrack*>(d->Getv0PositiveTrack());
+  if (!v0positiveTrack) return kFALSE;
+  AliAODTrack *v0negativeTrack = dynamic_cast<AliAODTrack*>(d->Getv0NegativeTrack());
+  if (!v0negativeTrack) return kFALSE;
+
+
+  Float_t etaMin=0, etaMax=0; fV0daughtersCuts->GetEtaRange(etaMin,etaMax);
+  if ( (v0positiveTrack->Eta()<=etaMin || v0positiveTrack->Eta()>=etaMax) ||
+       (v0negativeTrack->Eta()<=etaMin || v0negativeTrack->Eta()>=etaMax) ) return kFALSE;
+  Float_t ptMin=0, ptMax=0; fV0daughtersCuts->GetPtRange(ptMin,ptMax);
+  if ( (v0positiveTrack->Pt()<=ptMin || v0positiveTrack->Pt()>=ptMax) ||
+       (v0negativeTrack->Pt()<=ptMin || v0negativeTrack->Pt()>=ptMax) ) return kFALSE;
+
+  // Condition on nTPCclusters
+  if (fV0daughtersCuts->GetMinNClusterTPC()>0) {
+    if ( ( ( v0positiveTrack->GetTPCClusterInfo(2,1) ) < fV0daughtersCuts->GetMinNClusterTPC() ) || 
+        ( ( v0negativeTrack->GetTPCClusterInfo(2,1) ) < fV0daughtersCuts->GetMinNClusterTPC() ) ) return kFALSE;
+  }
+
+  // kTPCrefit status
+  if (v0->GetOnFlyStatus()==kFALSE) { // only for offline V0s
+    if (fV0daughtersCuts->GetRequireTPCRefit()) {
+      if( !(v0positiveTrack->GetStatus() & AliESDtrack::kTPCrefit)) return kFALSE;
+      if( !(v0negativeTrack->GetStatus() & AliESDtrack::kTPCrefit)) return kFALSE;
+    }
+  }
+  // kink condition
+  if (!fV0daughtersCuts->GetAcceptKinkDaughters()) {
+    AliAODVertex *maybeKinkPos = (AliAODVertex*)v0positiveTrack->GetProdVertex();
+    AliAODVertex *maybeKinkNeg = (AliAODVertex*)v0negativeTrack->GetProdVertex();
+    if (maybeKinkPos->GetType()==AliAODVertex::kKink ||
+       maybeKinkNeg->GetType()==AliAODVertex::kKink) return kFALSE;
+  }
+  // Findable clusters > 0 condition - from V0 analysis
+  //if( v0positiveTrack->GetTPCNclsF()<=0 || v0negativeTrack->GetTPCNclsF()<=0 ) return kFALSE;
+  /*
+    Float_t lPosTrackCrossedRows = v0positiveTrack->GetTPCClusterInfo(2,1);
+    Float_t lNegTrackCrossedRows = v0positiveTrack->GetTPCClusterInfo(2,1);
+    fTreeVariableLeastNbrCrossedRows = (Int_t) lPosTrackCrossedRows;
+    if( lNegTrackCrossedRows < fTreeVariableLeastNbrCrossedRows )
+    fTreeVariableLeastNbrCrossedRows = (Int_t) lNegTrackCrossedRows;
+    //Compute ratio Crossed Rows / Findable clusters
+    //Note: above test avoids division by zero!
+    Float_t lPosTrackCrossedRowsOverFindable = lPosTrackCrossedRows / ((double)(pTrack->GetTPCNclsF()));
+    Float_t lNegTrackCrossedRowsOverFindable = lNegTrackCrossedRows / ((double)(nTrack->GetTPCNclsF()));
+    fTreeVariableLeastRatioCrossedRowsOverFindable = lPosTrackCrossedRowsOverFindable;
+    if( lNegTrackCrossedRowsOverFindable < fTreeVariableLeastRatioCrossedRowsOverFindable )
+    fTreeVariableLeastRatioCrossedRowsOverFindable = lNegTrackCrossedRowsOverFindable;
+    //Lowest Cut Level for Ratio Crossed Rows / Findable = 0.8, set here
+    if ( fTreeVariableLeastRatioCrossedRowsOverFindable < 0.8 ) return kFALSE;
+  */
+
+  return kTRUE;
+
+}
index 1a5cb870e65c7938b182c2d447eac913afcf0b6f..939ec68d01a9dda524da292bce6e3a58ed312b1f 100644 (file)
@@ -48,7 +48,7 @@ class AliRDHFCutsLctoV0 : public AliRDHFCuts
 
   Int_t IsSelectedSingleCut(TObject* obj, Int_t selectionLevel, Int_t cutIndex);
 
-  Int_t CombinePIDCuts (Int_t returnvalue, Int_t returnvaluePID) const;
+  Int_t CombineCuts (Int_t returnvalueTrack, Int_t returnvalue, Int_t returnvaluePID) const;
 
   Float_t GetMassCut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(0,iPtBin)] : 1.e6);}
   Float_t GetDCACut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(7,iPtBin)] : 1.e6);}
@@ -56,6 +56,8 @@ class AliRDHFCutsLctoV0 : public AliRDHFCuts
   void SetPidSelectionFlag(Int_t a) {fPidSelectionFlag=a;}
   Int_t GetPidSelectionFlag() {return fPidSelectionFlag;}
 
+  Bool_t AreLctoV0DaughtersSelected(AliAODRecoDecayHF *rd) const;
+
   Int_t GetV0Type();
 
   virtual void SetStandardCutsPP2010();
@@ -76,9 +78,8 @@ class AliRDHFCutsLctoV0 : public AliRDHFCuts
   AliAODPidHF * GetPidV0pos() { return fPidHFV0pos; }
   AliAODPidHF * GetPidV0neg() { return fPidHFV0neg; }
 
-  void AddTrackCutsV0daughters(AliESDtrackCuts* v0daug) {
-    fV0daughtersCuts = new AliESDtrackCuts(*v0daug);
-  }
+  void AddTrackCutsV0daughters(AliESDtrackCuts* v0daug)
+  { delete fV0daughtersCuts; fV0daughtersCuts = new AliESDtrackCuts(*v0daug); }
   virtual AliESDtrackCuts *GetTrackCutsV0daughters() const {return fV0daughtersCuts;}
 
   virtual void PrintAll() const;
index 71f290815557e23b5fb717ac38cfcd9149c091c6..9a94ab521f037cf14ab4acd0d1b6c20f18368309 100644 (file)
@@ -84,6 +84,16 @@ AliAnalysisVertexingHF* ConfigVertexingHF() {
   Float_t cutsArrayLctoV0[17]={1.0,1.0,0.05,0.05,0.0,0.0,0.0,1000.,1000.,0.99,3.,1000.,0.,0.,0.,0.,0.0};
   cutsLctoV0->SetCuts(17,cutsArrayLctoV0);
   cutsLctoV0->AddTrackCuts(esdTrackCuts);
+  AliESDtrackCuts *esdV0daughterTrackCuts = new AliESDtrackCuts("AliESDtrackCutsForV0D","default cuts for V0 daughters");
+  esdV0daughterTrackCuts->SetRequireTPCRefit(kTRUE);
+  esdV0daughterTrackCuts->SetMinNClustersTPC(30);
+  esdV0daughterTrackCuts->SetRequireITSRefit(kFALSE);
+  esdV0daughterTrackCuts->SetMinDCAToVertexXY(0.);
+  esdV0daughterTrackCuts->SetPtRange(0.05,1.e10);
+  esdV0daughterTrackCuts->SetEtaRange(-1.1,+1.1);
+  esdV0daughterTrackCuts->SetAcceptKinkDaughters(kTRUE);
+  esdV0daughterTrackCuts->SetRequireSigmaToVertex(kFALSE);
+  cutsLctoV0->AddTrackCutsV0daughters(esdV0daughterTrackCuts);
   vHF->SetCutsLctoV0(cutsLctoV0);
   // 
   //--- set this if you want to reconstruct primary vertex candidate by
index ccc395f61b5bba03f401b792641b10eff102664a..3070b78c4ee194fef13fabe1d3b4460ed378cd77 100644 (file)
@@ -208,6 +208,17 @@ AliAnalysisVertexingHF* ConfigVertexingHF() {
   Float_t cutsArrayLctoV0[17]={1.0,1.0,0.05,0.05,0.0,0.0,0.0,1000.,1000.,0.99,3.,1000.,0.,0.,0.,0.,0.0};
   cutsLctoV0->SetCuts(17,cutsArrayLctoV0);
   cutsLctoV0->AddTrackCuts(esdTrackCuts);
+
+  AliESDtrackCuts *esdV0daughterTrackCuts = new AliESDtrackCuts("AliESDtrackCutsForV0D","default cuts for V0 daughters");
+  esdV0daughterTrackCuts->SetRequireTPCRefit(kTRUE);
+  esdV0daughterTrackCuts->SetMinNClustersTPC(30);
+  esdV0daughterTrackCuts->SetRequireITSRefit(kFALSE);
+  esdV0daughterTrackCuts->SetMinDCAToVertexXY(0.);
+  esdV0daughterTrackCuts->SetPtRange(0.05,1.e10);
+  esdV0daughterTrackCuts->SetEtaRange(-1.1,+1.1);
+  esdV0daughterTrackCuts->SetAcceptKinkDaughters(kTRUE);
+  esdV0daughterTrackCuts->SetRequireSigmaToVertex(kFALSE);
+  cutsLctoV0->AddTrackCutsV0daughters(esdV0daughterTrackCuts);
   vHF->SetCutsLctoV0(cutsLctoV0);
   // 
   //--- set this if you want to reconstruct primary vertex candidate by
index d53d5b03d7a247208916ca0880cb88514d7b8d4c..eb32540bcb28534d5ba61d7d4cd30faa1cde42c7 100644 (file)
@@ -206,7 +206,17 @@ AliAnalysisVertexingHF* ConfigVertexingHF() {
   AliRDHFCutsLctoV0 *cutsLctoV0 = new AliRDHFCutsLctoV0("CutsLctoV0");
   Float_t cutsArrayLctoV0[17]={1.0,1.0,0.05,0.05,0.0,0.0,0.0,1000.,1000.,0.99,3.,1000.,0.,0.,0.,0.,0.0};
   cutsLctoV0->SetCuts(17,cutsArrayLctoV0);
-  cutsLctoV0->AddTrackCuts(esdTrackCuts);
+
+  AliESDtrackCuts *esdV0daughterTrackCuts = new AliESDtrackCuts("AliESDtrackCutsForV0D","default cuts for V0 daughters");
+  esdV0daughterTrackCuts->SetRequireTPCRefit(kTRUE);
+  esdV0daughterTrackCuts->SetMinNClustersTPC(30);
+  esdV0daughterTrackCuts->SetRequireITSRefit(kFALSE);
+  esdV0daughterTrackCuts->SetMinDCAToVertexXY(0.);
+  esdV0daughterTrackCuts->SetPtRange(0.05,1.e10);
+  esdV0daughterTrackCuts->SetEtaRange(-1.1,+1.1);
+  esdV0daughterTrackCuts->SetAcceptKinkDaughters(kTRUE);
+  esdV0daughterTrackCuts->SetRequireSigmaToVertex(kFALSE);
+  cutsLctoV0->AddTrackCutsV0daughters(esdV0daughterTrackCuts);
   vHF->SetCutsLctoV0(cutsLctoV0);
   // 
   //--- set this if you want to reconstruct primary vertex candidate by
index 41ca330cc7bca68a314b151a5e846049f996f081..1165df043ccb697c024382ab0fc97ec2c591079f 100644 (file)
@@ -207,6 +207,17 @@ AliAnalysisVertexingHF* ConfigVertexingHF() {
   Float_t cutsArrayLctoV0[17]={1.0,1.0,0.05,0.05,0.0,0.0,0.0,1000.,1000.,0.99,3.,1000.,0.,0.,0.,0.,0.0};
   cutsLctoV0->SetCuts(17,cutsArrayLctoV0);
   cutsLctoV0->AddTrackCuts(esdTrackCuts);
+
+  AliESDtrackCuts *esdV0daughterTrackCuts = new AliESDtrackCuts("AliESDtrackCutsForV0D","default cuts for V0 daughters");
+  esdV0daughterTrackCuts->SetRequireTPCRefit(kTRUE);
+  esdV0daughterTrackCuts->SetMinNClustersTPC(30);
+  esdV0daughterTrackCuts->SetRequireITSRefit(kFALSE);
+  esdV0daughterTrackCuts->SetMinDCAToVertexXY(0.);
+  esdV0daughterTrackCuts->SetPtRange(0.05,1.e10);
+  esdV0daughterTrackCuts->SetEtaRange(-1.1,+1.1);
+  esdV0daughterTrackCuts->SetAcceptKinkDaughters(kTRUE);
+  esdV0daughterTrackCuts->SetRequireSigmaToVertex(kFALSE);
+  cutsLctoV0->AddTrackCutsV0daughters(esdV0daughterTrackCuts);
   vHF->SetCutsLctoV0(cutsLctoV0);
   // 
   //--- set this if you want to reconstruct primary vertex candidate by
index 889b67473b36a6779cf0302c0a020c55b8f8cde5..b031c956635db9b66ffc83d7bf4385f009af2486 100644 (file)
@@ -209,6 +209,17 @@ AliAnalysisVertexingHF* ConfigVertexingHF() {
   Float_t cutsArrayLctoV0[17]={1.0,1.0,0.05,0.05,0.0,0.0,0.0,1000.,1000.,0.99,3.,1000.,0.,0.,0.,0.,0.0};
   cutsLctoV0->SetCuts(17,cutsArrayLctoV0);
   cutsLctoV0->AddTrackCuts(esdTrackCuts);
+
+  AliESDtrackCuts *esdV0daughterTrackCuts = new AliESDtrackCuts("AliESDtrackCutsForV0D","default cuts for V0 daughters");
+  esdV0daughterTrackCuts->SetRequireTPCRefit(kTRUE);
+  esdV0daughterTrackCuts->SetMinNClustersTPC(30);
+  esdV0daughterTrackCuts->SetRequireITSRefit(kFALSE);
+  esdV0daughterTrackCuts->SetMinDCAToVertexXY(0.);
+  esdV0daughterTrackCuts->SetPtRange(0.05,1.e10);
+  esdV0daughterTrackCuts->SetEtaRange(-1.1,+1.1);
+  esdV0daughterTrackCuts->SetAcceptKinkDaughters(kTRUE);
+  esdV0daughterTrackCuts->SetRequireSigmaToVertex(kFALSE);
+  cutsLctoV0->AddTrackCutsV0daughters(esdV0daughterTrackCuts);
   vHF->SetCutsLctoV0(cutsLctoV0);
   //
   //--- set this if you want to reconstruct primary vertex candidate by
index 556d8af2b122ff13da5ea9d2af4171887ed2da17..a54716d3ca4df002c7b3f51aee81d3e6b574d711 100644 (file)
@@ -208,6 +208,17 @@ AliAnalysisVertexingHF* ConfigVertexingHF() {
   Float_t cutsArrayLctoV0[17]={1.0,1.0,0.05,0.05,0.0,0.0,0.0,1000.,1000.,0.99,3.,1000.,0.,0.,0.,0.,0.0};
   cutsLctoV0->SetCuts(17,cutsArrayLctoV0);
   cutsLctoV0->AddTrackCuts(esdTrackCuts);
+
+  AliESDtrackCuts *esdV0daughterTrackCuts = new AliESDtrackCuts("AliESDtrackCutsForV0D","default cuts for V0 daughters");
+  esdV0daughterTrackCuts->SetRequireTPCRefit(kTRUE);
+  esdV0daughterTrackCuts->SetMinNClustersTPC(30);
+  esdV0daughterTrackCuts->SetRequireITSRefit(kFALSE);
+  esdV0daughterTrackCuts->SetMinDCAToVertexXY(0.);
+  esdV0daughterTrackCuts->SetPtRange(0.05,1.e10);
+  esdV0daughterTrackCuts->SetEtaRange(-1.1,+1.1);
+  esdV0daughterTrackCuts->SetAcceptKinkDaughters(kTRUE);
+  esdV0daughterTrackCuts->SetRequireSigmaToVertex(kFALSE);
+  cutsLctoV0->AddTrackCutsV0daughters(esdV0daughterTrackCuts);
   vHF->SetCutsLctoV0(cutsLctoV0);
   //
   //--- set this if you want to reconstruct primary vertex candidate by
index 97e8a3c0a925deebf9f11fbf4bfc5f1665509536..3bddd822152449f5b9e7f22dd2f6c1a2c1ddd136 100644 (file)
@@ -223,6 +223,17 @@ AliAnalysisVertexingHF* ConfigVertexingHF() {
   Float_t cutsArrayLctoV0[17]={1.0,1.0,0.05,0.05,0.0,0.0,0.0,1000.,1000.,0.99,3.,1000.,0.,0.,0.,0.,0.0};
   cutsLctoV0->SetCuts(17,cutsArrayLctoV0);
   cutsLctoV0->AddTrackCuts(esdTrackCuts);
+
+  AliESDtrackCuts *esdV0daughterTrackCuts = new AliESDtrackCuts("AliESDtrackCutsForV0D","default cuts for V0 daughters");
+  esdV0daughterTrackCuts->SetRequireTPCRefit(kTRUE);
+  esdV0daughterTrackCuts->SetMinNClustersTPC(30);
+  esdV0daughterTrackCuts->SetRequireITSRefit(kFALSE);
+  esdV0daughterTrackCuts->SetMinDCAToVertexXY(0.);
+  esdV0daughterTrackCuts->SetPtRange(0.05,1.e10);
+  esdV0daughterTrackCuts->SetEtaRange(-1.1,+1.1);
+  esdV0daughterTrackCuts->SetAcceptKinkDaughters(kTRUE);
+  esdV0daughterTrackCuts->SetRequireSigmaToVertex(kFALSE);
+  cutsLctoV0->AddTrackCutsV0daughters(esdV0daughterTrackCuts);
   vHF->SetCutsLctoV0(cutsLctoV0);
   // 
   //--- set this if you want to reconstruct primary vertex candidate by
index 419542031c1cf05f258b48f23ecd36d67c1af409..b721444cf67afbf1116558fe62ac17d633f63bb5 100644 (file)
@@ -171,6 +171,16 @@ AliAnalysisVertexingHF* ConfigVertexingHF() {
   Float_t cutsArrayLctoV0[17]={1.0,1.0,0.05,0.05,0.0,0.0,0.0,1000.,1000.,0.99,3.,1000.,0.,0.,0.,0.,0.0};
   cutsLctoV0->SetCuts(17,cutsArrayLctoV0);
   cutsLctoV0->AddTrackCuts(esdTrackCuts);
+  AliESDtrackCuts *esdV0daughterTrackCuts = new AliESDtrackCuts("AliESDtrackCutsForV0D","default cuts for V0 daughters");
+  esdV0daughterTrackCuts->SetRequireTPCRefit(kTRUE);
+  esdV0daughterTrackCuts->SetMinNClustersTPC(30);
+  esdV0daughterTrackCuts->SetRequireITSRefit(kFALSE);
+  esdV0daughterTrackCuts->SetMinDCAToVertexXY(0.);
+  esdV0daughterTrackCuts->SetPtRange(0.05,1.e10);
+  esdV0daughterTrackCuts->SetEtaRange(-1.1,+1.1);
+  esdV0daughterTrackCuts->SetAcceptKinkDaughters(kTRUE);
+  esdV0daughterTrackCuts->SetRequireSigmaToVertex(kFALSE);
+  cutsLctoV0->AddTrackCutsV0daughters(esdV0daughterTrackCuts);
   vHF->SetCutsLctoV0(cutsLctoV0);
   //
   //--- set this if you want to reconstruct primary vertex candidate by
index d99ad183a9f19341c113e2e3991b7ce546bede01..c4068fe2674cc3bce04e3caa8d46b8b515779011 100644 (file)
@@ -169,6 +169,16 @@ AliAnalysisVertexingHF* ConfigVertexingHF() {
   Float_t cutsArrayLctoV0[17]={1.0,1.0,0.05,0.05,0.0,0.0,0.0,1000.,1000.,0.99,3.,1000.,0.,0.,0.,0.,0.0};
   cutsLctoV0->SetCuts(17,cutsArrayLctoV0);
   cutsLctoV0->AddTrackCuts(esdTrackCuts);
+  AliESDtrackCuts *esdV0daughterTrackCuts = new AliESDtrackCuts("AliESDtrackCutsForV0D","default cuts for V0 daughters");
+  esdV0daughterTrackCuts->SetRequireTPCRefit(kTRUE);
+  esdV0daughterTrackCuts->SetMinNClustersTPC(30);
+  esdV0daughterTrackCuts->SetRequireITSRefit(kFALSE);
+  esdV0daughterTrackCuts->SetMinDCAToVertexXY(0.);
+  esdV0daughterTrackCuts->SetPtRange(0.05,1.e10);
+  esdV0daughterTrackCuts->SetEtaRange(-1.1,+1.1);
+  esdV0daughterTrackCuts->SetAcceptKinkDaughters(kTRUE);
+  esdV0daughterTrackCuts->SetRequireSigmaToVertex(kFALSE);
+  cutsLctoV0->AddTrackCutsV0daughters(esdV0daughterTrackCuts);
   vHF->SetCutsLctoV0(cutsLctoV0);
   // 
   //--- set this if you want to reconstruct primary vertex candidate by
index 71e32567166deeccb0970343dc93036ee08dc5d4..27f4bdc6a23d2e0b016e4c06f12833e04ff8f0dc 100644 (file)
@@ -84,6 +84,16 @@ AliAnalysisVertexingHF* ConfigVertexingHF() {
   Float_t cutsArrayLctoV0[17]={1.0,1.0,0.05,0.05,0.0,0.0,0.0,1000.,1000.,0.99,3.,1000.,0.,0.,0.,0.,0.0};
   cutsLctoV0->SetCuts(17,cutsArrayLctoV0);
   cutsLctoV0->AddTrackCuts(esdTrackCuts);
+  AliESDtrackCuts *esdV0daughterTrackCuts = new AliESDtrackCuts("AliESDtrackCutsForV0D","default cuts for V0 daughters");
+  esdV0daughterTrackCuts->SetRequireTPCRefit(kTRUE);
+  esdV0daughterTrackCuts->SetMinNClustersTPC(30);
+  esdV0daughterTrackCuts->SetRequireITSRefit(kFALSE);
+  esdV0daughterTrackCuts->SetMinDCAToVertexXY(0.);
+  esdV0daughterTrackCuts->SetPtRange(0.05,1.e10);
+  esdV0daughterTrackCuts->SetEtaRange(-1.1,+1.1);
+  esdV0daughterTrackCuts->SetAcceptKinkDaughters(kTRUE);
+  esdV0daughterTrackCuts->SetRequireSigmaToVertex(kFALSE);
+  cutsLctoV0->AddTrackCutsV0daughters(esdV0daughterTrackCuts);
   vHF->SetCutsLctoV0(cutsLctoV0);
   //
   //--- set this if you want to reconstruct primary vertex candidate by
index 57e084f940e54969ae3abd7a6b48f6fc91729060..b4998ac1d99685c431e89ca77eb515fd6cc4a136 100644 (file)
 
 void makeInputAliAnalysisTaskSELctoV0bachelor(){
 
-  AliRDHFCutsLctoV0* RDHFLctoV0Prod=new AliRDHFCutsLctoV0();
-  RDHFLctoV0Prod->SetName("LctoV0ProductionCuts");
-  RDHFLctoV0Prod->SetTitle("Production cuts for Lc analysis");
-  AliESDtrackCuts* esdTrackCutsProd=new AliESDtrackCuts();
-  RDHFLctoV0Prod->AddTrackCuts(esdTrackCutsProd);
-  RDHFLctoV0Prod->AddTrackCutsV0daughters(esdTrackCutsProd);
-  RDHFLctoV0Prod->SetUseTrackSelectionWithFilterBits(kFALSE);
-  RDHFLctoV0Prod->SetPidSelectionFlag(2); // 0 -> TOF AND TPC
-                                          // 1 -> if (TOF) TOF else TPC w veto
-                                          // 2 -> if (p<1) TPC@3s else if (1<=p<2.5) {if (TOF) TOF@3s AND TPC@3s} else (p>=2.5) {if (TOF) -2s<TOF<3s AND TPC@3s}
-                                          // 3 -> if (p<1) TPC@3s else if (1<=p<2.5) {if (TOF) TOF@3s AND TPC@3s} else if (2.5<=p<3) {if (TOF) -2s<TOF<3s AND TPC@3s} else (p>=3) {if (TOF) -2s<TOF<3s AND -3s<TPC<2s}
-
   AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
   esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
   //default
@@ -43,13 +31,11 @@ void makeInputAliAnalysisTaskSELctoV0bachelor(){
   //                                      AliESDtrackCuts::kAny); 
   // default is kBoth, otherwise kAny
   esdTrackCuts->SetMinDCAToVertexXY(0.);
-  //esdTrackCuts->SetPtRange(0.3,1.e10);
   esdTrackCuts->SetPtRange(0.,1.e10);
   esdTrackCuts->SetEtaRange(-0.8,0.8);
   esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
 
 
-
   AliESDtrackCuts* esdTrackCutsV0daughters=new AliESDtrackCuts();
   esdTrackCutsV0daughters->SetRequireSigmaToVertex(kFALSE);
   //default
@@ -65,21 +51,19 @@ void makeInputAliAnalysisTaskSELctoV0bachelor(){
   esdTrackCutsV0daughters->SetEtaRange(-0.8,0.8);
   esdTrackCutsV0daughters->SetAcceptKinkDaughters(kFALSE);
 
-
-
   AliRDHFCutsLctoV0* RDHFLctoV0An=new AliRDHFCutsLctoV0();
   RDHFLctoV0An->SetName("LctoV0AnalysisCuts");
   RDHFLctoV0An->SetTitle("Analysis cuts for Lc analysis");
+  RDHFLctoV0An->SetKinkRejection(!esdTrackCuts->GetAcceptKinkDaughters());
   RDHFLctoV0An->AddTrackCuts(esdTrackCuts);
   RDHFLctoV0An->AddTrackCutsV0daughters(esdTrackCutsV0daughters);
-  RDHFLctoV0An->SetUseTrackSelectionWithFilterBits(kFALSE);
+  RDHFLctoV0An->SetUseTrackSelectionWithFilterBits(kTRUE);
   RDHFLctoV0An->SetPidSelectionFlag(2); // 0 -> TOF AND TPC
                                         // 1 -> if (TOF) TOF else TPC w veto
                                         // 2 -> if (p>1) TPC@3s else if (1<=p<2.5) {if (TOF) TOF@3s AND TPC@3s} else (p>=2.5) {if (TOF) -2s<TOF<3s AND TPC@3s}
                                         // 3 -> if (p>1) TPC@3s else if (1<=p<2.5) {if (TOF) TOF@3s AND TPC@3s} else if (2.5<=p<3) {if (TOF) -2s<TOF<3s AND TPC@3s} else (p>=3) {if (TOF) -2s<TOF<3s AND -3s<TPC<2s}
 
-  const Int_t nptbins=9;
-  RDHFLctoV0Prod->SetNPtBins(nptbins);
+  const Int_t nptbins=14;
   RDHFLctoV0An->SetNPtBins(nptbins);
 
   Float_t* ptbins;
@@ -91,72 +75,112 @@ void makeInputAliAnalysisTaskSELctoV0bachelor(){
   ptbins[4]= 4.;
   ptbins[5]= 5.;
   ptbins[6]= 6.;
-  ptbins[7]= 8.;
-  ptbins[8]=12.;
-  ptbins[9]=99999999.;
-  RDHFLctoV0Prod->SetPtBins(nptbins+1,ptbins);
+  ptbins[7]= 7.;
+  ptbins[8]= 8.;
+  ptbins[9]= 9.;
+  ptbins[10]=10.;
+  ptbins[11]=12.;
+  ptbins[12]=17.;
+  ptbins[13]=25.;
+  ptbins[14]=35.;
   RDHFLctoV0An->SetPtBins(nptbins+1,ptbins);
 
   const Int_t nvars=17;
 
-  Float_t** prodcutsval;
-  prodcutsval=new Float_t*[nvars];
-  for(Int_t ic=0;ic<nvars;ic++){prodcutsval[ic]=new Float_t[nptbins];}
-  for(Int_t ipt2=0;ipt2<nptbins;ipt2++){
-   prodcutsval[0][ipt2]=1.;    // inv. mass if K0S [GeV/c2]
-   prodcutsval[1][ipt2]=1.;    // inv. mass if Lambda [GeV/c2]
-   prodcutsval[2][ipt2]=0.05;  // inv. mass V0 if K0S [GeV/c2]
-   prodcutsval[3][ipt2]=0.05;  // inv. mass V0 if Lambda [GeV/c2]
-   prodcutsval[4][ipt2]=0.3;   // pT min bachelor track [GeV/c] // AOD by construction
-   prodcutsval[5][ipt2]=0.;    // pT min V0-positive track [GeV/c]
-   prodcutsval[6][ipt2]=0.;    // pT min V0-negative track [GeV/c]
-   prodcutsval[7][ipt2]=1000.; // dca cascade cut [cm]
-   prodcutsval[8][ipt2]=1000.; // dca V0 cut [nSigma] // it's 1.5 x offline V0s
-   prodcutsval[9][ipt2]=-1.;   // cosPA V0 cut // it's 0.90 x offline V0s at reconstruction level, 0.99 at filtering level
-   prodcutsval[10][ipt2]=3.;   // d0 max bachelor wrt PV [cm]
-   prodcutsval[11][ipt2]=1000.;// d0 max V0 wrt PV [cm]
-   prodcutsval[12][ipt2]=0.;   // mass K0S veto [GeV/c2]
-   prodcutsval[13][ipt2]=0.;   // mass Lambda/LambdaBar veto [GeV/c2]
-   prodcutsval[14][ipt2]=0.;   // mass Gamma veto [GeV/c2]
-   prodcutsval[15][ipt2]=0.;   // pT min V0 track [GeV/c]
-   prodcutsval[16][ipt2]=0.;   // V0 type cut
-  }
-
-
-  RDHFLctoV0Prod->SetCuts(nvars,nptbins,prodcutsval);
-
   Float_t** anacutsval;
   anacutsval=new Float_t*[nvars];
   for(Int_t ic=0;ic<nvars;ic++){anacutsval[ic]=new Float_t[nptbins];}
   for(Int_t ipt2=0;ipt2<nptbins;ipt2++){
    anacutsval[0][ipt2]=0.25;   // inv. mass if K0S [GeV/c2]
    anacutsval[1][ipt2]=0.25;   // inv. mass if Lambda [GeV/c2]
-   anacutsval[2][ipt2]=0.0075; // inv. mass V0 if K0S [GeV/c2]
-   anacutsval[3][ipt2]=0.0030; // inv. mass V0 if Lambda [GeV/c2]
-   anacutsval[4][ipt2]=0.4;    // pT min bachelor track [GeV/c] // AOD by construction
+   anacutsval[3][ipt2]=0.05;   // inv. mass V0 if Lambda [GeV/c2] ---> WE ARE SEARCHING Lc -> p+K0S, so cut on m(Lambda) has to be leave as it was at filtering level!!!
    anacutsval[5][ipt2]=0.2;    // pT min V0-positive track [GeV/c]
    anacutsval[6][ipt2]=0.2;    // pT min V0-negative track [GeV/c]
    anacutsval[7][ipt2]=1000.;  // dca cascade cut [cm]
    anacutsval[8][ipt2]=1.5;    // dca V0 cut [nSigma] // it's 1.5 x offline V0s
-   anacutsval[9][ipt2]=0.99;   // cosPA V0 cut // it's 0.90 x offline V0s at reconstruction level, 0.99 at filtering level
-   anacutsval[10][ipt2]=0.05;  // d0 max bachelor wrt PV [cm]
-   anacutsval[11][ipt2]=0.1;   // d0 max V0 wrt PV [cm]
+   anacutsval[11][ipt2]=0.09;  // d0 max V0 wrt PV [cm]
    anacutsval[12][ipt2]=0.;    // mass K0S veto [GeV/c2]
    anacutsval[13][ipt2]=0.005; // mass Lambda/LambdaBar veto [GeV/c2]
-   anacutsval[14][ipt2]=0.100; // mass Gamma veto [GeV/c2]
+   anacutsval[14][ipt2]=0.300; // mass Gamma veto [GeV/c2]
    anacutsval[16][ipt2]=0.;    // V0 type cut
   }
 
-  anacutsval[15][0]=0.0; // pT min V0 track [GeV/c]
+  anacutsval[2][0]=0.00346*2.; // inv. mass V0 if K0S [GeV/c2]
+  anacutsval[2][1]=0.00360*2.; // inv. mass V0 if K0S [GeV/c2]
+  anacutsval[2][2]=0.00385*2.; // inv. mass V0 if K0S [GeV/c2]
+  anacutsval[2][3]=0.00406*2.; // inv. mass V0 if K0S [GeV/c2]
+  anacutsval[2][4]=0.00429*2.; // inv. mass V0 if K0S [GeV/c2]
+  anacutsval[2][5]=0.00450*2.; // inv. mass V0 if K0S [GeV/c2]
+  anacutsval[2][6]=0.00450*2.; // inv. mass V0 if K0S [GeV/c2]
+  anacutsval[2][7]=0.00450*2.; // inv. mass V0 if K0S [GeV/c2]
+  anacutsval[2][8]=0.00520*2.; // inv. mass V0 if K0S [GeV/c2]
+  anacutsval[2][9]=0.00520*2.; // inv. mass V0 if K0S [GeV/c2]
+  anacutsval[2][10]=0.00520*2.;// inv. mass V0 if K0S [GeV/c2]
+  anacutsval[2][11]=0.00520*2.;// inv. mass V0 if K0S [GeV/c2]
+  anacutsval[2][12]=0.00520*2.;// inv. mass V0 if K0S [GeV/c2]
+  anacutsval[2][13]=0.00520*2.;// inv. mass V0 if K0S [GeV/c2]
+
+  anacutsval[4][0]=0.6;    // pT min bachelor track [GeV/c] // AOD by construction
+  anacutsval[4][1]=0.5;    // pT min bachelor track [GeV/c] // AOD by construction
+  anacutsval[4][2]=0.6;    // pT min bachelor track [GeV/c] // AOD by construction
+  anacutsval[4][3]=0.7;    // pT min bachelor track [GeV/c] // AOD by construction
+  anacutsval[4][4]=0.8;    // pT min bachelor track [GeV/c] // AOD by construction
+  anacutsval[4][5]=0.9;    // pT min bachelor track [GeV/c] // AOD by construction
+  anacutsval[4][6]=1.0;    // pT min bachelor track [GeV/c] // AOD by construction
+  anacutsval[4][7]=1.2;    // pT min bachelor track [GeV/c] // AOD by construction
+  anacutsval[4][8]=1.4;    // pT min bachelor track [GeV/c] // AOD by construction
+  anacutsval[4][9]=1.7;    // pT min bachelor track [GeV/c] // AOD by construction
+  anacutsval[4][10]=2.0;   // pT min bachelor track [GeV/c] // AOD by construction
+  anacutsval[4][11]=2.0;   // pT min bachelor track [GeV/c] // AOD by construction
+  anacutsval[4][12]=2.0;   // pT min bachelor track [GeV/c] // AOD by construction
+  anacutsval[4][13]=2.0;   // pT min bachelor track [GeV/c] // AOD by construction
+
+  anacutsval[9][0]=0.994;  // cosPA V0 cut // it's 0.90 x offline V0s at reconstruction level, 0.99 at filtering level
+  anacutsval[9][1]=0.994;  // cosPA V0 cut // it's 0.90 x offline V0s at reconstruction level, 0.99 at filtering level
+  anacutsval[9][2]=0.998;  // cosPA V0 cut // it's 0.90 x offline V0s at reconstruction level, 0.99 at filtering level
+  anacutsval[9][3]=0.999;  // cosPA V0 cut // it's 0.90 x offline V0s at reconstruction level, 0.99 at filtering level
+  anacutsval[9][4]=0.999;  // cosPA V0 cut // it's 0.90 x offline V0s at reconstruction level, 0.99 at filtering level
+  anacutsval[9][5]=0.999;  // cosPA V0 cut // it's 0.90 x offline V0s at reconstruction level, 0.99 at filtering level
+  anacutsval[9][6]=0.999;  // cosPA V0 cut // it's 0.90 x offline V0s at reconstruction level, 0.99 at filtering level
+  anacutsval[9][7]=0.999;  // cosPA V0 cut // it's 0.90 x offline V0s at reconstruction level, 0.99 at filtering level
+  anacutsval[9][8]=0.999;  // cosPA V0 cut // it's 0.90 x offline V0s at reconstruction level, 0.99 at filtering level
+  anacutsval[9][9]=0.999;  // cosPA V0 cut // it's 0.90 x offline V0s at reconstruction level, 0.99 at filtering level
+  anacutsval[9][10]=0.999; // cosPA V0 cut // it's 0.90 x offline V0s at reconstruction level, 0.99 at filtering level
+  anacutsval[9][11]=0.999; // cosPA V0 cut // it's 0.90 x offline V0s at reconstruction level, 0.99 at filtering level
+  anacutsval[9][12]=0.999; // cosPA V0 cut // it's 0.90 x offline V0s at reconstruction level, 0.99 at filtering level
+  anacutsval[9][13]=0.999; // cosPA V0 cut // it's 0.90 x offline V0s at reconstruction level, 0.99 at filtering level
+
+  anacutsval[10][0]=0.05;  // d0 max bachelor wrt PV [cm]
+  anacutsval[10][1]=0.04;  // d0 max bachelor wrt PV [cm]
+  anacutsval[10][2]=0.03;  // d0 max bachelor wrt PV [cm]
+  anacutsval[10][3]=0.05;  // d0 max bachelor wrt PV [cm]
+  anacutsval[10][4]=0.05;  // d0 max bachelor wrt PV [cm]
+  anacutsval[10][5]=0.02;  // d0 max bachelor wrt PV [cm]
+  anacutsval[10][6]=0.02;  // d0 max bachelor wrt PV [cm]
+  anacutsval[10][7]=0.02;  // d0 max bachelor wrt PV [cm]
+  anacutsval[10][8]=0.02;  // d0 max bachelor wrt PV [cm]
+  anacutsval[10][9]=0.02;  // d0 max bachelor wrt PV [cm]
+  anacutsval[10][10]=0.02; // d0 max bachelor wrt PV [cm]
+  anacutsval[10][11]=0.02; // d0 max bachelor wrt PV [cm]
+  anacutsval[10][12]=0.02; // d0 max bachelor wrt PV [cm]
+  anacutsval[10][13]=0.02; // d0 max bachelor wrt PV [cm]
+
+
+  anacutsval[15][0]=0.5; // pT min V0 track [GeV/c]
   anacutsval[15][1]=0.6; // pT min V0 track [GeV/c]
-  anacutsval[15][2]=0.8; // pT min V0 track [GeV/c]
-  anacutsval[15][3]=0.8; // pT min V0 track [GeV/c]
+  anacutsval[15][2]=0.7; // pT min V0 track [GeV/c]
+  anacutsval[15][3]=0.7; // pT min V0 track [GeV/c]
   anacutsval[15][4]=0.8; // pT min V0 track [GeV/c]
-  anacutsval[15][5]=1.0; // pT min V0 track [GeV/c]
+  anacutsval[15][5]=0.9; // pT min V0 track [GeV/c]
   anacutsval[15][6]=1.0; // pT min V0 track [GeV/c]
   anacutsval[15][7]=1.0; // pT min V0 track [GeV/c]
-  anacutsval[15][8]=0.0; // pT min V0 track [GeV/c]
-  anacutsval[15][9]=0.0; // pT min V0 track [GeV/c]
+  anacutsval[15][8]=1.2; // pT min V0 track [GeV/c]
+  anacutsval[15][9]=1.2; // pT min V0 track [GeV/c]
+  anacutsval[15][10]=1.2; // pT min V0 track [GeV/c]
+  anacutsval[15][11]=1.2; // pT min V0 track [GeV/c]
+  anacutsval[15][12]=1.2; // pT min V0 track [GeV/c]
+  anacutsval[15][13]=1.2; // pT min V0 track [GeV/c]
+
 
 
   RDHFLctoV0An->SetCuts(nvars,nptbins,anacutsval);
@@ -176,7 +200,6 @@ void makeInputAliAnalysisTaskSELctoV0bachelor(){
   pidObjBachelor->SetTOFdecide(kFALSE);
 
   RDHFLctoV0An->SetPidHF(pidObjBachelor);
-  RDHFLctoV0Prod->SetPidHF(pidObjBachelor);
 
   //2. V0pos
   AliAODPidHF* pidObjV0pos = new AliAODPidHF();
@@ -189,7 +212,6 @@ void makeInputAliAnalysisTaskSELctoV0bachelor(){
   pidObjV0pos->SetTOFdecide(kFALSE);
 
   RDHFLctoV0An->SetPidV0pos(pidObjV0pos);
-  RDHFLctoV0Prod->SetPidV0pos(pidObjV0pos);
 
   //2. V0neg
   AliAODPidHF* pidObjV0neg = new AliAODPidHF();
@@ -202,7 +224,6 @@ void makeInputAliAnalysisTaskSELctoV0bachelor(){
   pidObjV0neg->SetTOFdecide(kFALSE);
 
   RDHFLctoV0An->SetPidV0neg(pidObjV0neg);
-  RDHFLctoV0Prod->SetPidV0neg(pidObjV0neg);
 
 
   // uncomment these lines for Baysian PID:
@@ -221,17 +242,13 @@ void makeInputAliAnalysisTaskSELctoV0bachelor(){
 
   Bool_t pidflag=kTRUE;
   RDHFLctoV0An->SetUsePID(pidflag);
-  RDHFLctoV0Prod->SetUsePID(kFALSE);
   if(pidflag) cout<<"PID is used"<<endl;
   else cout<<"PID is not used"<<endl;
 
-  cout<<"This is the object I'm going to save:"<<endl;
-  RDHFLctoV0Prod->PrintAll();
-  cout<<"This is the object I'm going to save:"<<endl;
+  cout<<"This is the (anal) object I'm going to save:"<<endl;
   RDHFLctoV0An->PrintAll();
   TFile* fout=new TFile("Lc2pK0SCuts.root","RECREATE"); 
   fout->cd();
-  RDHFLctoV0Prod->Write();
   RDHFLctoV0An->Write();
   fout->Close();
   delete fout;
@@ -239,8 +256,7 @@ void makeInputAliAnalysisTaskSELctoV0bachelor(){
   delete pidObjBachelor;
   delete pidObjV0neg;
   delete pidObjV0pos;
-  delete RDHFLctoV0Prod;
-  delete RDHFLctoV0An;
+  //delete RDHFLctoV0An;
 
 }
 
@@ -262,8 +278,8 @@ void makeInputAliAnalysisTaskSESignificanceMaximization(){
   esdTrackCuts->SetMinNClustersITS(0);
   //esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
   esdTrackCuts->SetMinDCAToVertexXY(0.);
-  //esdTrackCuts->SetEtaRange(-0.8,0.8);
-  esdTrackCuts->SetPtRange(0.3,1.e10);
+  esdTrackCuts->SetEtaRange(-0.8,0.8);
+  esdTrackCuts->SetPtRange(0.,1.e10);
   
   AliESDtrackCuts* esdTrackCutsV0daughters=new AliESDtrackCuts();
   esdTrackCutsV0daughters->SetRequireSigmaToVertex(kFALSE);