New values and cuts
[u/mrichter/AliRoot.git] / PWG2 / RESONANCES / AliRsnDaughterSelector.cxx
CommitLineData
c865cb1d 1#include <Riostream.h>
2#include <TEntryList.h>
3
4#include "AliLog.h"
5
6#include "AliRsnCutSet.h"
7#include "AliRsnDaughterDef.h"
8
9#include "AliRsnDaughterSelector.h"
10
11ClassImp(AliRsnDaughterSelector)
12
13//__________________________________________________________________________________________________
14AliRsnDaughterSelector::AliRsnDaughterSelector(const char *name, const char *title) :
15 TNamed(name, title),
16 fCutSetsN("AliRsnCutSet", 0),
17 fCutSetsC("AliRsnCutSet", 0),
18 fEntryListsN("TEntryList", 0),
19 fEntryListsP("TEntryList", 0),
20 fEntryListsM("TEntryList", 0)
21{
22//
23// Default constructor.
24//
25
26 AliDebug(AliLog::kDebug + 10, "<-");
27 AliDebug(AliLog::kDebug + 10, "->");
28}
29
30//__________________________________________________________________________________________________
31AliRsnDaughterSelector::AliRsnDaughterSelector(const AliRsnDaughterSelector& copy) :
32 TNamed(copy),
33 fCutSetsN(copy.fCutSetsN),
34 fCutSetsC(copy.fCutSetsC),
35 fEntryListsN(copy.fEntryListsN),
36 fEntryListsP(copy.fEntryListsP),
37 fEntryListsM(copy.fEntryListsM)
38{
39//
40// Copy constructor.
41//
42
43 AliDebug(AliLog::kDebug + 10, "<-");
44 AliDebug(AliLog::kDebug + 10, "->");
45}
46
47//__________________________________________________________________________________________________
48AliRsnDaughterSelector& AliRsnDaughterSelector::operator=(const AliRsnDaughterSelector& copy)
49{
50//
51// Copy constructor.
52//
53
54 AliDebug(AliLog::kDebug + 10, "<-");
55
56 TNamed::operator=(copy);
57
58 fCutSetsN = copy.fCutSetsN;
59 fCutSetsC = copy.fCutSetsC;
60 fEntryListsN = copy.fEntryListsN;
61 fEntryListsP = copy.fEntryListsP;
62 fEntryListsM = copy.fEntryListsM;
63
64 AliDebug(AliLog::kDebug + 10, "->");
65
66 return (*this);
67}
68
69//__________________________________________________________________________________________________
70AliRsnDaughterSelector::~AliRsnDaughterSelector()
71{
72//
73// Destructor
74//
75
76 AliDebug(AliLog::kDebug + 10, "<-");
77
78 fCutSetsN.Delete();
79 fCutSetsC.Delete();
80 fEntryListsN.Delete();
81 fEntryListsP.Delete();
82 fEntryListsM.Delete();
83
84 AliDebug(AliLog::kDebug + 10, "->");
85}
86
87//__________________________________________________________________________________________________
88void AliRsnDaughterSelector::Print(Option_t* option) const
89{
90//
91// Override TObject::Print()
92//
93
94 TNamed::Print(option);
95
96 Int_t i, nSets;
97 AliRsnCutSet *set = 0x0;
98 TEntryList *list = 0x0;
99
100 // neutral
101 nSets = fCutSetsN.GetEntries();
102 for (i = 0; i < nSets; i++) {
103 set = (AliRsnCutSet*)fCutSetsN[i];
104 list = (TEntryList*)fEntryListsN[i];
105 AliInfo(Form("Neutral entry list for cut set '%s' has %d entries", set->GetName(), (Int_t)list->GetN()));
106 }
107
108 // charged
109 nSets = fCutSetsC.GetEntries();
110 for (i = 0; i < nSets; i++) {
111 set = (AliRsnCutSet*)fCutSetsC[i];
112 list = (TEntryList*)fEntryListsP[i];
113 AliInfo(Form("Positive entry list for cut set '%s' has %d entries", set->GetName(), (Int_t)list->GetN()));
114 list = (TEntryList*)fEntryListsM[i];
115 AliInfo(Form("Negative entry list for cut set '%s' has %d entries", set->GetName(), (Int_t)list->GetN()));
116 }
117}
118
119//__________________________________________________________________________________________________
120void AliRsnDaughterSelector::Init()
121{
122//
123// Initialize the arrays of entry lists to the same size
124// of the corresponding arrays of cut sets.
125// If they are not empty, they are cleared.
126//
127
128 Int_t i, nSets;
129
130 // neutral
131 nSets = fCutSetsN.GetEntries();
132 if (!fEntryListsN.IsEmpty()) fEntryListsN.Delete();
133 for (i = 0; i < nSets; i++) {
134 AliRsnCutSet *set = (AliRsnCutSet*)fCutSetsN[i];
135 new (fEntryListsN[i]) TEntryList;
136 AliInfo(Form("Adding 1 entry list for neutrals --> cut set '%s' [scheme = '%s']", set->GetName(), set->GetCutScheme().Data()));
137 }
138
139 // charged
140 nSets = fCutSetsC.GetEntries();
141 if (!fEntryListsP.IsEmpty()) fEntryListsP.Delete();
142 if (!fEntryListsM.IsEmpty()) fEntryListsM.Delete();
143 for (i = 0; i < nSets; i++) {
144 AliRsnCutSet *set = (AliRsnCutSet*)fCutSetsC[i];
145 new (fEntryListsP[i]) TEntryList;
146 new (fEntryListsM[i]) TEntryList;
147 AliInfo(Form("Adding 2 entry lists for charged --> cut set '%s' [scheme = '%s']", set->GetName(), set->GetCutScheme().Data()));
148 }
149}
150
151//__________________________________________________________________________________________________
152void AliRsnDaughterSelector::Reset()
153{
154 TEntryList *el;
155 Int_t i, nSets;
156
157 // N
158 nSets = fCutSetsN.GetEntries();
159 for (i = 0; i < nSets; i++) {
160 el = (TEntryList*)fEntryListsN.At(i);
161 el->Reset();
162 }
163
164 // charged
165 nSets = fCutSetsC.GetEntries();
166 for (i = 0; i < nSets; i++) {
167 el = (TEntryList*)fEntryListsP.At(i);
168 el->Reset();
169 el = (TEntryList*)fEntryListsM.At(i);
170 el->Reset();
171 }
172}
173
174//__________________________________________________________________________________________________
175Int_t AliRsnDaughterSelector::Add(AliRsnCutSet *cuts, Bool_t charged)
176{
177//
178// Add a new selection slot defined by a set of cuts and daughter definition
179//
180
181 Int_t n = 0;
182
183 if (!charged) {
184 n = fCutSetsN.GetEntries();
185 new (fCutSetsN[n]) AliRsnCutSet(*cuts);
186 } else {
187 n = fCutSetsC.GetEntries();
188 new (fCutSetsC[n]) AliRsnCutSet(*cuts);
189 }
190
191 return n;
192}
193
194//__________________________________________________________________________________________________
195Int_t AliRsnDaughterSelector::GetID(const char *name, Bool_t charged)
196{
197//
198// Add a new selection slot defined by a set of cuts and daughter definition
199//
200
201 AliRsnCutSet *cuts;
202
203 if (!charged) {
204 cuts = (AliRsnCutSet*)fCutSetsN.FindObject(name);
205 if (cuts) return fCutSetsN.IndexOf(cuts);
206 } else {
207 cuts = (AliRsnCutSet*)fCutSetsC.FindObject(name);
208 if (cuts) return fCutSetsC.IndexOf(cuts);
209 }
210
211 return -1;
212}
213
214//__________________________________________________________________________________________________
215TEntryList* AliRsnDaughterSelector::GetSelected(Int_t i, Char_t charge)
216{
217//
218// Retrieve a given entry list (needs charge specified as a char)
219//
220
221 if (charge == '+')
222 return (TEntryList*)fEntryListsP.At(i);
223 else if (charge == '-')
224 return (TEntryList*)fEntryListsM.At(i);
225 else
226 return (TEntryList*)fEntryListsN.At(i);
227}
228
229//__________________________________________________________________________________________________
230TEntryList* AliRsnDaughterSelector::GetSelected(Int_t i, Short_t charge)
231{
232//
233// Retrieve a given entry list passing charge as short
234//
235
236 if (charge > 0)
237 return (TEntryList*)fEntryListsP.At(i);
238 else if (charge < 0)
239 return (TEntryList*)fEntryListsM.At(i);
240 else
241 return (TEntryList*)fEntryListsN.At(i);
242}
243
244//__________________________________________________________________________________________________
245void AliRsnDaughterSelector::ScanEvent(AliRsnEvent* ev)
246{
247//
248// Loop over event and fill all entry lists
249//
250
251 Int_t id, is;
252 Int_t nSel, nTot = ev->GetAbsoluteSum();
253 AliRsnDaughter check;
254 TClonesArray *cutsArray = 0x0, *entryArray = 0x0;
255
256 for (id = 0; id < nTot; id++) {
257 ev->SetDaughterAbs(check, id);
258 if (!check.IsOK()) continue;
259 // set pointers according to charge
260 switch (check.ChargeS()) {
261 case 1:
262 cutsArray = &fCutSetsC;
263 entryArray = &fEntryListsP;
264 break;
265 case -1:
266 cutsArray = &fCutSetsC;
267 entryArray = &fEntryListsM;
268 break;
269 default:
270 cutsArray = &fCutSetsN;
271 entryArray = &fEntryListsN;
272 break;
273 }
274 // check with all cuts in that charge
275 nSel = cutsArray->GetEntriesFast();
276 for (is = 0; is < nSel; is++) {
277 AliRsnCutSet *cuts = (AliRsnCutSet*)cutsArray->At(is);
278 if (cuts->IsSelected(&check)) {
279 TEntryList *el = (TEntryList*)entryArray->At(is);
280 el->Enter(id);
281 }
282 }
283 }
284
285 //Print();
286}