]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/RESONANCES/AliRsnDaughterSelector.cxx
1f8808f7e50e886aaa02c5e8da40627b0802204a
[u/mrichter/AliRoot.git] / PWG2 / RESONANCES / AliRsnDaughterSelector.cxx
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
11 ClassImp(AliRsnDaughterSelector)
12
13 //__________________________________________________________________________________________________
14 AliRsnDaughterSelector::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 //__________________________________________________________________________________________________
31 AliRsnDaughterSelector::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 //__________________________________________________________________________________________________
48 AliRsnDaughterSelector& 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 //__________________________________________________________________________________________________
70 AliRsnDaughterSelector::~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 //__________________________________________________________________________________________________
88 void 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 //__________________________________________________________________________________________________
120 void 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 //__________________________________________________________________________________________________
152 void 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 //__________________________________________________________________________________________________
175 Int_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 //__________________________________________________________________________________________________
195 Int_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 //__________________________________________________________________________________________________
215 TEntryList* 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 //__________________________________________________________________________________________________
230 TEntryList* 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 //__________________________________________________________________________________________________
245 void 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 }