]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/JetTasks/AliEventPoolManager.cxx
Forgotten debug statement
[u/mrichter/AliRoot.git] / PWG4 / JetTasks / AliEventPoolManager.cxx
CommitLineData
2a910c25 1#include "AliEventPoolManager.h"
2
3ClassImp(AliEventPool)
4
5void AliEventPool::PrintInfo() const
6{
7 cout << Form("%20s: %d events", "Pool capacity", fMixDepth) << endl;
8 cout << Form("%20s: %d events, %d tracks", "Current size",
9 GetCurrentNEvents(), NTracksInPool()) << endl;
10 cout << Form("%20s: %.1f to %.1f", "Sub-event mult.", fMultMin, fMultMax) << endl;
11 cout << Form("%20s: %.1f to %.1f", "Z-vtx range", fZvtxMin, fZvtxMax) << endl;
12
13 return;
14}
15
16Bool_t AliEventPool::EventMatchesBin(Int_t mult, Double_t zvtx) const
17{
18 return EventMatchesBin((Double_t) mult, zvtx);
19}
20
21Bool_t AliEventPool::EventMatchesBin(Double_t mult, Double_t zvtx) const
22{
23 // Lower bin limit included; upper limit excluded.
24
25 Bool_t multOK = (mult >= fMultMin && mult < fMultMax);
26 Bool_t zvtxOK = (zvtx >= fZvtxMin && zvtx < fZvtxMax);
27 return (multOK && zvtxOK);
28}
29
30Int_t AliEventPool::NTracksInPool() const
31{
32 // Number of tracks for this cent, zvtx bin; possibly includes many
33 // events.
34
35 Int_t ntrk=0;
36 for (Int_t i=0; i<(Int_t)fEvents.size(); ++i) {
37 ntrk += fNTracksInEvent.at(i);
38 }
39 return ntrk;
40}
41
42Int_t AliEventPool::SetEventMultRange(Int_t multMin, Int_t multMax)
43{
44 fMultMin = (Double_t)multMin;
45 fMultMax = (Double_t)multMax;
46 return 0;
47}
48
49Int_t AliEventPool::SetEventMultRange(Double_t multMin, Double_t multMax)
50{
51 fMultMin = multMin;
52 fMultMax = multMax;
53 return 0;
54}
55
56Int_t AliEventPool::SetEventZvtxRange(Double_t zvtxMin, Double_t zvtxMax)
57{
58 fZvtxMin = zvtxMin;
59 fZvtxMax = zvtxMax;
60 return 0;
61}
62
63Int_t AliEventPool::GlobalEventIndex(Int_t j) const
64{
65 // Index returned from passing local pool event index.
66
67 if (j < 0 || j >= (Int_t)fEventIndex.size()) {
68 cout << "ERROR in AliEventPool::GlobalEventIndex(): "
69 << " Invalid index " << j << endl;
70 return -99;
71 }
72 return fEventIndex.at(j);
73}
74
75Int_t AliEventPool::UpdatePool(TObjArray *trk)
76{
77 // A rolling buffer (a double-ended queue) is updated by removing
78 // the oldest event, and appending the newest.
79
80 static Int_t iEvent = -1;
81 iEvent++;
82
83 Int_t mult = trk->GetEntries();
fa67180e 84 Int_t nTrk = NTracksInPool();
2a910c25 85
fa67180e 86 if (nTrk < fTargetTrackDepth && ((nTrk + mult) >= fTargetTrackDepth))
2a910c25 87 fNTimes++;
fa67180e 88
2a910c25 89 // remove 0th element before appending this event
fa67180e 90 Bool_t removeFirstEvent = 0;
91 if (nTrk>fTargetTrackDepth) {
92 Int_t nTrksFirstEvent= fNTracksInEvent.front();
93 Int_t diff = nTrk - nTrksFirstEvent + mult;
94 if (diff>fTargetTrackDepth)
95 removeFirstEvent = 1;
96 }
97 if (removeFirstEvent) {
2a910c25 98 TObjArray *fa = fEvents.front();
99 delete fa;
100 fEvents.pop_front(); // remove first track array
101 fNTracksInEvent.pop_front(); // remove first int
102 fEventIndex.pop_front();
2a910c25 103 }
104
105 fNTracksInEvent.push_back(mult);
106 fEvents.push_back(trk);
107 fEventIndex.push_back(iEvent);
2a910c25 108
109 if (fNTimes==1) {
fa67180e 110 fFirstFilled = kTRUE;
db48ae1a 111 if (AliEventPool::fDebug) {
d94cc49b 112 cout << "\nPool " << MultBinIndex() << ", " << ZvtxBinIndex()
113 << " ready at event "<< iEvent;
114 PrintInfo();
115 cout << endl;
116 }
2a910c25 117 fNTimes++; // See this message exactly once/pool
fa67180e 118 } else {
119 fFirstFilled = kFALSE;
2a910c25 120 }
121
122 fWasUpdated = true;
123
124 if (AliEventPool::fDebug) {
125 cout << " Event " << fEventIndex.back();
126 cout << " PoolDepth = " << GetCurrentNEvents();
127 cout << " NTracksInCurrentEvent = " << NTracksInCurrentEvent();
128 }
129
130 return fEvents.size();
131}
132
133TObject* AliEventPool::GetRandomTrack() const
134{
135 // Get any random track from the pool, sampled with uniform probability.
136
137 UInt_t ranEvt = gRandom->Integer(fEvents.size());
138 TObjArray *tca = fEvents.at(ranEvt);
139 UInt_t ranTrk = gRandom->Integer(tca->GetEntries());
140 TObject *trk = (TObject*)tca->At(ranTrk);
141 return trk;
142}
143
144TObjArray* AliEventPool::GetEvent(Int_t i) const
145{
146 if (i<0 || i>=(Int_t)fEvents.size()) {
147 cout << "AliEventPool::GetEvent("
148 << i << "): Invalid index" << endl;
149 return 0x0;
150 }
151
152 TObjArray *tca = fEvents.at(i);
153 return tca;
154}
155
156TObjArray* AliEventPool::GetRandomEvent() const
157{
158 UInt_t ranEvt = gRandom->Integer(fEvents.size());
159 TObjArray *tca = fEvents.at(ranEvt);
160 return tca;
161}
162
163Int_t AliEventPool::NTracksInEvent(Int_t iEvent) const
164{
165 // Return number of tracks in iEvent, which is the local pool index.
166
167 Int_t n = -1;
168 Int_t curEvent = fEventIndex.back();
169 Int_t offset = curEvent - iEvent;
170 Int_t pos = fEventIndex.size() - offset - 1;
171
172 if (offset==0)
173 n = fNTracksInEvent.back();
174 else if (offset < 0 || iEvent < 0) {
175 n = 0;
176 }
177 else if (offset > 0 && offset <= (int)fEventIndex.size()) {
178 n = fNTracksInEvent.at(pos);
179 }
180 else
181 cout << "Event info no longer in memory" << endl;
182 return n;
183}
184
185ClassImp(AliEventPoolManager)
186
187AliEventPoolManager::AliEventPoolManager(Int_t depth, Int_t minNTracks,
188 Int_t nMultBins, Double_t *multbins,
189 Int_t nZvtxBins, Double_t *zvtxbins) :
190fDebug(0), fNMultBins(0), fNZvtxBins(0), fEvPool(0), fTargetTrackDepth(minNTracks)
191{
192 // Constructor.
193
194 InitEventPools(depth, nMultBins, multbins, nZvtxBins, zvtxbins);
195 cout << "AliEventPoolManager initialized." << endl;
196}
197
198Int_t AliEventPoolManager::InitEventPools(Int_t depth,
199 Int_t nMultBins, Double_t *multbin,
200 Int_t nZvtxBins, Double_t *zvtxbin)
201{
202 // Assign AliEventPoolManager members.
203
204 fNMultBins = nMultBins;
205 fNZvtxBins = nZvtxBins;
206
207 for (Int_t iM=0; iM<nMultBins; iM++) {
208 std::vector<AliEventPool*> evp;
209 for (Int_t iZ=0; iZ<nZvtxBins; iZ++) {
210 evp.push_back(new AliEventPool(depth,
211 multbin[iM], multbin[iM+1],
212 zvtxbin[iZ], zvtxbin[iZ+1] ));
213 }
214 fEvPool.push_back(evp);
215 }
216
217 for (Int_t iM=0; iM<nMultBins; iM++) {
218 for (Int_t iZ=0; iZ<nZvtxBins; iZ++) {
219 fEvPool.at(iM).at(iZ)->SetMultBinIndex(iM);
220 fEvPool.at(iM).at(iZ)->SetZvtxBinIndex(iZ);
221 fEvPool.at(iM).at(iZ)->SetTargetTrackDepth(fTargetTrackDepth);
222 }
223 }
224
225 if (0) {
226 cout << "fEvPool outer size: " << fEvPool.size() << endl;
227 for (Int_t iM=0; iM<nMultBins; iM++) {
228 for (Int_t iZ=0; iZ<nZvtxBins; iZ++) {
229 if(fEvPool.at(iM).at(iZ)) {
230 cout << "multiplicity bin: " << iM;
231 cout << ", z-vertex bin: " << iZ;
232 fEvPool.at(iM).at(iZ)->PrintInfo();
233 }
234 }
235 }
236 }
237
238 return fEvPool.size();
239}
240
241AliEventPool *AliEventPoolManager::GetEventPool(Int_t iMult, Int_t iZvtx) const
242{
243 if (iMult < 0 || iMult >= fNMultBins)
244 return 0x0;
245 if (iZvtx < 0 || iZvtx >= fNZvtxBins)
246 return 0x0;
247 return fEvPool.at(iMult).at(iZvtx);
248}
249
250AliEventPool *AliEventPoolManager::GetEventPool(Int_t centVal, Double_t zVtxVal) const
251{
252 return GetEventPool((Double_t)centVal, zVtxVal);
253}
254
255AliEventPool *AliEventPoolManager::GetEventPool(Double_t centVal, Double_t zVtxVal) const
256{
257 // Return appropriate pool for this centrality and z-vertex value.
258
259 for (Int_t iM=0; iM<fNMultBins; iM++) {
260 for (Int_t iZ=0; iZ<fNZvtxBins; iZ++) {
261 AliEventPool* pool = GetEventPool(iM, iZ);
262 if (pool->EventMatchesBin(centVal, zVtxVal))
263 return pool;
264 }
265 }
266 return 0x0;
267}
268
269Int_t AliEventPoolManager::UpdatePools(TObjArray *trk)
270{
271 // Call UpdatePool for all bins.
272
273 for (Int_t iM=0; iM<fNMultBins; iM++) {
274 for (Int_t iZ=0; iZ<fNZvtxBins; iZ++) {
275 if (fEvPool.at(iM).at(iZ)->UpdatePool(trk) > -1)
276 break;
277 }
278 }
279 return 0;
280}