]>
Commit | Line | Data |
---|---|---|
2a445445 | 1 | // |
2 | // Class AliRsnSimpleFcn | |
3 | // | |
4 | // This class defines a base classe to implement a typical computation | |
5 | // which uses the internal RSN package event format (AliRsnEvent). | |
6 | // It contains some default flags which turn out to be useful: | |
7 | // - a flag to select only the "true" pairs (tracks from same resonance) | |
8 | // - a flag to know if the computation is done over two events (mixing) | |
9 | // | |
10 | // Any kind of analysis object should be implemented as inheriting from this | |
11 | // because the AliRsnAnalyzer which executes the analysis will accept a collection | |
12 | // of such objects, in order to have a unique format of processing method | |
13 | // | |
14 | // The user who implements a kind of computation type should inherit from | |
15 | // this class and override the virtual functions defined in it, which | |
16 | // initialize the final output histogram and define how to process data. | |
17 | // | |
18 | // | |
19 | // author: A. Pulvirenti (email: alberto.pulvirenti@ct.infn.it) | |
20 | // | |
21 | ||
22 | #include <Riostream.h> | |
23 | ||
24 | #include <TH1.h> | |
25 | #include <TH2.h> | |
26 | #include <TString.h> | |
27 | ||
28 | #include "AliLog.h" | |
29 | ||
30 | #include "AliRsnMCInfo.h" | |
31 | #include "AliRsnDaughter.h" | |
32 | #include "AliRsnEvent.h" | |
33 | #include "AliRsnCut.h" | |
34 | ||
35 | #include "AliRsnSimpleFunction.h" | |
36 | ||
37 | ClassImp(AliRsnSimpleFunction) | |
38 | ||
39 | //________________________________________________________________________________________ | |
40 | AliRsnSimpleFunction::AliRsnSimpleFunction | |
41 | (const char *name, AliRsnPairDef *pd, AliRsnHistoDef *hd, | |
42 | AliRsnCutMgr *cuts, Option_t *option) : | |
43 | TNamed(name, ""), | |
44 | fTrueFlag(kFALSE), | |
45 | fMixFlag(kFALSE), | |
46 | fPair(), | |
47 | fPairDef(pd), | |
48 | fHistoDef(hd), | |
49 | fCuts(cuts), | |
50 | fHisto1D(0x0), | |
51 | fHisto2D(0x0) | |
52 | { | |
53 | // | |
54 | // Constructor. | |
55 | // The histogram data member cannot be passed externally, | |
56 | // its initialization MUST be defined inside the Init() method, | |
57 | // which must be overridden in any derivate implementation. | |
58 | // Last argument (option) allows to set in a user-friedly way the flags: | |
59 | // - TRUE (for true pairs) | |
60 | // - MIX (for mixing pairs) | |
61 | // | |
62 | ||
63 | TString opt(option); | |
64 | opt.ToUpper(); | |
65 | fTrueFlag = opt.Contains("TRUE"); | |
66 | fMixFlag = opt.Contains("MIX"); | |
67 | } | |
68 | //________________________________________________________________________________________ | |
69 | AliRsnSimpleFunction::AliRsnSimpleFunction(const AliRsnSimpleFunction ©) : | |
70 | TNamed(copy), | |
71 | fTrueFlag(copy.fTrueFlag), | |
72 | fMixFlag(copy.fMixFlag), | |
73 | fPair(), | |
74 | fPairDef(copy.fPairDef), | |
75 | fHistoDef(copy.fHistoDef), | |
76 | fCuts(copy.fCuts), | |
77 | fHisto1D(0x0), | |
78 | fHisto2D(0x0) | |
79 | { | |
80 | // | |
81 | // Copy constructor. | |
82 | // Pointer data members are not cloned. | |
83 | // The histogram is not copied, because it is always initialized | |
84 | // by the Init() method. | |
85 | // | |
86 | } | |
87 | //________________________________________________________________________________________ | |
88 | const AliRsnSimpleFunction& AliRsnSimpleFunction::operator= | |
89 | (const AliRsnSimpleFunction ©) | |
90 | { | |
91 | // | |
92 | // Assignment operator. | |
93 | // Behaves like copy constructor. | |
94 | // Also in this case, the histogram is not copied, and, | |
95 | // if it was present, it is destroyed and will need to be recreated. | |
96 | // | |
97 | ||
98 | Clear(); | |
99 | SetName(copy.GetName()); | |
100 | ||
101 | fTrueFlag = copy.fTrueFlag; | |
102 | fMixFlag = copy.fMixFlag; | |
103 | ||
104 | fPairDef = copy.fPairDef; | |
105 | fHistoDef = copy.fHistoDef; | |
106 | fCuts = copy.fCuts; | |
107 | ||
108 | return (*this); | |
109 | } | |
110 | //________________________________________________________________________________________ | |
111 | void AliRsnSimpleFunction::Clear(Option_t* /*option*/) | |
112 | { | |
113 | // | |
114 | // Clear arrays and histogram. | |
115 | // For the sake of security, all pointers are also set explicitly to NULL. | |
116 | // | |
117 | if (fHisto1D) delete fHisto1D; | |
118 | fHisto1D = 0x0; | |
119 | if (fHisto2D) delete fHisto2D; | |
120 | fHisto2D = 0x0; | |
121 | } | |
122 | ||
123 | //________________________________________________________________________________________ | |
124 | Bool_t AliRsnSimpleFunction::Init() | |
125 | { | |
126 | // | |
127 | // Initialization function. | |
128 | // By default, it initializes the owned histogram using the method | |
129 | // from AliRsnHistoDef class, giving the same name and title of this. | |
130 | // A user can override this behaviour, if necessary. | |
131 | // Before creating, the HistoDef is checked for proper initialization. | |
132 | // | |
133 | ||
134 | Clear(); | |
135 | ||
136 | Char_t name[200]; | |
137 | sprintf(name, "h_%s", GetName()); | |
138 | ||
139 | switch (fHistoDef->GetNDimensions()) { | |
140 | case 1: | |
141 | fHisto1D = (TH1D*)fHistoDef->Create1DHistogram(name, ""); | |
142 | return kTRUE; | |
143 | case 2: | |
144 | fHisto2D = (TH2D*)fHistoDef->Create1DHistogram(name, ""); | |
145 | return kTRUE; | |
146 | default: | |
147 | AliError("Number of dimensions not properly set."); | |
148 | return kFALSE; | |
149 | } | |
150 | } | |
151 | ||
152 | //________________________________________________________________________________________ | |
153 | Bool_t AliRsnSimpleFunction::ProcessOne(AliRsnEvent* /*event*/) | |
154 | { | |
155 | // | |
156 | // Process a single event according to the purposes of the derived class. | |
157 | // Here the user must put the code which defines how the internal histogram is filled. | |
158 | // The boolean return value allows to catch a failure in execution. | |
159 | // | |
160 | ||
161 | AliWarning("This method must be defined in the derived class"); | |
162 | return kFALSE; | |
163 | } | |
164 | ||
165 | //________________________________________________________________________________________ | |
166 | Bool_t AliRsnSimpleFunction::ProcessTwo(AliRsnEvent* /*event1*/, AliRsnEvent* /*event2*/) | |
167 | { | |
168 | // | |
169 | // Process two events according to relations between them. | |
170 | // This method must be defined whenever the derived object is used in event mixing. | |
171 | // The boolean return value allows to catch a failure in execution. | |
172 | // | |
173 | ||
174 | AliWarning("This method must be defined in the derived class"); | |
175 | return kFALSE; | |
176 | } | |
177 | ||
178 | //________________________________________________________________________________________ | |
179 | Bool_t AliRsnSimpleFunction::CutPass(AliRsnDaughter *d) | |
180 | { | |
181 | // | |
182 | // Check if the AliRsnDaughter argument pass its cuts. | |
183 | // If the cut data member is not initialized for it, returns kTRUE. | |
184 | // | |
185 | if (!fCuts) return kTRUE; | |
186 | else return fCuts->IsSelected(AliRsnCut::kParticle, d); | |
187 | } | |
188 | ||
189 | //________________________________________________________________________________________ | |
190 | Bool_t AliRsnSimpleFunction::CutPass(AliRsnPairParticle *p) | |
191 | { | |
192 | // | |
193 | // Check if the AliRsnPairParticle argument pass its cuts. | |
194 | // If the cut data member is not initialized for it, returns kTRUE. | |
195 | // In this case, another separate check which could be necessary | |
196 | // concerns the possibility that the two tracks are a "true pair" of | |
197 | // daughters of the same resonance. If the corresponding flag is set, | |
198 | // this further check is done, and the method returns kTRUE only | |
199 | // when also this check is passed. | |
200 | // | |
201 | ||
202 | Bool_t cutPassed, truePair; | |
203 | ||
204 | cutPassed = fCuts->IsSelected(AliRsnCut::kPair, p); | |
205 | truePair = fPair.IsTruePair(fPairDef->GetMotherPDG()); | |
206 | ||
207 | if (fTrueFlag) { | |
208 | return (cutPassed && truePair); | |
209 | } | |
210 | else { | |
211 | return cutPassed; | |
212 | } | |
213 | } | |
214 | ||
215 | //________________________________________________________________________________________ | |
216 | Bool_t AliRsnSimpleFunction::CutPass(AliRsnEvent *e) | |
217 | { | |
218 | // | |
219 | // Check if the AliRsnEvent argument pass its cuts. | |
220 | // If the cut data member is not initialized for it, returns kTRUE. | |
221 | // | |
222 | if (!fCuts) return kTRUE; | |
223 | else return fCuts->IsSelected(AliRsnCut::kEvent, e); | |
224 | } |