1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: Ana Marin, Kathrin Koch, Kenneth Aamodt *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 ////////////////////////////////////////////////
17 //---------------------------------------------
18 // Class for handling of background calculation
19 //---------------------------------------------
20 ////////////////////////////////////////////////
22 #include "AliGammaConversionBGHandler.h"
23 #include "AliKFParticle.h"
24 #include "AliAnalysisTaskGammaConversion.h"
28 ClassImp(AliGammaConversionBGHandler)
30 AliGammaConversionBGHandler::AliGammaConversionBGHandler() :
33 fBGEventCounter(NULL),
34 fBGEventENegCounter(NULL),
38 fNBinsMultiplicity(0),
39 fBinLimitsArrayZ(NULL),
40 fBinLimitsArrayMultiplicity(NULL),
47 AliGammaConversionBGHandler::AliGammaConversionBGHandler(UInt_t binsZ,UInt_t binsMultiplicity,UInt_t nEvents) :
50 fBGEventCounter(NULL),
51 fBGEventENegCounter(NULL),
55 fNBinsMultiplicity(binsMultiplicity),
56 fBinLimitsArrayZ(NULL),
57 fBinLimitsArrayMultiplicity(NULL),
58 fBGEvents(binsZ,AliGammaConversionMultipicityVector(binsMultiplicity,AliGammaConversionBGEventVector(nEvents))),
59 fBGEventsENeg(binsZ,AliGammaConversionMultipicityVector(binsMultiplicity,AliGammaConversionBGEventVector(nEvents)))
64 AliGammaConversionBGHandler::AliGammaConversionBGHandler(const AliGammaConversionBGHandler & original) :
66 fNEvents(original.fNEvents),
67 fBGEventCounter(original.fBGEventCounter),
68 fBGEventENegCounter(original.fBGEventENegCounter),
69 fBGProbability(original.fBGProbability),
70 fBGEventVertex(original.fBGEventVertex),
71 fNBinsZ(original.fNBinsZ),
72 fNBinsMultiplicity(original.fNBinsMultiplicity),
73 fBinLimitsArrayZ(original.fBinLimitsArrayZ),
74 fBinLimitsArrayMultiplicity(original.fBinLimitsArrayMultiplicity),
75 fBGEvents(original.fBGEvents),
76 fBGEventsENeg(original.fBGEventsENeg)
81 AliGammaConversionBGHandler & AliGammaConversionBGHandler::operator = (const AliGammaConversionBGHandler & /*source*/)
83 // assignment operator
87 AliGammaConversionBGHandler::~AliGammaConversionBGHandler(){
89 //Kenneth remember to clear memory!!!!!!!!!!!!!!!!!!!!!
91 for(Int_t z=0;z<fNBinsZ;z++){
92 delete[] fBGEventCounter[z];
94 delete[] fBGEventCounter;
95 fBGEventCounter = NULL;
99 for(Int_t z=0;z<fNBinsZ;z++){
100 for(Int_t m=0;m<fNBinsMultiplicity;m++){
101 delete [] fBGEventVertex[z][m];
103 delete [] fBGEventVertex[z];
105 delete [] fBGEventVertex;
108 if(fBGEventENegCounter){
109 for(Int_t z=0;z<fNBinsZ;z++){
110 delete[] fBGEventENegCounter[z];
112 delete[] fBGEventENegCounter;
113 fBGEventENegCounter = NULL;
116 if(fBinLimitsArrayZ){
117 delete[] fBinLimitsArrayZ;
120 if(fBinLimitsArrayMultiplicity){
121 delete[] fBinLimitsArrayMultiplicity;
125 void AliGammaConversionBGHandler::Initialize(Double_t * const zBinLimitsArray, Double_t * const multiplicityBinLimitsArray){
126 // see header file for documantation
129 fBinLimitsArrayZ = zBinLimitsArray;
135 if(multiplicityBinLimitsArray){
136 fBinLimitsArrayMultiplicity = multiplicityBinLimitsArray ;
141 if(fBGEventCounter == NULL){
142 fBGEventCounter= new Int_t*[fNBinsZ];
144 for(Int_t z=0;z<fNBinsZ;z++){
145 fBGEventCounter[z]=new Int_t[fNBinsMultiplicity];
148 for(Int_t z=0;z<fNBinsZ;z++){
149 for(Int_t m=0;m<fNBinsMultiplicity;m++){
150 fBGEventCounter[z][m]=0;
154 if(fBGEventVertex == NULL){
155 fBGEventVertex = new GammaConversionVertex**[fNBinsZ];
157 for(Int_t z=0; z < fNBinsZ; z++){
158 fBGEventVertex[z]= new GammaConversionVertex*[fNBinsMultiplicity];
160 for(Int_t z=0;z<fNBinsZ;z++){
161 for(Int_t m=0;m<fNBinsMultiplicity; m++){
162 fBGEventVertex[z][m]= new GammaConversionVertex[fNEvents];
165 if( fBGEventENegCounter == NULL){
166 fBGEventENegCounter = new Int_t*[fNBinsZ];
169 for(Int_t z=0; z < fNBinsZ; z++){
170 fBGEventENegCounter[z] = new Int_t[fNBinsMultiplicity];
173 for(Int_t z=0;z<fNBinsZ;z++){
174 for(Int_t m=0;m<fNBinsMultiplicity; m++){
175 fBGEventENegCounter[z][m] = 0;
179 if(fBGProbability == NULL){
180 fBGProbability = new Double_t*[fNBinsZ];
182 for(Int_t z=0; z < fNBinsZ; z++){
183 fBGProbability[z] = new Double_t[fNBinsMultiplicity];
186 for(Int_t z=0;z<fNBinsZ;z++){
187 for(Int_t m=0;m<fNBinsMultiplicity; m++){
188 fBGProbability[z][m] = 0;
191 //filling the probability
192 fBGProbability[0][0] = 0.243594;
193 fBGProbability[0][1] = 0.279477;
194 fBGProbability[0][2] = 0.305104;
195 fBGProbability[0][3] = 0.315927;
196 fBGProbability[1][0] = 0.241964;
197 fBGProbability[1][1] = 0.272995;
198 fBGProbability[1][2] = 0.307165;
199 fBGProbability[1][3] = 0.292248;
200 fBGProbability[2][0] = 0.241059;
201 fBGProbability[2][1] = 0.27509;
202 fBGProbability[2][2] = 0.283657;
203 fBGProbability[2][3] = 0.310512;
204 fBGProbability[3][0] = 0.23888;
205 fBGProbability[3][1] = 0.283418;
206 fBGProbability[3][2] = 0.297232;
207 fBGProbability[3][3] = 0.348188;
208 fBGProbability[4][0] = 0.245555;
209 fBGProbability[4][1] = 0.281218;
210 fBGProbability[4][2] = 0.317236;
211 fBGProbability[4][3] = 0.323495;
212 fBGProbability[5][0] = 0.244572;
213 fBGProbability[5][1] = 0.259498;
214 fBGProbability[5][2] = 0.278383;
215 fBGProbability[5][3] = 0.284696;
216 fBGProbability[6][0] = 0.24703;
217 fBGProbability[6][1] = 0.275265;
218 fBGProbability[6][2] = 0.284004;
219 fBGProbability[6][3] = 0.343584;
223 Int_t AliGammaConversionBGHandler::GetZBinIndex(Double_t zvalue) const{
224 // see header file for documantation
225 if(fNBinsZ<2 || zvalue<=fBinLimitsArrayZ[0]){
229 for(Int_t i=0; i<fNBinsZ-1 ;i++){
230 if(zvalue >= fBinLimitsArrayZ[i] && zvalue <= fBinLimitsArrayZ[i+1]){
237 Int_t AliGammaConversionBGHandler::GetMultiplicityBinIndex(Int_t multiplicity) const{
238 // see header file for documantation
239 if(fNBinsMultiplicity<2){
243 for(Int_t i=0; i<fNBinsMultiplicity-1 ;i++){
244 if(multiplicity >= fBinLimitsArrayMultiplicity[i] && multiplicity < fBinLimitsArrayMultiplicity[i+1]){
248 return fNBinsMultiplicity-1;
251 void AliGammaConversionBGHandler::AddEvent(TClonesArray * const eventGammas,Double_t xvalue, Double_t yvalue, Double_t zvalue, Int_t multiplicity){
252 // see header file for documantation
254 // cout<<"Entering the AddEvent function"<<endl;
256 Int_t z = GetZBinIndex(zvalue);
257 Int_t m = GetMultiplicityBinIndex(multiplicity);
259 if(fBGEventCounter[z][m] >= fNEvents){
260 fBGEventCounter[z][m]=0;
262 Int_t eventCounter=fBGEventCounter[z][m];
265 if(fBGEventVertex[z][m][eventCounter]){
266 delete fBGEventVertex[z][m][eventCounter];
269 fBGEventVertex[z][m][eventCounter].fX = xvalue;
270 fBGEventVertex[z][m][eventCounter].fY = yvalue;
271 fBGEventVertex[z][m][eventCounter].fZ = zvalue;
273 //first clear the vector
274 // cout<<"Size of vector: "<<fBGEvents[z][m][eventCounter].size()<<endl;
275 // cout<<"Checking the entries: Z="<<z<<", M="<<m<<", eventCounter="<<eventCounter<<endl;
277 // cout<<"The size of this vector is: "<<fBGEvents[z][m][eventCounter].size()<<endl;
278 for(UInt_t d=0;d<fBGEvents[z][m][eventCounter].size();d++){
279 delete (AliKFParticle*)(fBGEvents[z][m][eventCounter][d]);
281 fBGEvents[z][m][eventCounter].clear();
283 // add the gammas to the vector
284 for(Int_t i=0; i< eventGammas->GetEntriesFast();i++){
285 // AliKFParticle *t = new AliKFParticle(*(AliKFParticle*)(eventGammas->At(i)));
286 fBGEvents[z][m][eventCounter].push_back(new AliKFParticle(*(AliKFParticle*)(eventGammas->At(i))));
288 fBGEventCounter[z][m]++;
290 void AliGammaConversionBGHandler::AddElectronEvent(TClonesArray* const eventENeg, Double_t zvalue, Int_t multiplicity){
292 Int_t z = GetZBinIndex(zvalue);
293 Int_t m = GetMultiplicityBinIndex(multiplicity);
295 if(fBGEventENegCounter[z][m] >= fNEvents){
296 fBGEventENegCounter[z][m]=0;
300 Int_t eventENegCounter=fBGEventENegCounter[z][m];
302 //first clear the vector
303 // cout<<"Size of vector: "<<fBGEvents[z][m][eventCounter].size()<<endl;
304 // cout<<"Checking the entries: Z="<<z<<", M="<<m<<", eventCounter="<<eventCounter<<endl;
306 // cout<<"The size of this vector is: "<<fBGEvents[z][m][eventCounter].size()<<endl;
307 for(UInt_t d=0;d<fBGEventsENeg[z][m][eventENegCounter].size();d++){
308 delete (AliKFParticle*)(fBGEventsENeg[z][m][eventENegCounter][d]);
311 fBGEventsENeg[z][m][eventENegCounter].clear();
313 // add the electron to the vector
314 for(Int_t i=0; i< eventENeg->GetEntriesFast();i++){
315 // AliKFParticle *t = new AliKFParticle(*(AliKFParticle*)(eventGammas->At(i)));
316 fBGEventsENeg[z][m][eventENegCounter].push_back(new AliKFParticle(*(AliKFParticle*)(eventENeg->At(i))));
319 fBGEventENegCounter[z][m]++;
323 AliGammaConversionKFVector* AliGammaConversionBGHandler::GetBGGoodV0s(Int_t zbin, Int_t mbin, Int_t event){
324 //see headerfile for documentation
325 return &(fBGEvents[zbin][mbin][event]);
327 AliGammaConversionKFVector* AliGammaConversionBGHandler::GetBGGoodENeg(Int_t event, Double_t zvalue, Int_t multiplicity){
330 //see headerfile for documentation
331 Int_t z = GetZBinIndex(zvalue);
332 Int_t m = GetMultiplicityBinIndex(multiplicity);
333 return &(fBGEventsENeg[z][m][event]);
337 void AliGammaConversionBGHandler::PrintBGArray(){
338 //see headerfile for documentation
339 for(Int_t z=0;z<fNBinsZ;z++){
341 cout<<"Getting the data for z bin: "<<z<<endl;
342 for(Int_t multiplicity=0;multiplicity<fNBinsMultiplicity;multiplicity++){
344 cout<<"Getting the data for multiplicity bin: "<<multiplicity<<endl;
345 for(Int_t event=0;event<fNEvents;event++){
346 if(fBGEvents[z][multiplicity][event].size()>0){
347 cout<<"Event: "<<event<<" has: "<<fBGEvents[z][multiplicity][event].size()<<endl;