1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: Martin Wilde, Friederike Bock, Daniel Lohner, Svein Lindal *
5 * based on previous version by Kenneth Aamodt and Ana Marin *
8 * Permission to use, copy, modify and distribute this software and its *
9 * documentation strictly for non-commercial purposes is hereby granted *
10 * without fee, provided that the above copyright notice appears in all *
11 * copies and that both the copyright notice and this permission notice *
12 * appear in the supporting documentation. The authors make no claims *
13 * about the suitability of this software for any purpose. It is *
14 * provided "as is" without express or implied warranty. *
15 **************************************************************************/
17 ////////////////////////////////////////////////
18 //---------------------------------------------
19 // Class for handling of background calculation
20 //---------------------------------------------
21 ////////////////////////////////////////////////
23 #include "AliGammaConversionAODBGHandler.h"
24 #include "AliKFParticle.h"
25 #include "AliAODConversionPhoton.h"
26 #include "AliAODConversionMother.h"
30 ClassImp(AliGammaConversionAODBGHandler)
32 //_____________________________________________________________________________________________________________________________
33 AliGammaConversionAODBGHandler::AliGammaConversionAODBGHandler() :
36 fBGEventCounter(NULL),
37 fBGEventENegCounter(NULL),
38 fBGEventMesonCounter(NULL),
42 fNBinsMultiplicity(0),
43 fBinLimitsArrayZ(NULL),
44 fBinLimitsArrayMultiplicity(NULL),
52 //_____________________________________________________________________________________________________________________________
53 AliGammaConversionAODBGHandler::AliGammaConversionAODBGHandler(UInt_t binsZ,UInt_t binsMultiplicity,UInt_t nEvents) :
56 fBGEventCounter(NULL),
57 fBGEventENegCounter(NULL),
58 fBGEventMesonCounter(NULL),
62 fNBinsMultiplicity(binsMultiplicity),
63 fBinLimitsArrayZ(NULL),
64 fBinLimitsArrayMultiplicity(NULL),
65 fBGEvents(binsZ,AliGammaConversionMultipicityVector(binsMultiplicity,AliGammaConversionBGEventVector(nEvents))),
66 fBGEventsENeg(binsZ,AliGammaConversionMultipicityVector(binsMultiplicity,AliGammaConversionBGEventVector(nEvents))),
67 fBGEventsMeson(binsZ,AliGammaConversionMotherMultipicityVector(binsMultiplicity,AliGammaConversionMotherBGEventVector(nEvents)))
73 //_____________________________________________________________________________________________________________________________
74 AliGammaConversionAODBGHandler::AliGammaConversionAODBGHandler(UInt_t collisionSystem, UInt_t centMin, UInt_t centMax,
75 UInt_t nEvents, Bool_t useTrackMult, UInt_t mode, UInt_t binsZ, UInt_t binsMultiplicity) :
78 fBGEventCounter(NULL),
79 fBGEventENegCounter(NULL),
80 fBGEventMesonCounter(NULL),
84 fNBinsMultiplicity(binsMultiplicity),
85 fBinLimitsArrayZ(NULL),
86 fBinLimitsArrayMultiplicity(NULL),
87 fBGEvents(binsZ,AliGammaConversionMultipicityVector(binsMultiplicity,AliGammaConversionBGEventVector(nEvents))),
88 fBGEventsENeg(binsZ,AliGammaConversionMultipicityVector(binsMultiplicity,AliGammaConversionBGEventVector(nEvents))),
89 fBGEventsMeson(binsZ,AliGammaConversionMotherMultipicityVector(binsMultiplicity,AliGammaConversionMotherBGEventVector(nEvents)))
92 if (fNBinsZ>8)fNBinsZ = 8;
94 if (mode == 0 || mode == 1){
95 if (fNBinsMultiplicity>5)fNBinsMultiplicity = 5;
96 } else if (mode == 2 || mode == 3 || mode == 4 || mode == 5){
98 if (fNBinsMultiplicity>5)fNBinsMultiplicity = 5;
100 if (fNBinsMultiplicity>7)fNBinsMultiplicity = 7;
103 if (fNBinsMultiplicity>5)fNBinsMultiplicity = 5;
105 // Initializing z vertex bins
106 fBinLimitsArrayZ= new Double_t[fNBinsZ] ;
107 if(collisionSystem > 0 && collisionSystem < 8){ // PbPb
108 Double_t fBinLimitsArrayZPbPb[8] = {-50, -5.5, -2.9, -0.65,
109 1.45, 3.65, 6.15, 50};
110 for (Int_t i = 0; i < fNBinsZ; i++){
111 fBinLimitsArrayZ[i] = fBinLimitsArrayZPbPb[i];
113 } else if(collisionSystem == 0){ // pp
114 Double_t fBinLimitsArrayZpp[8] = {-50, -3.375, -1.605, -0.225,
115 1.065, 2.445, 4.245, 50};
116 for (Int_t i = 0; i < fNBinsZ; i++){
117 fBinLimitsArrayZ[i] = fBinLimitsArrayZpp[i];
120 Double_t fBinLimitsArrayZpPb[8] = {-50, -5.85, -3.35, -1.15,
121 0.85, 2.95, 5.55, 50};
122 for (Int_t i = 0; i < fNBinsZ; i++){
123 fBinLimitsArrayZ[i] = fBinLimitsArrayZpPb[i];
127 // Initializing multiplicity bins
128 fBinLimitsArrayMultiplicity= new Double_t[fNBinsMultiplicity];
129 if(useTrackMult){ // multiplicity binning based on number of good global tracks
131 Double_t fBinLimitsArrayMultiplicitypp[5] = {0., 8.5, 16.5, 27.5, 200.};
132 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
133 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicitypp[i];
135 if(collisionSystem > 0 && collisionSystem < 8){ // PbPb values
136 if(centMin == 0 && centMax == 5){ // 0-5% central
137 Double_t fBinLimitsArrayMultiplicityPbPb0005[5] = {0., 1540., 1665., 1780., 5000};
138 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
139 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb0005[i];
141 } else if(centMin == 0 && centMax == 10){ // 0-10% central
142 Double_t fBinLimitsArrayMultiplicityPbPb0010[5] = {0., 1360., 1520., 1685., 5000};
143 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
144 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb0010[i];
146 } else if(centMin == 0 && centMax == 20){ // 0-20% central
147 Double_t fBinLimitsArrayMultiplicityPbPb0020[5] = {0., 1110., 1360., 1600., 5000};
148 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
149 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb0020[i];
151 } else if(centMin == 0 && centMax == 80){ // 0-80% central
152 Double_t fBinLimitsArrayMultiplicityPbPb0080[5] = {0., 890., 1240., 1540., 5000};
153 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
154 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb0080[i];
156 } else if(centMin == 5 && centMax == 10){ // 5-10% central
157 Double_t fBinLimitsArrayMultiplicityPbPb0510[5] = {0., 1250., 1345., 1445., 5000};
158 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
159 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb0510[i];
161 } else if(centMin == 10 && centMax == 20){ // 10-20% central
162 Double_t fBinLimitsArrayMultiplicityPbPb1020[5] = {0., 915., 1020., 1130., 5000};
163 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
164 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb1020[i];
166 } else if(centMin == 20 && centMax == 40){ // 20-40% central
167 Double_t fBinLimitsArrayMultiplicityPbPb2040[5] = {0., 510., 625., 730., 5000};
168 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
169 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb2040[i];
171 } else if(centMin == 40 && centMax == 80){ // 40-80% central
172 Double_t fBinLimitsArrayMultiplicityPbPb4080[5] = {0., 185., 250., 300., 5000};
173 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
174 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb4080[i];
176 } else if(centMin == 60 && centMax == 80){ // 60-80% central
177 Double_t fBinLimitsArrayMultiplicityPbPb6080[5] = {0., 55., 80., 100., 5000};
178 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
179 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb6080[i];
181 } else { // all other centrality classes
182 Double_t fBinLimitsArrayMultiplicityPbPb[5] = {0., 510., 625., 730., 5000};
183 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
184 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb[i];
187 } else if(collisionSystem == 8 || collisionSystem == 9){ // pPb
188 Double_t fBinLimitsArrayMultiplicitypPb[5] = {0., 7.5, 16.5, 29.5, 500};
189 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
190 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicitypPb[i];
192 if(centMin == 0 && centMax == 20){ // pPb 0-20 %
193 Double_t fBinLimitsArrayMultiplicitypPb0020[5] = {0., 31.5, 40.5, 50.5, 500};
194 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
195 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicitypPb0020[i];
197 } else if(centMin == 20 && centMax == 40){
198 Double_t fBinLimitsArrayMultiplicitypPb2040[5] = {0., 19.5, 25.5, 32.5, 500};
199 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
200 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicitypPb2040[i];
202 } else if(centMin == 40 && centMax == 60){
203 Double_t fBinLimitsArrayMultiplicitypPb4060[5] = {0., 12.5, 16.5, 22.5, 500};
204 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
205 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicitypPb4060[i];
207 } else if(centMin == 60 && centMax == 80){
208 Double_t fBinLimitsArrayMultiplicitypPb6080[5] = {0., 5.5, 9.5, 13.5, 500};
209 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
210 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicitypPb6080[i];
212 } else if(centMin == 60 && centMax == 100){
213 Double_t fBinLimitsArrayMultiplicitypPb60100[5] = {0., 2.5, 6.5, 11.5, 500};
214 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
215 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicitypPb60100[i];
219 } else{ // Initializing Multiplicity binning with photon Mult
220 if (mode == 0 || mode == 1) { // settings for Conv-Conv && Conv-Dalitz
222 Double_t fBinLimitsArrayMultiplicitypp[5] = {2., 3., 4., 5., 9999.};
223 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
224 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicitypp[i];
226 if(collisionSystem > 0 && collisionSystem < 8){ // settings PbPb
227 if(centMin == 0 && centMax == 5){ // 0-5%
228 Double_t fBinLimitsArrayMultiplicityPbPb0005[5] = {0., 27., 31., 36., 100.};
229 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
230 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb0005[i];
232 } else if(centMin == 0 && centMax == 10){ // 0-10%
233 Double_t fBinLimitsArrayMultiplicityPbPb0010[5] = {0., 25., 30., 36., 100.};
234 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
235 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb0010[i];
237 } else if(centMin == 0 && centMax == 20){ // 0-20%
238 Double_t fBinLimitsArrayMultiplicityPbPb0020[5] = {0., 22., 27., 33., 100.};
239 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
240 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb0020[i];
242 } else if(centMin == 0 && centMax == 80){ // 0-80%
243 Double_t fBinLimitsArrayMultiplicityPbPb0080[5] = {0., 18., 25., 32., 100.};
244 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
245 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb0080[i];
247 } else if(centMin == 5 && centMax == 10){ // 5-10%
248 Double_t fBinLimitsArrayMultiplicityPbPb0510[5] = {0., 23., 27., 32., 100.};
249 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
250 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb0510[i];
252 } else if(centMin == 10 && centMax == 20){ //10-20%
253 Double_t fBinLimitsArrayMultiplicityPbPb1020[5] = {0., 18., 22., 27., 100.};
254 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
255 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb1020[i];
257 } else if(centMin == 20 && centMax == 40){ // 20-40%
258 Double_t fBinLimitsArrayMultiplicityPbPb2040[5] = {0., 11., 14., 18., 100.};
259 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
260 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb2040[i];
262 } else if(centMin == 40 && centMax == 80){ // 40-80%
263 Double_t fBinLimitsArrayMultiplicityPbPb4080[5] = {0., 5., 7., 11., 100.};
264 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
265 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb4080[i];
267 } else if(centMin == 60 && centMax == 80){ // 60-80%
268 Double_t fBinLimitsArrayMultiplicityPbPb6080[5] = {0., 2., 3., 5., 100.};
269 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
270 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb6080[i];
272 } else{ // default PbPb
273 Double_t fBinLimitsArrayMultiplicityPbPb[5] = {0., 11., 14., 18., 100.};
274 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
275 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicityPbPb[i];
279 } else if (mode == 2 || mode == 3 || mode == 4 || mode == 5){ // setting for EMCAL-Conv, PHOS-Conv, EMCAL-EMCAL, PHOS-PHOS
280 Double_t fBinLimitsArrayMultiplicitypp[7] = {0., 2., 3., 4., 8., 15., 9999.};
281 for (Int_t i = 0; i < fNBinsMultiplicity; i++){
282 fBinLimitsArrayMultiplicity[i] = fBinLimitsArrayMultiplicitypp[i];
287 Initialize(fBinLimitsArrayZ,fBinLimitsArrayMultiplicity);
290 //_____________________________________________________________________________________________________________________________
291 AliGammaConversionAODBGHandler::AliGammaConversionAODBGHandler(const AliGammaConversionAODBGHandler & original) :
293 fNEvents(original.fNEvents),
294 fBGEventCounter(original.fBGEventCounter),
295 fBGEventENegCounter(original.fBGEventENegCounter),
296 fBGEventMesonCounter(original.fBGEventMesonCounter),
297 fBGProbability(original.fBGProbability),
298 fBGEventVertex(original.fBGEventVertex),
299 fNBinsZ(original.fNBinsZ),
300 fNBinsMultiplicity(original.fNBinsMultiplicity),
301 fBinLimitsArrayZ(original.fBinLimitsArrayZ),
302 fBinLimitsArrayMultiplicity(original.fBinLimitsArrayMultiplicity),
303 fBGEvents(original.fBGEvents),
304 fBGEventsENeg(original.fBGEventsENeg),
305 fBGEventsMeson(original.fBGEventsMeson)
310 //_____________________________________________________________________________________________________________________________
311 AliGammaConversionAODBGHandler & AliGammaConversionAODBGHandler::operator = (const AliGammaConversionAODBGHandler & /*source*/)
313 // assignment operator
317 //_____________________________________________________________________________________________________________________________
318 AliGammaConversionAODBGHandler::~AliGammaConversionAODBGHandler(){
321 for(Int_t z=0;z<fNBinsZ;z++){
322 delete[] fBGEventCounter[z];
324 delete[] fBGEventCounter;
325 fBGEventCounter = NULL;
329 for(Int_t z=0;z<fNBinsZ;z++){
330 for(Int_t m=0;m<fNBinsMultiplicity;m++){
331 delete [] fBGEventVertex[z][m];
333 delete [] fBGEventVertex[z];
335 delete [] fBGEventVertex;
338 if(fBGEventENegCounter){
339 for(Int_t z=0;z<fNBinsZ;z++){
340 delete[] fBGEventENegCounter[z];
342 delete[] fBGEventENegCounter;
343 fBGEventENegCounter = NULL;
346 if(fBGEventMesonCounter){
347 for(Int_t z=0;z<fNBinsZ;z++){
348 delete[] fBGEventMesonCounter[z];
350 delete[] fBGEventMesonCounter;
351 fBGEventMesonCounter = NULL;
354 if(fBinLimitsArrayZ){
355 delete[] fBinLimitsArrayZ;
358 if(fBinLimitsArrayMultiplicity){
359 delete[] fBinLimitsArrayMultiplicity;
363 //_____________________________________________________________________________________________________________________________
364 void AliGammaConversionAODBGHandler::Initialize(Double_t * const zBinLimitsArray, Double_t * const multiplicityBinLimitsArray){
365 // see header file for documantation
368 fBinLimitsArrayZ = zBinLimitsArray;
374 if(multiplicityBinLimitsArray){
375 fBinLimitsArrayMultiplicity = multiplicityBinLimitsArray ;
380 if(fBGEventCounter == NULL){
381 fBGEventCounter= new Int_t*[fNBinsZ];
383 for(Int_t z=0;z<fNBinsZ;z++){
384 fBGEventCounter[z]=new Int_t[fNBinsMultiplicity];
387 for(Int_t z=0;z<fNBinsZ;z++){
388 for(Int_t m=0;m<fNBinsMultiplicity;m++){
389 fBGEventCounter[z][m]=0;
393 if(fBGEventMesonCounter == NULL){
394 fBGEventMesonCounter= new Int_t*[fNBinsZ];
396 for(Int_t z=0;z<fNBinsZ;z++){
397 fBGEventMesonCounter[z]=new Int_t[fNBinsMultiplicity];
400 for(Int_t z=0;z<fNBinsZ;z++){
401 for(Int_t m=0;m<fNBinsMultiplicity;m++){
402 fBGEventMesonCounter[z][m]=0;
407 if(fBGEventVertex == NULL){
408 fBGEventVertex = new GammaConversionVertex**[fNBinsZ];
410 for(Int_t z=0; z < fNBinsZ; z++){
411 fBGEventVertex[z]= new GammaConversionVertex*[fNBinsMultiplicity];
413 for(Int_t z=0;z<fNBinsZ;z++){
414 for(Int_t m=0;m<fNBinsMultiplicity; m++){
415 fBGEventVertex[z][m]= new GammaConversionVertex[fNEvents];
418 if( fBGEventENegCounter == NULL){
419 fBGEventENegCounter = new Int_t*[fNBinsZ];
422 for(Int_t z=0; z < fNBinsZ; z++){
423 fBGEventENegCounter[z] = new Int_t[fNBinsMultiplicity];
426 for(Int_t z=0;z<fNBinsZ;z++){
427 for(Int_t m=0;m<fNBinsMultiplicity; m++){
428 fBGEventENegCounter[z][m] = 0;
432 if(fBGProbability == NULL){
433 fBGProbability = new Double_t*[fNBinsZ];
435 for(Int_t z=0; z < fNBinsZ; z++){
436 fBGProbability[z] = new Double_t[fNBinsMultiplicity];
439 for(Int_t z=0;z<fNBinsZ;z++){
440 for(Int_t m=0;m<fNBinsMultiplicity; m++){
441 fBGProbability[z][m] = 0;
444 //filling the probability
445 fBGProbability[0][0] = 0.243594;
446 fBGProbability[0][1] = 0.279477;
447 fBGProbability[0][2] = 0.305104;
448 fBGProbability[0][3] = 0.315927;
449 fBGProbability[1][0] = 0.241964;
450 fBGProbability[1][1] = 0.272995;
451 fBGProbability[1][2] = 0.307165;
452 fBGProbability[1][3] = 0.292248;
453 fBGProbability[2][0] = 0.241059;
454 fBGProbability[2][1] = 0.27509;
455 fBGProbability[2][2] = 0.283657;
456 fBGProbability[2][3] = 0.310512;
457 fBGProbability[3][0] = 0.23888;
458 fBGProbability[3][1] = 0.283418;
459 fBGProbability[3][2] = 0.297232;
460 fBGProbability[3][3] = 0.348188;
461 fBGProbability[4][0] = 0.245555;
462 fBGProbability[4][1] = 0.281218;
463 fBGProbability[4][2] = 0.317236;
464 fBGProbability[4][3] = 0.323495;
465 fBGProbability[5][0] = 0.244572;
466 fBGProbability[5][1] = 0.259498;
467 fBGProbability[5][2] = 0.278383;
468 fBGProbability[5][3] = 0.284696;
469 fBGProbability[6][0] = 0.24703;
470 fBGProbability[6][1] = 0.275265;
471 fBGProbability[6][2] = 0.284004;
472 fBGProbability[6][3] = 0.343584;
476 //_____________________________________________________________________________________________________________________________
477 Int_t AliGammaConversionAODBGHandler::GetZBinIndex(Double_t zvalue) const{
478 // see header file for documantation
479 if(fNBinsZ<2 || zvalue<=fBinLimitsArrayZ[0]){
483 for(Int_t i=0; i<fNBinsZ-1 ;i++){
484 if(zvalue >= fBinLimitsArrayZ[i] && zvalue <= fBinLimitsArrayZ[i+1]){
491 //_____________________________________________________________________________________________________________________________
492 Int_t AliGammaConversionAODBGHandler::GetMultiplicityBinIndex(Int_t multiplicity) const{
493 // see header file for documantation
494 if(fNBinsMultiplicity<2){
498 for(Int_t i=0; i<fNBinsMultiplicity-1 ;i++){
499 if(multiplicity >= fBinLimitsArrayMultiplicity[i] && multiplicity < fBinLimitsArrayMultiplicity[i+1]){
503 return fNBinsMultiplicity-1;
506 //_____________________________________________________________________________________________________________________________
507 void AliGammaConversionAODBGHandler::AddEvent(TList* const eventGammas,Double_t xvalue, Double_t yvalue, Double_t zvalue, Int_t multiplicity, Double_t epvalue){
509 // see header file for documantation
511 // cout<<"Entering the AddEvent function"<<endl;
513 Int_t z = GetZBinIndex(zvalue);
514 Int_t m = GetMultiplicityBinIndex(multiplicity);
516 if(fBGEventCounter[z][m] >= fNEvents){
517 fBGEventCounter[z][m]=0;
519 Int_t eventCounter=fBGEventCounter[z][m];
522 if(fBGEventVertex[z][m][eventCounter]){
523 delete fBGEventVertex[z][m][eventCounter];
526 fBGEventVertex[z][m][eventCounter].fX = xvalue;
527 fBGEventVertex[z][m][eventCounter].fY = yvalue;
528 fBGEventVertex[z][m][eventCounter].fZ = zvalue;
529 fBGEventVertex[z][m][eventCounter].fEP = epvalue;
531 //first clear the vector
532 // cout<<"Size of vector: "<<fBGEvents[z][m][eventCounter].size()<<endl;
533 // cout<<"Checking the entries: Z="<<z<<", M="<<m<<", eventCounter="<<eventCounter<<endl;
535 // cout<<"The size of this vector is: "<<fBGEvents[z][m][eventCounter].size()<<endl;
536 for(UInt_t d=0;d<fBGEvents[z][m][eventCounter].size();d++){
537 delete (AliAODConversionPhoton*)(fBGEvents[z][m][eventCounter][d]);
539 fBGEvents[z][m][eventCounter].clear();
541 // add the gammas to the vector
542 for(Int_t i=0; i< eventGammas->GetEntries();i++){
543 // AliKFParticle *t = new AliKFParticle(*(AliKFParticle*)(eventGammas->At(i)));
544 fBGEvents[z][m][eventCounter].push_back(new AliAODConversionPhoton(*(AliAODConversionPhoton*)(eventGammas->At(i))));
546 fBGEventCounter[z][m]++;
549 //_____________________________________________________________________________________________________________________________
550 void AliGammaConversionAODBGHandler::AddMesonEvent(TList* const eventMothers, Double_t xvalue, Double_t yvalue, Double_t zvalue, Int_t multiplicity, Double_t epvalue){
552 // see header file for documantation
553 // cout<<"Entering the AddEvent function"<<endl;
554 Int_t z = GetZBinIndex(zvalue);
555 Int_t m = GetMultiplicityBinIndex(multiplicity);
557 if(fBGEventMesonCounter[z][m] >= fNEvents){
558 fBGEventMesonCounter[z][m]=0;
560 Int_t eventCounter=fBGEventMesonCounter[z][m];
562 fBGEventVertex[z][m][eventCounter].fX = xvalue;
563 fBGEventVertex[z][m][eventCounter].fY = yvalue;
564 fBGEventVertex[z][m][eventCounter].fZ = zvalue;
565 fBGEventVertex[z][m][eventCounter].fEP = epvalue;
567 //first clear the vector
568 for(UInt_t d=0;d<fBGEvents[z][m][eventCounter].size();d++){
569 delete (AliAODConversionMother*)(fBGEventsMeson[z][m][eventCounter][d]);
571 fBGEventsMeson[z][m][eventCounter].clear();
573 // add the gammas to the vector
574 for(Int_t i=0; i< eventMothers->GetEntries();i++){
575 fBGEventsMeson[z][m][eventCounter].push_back(new AliAODConversionMother(*(AliAODConversionMother*)(eventMothers->At(i))));
577 fBGEventMesonCounter[z][m]++;
581 //_____________________________________________________________________________________________________________________________
582 void AliGammaConversionAODBGHandler::AddElectronEvent(TClonesArray* const eventENeg, Double_t zvalue, Int_t multiplicity){
584 Int_t z = GetZBinIndex(zvalue);
585 Int_t m = GetMultiplicityBinIndex(multiplicity);
587 if(fBGEventENegCounter[z][m] >= fNEvents){
588 fBGEventENegCounter[z][m]=0;
590 Int_t eventENegCounter=fBGEventENegCounter[z][m];
592 //first clear the vector
593 // cout<<"Size of vector: "<<fBGEvents[z][m][eventCounter].size()<<endl;
594 // cout<<"Checking the entries: Z="<<z<<", M="<<m<<", eventCounter="<<eventCounter<<endl;
596 // cout<<"The size of this vector is: "<<fBGEvents[z][m][eventCounter].size()<<endl;
597 for(UInt_t d=0;d<fBGEventsENeg[z][m][eventENegCounter].size();d++){
598 delete (AliAODConversionPhoton*)(fBGEventsENeg[z][m][eventENegCounter][d]);
601 fBGEventsENeg[z][m][eventENegCounter].clear();
603 // add the electron to the vector
604 for(Int_t i=0; i< eventENeg->GetEntriesFast();i++){
605 // AliKFParticle *t = new AliKFParticle(*(AliKFParticle*)(eventGammas->At(i)));
606 fBGEventsENeg[z][m][eventENegCounter].push_back(new AliAODConversionPhoton(*(AliAODConversionPhoton*)(eventENeg->At(i))));
608 fBGEventENegCounter[z][m]++;
611 //_____________________________________________________________________________________________________________________________
612 AliGammaConversionAODVector* AliGammaConversionAODBGHandler::GetBGGoodV0s(Int_t zbin, Int_t mbin, Int_t event){
613 //see headerfile for documentation
614 return &(fBGEvents[zbin][mbin][event]);
617 //_____________________________________________________________________________________________________________________________
618 AliGammaConversionMotherAODVector* AliGammaConversionAODBGHandler::GetBGGoodMesons(Int_t zbin, Int_t mbin, Int_t event){
619 //see headerfile for documentation
620 return &(fBGEventsMeson[zbin][mbin][event]);
623 //_____________________________________________________________________________________________________________________________
624 AliGammaConversionAODVector* AliGammaConversionAODBGHandler::GetBGGoodENeg(Int_t event, Double_t zvalue, Int_t multiplicity){
625 //see headerfile for documentation
626 Int_t z = GetZBinIndex(zvalue);
627 Int_t m = GetMultiplicityBinIndex(multiplicity);
628 return &(fBGEventsENeg[z][m][event]);
631 //_____________________________________________________________________________________________________________________________
632 void AliGammaConversionAODBGHandler::PrintBGArray(){
633 //see headerfile for documentation
634 for(Int_t z=0;z<fNBinsZ;z++){
636 cout<<"Getting the data for z bin: "<<z<<endl;
637 for(Int_t multiplicity=0;multiplicity<fNBinsMultiplicity;multiplicity++){
639 cout<<"Getting the data for multiplicity bin: "<<multiplicity<<endl;
640 for(Int_t event=0;event<fNEvents;event++){
641 if(fBGEvents[z][multiplicity][event].size()>0){
642 cout<<"Event: "<<event<<" has: "<<fBGEvents[z][multiplicity][event].size()<<endl;