From c54360e6cd62eedafced089aac7aa0b4b8cf0aec Mon Sep 17 00:00:00 2001 From: morsch Date: Tue, 15 Sep 2009 16:22:00 +0000 Subject: [PATCH] Possibility to apply filtermask (bitwise AND) to the previous decisions. --- ANALYSIS/AliAnalysisCuts.cxx | 4 ++-- ANALYSIS/AliAnalysisCuts.h | 5 ++++- ANALYSIS/AliAnalysisFilter.cxx | 6 ++++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ANALYSIS/AliAnalysisCuts.cxx b/ANALYSIS/AliAnalysisCuts.cxx index dda52989210..9c3effbf663 100644 --- a/ANALYSIS/AliAnalysisCuts.cxx +++ b/ANALYSIS/AliAnalysisCuts.cxx @@ -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 } diff --git a/ANALYSIS/AliAnalysisCuts.h b/ANALYSIS/AliAnalysisCuts.h index 5533a51d199..74c14c71c3c 100644 --- a/ANALYSIS/AliAnalysisCuts.h +++ b/ANALYSIS/AliAnalysisCuts.h @@ -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 diff --git a/ANALYSIS/AliAnalysisFilter.cxx b/ANALYSIS/AliAnalysisFilter.cxx index fd364fc73c0..4ffc5ee52e1 100644 --- a/ANALYSIS/AliAnalysisFilter.cxx +++ b/ANALYSIS/AliAnalysisFilter.cxx @@ -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; } -- 2.43.0