]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGDQ/dielectron/AliDielectronV0Cuts.cxx
including switch to set on/off iso-track core removal, cleaning and bug fix
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliDielectronV0Cuts.cxx
index ad68d85c2235d23f5e0b550e4f2be0432c5a348d..24609217f9f9119aeee59a9ed31260eb3cfbff73 100644 (file)
@@ -48,7 +48,8 @@ Example configuration:
   gammaV0Cuts->SetPdgCodes(22,11,11); // mother, daughter1 and 2
 
   // add default PID cuts (defined in AliDielectronPID)
-  gammaV0Cuts->SetDefaultPID(16);
+  // requirement can be set to at least one(kAny) of the tracks or to both(kBoth)
+  gammaV0Cuts->SetDefaultPID(16, AliDielectronV0Cuts::kAny);
 
   // add the pair cuts for V0 candidates
   gammaV0Cuts->AddCut(AliDielectronVarManager::kCosPointingAngle, TMath::Cos(0.02),   1.0, kFALSE);
@@ -88,6 +89,7 @@ AliDielectronV0Cuts::AliDielectronV0Cuts() :
   fNegPdg(0),
   fPosPdg(0),
   fPID(-1),
+  fPIDCutType(kBoth),
   fOrbit(0),
   fPeriod(0),
   fBunchCross(0)
@@ -107,6 +109,7 @@ AliDielectronV0Cuts::AliDielectronV0Cuts(const char* name, const char* title) :
   fNegPdg(0),
   fPosPdg(0),
   fPID(-1),
+  fPIDCutType(kBoth),
   fOrbit(0),
   fPeriod(0),
   fBunchCross(0)
@@ -152,11 +155,13 @@ void AliDielectronV0Cuts::InitEvent(AliVTrack *trk)
   fV0TrackArr.ResetAllBits();
 
   // basic quality cut, /*at least one*/ both of the V0 daughters has to fullfill
+  // always update ::Print accordingly
   AliDielectronVarCuts dauQAcuts1;
-  dauQAcuts1.AddCut(AliDielectronVarManager::kPt,            0.05, 100.0);
-  dauQAcuts1.AddCut(AliDielectronVarManager::kEta,          -0.9,    0.9);
-  dauQAcuts1.AddCut(AliDielectronVarManager::kNclsTPC,      50.0,  160.0);
+  dauQAcuts1.AddCut(AliDielectronVarManager::kNclsTPC,      70.0,  160.0);
   dauQAcuts1.AddCut(AliDielectronVarManager::kTPCchi2Cl,     0.0,    4.0);
+  dauQAcuts1.AddCut(AliDielectronVarManager::kKinkIndex0,            0.0);
+  dauQAcuts1.AddCut(AliDielectronVarManager::kEta,          -0.9,    0.9);
+  dauQAcuts1.AddCut(AliDielectronVarManager::kPt,            0.05, 100.0);
   AliDielectronTrackCuts dauQAcuts2;
   //  dauQAcuts2.SetRequireITSRefit(kTRUE);
   dauQAcuts2.SetRequireTPCRefit(kTRUE);
@@ -177,7 +182,7 @@ void AliDielectronV0Cuts::InitEvent(AliVTrack *trk)
     for (Int_t iv=0; iv<esdev->GetNumberOfV0s(); ++iv){
       AliESDv0 *v = esdev->GetV0(iv);
       if(!v) continue;
-      
+
       // check the v0 finder
       if( v->GetOnFlyStatus() && fV0finder==AliDielectronV0Cuts::kOffline  ) continue;
       if(!v->GetOnFlyStatus() && fV0finder==AliDielectronV0Cuts::kOnTheFly ) continue;
@@ -197,8 +202,11 @@ void AliDielectronV0Cuts::InitEvent(AliVTrack *trk)
 
       // PID default cuts
       if(fPID>=0) {
-       if( !dauPIDcuts.IsSelected(trNeg) ) continue;
-       if( !dauPIDcuts.IsSelected(trPos) ) continue;
+       Bool_t selected=kFALSE;
+       selected=dauPIDcuts.IsSelected(trNeg);
+       if(fPIDCutType==kBoth) selected &= dauPIDcuts.IsSelected(trPos);
+       if(fPIDCutType==kAny)  selected |= dauPIDcuts.IsSelected(trPos);
+       if(!selected) continue;
       }
 
       // basic track cuts
@@ -225,6 +233,7 @@ void AliDielectronV0Cuts::InitEvent(AliVTrack *trk)
   }
   else if(ev->IsA() == AliAODEvent::Class()) {
     const AliAODEvent *aodEv = static_cast<const AliAODEvent*>(ev);
+    if(!aodEv->GetV0s()) return; // protection for nano AODs
 
     // loop over vertices
     for (Int_t ivertex=0; ivertex<aodEv->GetNumberOfV0s(); ++ivertex){
@@ -248,8 +257,11 @@ void AliDielectronV0Cuts::InitEvent(AliVTrack *trk)
 
       // PID default cuts
       if(fPID>=0) {
-       if( !dauPIDcuts.IsSelected(trNeg) ) continue;
-       if( !dauPIDcuts.IsSelected(trPos) ) continue;
+       Bool_t selected=kFALSE;
+       selected=dauPIDcuts.IsSelected(trNeg);
+       if(fPIDCutType==kBoth) selected &= dauPIDcuts.IsSelected(trPos);
+       if(fPIDCutType==kAny)  selected |= dauPIDcuts.IsSelected(trPos);
+       if(!selected) continue;
       }
 
       // basic track cuts
@@ -270,7 +282,7 @@ void AliDielectronV0Cuts::InitEvent(AliVTrack *trk)
        fV0TrackArr.SetBitNumber(trPos->GetID());
       }
     }
-    //printf("there are %d V0s in the event \n",nV0stored);
+    //    printf("there are %d V0s in the event \n",nV0stored);
   }
   else
     return;
@@ -316,3 +328,37 @@ Bool_t AliDielectronV0Cuts::IsNewEvent(const AliVEvent *ev)
   fPeriod     = ev->GetPeriodNumber();
   return kTRUE;
 }
+
+//________________________________________________________________________
+void AliDielectronV0Cuts::Print(const Option_t* /*option*/) const
+{
+  //
+  // Print cuts and the range
+  //
+  printf(" V0 cuts:\n");
+  printf(" V0 finder mode: %s \n",(fV0finder ==kOnTheFly ? "One-The-Fly":
+                                  (fV0finder==kOffline  ? "Offline":
+                                   "One-The-Fly+Offline") ) );
+  AliDielectronVarCuts::Print();
+
+  printf(" V0 daughter cuts (applied to both):\n");
+  AliDielectronVarCuts dauQAcuts1;
+  dauQAcuts1.AddCut(AliDielectronVarManager::kNclsTPC,      70.0,  160.0);
+  dauQAcuts1.AddCut(AliDielectronVarManager::kTPCchi2Cl,     0.0,    4.0);
+  dauQAcuts1.AddCut(AliDielectronVarManager::kKinkIndex0,            0.0);
+  dauQAcuts1.AddCut(AliDielectronVarManager::kEta,          -0.9,    0.9);
+  dauQAcuts1.AddCut(AliDielectronVarManager::kPt,            0.05, 100.0);
+  dauQAcuts1.Print();
+  AliDielectronTrackCuts dauQAcuts2;
+  //  dauQAcuts2.SetRequireITSRefit(kTRUE);
+  dauQAcuts2.SetRequireTPCRefit(kTRUE);
+  //  dauQAcuts2.Print(); //TODO activate as soon as implemented
+
+  if(fPID>=0) {
+    printf(" V0 daughter PID cuts (applied to %s):\n",(fPIDCutType==kBoth?"both":"any"));
+    AliDielectronPID dauPIDcuts;
+    dauPIDcuts.SetDefaults(fPID);
+    dauPIDcuts.Print(); //TODO activate as soon as implemented
+  }
+
+}