Possibility to apply filtermask (bitwise AND) to the previous decisions.
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 15 Sep 2009 16:22:00 +0000 (16:22 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 15 Sep 2009 16:22:00 +0000 (16:22 +0000)
ANALYSIS/AliAnalysisCuts.cxx
ANALYSIS/AliAnalysisCuts.h
ANALYSIS/AliAnalysisFilter.cxx

index dda5298921044b638c8650ad4f73957a586fda02..9c3effbf663d1250ab493ded9a65595d6dd1f452 100644 (file)
@@ -29,13 +29,13 @@ ClassImp(AliAnalysisCuts)
 ////////////////////////////////////////////////////////////////////////
 
 AliAnalysisCuts::AliAnalysisCuts():
-    TNamed()
+    TNamed(), fFilterMask(0)
 {
   // Default constructor
 }
 
 AliAnalysisCuts::AliAnalysisCuts(const char* name, const char* title):
-    TNamed(name, title)
+    TNamed(name, title), fFilterMask(0)
 {
   // Constructor
 }
index 5533a51d19924f3887bee16131e1d5f5bbe61d2e..74c14c71c3c32cd15bd827f21d414460ffab3da1 100644 (file)
@@ -23,8 +23,11 @@ class AliAnalysisCuts : public TNamed
     virtual Bool_t IsSelected(TObject* obj)  = 0;
     virtual Bool_t IsSelected(TList*  list)  = 0;
     virtual void   Init() {;}
+    virtual void   SetFilterMask(UInt_t mask) {fFilterMask = mask;}
+    virtual UInt_t GetFilterMask()   const    {return fFilterMask;}        
  private:
-    ClassDef(AliAnalysisCuts, 3); // Base class for filter decisions on ESD objects
+    UInt_t fFilterMask; // Mask to use one of the previous decisions inside a filter
+    ClassDef(AliAnalysisCuts, 4); // Base class for filter decisions on ESD objects
 };
  
 #endif
index fd364fc73c087ca6cc5ceba810b21503f85f609f..4ffc5ee52e19ec89e2b7a70f53cbc600964100c5 100644 (file)
@@ -70,12 +70,18 @@ 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));
+       }
+       
        if (acc) {result |= iCutB & 0x00ffffff;}
        iCutB *= 2;
     }