]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliAnalysisFilter.cxx
Kalman filter vertex in Psi2s task
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisFilter.cxx
index 6c9f4102f2f78d0898010c8e3f4b1a2daa92de39..fdddaa687065b7841f6bb12e8d78d690478d0a23 100644 (file)
@@ -13,6 +13,8 @@
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
+/* $Id$ */
+
 //
 // Manager class for filter decisions based on cuts
 // The filter contains a list of sets of cuts.
@@ -46,24 +48,73 @@ AliAnalysisFilter::AliAnalysisFilter(const char* name, const char* title):
 }
 
 AliAnalysisFilter::AliAnalysisFilter(const AliAnalysisFilter& obj):
-    TNamed(obj)
+    TNamed(obj),
+    fCuts(0)
 {
 // Copy constructor
+    fCuts = obj.fCuts;
 }
 
+AliAnalysisFilter::~AliAnalysisFilter()
+{
+// Destructor
+   if (fCuts) fCuts->Delete("slow");
+   delete fCuts;
+}   
 
+AliAnalysisFilter& AliAnalysisFilter::operator=(const AliAnalysisFilter& other)
+{
+// Assignment
+   if (&other != this) {
+          TNamed::operator=(other);
+          fCuts = other.fCuts;
+   }
+   return *this;
+   }
+   
 UInt_t AliAnalysisFilter::IsSelected(TObject* obj)
 {
     //
     // Loop over all set of cuts
     // and store the decision
     UInt_t result = 0;
+    UInt_t filterMask;
+    
     TIter next(fCuts);
     AliAnalysisCuts *cuts;
     Int_t iCutB = 1;
        
     while((cuts = (AliAnalysisCuts*)next())) {
        Bool_t acc = cuts->IsSelected(obj);
+       if ((filterMask = cuts->GetFilterMask()) > 0) {
+           acc = (acc && (filterMask == result));
+       }
+       cuts->SetSelected(acc);
+       if (acc) {result |= iCutB & 0x00ffffff;}
+       iCutB *= 2;
+    }  
+
+    return result;
+}
+
+UInt_t AliAnalysisFilter::IsSelected(TList* list)
+{
+    //
+    // Loop over all set of cuts
+    // and store the decision
+    UInt_t result = 0;
+    UInt_t filterMask;
+
+    TIter next(fCuts);
+    AliAnalysisCuts *cuts;
+    Int_t iCutB = 1;
+       
+    while((cuts = (AliAnalysisCuts*)next())) {
+       Bool_t acc = cuts->IsSelected(list);
+       if ((filterMask = cuts->GetFilterMask()) > 0) {
+           acc = (acc && (filterMask & result));
+       }
+       cuts->SetSelected(acc);
        if (acc) {result |= iCutB & 0x00ffffff;}
        iCutB *= 2;
     }  
@@ -71,8 +122,29 @@ UInt_t AliAnalysisFilter::IsSelected(TObject* obj)
     return result;
 }
 
+void AliAnalysisFilter::Init()
+{
+    //
+    // Loop over all set of cuts and call Init
+    TIter next(fCuts);
+    AliAnalysisCuts *cuts;
+    while((cuts = (AliAnalysisCuts*)next())) cuts->Init();
+}
+
 void AliAnalysisFilter::AddCuts(AliAnalysisCuts* cuts)
 {
     // Add a set of cuts
     fCuts->Add(cuts);
 }
+
+Bool_t AliAnalysisFilter::IsSelected(char* name)
+{
+    //
+    // Returns current result for cut with name
+    AliAnalysisCuts* cut = (AliAnalysisCuts*) (fCuts->FindObject(name));
+    if (cut) {
+      return (cut->Selected());
+    } else  {
+      return 0;
+    }
+}