1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
19 // Manager class for filter decisions based on cuts
20 // The filter contains a list of sets of cuts.
21 // A bit field is filled in order to store the decision of each cut-set.
22 // Author: Andreas Morsch
23 // andreas.morsch@cern.ch
27 #include "AliAnalysisFilter.h"
28 #include "AliAnalysisCuts.h"
31 ClassImp(AliAnalysisFilter)
34 ////////////////////////////////////////////////////////////////////////
36 AliAnalysisFilter::AliAnalysisFilter():
40 // Default constructor
43 AliAnalysisFilter::AliAnalysisFilter(const char* name, const char* title):
50 AliAnalysisFilter::AliAnalysisFilter(const AliAnalysisFilter& obj):
58 AliAnalysisFilter::~AliAnalysisFilter()
61 if (fCuts) fCuts->Delete("slow");
65 AliAnalysisFilter& AliAnalysisFilter::operator=(const AliAnalysisFilter& other)
69 TNamed::operator=(other);
75 UInt_t AliAnalysisFilter::IsSelected(TObject* obj)
78 // Loop over all set of cuts
79 // and store the decision
84 AliAnalysisCuts *cuts;
87 while((cuts = (AliAnalysisCuts*)next())) {
88 Bool_t acc = cuts->IsSelected(obj);
89 if ((filterMask = cuts->GetFilterMask()) > 0) {
90 acc = (acc && (filterMask == result));
92 cuts->SetSelected(acc);
93 if (acc) {result |= iCutB & 0x00ffffff;}
100 UInt_t AliAnalysisFilter::IsSelected(TList* list)
103 // Loop over all set of cuts
104 // and store the decision
109 AliAnalysisCuts *cuts;
112 while((cuts = (AliAnalysisCuts*)next())) {
113 Bool_t acc = cuts->IsSelected(list);
114 if ((filterMask = cuts->GetFilterMask()) > 0) {
115 acc = (acc && (filterMask & result));
117 cuts->SetSelected(acc);
118 if (acc) {result |= iCutB & 0x00ffffff;}
125 void AliAnalysisFilter::Init()
128 // Loop over all set of cuts and call Init
130 AliAnalysisCuts *cuts;
131 while((cuts = (AliAnalysisCuts*)next())) cuts->Init();
134 void AliAnalysisFilter::AddCuts(AliAnalysisCuts* cuts)
140 Bool_t AliAnalysisFilter::IsSelected(char* name)
143 // Returns current result for cut with name
144 AliAnalysisCuts* cut = (AliAnalysisCuts*) (fCuts->FindObject(name));
146 return (cut->Selected());