1 #ifndef ALIANALYSISMUMUCUTELEMENT_H
2 #define ALIANALYSISMUMUCUTELEMENT_H
6 * \class AliAnalysisMuMuCutElement
8 * \brief Describes an elementary cut (either event cut, track cut, pair cut, or trigger class cut)
19 class AliInputEventHandler;
22 class AliAnalysisMuMuCutElement : public TObject
28 kEvent=0, // a cut on event
29 kTrack=1, // a cut on track
30 kTrackPair=2, // a cut on track pair
31 kTriggerClass=3, // a cut on trigger class
32 kAny=4 // must be the last one
35 static const char* CutTypeName(ECutType type);
37 AliAnalysisMuMuCutElement();
39 AliAnalysisMuMuCutElement(ECutType expectedType,
41 const char* cutMethodName,
42 const char* cutMethodPrototype,
43 const char* defaultParameters);
45 virtual ~AliAnalysisMuMuCutElement();
47 virtual Bool_t IsValid() const { return (fCutMethod != 0x0); }
49 const char* GetName() const { return fName.Data(); }
51 virtual Bool_t Pass(const AliVEvent& event) const;
53 virtual Bool_t Pass(const AliInputEventHandler& eventHandler) const;
55 virtual Bool_t Pass(const AliVParticle& particle) const;
57 virtual Bool_t Pass(const AliVParticle& p1, const AliVParticle& p2) const;
59 virtual Bool_t Pass(const TString& firedTriggerClasses, TString& acceptedTriggerClasses,
60 UInt_t L0, UInt_t L1, UInt_t L2) const;
62 virtual void Print(Option_t* opt="") const;
64 Bool_t IsEventCutter() const { return fIsEventCutter; }
65 Bool_t IsEventHandlerCutter() const { return fIsEventHandlerCutter; }
66 Bool_t IsTrackCutter() const { return fIsTrackCutter; }
67 Bool_t IsTrackPairCutter() const { return fIsTrackPairCutter; }
68 Bool_t IsTriggerClassCutter() const { return fIsTriggerClassCutter; }
70 TObject* GetCutObject() const { return fCutObject; }
72 const Long_t* GetCallParams() const { return &fCallParams[0]; }
74 const char* GetCallMethodName() const;
75 const char* GetCallMethodProto() const;
77 Bool_t IsEqual(const TObject* obj) const;
81 void Init(ECutType type=kAny) const;
83 Bool_t CallCutMethod(Long_t p) const;
84 Bool_t CallCutMethod(Long_t p1, Long_t p2) const;
86 Int_t CountOccurences(const TString& prototype, const char* search) const;
88 /// not implemented on purpose
89 AliAnalysisMuMuCutElement(const AliAnalysisMuMuCutElement& rhs);
90 /// not implemented on purpose
91 AliAnalysisMuMuCutElement& operator=(const AliAnalysisMuMuCutElement& rhs);
94 TString fName; // name of the cut
95 mutable Bool_t fIsEventCutter; // whether or not the cut is an event cutter
96 mutable Bool_t fIsEventHandlerCutter; // whether or not the cut is an event handler cutter
97 mutable Bool_t fIsTrackCutter; // whether or not the cut is a track cutter
98 mutable Bool_t fIsTrackPairCutter; // whether or not the cut is a track pair cutter
99 mutable Bool_t fIsTriggerClassCutter; // whether or not the cut is a trigger class cutter
102 TObject* fCutObject; // pointer (not owner) to the object doing the actual cut work
103 TString fCutMethodName; // method (of fCutObject) to be called to do the cut
104 TString fCutMethodPrototype; // prototype of the method to be called to do the cut
105 TString fDefaultParameters; // default parameters of the cut method (might be empty)
106 mutable Int_t fNofParams; // number of parameters
107 mutable TMethodCall* fCutMethod; //! cut method
109 mutable std::vector<Long_t> fCallParams; //! vector of parameters for the fCutMethod
110 mutable std::vector<Double_t> fDoubleParams; //! temporary vector to hold the references
112 ClassDef(AliAnalysisMuMuCutElement,1) // One piece of a cut combination
115 class AliAnalysisMuMuCutElementBar : public AliAnalysisMuMuCutElement
118 AliAnalysisMuMuCutElementBar();
120 AliAnalysisMuMuCutElementBar(const AliAnalysisMuMuCutElement& ce);
122 virtual ~AliAnalysisMuMuCutElementBar();
124 Bool_t IsValid() const { return fCutElement && fCutElement->IsValid(); }
126 Bool_t Pass(const AliVEvent& event) const { return !fCutElement->Pass(event); }
128 Bool_t Pass(const AliInputEventHandler& eventHandler) const { return !fCutElement->Pass(eventHandler); }
130 Bool_t Pass(const AliVParticle& particle) const { return !fCutElement->Pass(particle); }
132 Bool_t Pass(const AliVParticle& p1, const AliVParticle& p2) const { return !fCutElement->Pass(p1,p2); }
134 Bool_t Pass(const TString& firedTriggerClasses, TString& acceptedTriggerClasses,
135 UInt_t L0, UInt_t L1, UInt_t L2) const
136 { return fCutElement->Pass(firedTriggerClasses,acceptedTriggerClasses,L0,L1,L2); }
138 void Print(Option_t* opt="") const;
141 const AliAnalysisMuMuCutElement* fCutElement; // the cut element we're the negation of
143 ClassDef(AliAnalysisMuMuCutElementBar,1) // opposite of cut element (i.e. !cutelement)