New shortcut methods for setting range of primary vertex
[u/mrichter/AliRoot.git] / ANALYSIS / AliEventCut.cxx
index 32e943f421a85d2b16a30b0ec6a5e7d4a8a03e40..d1ff673576842ca57614fe5e5ef00085104ce046 100644 (file)
 #include <TObjArray.h>
 //#include <TIter.h>
 
 #include <TObjArray.h>
 //#include <TIter.h>
 
-#include "AliBaseEventCut.h"
+#include "AliEventBaseCut.h"
+
+ClassImp(AliEventCut)
+
 
 AliEventCut::AliEventCut():
 
 AliEventCut::AliEventCut():
- fBaseCuts(0x0)
+ fBaseCuts(10)
 {
 //costructor
 
 }
 /*********************************************************/
 {
 //costructor
 
 }
 /*********************************************************/
+AliEventCut::AliEventCut(const AliEventCut& in):
+ TObject(in),
+ fBaseCuts(in.fBaseCuts)
+{
+  //cpy ctor
+  fBaseCuts.SetOwner(kTRUE);
+}
+/*********************************************************/
 
 AliEventCut::~AliEventCut()
 {
 //costructor
 
 AliEventCut::~AliEventCut()
 {
 //costructor
- delete fBaseCuts;
 }
 
 /*********************************************************/
 
 }
 
 /*********************************************************/
 
-Bool_t AliEventCut::Pass(AliAOD* aod) const
+Bool_t AliEventCut::Rejected(AliAOD* aod) const
 {
   //returns kTRUE if rejected
   if (aod == 0x0)
 {
   //returns kTRUE if rejected
   if (aod == 0x0)
@@ -39,11 +49,93 @@ Bool_t AliEventCut::Pass(AliAOD* aod) const
      return kFALSE;
    }
    
      return kFALSE;
    }
    
-  TIter iter(fBaseCuts);
-  AliBaseEventCut* becut;
-  while (( becut = (AliBaseEventCut*)iter() ))
+  TIter iter(&fBaseCuts);
+  AliEventBaseCut* becut;
+  while (( becut = (AliEventBaseCut*)iter() ))
    {
    {
-     if (becut->Pass(aod)) return kTRUE;
+     if (becut->Rejected(aod)) return kTRUE;
    }
   return kFALSE;
 }
    }
   return kFALSE;
 }
+/*********************************************************/
+void AliEventCut::AddBasePartCut(AliEventBaseCut* ebcut)
+{
+//Adds a base cut
+ if (ebcut == 0x0)
+  {
+    Error("AddBasePartCut","Pointer to base cut is NULL");
+    return;
+  }
+ if (ebcut->GetProperty() != AliEventBaseCut::kNone)
+  {
+    if (FindCut(ebcut->GetProperty()))
+     {
+       Warning("AddBasePartCut","Cut with this property is already in the list of base cuts");
+     }
+  }  
+  
+ fBaseCuts.Add(ebcut->Clone());
+}
+/*********************************************************/
+
+AliEventBaseCut* AliEventCut::FindCut(AliEventBaseCut::EEventCutProperty prop)
+{
+//Finds and returns pointer to the cut with given property
+ Int_t n = fBaseCuts.GetEntries();
+ for (Int_t i = 0; i<n; i++)
+  {
+    AliEventBaseCut* bcut = (AliEventBaseCut*)fBaseCuts.At(i);
+    if (bcut->GetProperty() == prop)
+       return bcut; //we found the cut we were searching for
+  }
+
+ return 0x0; //we did not found this cut
+
+}
+/*********************************************************/
+
+void AliEventCut::SetNChargedRange(Int_t min,Int_t max,Double_t etamin,Double_t etamax)
+{
+ //Sets renge of number of charged particles
+  AliNChargedCut* cut = dynamic_cast<AliNChargedCut*>(FindCut(AliEventBaseCut::kNChargedCut));
+  if(cut) 
+   { 
+     cut->SetRange(min,max);
+     cut->SetEtaRange(etamin,etamax);
+   }  
+  else fBaseCuts.Add(new AliNChargedCut(min,max,etamin,etamax));
+}
+/*********************************************************/
+
+void AliEventCut::SetVertexXRange(Int_t min,Int_t max)
+{
+  //Sets range of z coordinate of a primary vertex
+  AliEventBaseCut* cut = FindCut(AliEventBaseCut::kPrimVertexXCut);
+  if (cut) cut->SetRange(min,max);
+  else fBaseCuts.Add(new AliPrimVertexXCut(min,max));
+}
+/*********************************************************/
+
+void AliEventCut::SetVertexYRange(Int_t min,Int_t max)
+{
+  //Sets range of z coordinate of a primary vertex
+  AliEventBaseCut* cut = FindCut(AliEventBaseCut::kPrimVertexYCut);
+  if (cut) cut->SetRange(min,max);
+  else fBaseCuts.Add(new AliPrimVertexYCut(min,max));
+}
+/*********************************************************/
+
+void AliEventCut::SetVertexZRange(Int_t min,Int_t max)
+{
+  //Sets range of z coordinate of a primary vertex
+  AliEventBaseCut* cut = FindCut(AliEventBaseCut::kPrimVertexZCut);
+  if (cut) cut->SetRange(min,max);
+  else fBaseCuts.Add(new AliPrimVertexZCut(min,max));
+}
+/*********************************************************/
+/*********************************************************/
+/*********************************************************/
+
+ClassImp(AliEventEmptyCut)