* 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.
}
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;
}
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;
+ }
+}