]>
Commit | Line | Data |
---|---|---|
1b446896 | 1 | |
2 | #include "AliHBTAnalysis.h" | |
3 | ||
4 | #include <iostream.h> | |
5 | ||
6 | #include "AliHBTRun.h" | |
7 | #include "AliHBTReader.h" | |
8 | #include "AliHBTParticle.h" | |
9 | #include "AliHBTParticleCut.h" | |
10 | #include "AliHBTPair.h" | |
11 | #include "AliHBTPairCut.h" | |
12 | #include "AliHBTFunction.h" | |
13 | ||
14 | #include <TList.h> | |
15 | ||
16 | ||
17 | ||
18 | ClassImp(AliHBTAnalysis) | |
19 | ||
20 | const UInt_t AliHBTAnalysis::fgkFctnArraySize = 100; | |
21 | const Int_t AliHBTAnalysis::fgkHbtAnalyzeAll = 0; | |
22 | ||
23 | AliHBTAnalysis::AliHBTAnalysis() | |
24 | { | |
25 | fReader = 0x0; | |
26 | ||
27b3fe5d | 27 | fTrackFunctions = new AliHBTOnePairFctn* [fgkFctnArraySize]; |
28 | fParticleFunctions = new AliHBTOnePairFctn* [fgkFctnArraySize]; | |
29 | fParticleAndTrackFunctions = new AliHBTTwoPairFctn* [fgkFctnArraySize]; | |
1b446896 | 30 | |
31 | fNTrackFunctions = 0; | |
32 | fNParticleFunctions = 0; | |
33 | fNParticleAndTrackFunctions = 0; | |
34 | ||
35 | fPairCut = new AliHBTEmptyPairCut();//empty cut - accepts all particles | |
36 | ||
37 | } | |
491d1b5d | 38 | /*************************************************************************************/ |
1b446896 | 39 | |
40 | AliHBTAnalysis::~AliHBTAnalysis() | |
41 | { | |
42 | //destructor | |
43 | //note that we do not delete functions itself | |
44 | // they should be deleted by whom where created | |
45 | //we only store pointers, and we use "new" only for pointers array | |
46 | delete [] fTrackFunctions; | |
47 | delete [] fParticleFunctions; | |
48 | delete [] fParticleAndTrackFunctions; | |
49 | ||
50 | delete fPairCut; // always have an copy of an object - we create we dstroy | |
51 | } | |
52 | ||
53 | /*************************************************************************************/ | |
491d1b5d | 54 | |
1b446896 | 55 | void AliHBTAnalysis::Process(Option_t* option) |
56 | { | |
57 | //default option = "TracksAndParticles" | |
58 | //Main method of the HBT Analysis Package | |
59 | //It triggers reading with the global cut (default is an empty cut) | |
60 | //Than it checks options and data which are read | |
61 | //if everything is OK, then it calls one of the looping methods | |
62 | //depending on tfReaderhe option | |
63 | //These methods differs on what thay are looping on | |
64 | // | |
65 | // METHOD OPTION | |
66 | //-------------------------------------------------------------------- | |
67 | //ProcessTracksAndParticles - "TracksAndParticles" | |
68 | // DEFAULT | |
69 | // it loops over both, tracks(reconstructed) and particles(simulated) | |
70 | // all function gethered in all 3 lists are called for each (double)pair | |
71 | // | |
72 | //ProcessTracks - "Tracks" | |
73 | // it loops only on tracks(reconstructed), | |
74 | // functions ONLY from fTrackFunctions list are called | |
75 | // | |
76 | //ProcessParticles - "Particles" | |
77 | // it loops only on particles(simulated), | |
78 | // functions ONLY from fParticleAndTrackFunctions list are called | |
79 | // | |
80 | // | |
81 | if (!fReader) | |
82 | { | |
01725374 | 83 | Error("Process","The reader is not set"); |
1b446896 | 84 | return; |
85 | } | |
86 | ||
87 | ||
88 | const char *oT = strstr(option,"Tracks"); | |
89 | const char *oP = strstr(option,"Particles"); | |
90 | ||
91 | if(oT && oP) | |
92 | { | |
93 | if (fReader->GetNumberOfPartEvents() <1) | |
94 | { | |
01725374 | 95 | Error("Process","There is no Particles. Maybe change the option?"); |
1b446896 | 96 | return; |
97 | } | |
98 | if (fReader->GetNumberOfTrackEvents() <1) | |
99 | { | |
01725374 | 100 | Error("Process","There is no Tracks. Maybe change the option?"); |
1b446896 | 101 | return; |
102 | } | |
103 | ||
104 | if ( RunCoherencyCheck() ) | |
105 | { | |
01725374 | 106 | Error("Process", |
1b446896 | 107 | "Coherency check not passed. Maybe change the option?\n"); |
108 | return; | |
109 | } | |
110 | ProcessTracksAndParticles(); | |
111 | return; | |
112 | } | |
113 | ||
114 | if(oT) | |
115 | { | |
7836ee94 | 116 | if (fReader->GetNumberOfTrackEvents() <1) |
117 | { | |
118 | Error("Process","There is no data to analyze."); | |
119 | return; | |
120 | } | |
1b446896 | 121 | ProcessTracks(); |
122 | return; | |
123 | } | |
124 | ||
125 | if(oP) | |
126 | { | |
7836ee94 | 127 | if (fReader->GetNumberOfPartEvents() <1) |
128 | { | |
129 | Error("Process","There is no data to analyze."); | |
130 | return; | |
131 | } | |
1b446896 | 132 | ProcessParticles(); |
133 | return; | |
134 | } | |
135 | ||
136 | } | |
137 | ||
138 | /*************************************************************************************/ | |
491d1b5d | 139 | |
1b446896 | 140 | void AliHBTAnalysis::ProcessTracksAndParticles() |
141 | { | |
142 | ||
143 | //In order to minimize calling AliRun::GetEvent (we need at one time particles from different events), | |
144 | //the loops are splited | |
145 | ||
146 | ||
147 | AliHBTParticle * part1, * part2; | |
148 | AliHBTParticle * track1, * track2; | |
149 | ||
150 | AliHBTEvent * trackEvent, *partEvent; | |
151 | AliHBTEvent * trackEvent2,*partEvent2; | |
152 | ||
153 | // Int_t N1, N2, N=0; //number of particles in current event(we prcess two events in one time) | |
154 | ||
155 | Int_t Nev = fReader->GetNumberOfTrackEvents(); | |
156 | ||
157 | /***************************************/ | |
158 | /****** Looping same events ********/ | |
159 | /****** filling numerators ********/ | |
160 | /***************************************/ | |
161 | AliHBTPair * trackpair = new AliHBTPair(); | |
162 | AliHBTPair * partpair = new AliHBTPair(); | |
491d1b5d | 163 | |
164 | AliHBTPair * tmptrackpair;//temprary pointers to pairs | |
165 | AliHBTPair * tmppartpair; | |
1b446896 | 166 | |
167 | for (Int_t i = 0;i<Nev;i++) | |
168 | { | |
169 | partEvent= fReader->GetParticleEvent(i); | |
170 | trackEvent = fReader->GetTrackEvent(i); | |
171 | ||
172 | if (!partEvent) continue; | |
173 | ||
174 | //N = 0; | |
175 | ||
176 | for (Int_t j = 0; j<partEvent->GetNumberOfParticles() ; j++) | |
177 | { | |
491d1b5d | 178 | if ( (j%100) == 0) cout<<"Mixing particle "<<j<<" from event "<<i<<" with particles from event "<<i<<endl; |
1b446896 | 179 | |
180 | part1= partEvent->GetParticle(j); | |
181 | track1= trackEvent->GetParticle(j); | |
182 | ||
183 | for (Int_t k =j+1; k < partEvent->GetNumberOfParticles() ; k++) | |
184 | { | |
185 | part2= partEvent->GetParticle(k); | |
186 | partpair->SetParticles(part1,part2); | |
187 | ||
188 | track2= trackEvent->GetParticle(k); | |
189 | trackpair->SetParticles(track1,track2); | |
190 | ||
191 | if(fPairCut->Pass(partpair) || (fPairCut->Pass(trackpair))) //check pair cut | |
192 | { //do not meets crietria of the pair cut, try with swaped pairs | |
193 | if( ( fPairCut->Pass(partpair->GetSwapedPair()) ) || ( fPairCut->Pass(trackpair->GetSwapedPair()) ) ) | |
194 | continue; //swaped pairs do not meet criteria of pair cut as well, take next particle | |
195 | else | |
196 | { //swaped pair meets all the criteria | |
491d1b5d | 197 | tmppartpair = partpair->GetSwapedPair(); |
198 | tmptrackpair = trackpair->GetSwapedPair(); | |
199 | ||
1b446896 | 200 | } |
201 | } | |
491d1b5d | 202 | else |
203 | {//meets criteria of the pair cut | |
204 | tmptrackpair = trackpair; | |
205 | tmppartpair = partpair; | |
206 | } | |
1b446896 | 207 | UInt_t ii; |
208 | for(ii = 0;ii<fNParticleFunctions;ii++) | |
491d1b5d | 209 | fParticleFunctions[ii]->ProcessSameEventParticles(tmppartpair); |
1b446896 | 210 | |
211 | for(ii = 0;ii<fNTrackFunctions;ii++) | |
491d1b5d | 212 | fTrackFunctions[ii]->ProcessSameEventParticles(tmptrackpair); |
1b446896 | 213 | |
214 | for(ii = 0;ii<fNParticleAndTrackFunctions;ii++) | |
491d1b5d | 215 | fParticleAndTrackFunctions[ii]->ProcessSameEventParticles(tmptrackpair,tmppartpair); |
1b446896 | 216 | } |
217 | } | |
218 | } | |
219 | ||
220 | /***************************************/ | |
221 | /***** Filling denominators *********/ | |
222 | /***************************************/ | |
223 | for (Int_t i = 0;i<Nev;i++) //In each event .... | |
224 | { | |
225 | ||
226 | partEvent= fReader->GetParticleEvent(i); | |
227 | if (!partEvent) continue; | |
228 | ||
229 | trackEvent = fReader->GetTrackEvent(i); | |
230 | ||
231 | // N=0; | |
232 | ||
233 | for (Int_t j = 0; j< partEvent->GetNumberOfParticles(); j++) // ... Loop over all particles ... | |
234 | { | |
235 | // if (N>MAXCOMB) break; | |
236 | ||
237 | part1= partEvent->GetParticle(j); | |
238 | ||
239 | track1= trackEvent->GetParticle(j); | |
240 | ||
241 | // for (Int_t k = i+1; k<Nev;k++) // ... Loop over all proceeding events ... | |
242 | Int_t NNN; | |
243 | ||
244 | if ( (i+2) < Nev) NNN = i+2; | |
245 | else NNN = Nev; | |
246 | ||
247 | for (Int_t k = i+1; k<NNN;k++) // ... Loop over next event | |
248 | { | |
249 | ||
250 | partEvent2= fReader->GetParticleEvent(k); | |
251 | if (!partEvent2) continue; | |
252 | ||
253 | trackEvent2 = fReader->GetTrackEvent(k); | |
254 | ||
491d1b5d | 255 | if ( (j%100) == 0) cout<<"Mixing particle "<<j<<" from event "<<i<<" with particles from event "<<k<<endl; |
1b446896 | 256 | |
257 | for(Int_t l = 0; l<partEvent2->GetNumberOfParticles();l++) // ... on all particles | |
258 | { | |
259 | ||
260 | // if (N>MAXCOMB) break; | |
261 | ||
262 | part2= partEvent2->GetParticle(l); | |
263 | partpair->SetParticles(part1,part2); | |
264 | ||
265 | track2= trackEvent2->GetParticle(l); | |
266 | trackpair->SetParticles(track1,track2); | |
267 | ||
268 | if( (fPairCut->Pass(partpair)) || (fPairCut->Pass(trackpair)) ) //check pair cut | |
269 | { //do not meets crietria of the | |
270 | if( ( fPairCut->Pass(partpair->GetSwapedPair()) ) || ( fPairCut->Pass(trackpair->GetSwapedPair()) ) ) | |
271 | continue; | |
272 | else | |
273 | { | |
491d1b5d | 274 | tmppartpair = partpair->GetSwapedPair(); |
275 | tmptrackpair = trackpair->GetSwapedPair(); | |
1b446896 | 276 | } |
277 | } | |
491d1b5d | 278 | else |
279 | {//meets criteria of the pair cut | |
280 | tmptrackpair = trackpair; | |
281 | tmppartpair = partpair; | |
282 | } | |
1b446896 | 283 | UInt_t ii; |
284 | for(ii = 0;ii<fNParticleFunctions;ii++) | |
491d1b5d | 285 | fParticleFunctions[ii]->ProcessDiffEventParticles(tmppartpair); |
1b446896 | 286 | |
287 | for(ii = 0;ii<fNTrackFunctions;ii++) | |
491d1b5d | 288 | fTrackFunctions[ii]->ProcessDiffEventParticles(tmptrackpair); |
1b446896 | 289 | |
290 | for(ii = 0;ii<fNParticleAndTrackFunctions;ii++) | |
491d1b5d | 291 | fParticleAndTrackFunctions[ii]->ProcessDiffEventParticles(tmptrackpair,tmppartpair); |
1b446896 | 292 | |
293 | ||
294 | }//for(Int_t l = 0; l<N2;l++) // ... on all particles | |
295 | }//for (Int_t k = i+1; k<NNN;k++) // ... Loop over next event | |
296 | } | |
297 | ||
298 | } | |
299 | ||
300 | /***************************************/ | |
301 | ||
302 | ||
303 | } | |
304 | /*************************************************************************************/ | |
305 | ||
306 | void AliHBTAnalysis::ProcessTracks() | |
307 | { | |
308 | //In order to minimize calling AliRun::GetEvent (we need at one time particles from different events), | |
309 | //the loops are splited | |
310 | AliHBTParticle * track1, * track2; | |
311 | ||
312 | AliHBTEvent * trackEvent; | |
313 | AliHBTEvent * trackEvent2; | |
314 | ||
315 | // Int_t N1, N2, N=0; //number of particles in current event(we prcess two events in one time) | |
316 | ||
317 | Int_t Nev = fReader->GetNumberOfTrackEvents(); | |
318 | ||
319 | /***************************************/ | |
320 | /****** Looping same events ********/ | |
321 | /****** filling numerators ********/ | |
322 | /***************************************/ | |
323 | AliHBTPair * trackpair = new AliHBTPair(); | |
491d1b5d | 324 | AliHBTPair * tmptrackpair; //temporary pointer |
1b446896 | 325 | |
326 | for (Int_t i = 0;i<Nev;i++) | |
327 | { | |
328 | trackEvent = fReader->GetTrackEvent(i); | |
329 | if (!trackEvent) continue; | |
330 | //N = 0; | |
331 | ||
332 | for (Int_t j = 0; j<trackEvent->GetNumberOfParticles() ; j++) | |
333 | { | |
491d1b5d | 334 | if ( (j%100) == 0) cout<<"Mixing particle "<<j<<" from event "<<i<<" with particles from event "<<i<<endl; |
1b446896 | 335 | |
336 | track1= trackEvent->GetParticle(j); | |
337 | ||
338 | for (Int_t k =j+1; k < trackEvent->GetNumberOfParticles() ; k++) | |
339 | { | |
340 | track2= trackEvent->GetParticle(k); | |
341 | trackpair->SetParticles(track1,track2); | |
342 | if(fPairCut->Pass(trackpair)) //check pair cut | |
343 | { //do not meets crietria of the | |
344 | if( fPairCut->Pass(trackpair->GetSwapedPair()) ) continue; | |
491d1b5d | 345 | else tmptrackpair = trackpair->GetSwapedPair(); |
346 | } | |
347 | else | |
348 | { | |
349 | tmptrackpair = trackpair; | |
1b446896 | 350 | } |
1b446896 | 351 | UInt_t ii; |
352 | ||
353 | for(ii = 0;ii<fNTrackFunctions;ii++) | |
491d1b5d | 354 | fTrackFunctions[ii]->ProcessSameEventParticles(tmptrackpair); |
1b446896 | 355 | |
356 | ||
357 | } | |
358 | } | |
359 | } | |
360 | ||
361 | /***************************************/ | |
362 | /***** Filling diff histogram *********/ | |
363 | /***************************************/ | |
364 | for (Int_t i = 0;i<Nev;i++) //In each event .... | |
365 | { | |
366 | trackEvent = fReader->GetTrackEvent(i); | |
367 | if (!trackEvent) continue; | |
368 | // N=0; | |
369 | ||
370 | for (Int_t j = 0; j< trackEvent->GetNumberOfParticles(); j++) // ... Loop over all particles ... | |
371 | { | |
372 | // if (N>MAXCOMB) break; | |
373 | ||
374 | track1= trackEvent->GetParticle(j); | |
375 | ||
376 | // for (Int_t k = i+1; k<Nev;k++) // ... Loop over all proceeding events ... | |
377 | Int_t NNN; | |
378 | ||
379 | if ( (i+2) < Nev) NNN = i+2; | |
380 | else NNN = Nev; | |
381 | ||
382 | for (Int_t k = i+1; k<NNN;k++) // ... Loop over next event | |
383 | { | |
384 | ||
385 | trackEvent2 = fReader->GetTrackEvent(k); | |
386 | if (!trackEvent2) continue; | |
387 | ||
491d1b5d | 388 | if ( (j%100) == 0) cout<<"Mixing particle "<<j<<" from event "<<i<<" with particles from event "<<k<<endl; |
1b446896 | 389 | |
390 | for(Int_t l = 0; l<trackEvent2->GetNumberOfParticles();l++) // ... on all particles | |
391 | { | |
392 | ||
393 | // if (N>MAXCOMB) break; | |
394 | track2= trackEvent2->GetParticle(l); | |
395 | trackpair->SetParticles(track1,track2); | |
396 | ||
397 | if(fPairCut->Pass(trackpair)) //check pair cut | |
398 | { //do not meets crietria of the | |
399 | if( fPairCut->Pass(trackpair->GetSwapedPair()) ) continue; | |
491d1b5d | 400 | else tmptrackpair = trackpair->GetSwapedPair(); |
401 | } | |
402 | else | |
403 | { | |
404 | tmptrackpair = trackpair; | |
1b446896 | 405 | } |
406 | UInt_t ii; | |
407 | for(ii = 0;ii<fNTrackFunctions;ii++) | |
491d1b5d | 408 | fTrackFunctions[ii]->ProcessDiffEventParticles(tmptrackpair); |
1b446896 | 409 | |
410 | }//for(Int_t l = 0; l<N2;l++) // ... on all particles | |
411 | }//for (Int_t k = i+1; k<NNN;k++) // ... Loop over next event | |
412 | } | |
413 | ||
414 | } | |
415 | ||
416 | /***************************************/ | |
417 | ||
418 | ||
419 | } | |
420 | ||
421 | /*************************************************************************************/ | |
491d1b5d | 422 | |
1b446896 | 423 | void AliHBTAnalysis::ProcessParticles() |
424 | { | |
425 | //In order to minimize calling AliRun::GetEvent (we need at one time particles from different events), | |
426 | //the loops are splited | |
427 | AliHBTParticle * part1, * part2; | |
428 | ||
429 | AliHBTEvent * partEvent; | |
430 | AliHBTEvent * partEvent2; | |
491d1b5d | 431 | |
432 | AliHBTPair * partpair = new AliHBTPair(); | |
433 | AliHBTPair * tmppartpair; //temporary pointer to the pair | |
1b446896 | 434 | |
435 | // Int_t N1, N2, N=0; //number of particles in current event(we prcess two events in one time) | |
436 | ||
437 | Int_t Nev = fReader->GetNumberOfPartEvents(); | |
438 | ||
439 | /***************************************/ | |
440 | /****** Looping same events ********/ | |
441 | /****** filling numerators ********/ | |
442 | /***************************************/ | |
1b446896 | 443 | for (Int_t i = 0;i<Nev;i++) |
444 | { | |
445 | partEvent= fReader->GetParticleEvent(i); | |
446 | if (!partEvent) continue; | |
447 | //N = 0; | |
448 | ||
449 | for (Int_t j = 0; j<partEvent->GetNumberOfParticles() ; j++) | |
450 | { | |
491d1b5d | 451 | if ( (j%100) == 0) cout<<"Mixing particle "<<j<<" from event "<<i<<" with particles from event "<<i<<endl; |
1b446896 | 452 | |
453 | part1= partEvent->GetParticle(j); | |
454 | ||
455 | for (Int_t k =j+1; k < partEvent->GetNumberOfParticles() ; k++) | |
456 | { | |
457 | part2= partEvent->GetParticle(k); | |
458 | partpair->SetParticles(part1,part2); | |
459 | ||
460 | if( fPairCut->Pass(partpair) ) //check pair cut | |
461 | { //do not meets crietria of the pair cut, try with swaped pairs | |
462 | if( fPairCut->Pass(partpair->GetSwapedPair() ) ) | |
463 | continue; //swaped pairs do not meet criteria of pair cut as well, take next particle | |
464 | else | |
465 | { //swaped pair meets all the criteria | |
491d1b5d | 466 | tmppartpair = partpair->GetSwapedPair(); |
1b446896 | 467 | } |
468 | } | |
491d1b5d | 469 | else |
470 | { | |
471 | tmppartpair = partpair; | |
472 | } | |
1b446896 | 473 | |
474 | UInt_t ii; | |
475 | ||
476 | for(ii = 0;ii<fNParticleFunctions;ii++) | |
491d1b5d | 477 | fParticleFunctions[ii]->ProcessSameEventParticles(tmppartpair); |
1b446896 | 478 | } |
479 | } | |
480 | } | |
481 | ||
482 | /***************************************/ | |
483 | /***** Filling diff histogram *********/ | |
484 | /***************************************/ | |
485 | for (Int_t i = 0;i<Nev;i++) //In each event .... | |
486 | { | |
487 | partEvent= fReader->GetParticleEvent(i); | |
488 | if (!partEvent) continue; | |
489 | ||
490 | // N=0; | |
491 | ||
492 | for (Int_t j = 0; j< partEvent->GetNumberOfParticles(); j++) // ... Loop over all particles ... | |
493 | { | |
494 | // if (N>MAXCOMB) break; | |
495 | ||
496 | part1= partEvent->GetParticle(j); | |
497 | ||
498 | // for (Int_t k = i+1; k<Nev;k++) // ... Loop over all proceeding events ... | |
499 | Int_t NNN; | |
500 | ||
501 | if ( (i+2) < Nev) NNN = i+2; //loop over next event | |
502 | else NNN = Nev; | |
503 | ||
504 | for (Int_t k = i+1; k<NNN;k++) // ... Loop over next event | |
505 | { | |
506 | ||
507 | partEvent2= fReader->GetParticleEvent(k); | |
508 | if (!partEvent2) continue; | |
509 | ||
491d1b5d | 510 | if ( (j%100) == 0) cout<<"Mixing particle "<<j<<" from event "<<i<<" with particles from event "<<k<<endl; |
1b446896 | 511 | |
512 | for(Int_t l = 0; l<partEvent2->GetNumberOfParticles();l++) // ... on all particles | |
513 | { | |
514 | ||
515 | // if (N>MAXCOMB) break; | |
516 | part2= partEvent2->GetParticle(l); | |
517 | partpair->SetParticles(part1,part2); | |
518 | ||
519 | if(fPairCut->Pass(partpair)) //check pair cut | |
520 | { //do not meets crietria of the | |
521 | if( fPairCut->Pass(partpair->GetSwapedPair()) ) continue; | |
491d1b5d | 522 | else tmppartpair = partpair->GetSwapedPair(); |
523 | } | |
524 | else | |
525 | { | |
526 | tmppartpair = partpair; | |
1b446896 | 527 | } |
528 | UInt_t ii; | |
529 | for(ii = 0;ii<fNParticleFunctions;ii++) | |
491d1b5d | 530 | fParticleFunctions[ii]->ProcessDiffEventParticles(tmppartpair); |
1b446896 | 531 | |
532 | }//for(Int_t l = 0; l<N2;l++) // ... on all particles | |
533 | }//for (Int_t k = i+1; k<NNN;k++) // ... Loop over next event | |
534 | } | |
535 | ||
536 | } | |
537 | ||
538 | /***************************************/ | |
539 | ||
540 | ||
541 | } | |
542 | ||
543 | /*************************************************************************************/ | |
544 | ||
545 | ||
491d1b5d | 546 | void AliHBTAnalysis::WriteFunctions() |
1b446896 | 547 | { |
548 | UInt_t ii; | |
549 | for(ii = 0;ii<fNParticleFunctions;ii++) | |
550 | fParticleFunctions[ii]->Write(); | |
551 | ||
552 | for(ii = 0;ii<fNTrackFunctions;ii++) | |
553 | fTrackFunctions[ii]->Write(); | |
554 | ||
555 | for(ii = 0;ii<fNParticleAndTrackFunctions;ii++) | |
556 | fParticleAndTrackFunctions[ii]->Write(); | |
557 | } | |
558 | /*************************************************************************************/ | |
491d1b5d | 559 | |
1b446896 | 560 | void AliHBTAnalysis::SetGlobalPairCut(AliHBTPairCut* cut) |
561 | { | |
562 | if (cut == 0x0) | |
563 | { | |
564 | Error("AliHBTAnalysis::SetGlobalPairCut","Pointer is NULL. Ignoring"); | |
565 | } | |
566 | delete fPairCut; | |
567 | fPairCut = (AliHBTPairCut*)cut->Clone(); | |
568 | } | |
569 | ||
570 | /*************************************************************************************/ | |
491d1b5d | 571 | |
27b3fe5d | 572 | void AliHBTAnalysis::AddTrackFunction(AliHBTOnePairFctn* f) |
1b446896 | 573 | { |
574 | if (f == 0x0) return; | |
575 | if (fNTrackFunctions == fgkFctnArraySize) | |
576 | { | |
577 | Error("AliHBTAnalysis::AddTrackFunction","Can not add this function, not enough place in the array."); | |
578 | } | |
579 | fTrackFunctions[fNTrackFunctions] = f; | |
580 | fNTrackFunctions++; | |
581 | } | |
491d1b5d | 582 | /*************************************************************************************/ |
583 | ||
27b3fe5d | 584 | void AliHBTAnalysis::AddParticleFunction(AliHBTOnePairFctn* f) |
1b446896 | 585 | { |
586 | if (f == 0x0) return; | |
587 | ||
588 | if (fNParticleFunctions == fgkFctnArraySize) | |
589 | { | |
590 | Error("AliHBTAnalysis::AddParticleFunction","Can not add this function, not enough place in the array."); | |
591 | } | |
592 | fParticleFunctions[fNParticleFunctions] = f; | |
593 | fNParticleFunctions++; | |
594 | ||
595 | ||
596 | } | |
27b3fe5d | 597 | void AliHBTAnalysis::AddParticleAndTrackFunction(AliHBTTwoPairFctn* f) |
1b446896 | 598 | { |
599 | if (f == 0x0) return; | |
600 | if (fNParticleAndTrackFunctions == fgkFctnArraySize) | |
601 | { | |
602 | Error("AliHBTAnalysis::AddParticleAndTrackFunction","Can not add this function, not enough place in the array."); | |
603 | } | |
604 | fParticleAndTrackFunctions[fNParticleAndTrackFunctions] = f; | |
605 | fNParticleAndTrackFunctions++; | |
606 | } | |
607 | ||
608 | ||
609 | /*************************************************************************************/ | |
610 | ||
611 | ||
612 | /*************************************************************************************/ | |
491d1b5d | 613 | |
1b446896 | 614 | Bool_t AliHBTAnalysis::RunCoherencyCheck() |
615 | { | |
616 | //Checks if both HBTRuns are similar | |
617 | //return true if error found | |
618 | //if they seem to be OK return false | |
619 | Int_t i; | |
620 | cout<<"Checking HBT Runs Coherency"<<endl; | |
621 | ||
622 | cout<<"Number of events ..."; fflush(stdout); | |
623 | ||
624 | if (fReader->GetNumberOfPartEvents() == fReader->GetNumberOfTrackEvents() ) //check whether there is the same number of events | |
625 | { | |
626 | cout<<"OK. "<<fReader->GetNumberOfTrackEvents()<<" found"<<endl; | |
627 | } | |
628 | else | |
629 | { //if not the same - ERROR | |
630 | Error("AliHBTAnalysis::RunCoherencyCheck()", | |
631 | "Number of simulated events (%d) is not equal to number of reconstructed events(%d)", | |
632 | fReader->GetNumberOfPartEvents(),fReader->GetNumberOfTrackEvents()); | |
633 | return kTRUE; | |
634 | } | |
635 | ||
636 | cout<<"Checking number of Particles AND Particles Types in each event ...";fflush(stdout); | |
637 | ||
638 | AliHBTEvent *partEvent; | |
639 | AliHBTEvent *trackEvent; | |
640 | for( i = 0; i<fReader->GetNumberOfTrackEvents();i++) | |
641 | { | |
642 | partEvent= fReader->GetParticleEvent(i); //gets the "ith" event | |
643 | trackEvent = fReader->GetTrackEvent(i); | |
644 | ||
645 | if ( (partEvent == 0x0) && (partEvent == 0x0) ) continue; | |
646 | if ( (partEvent == 0x0) || (partEvent == 0x0) ) | |
647 | { | |
648 | Error("AliHBTAnalysis::RunCoherencyCheck()", | |
649 | "One event is NULL and the other one not. Event Number %d",i); | |
650 | return kTRUE; | |
651 | } | |
652 | ||
653 | if ( partEvent->GetNumberOfParticles() != trackEvent->GetNumberOfParticles() ) | |
654 | { | |
655 | Error("AliHBTAnalysis::RunCoherencyCheck()", | |
656 | "Event %d: Number of simulated particles (%d) not equal to number of reconstructed tracks (%d)", | |
657 | i,partEvent->GetNumberOfParticles() , trackEvent->GetNumberOfParticles()); | |
658 | return kTRUE; | |
659 | } | |
660 | else | |
661 | for (Int_t j = 0; j<partEvent->GetNumberOfParticles(); j++) | |
662 | { | |
663 | if( partEvent->GetParticle(j)->GetPdgCode() != trackEvent->GetParticle(j)->GetPdgCode() ) | |
664 | { | |
665 | Error("AliHBTAnalysis::RunCoherencyCheck()", | |
666 | "Event %d: Particle %d: PID of simulated particle (%d) not the same of reconstructed track (%d)", | |
667 | i,j, partEvent->GetParticle(j)->GetPdgCode(),trackEvent->GetParticle(j)->GetPdgCode() ); | |
668 | return kTRUE; | |
669 | ||
670 | } | |
671 | } | |
672 | } | |
673 | cout<<" Done"<<endl; | |
674 | cout<<" Everything looks OK"<<endl; | |
675 | return kFALSE; | |
676 | } | |
677 | ||
678 | ||
679 | /*************************************************************************************/ | |
680 | ||
681 | ||
682 | /*************************************************************************************/ | |
683 | ||
684 |