/[PAMELA software]/PamCut/PamCutBase/PamCutBase.h
ViewVC logotype

Contents of /PamCut/PamCutBase/PamCutBase.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (show annotations) (download)
Fri May 29 10:10:28 2009 UTC (15 years, 6 months ago) by pam-fi
Branch: MAIN
Changes since 1.1: +4 -5 lines
File MIME type: text/plain
Previous commit was outdated; fixed.

1 /*
2 * PamCutBase.h
3 *
4 * Created on: 6-feb-2009
5 * Author: Nicola Mori
6 */
7
8 /*! \file PamCutBase.h PamCut and PamCutCollection classes definitions. */
9
10 #ifndef PAMCUTBASE_H_
11 #define PAMCUTBASE_H_
12
13 #include <PamLevel2.h>
14 #include "../CommonDefs.h"
15
16 using namespace std;
17
18 /*! @brief An abstract class to apply cuts to Pamela data.
19 *
20 * This class provides a basic interface for a cut object to apply to PamLevel2 data.
21 */
22 class PamCut {
23 public:
24
25 /*! @brief Constructor. */
26 PamCut(const char *cutName) :
27 _cutName(cutName), _nEv(0), _nGood(0) {
28 }
29
30 /*! @brief Destructor. */
31 virtual ~PamCut() {
32 }
33
34 /*! @brief The basic event check.
35 *
36 * This routine applies the cut to the currently selected event, eg., to the event selected
37 * by the last PamLevel2::GetEntry() call performed by the object pointed by event. Note that
38 * OnGood() is not called by this method.
39 *
40 * @param event The event to analyze.
41 * @return #CUTOK if the event satisfy the cut, other return values are implementation-specific.
42 */
43
44 virtual int Check(PamLevel2 *event) = 0;
45
46 /*! @brief Applies the cut to the current event.
47 *
48 * This routine applies the cut to the currently selected event, eg., it calls Check() and if the
49 * event satisfy the selection it consequently call OnGood(), otherwise it calls OnBad()(this is
50 * the only difference with Check()).
51 *
52 * @param event The event to analyze.
53 * @return same return values as Check()
54 */
55 virtual int ApplyCut(PamLevel2 *event);
56
57 /*! @brief Applies the cut to a range of events.
58 *
59 * This method resets the counters calling Reset() and then calls ApplyCut(PamLevel2 *event) for all
60 * the events in PamLevel2 argument inside the specified range. After checking all the events, it calls
61 * the private method _Finalize(), on which the tasks to be performed after the selection can be defined.
62 *
63 * @param events Pointer to PamLevel2 object which contains the events.
64 * @param firstEvent The first event to analyze. Possible values range from 0 to \#events - 1.
65 * @param lastEvent The last event to analyze.
66 */
67 virtual void Process(PamLevel2 *events, ULong_t firstEvent, ULong_t lastEvent);
68
69 /*! @brief Post-selection tasks.
70 *
71 * Here the post-selection actions (histogram filling, parameter calculation etc.) can be defined.
72 * This routine is automatically called after a good event has been selected by
73 * ApplyCut().
74 * @param event The event which satisfy the cut.
75 */
76 virtual void OnGood(PamLevel2 *event) {
77 }
78
79 /*! @brief Post-selection tasks.
80 *
81 * The post-selection tasks for bad events (ie., not satisfying the cut) can be defined here.
82 *
83 * @see OnGood
84 * @param event The event which don't satisfy the cut.
85 * @param selectionResult The return value of the Check() routine.
86 */
87 virtual void OnBad(PamLevel2 *event, int selectionResult) {
88 }
89
90 /*! @brief Returns the number of checked events.
91 *
92 * @return The number of checked events.
93 */
94 virtual UInt_t GetNEv() {
95 return _nEv;
96 }
97 /*! @brief Returns the number of good events.
98 *
99 * This counter keeps track of how many events have fulfilled the
100 * conditions specified in Check.
101 *
102 * @return The number of good events.
103 */
104 virtual UInt_t GetNGood() {
105 return _nGood;
106 }
107
108 /*! @brief The pre-analysis task definition.
109 *
110 * This method is automatically called by Process() before the event selection;
111 * override this in derived classes to perform pre-analysis tasks like opening files and so on.
112 * In this base class implementation it only resets the counters for examined and good events.
113 * The parameter PamLevel2 *events may serve to initialize the analysis (even if in this base class
114 * implementation it is unused), so the interface includes it.
115 *
116 * @param events The PamLevel2 pointer to the events that will be analyzed.
117 *
118 * @see GetNEv(), GetNGood().
119 */
120 virtual void Setup(PamLevel2 *events);
121
122 /*! @brief The post-analysis task definition.
123 *
124 * This method is automatically called by Process() after the event selection has been
125 * performed; override this in derived classes to perform post-analysis tasks like writing
126 * histograms, closing files and so on.
127 */
128 virtual void Finalize() {
129 }
130
131 /*! @brief Returns the cut name.
132 *
133 * @return The cut name.
134 */
135 const char* GetName() const;
136
137 /*! @brief Changes the cut's name
138 *
139 * @param newName The new name.
140 */
141 void SetName(const char *newName);
142
143 /*! @brief The assignment operator.
144 * This operator defines how to copy a PamCut object into another. In current implementation,
145 * it only copies the cut's name of the RHS on the LHS.
146 *
147 * @param rightValue The RHS.
148 * @return The new value for LHS.
149 */
150 PamCut& operator=(const PamCut &rightValue);
151
152 private:
153
154 const char *_cutName;
155
156 protected:
157
158 UInt_t _nEv; ///< The number of analyzed events.
159 UInt_t _nGood; ///< The number of good events.
160 };
161
162 /*! @brief A class which applies a set of cuts to Pamela data.
163 *
164 * This is a multi-cut class, which inherits from PamCut. Indeed, a multi-cut can be seen as a cut composed
165 * by various simpler cuts; hence the interface of PamCut is also functional for PamCutCollection. The
166 * ApplyCut(PamLevel2 *event) method is overridden so as all the cuts that compose the PamCutCollection are applied to the
167 * events in the same order they are added to the collection. Instead, Process(PamLevel2 *events, ULong_t firstEvent, ULong_t lastEvent)
168 * is NOT overridden, since it performs the same task as the one in the base class: it is sufficient to override
169 * Check(PamLevel2 *event) to replace the single-cut evaluation with a multi-cut evaluation.
170 */
171 class PamCutCollection: public PamCut {
172 public:
173
174 /*! @brief Constructor.
175 *
176 * @param collectionName The collection's name.
177 */
178 PamCutCollection(const char *collectionName) :
179 PamCut(collectionName) {
180 }
181
182 /*! @brief Destructor. */
183 ~PamCutCollection() {
184 }
185
186 /*! @brief Adds a cut to the cut collection
187 * This routine adds a cut to the collection. These are stored in a vector in the same order
188 * they are inserted (the first cut would be element 0, the second cut element 1 and so on).
189 * All the references to a "cut number" or "cut index" will refer to this numbering scheme.
190 *
191 * @param cut The PamCut-derived object to add to the collection.
192 */
193 void AddCut(PamCut &cut);
194
195 /*! @brief The basic selection.
196 *
197 * Like in the mother class, this method performs a basic check on the current event: it calls
198 * Check() for each cut previously added with AddCut(), exiting if one of them is not satisfied.
199 *
200 * @return the index of the failed cut (range: [0, \#cuts-1], see AddCut()); #CUTOK if the event
201 * satisfies all the cuts.
202 */
203 int Check(PamLevel2 *event);
204
205 /*! @brief Applies the cuts to the current event.
206 *
207 * This routine works pretty much like the redefinition of Check(), calling ApplyCut() (instead of
208 * Check() )for each cut. If a cut fails, it calls OnBad(), passing the index of the failed cut as
209 * the selectionResult argument. If all the cuts are successful, it calls OnGood().
210 *
211 * @param event The event to analyze.
212 * @return same return values as Check().
213 */
214 int ApplyCut(PamLevel2 *event);
215
216 /*! @brief Returns a pointer to the iCut-th cut.
217 *
218 * The return value of this method is a pointer to a PamCut object; hence, to use the specific method of
219 * derived cuts it must be cast to the proper cut class.
220 *
221 * @param iCut The cut number, defined as the insertion order (from 0 to \#cuts-1, see AddCut()).
222 * @return pointer to the iCut-th cut; NULL if the specified cut cannot be found or if no cuts are present.
223 * */
224 PamCut *GetCut(unsigned int iCut);
225
226 /*! @brief The number of cuts contained in the collection.
227 *
228 * @return The number of cuts
229 */
230 unsigned int GetSize();
231
232 /*! @brief The pre-analysis task definition.
233 *
234 * This override of the Setup() method calls Setup() for the base class PamCut, and subsequently for each cut
235 * contained in the collection, in the same order the cuts were added to the collection.
236 *
237 * @param events The PamLevel2 pointer to the events that will be analyzed. Unused, but required by the interface.
238 */
239 void Setup(PamLevel2 *events);
240
241 /*! @brief The post-analysis task definition.
242 *
243 * This override of the Finalize() method calls PamCut::Finalize() and then the Finalize() method of each cut
244 * contained in the collection, in the same order.
245 */
246 void Finalize();
247
248 /*! @brief Assignment operator redefinition.
249 * The assignment operator replaces the content of the LHS with that of RHS. The net effect would be that
250 * the cuts contained in the LHS are exactly the same that are in the RHS. In particular, this means that
251 * any modification to one of the cuts will propagate both to the LHS and RHS collections. Also the cut
252 * name will be copied, since the implementation invokes PamCut::operator=.
253 *
254 * @param rightValue The RHS.
255 * @return The new value for LHS.
256 */
257 PamCutCollection& operator=(const PamCutCollection &rightValue);
258
259 protected:
260 /*! @brief A vector containing pointers to PamCut objects */
261 std::vector<PamCut*> _cuts;
262
263 };
264
265 #endif /* PAMCUTBASE_H_ */

  ViewVC Help
Powered by ViewVC 1.1.23