]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/GammaConv/AliConversionAODBGHandlerRP.cxx
Adding binning for singly and doubly diffractive and nondiffractive events
[u/mrichter/AliRoot.git] / PWG4 / GammaConv / AliConversionAODBGHandlerRP.cxx
CommitLineData
2eedd4ed 1#if !defined( __CINT__) || defined(__MAKECINT__)
2
3#include <exception>
4#include <iostream>
5#include "AliLog.h"
6#include "AliConversionAODBGHandlerRP.h"
7using namespace std;
8#endif
9
10
11// Author Daniel Lohner (Daniel.Lohner@cern.ch)
12
13
14ClassImp(AliConversionAODBGHandlerRP)
15
16AliConversionAODBGHandlerRP::AliConversionAODBGHandlerRP() :
17 fNEvents(20),
18 fBGEventCounter(NULL),
19 fNBGEvents(NULL),
20 fNBinsZ(7),
21 fNBinsCentrality(6),
22 fNBinsRP(6),
23 fBinLimitsArrayZ(NULL),
24 fBinLimitsArrayCentrality(NULL),
25 fBinLimitsArrayRP(NULL),
26 fBGEvents(fNBinsRP,AliGammaConversionVertexPositionVector(fNBinsZ,AliGammaConversionCentralityVector(fNBinsCentrality,AliGammaConversionBGEventVector(fNEvents))))
27{
28 // Default Constructor
29
30 // CentralityBins
31 fBinLimitsArrayCentrality= new Double_t[fNBinsCentrality+1];
32
33 fBinLimitsArrayCentrality[0] = 0;
34 fBinLimitsArrayCentrality[1] = 5;
35 fBinLimitsArrayCentrality[2] = 10;
36 fBinLimitsArrayCentrality[3] = 20;
37 fBinLimitsArrayCentrality[4] = 40;
38 fBinLimitsArrayCentrality[5] = 60;
39 fBinLimitsArrayCentrality[6] = 90;
40
41 // Vertex Z Binning
42
43 fBinLimitsArrayZ = new Double_t[fNBinsZ+1];
44
45 fBinLimitsArrayZ[0] = -10;
46 fBinLimitsArrayZ[1] = -5.4;
47 fBinLimitsArrayZ[2] = -2.8;
48 fBinLimitsArrayZ[3] = -0.6;
49 fBinLimitsArrayZ[4] = 1.4;
50 fBinLimitsArrayZ[5] = 3.5;
51 fBinLimitsArrayZ[6] = 6.1;
52 fBinLimitsArrayZ[7] = 10;
53
54 // Initialize
55
56 Initialize();
57
58}
59
60AliConversionAODBGHandlerRP::AliConversionAODBGHandlerRP(Int_t NEvents,Int_t NBinsZ,Double_t *BinLimitsZ,Int_t NBinsCentrality,Double_t *BinLimitsCentrality,Int_t NBinsRP) :
61fNEvents(NEvents),
62fBGEventCounter(NULL),
63fNBGEvents(NULL),
64fNBinsZ(NBinsZ),
65fNBinsCentrality(NBinsCentrality),
66fNBinsRP(NBinsRP),
67fBinLimitsArrayZ(BinLimitsZ),
68fBinLimitsArrayCentrality(BinLimitsCentrality),
69fBinLimitsArrayRP(NULL),
70fBGEvents(fNBinsRP,AliGammaConversionVertexPositionVector(fNBinsZ,AliGammaConversionCentralityVector(fNBinsCentrality,AliGammaConversionBGEventVector(fNEvents))))
71{
72 Initialize();
73}
74
75
76AliConversionAODBGHandlerRP::~AliConversionAODBGHandlerRP()
77{
78 if(fBinLimitsArrayZ){
79 delete[] fBinLimitsArrayZ;
80 fBinLimitsArrayZ=0x0;}
81 if(fBinLimitsArrayCentrality){
82 delete[] fBinLimitsArrayCentrality;
83 fBinLimitsArrayCentrality=0x0;}
84 if(fBinLimitsArrayRP){
85 delete[] fBinLimitsArrayRP;
86 fBinLimitsArrayRP=0x0;}
87
88 if(fBGEventCounter){
89
90 for(Int_t psi=0;psi<fNBinsRP;psi++){
91 for(Int_t z=0;z<fNBinsZ;z++){
92 delete[] fBGEventCounter[psi][z];
93 }
94 delete[] fBGEventCounter[psi];
95 }
96 delete[] fBGEventCounter;
97 fBGEventCounter = NULL;
98 }
99
100 // Delete pool
101
102 for(Int_t psi=0;psi<fNBinsRP;psi++){
103 for(Int_t z=0;z<fNBinsZ;z++){
104 for(Int_t m=0;m<fNBinsCentrality;m++){
105 for(Int_t eventCounter=0;eventCounter<fNBGEvents[psi][z][m]&&eventCounter<fNEvents;eventCounter++){
106
107 for(UInt_t d=0;d<fBGEvents[psi][z][m][eventCounter].size();d++){
108 delete (AliAODConversionPhoton*)(fBGEvents[psi][z][m][eventCounter][d]);
109 }
110 }
111 }
112 }
113 }
114
115 if(fNBGEvents){
116 for(Int_t psi=0;psi<fNBinsRP;psi++){
117 for(Int_t z=0;z<fNBinsZ;z++){
118 delete[] fNBGEvents[psi][z];
119 }
120 delete[] fNBGEvents[psi];
121 }
122 delete[] fNBGEvents;
123 fNBGEvents = NULL;
124 }
125
126
127}
128
129
130void AliConversionAODBGHandlerRP::Initialize(){
131
132 // RP Binning
133
134 fBinLimitsArrayRP=new Double_t[fNBinsRP+1];
135
136 for(Int_t i=0;i<fNBinsRP+1;i++){
137 fBinLimitsArrayRP[i] = i*TMath::Pi()/fNBinsRP;
138 }
139
140 // Counter
141
142 if(fBGEventCounter == NULL){
143 fBGEventCounter= new Int_t**[fNBinsRP];
144 }
145 for(Int_t psi=0;psi<fNBinsRP;psi++){
146 fBGEventCounter[psi]= new Int_t*[fNBinsZ];
147
148 for(Int_t z=0;z<fNBinsZ;z++){
149 fBGEventCounter[psi][z]=new Int_t[fNBinsCentrality];
150 }
151 }
152 for(Int_t psi=0;psi<fNBinsRP;psi++){
153 for(Int_t z=0;z<fNBinsZ;z++){
154 for(Int_t m=0;m<fNBinsCentrality;m++){
155 fBGEventCounter[psi][z][m]=0;
156 }
157 }
158 }
159
160
161 if(fNBGEvents == NULL){
162 fNBGEvents= new Int_t**[fNBinsRP];
163 }
164 for(Int_t psi=0;psi<fNBinsRP;psi++){
165 fNBGEvents[psi]= new Int_t*[fNBinsZ];
166
167 for(Int_t z=0;z<fNBinsZ;z++){
168 fNBGEvents[psi][z]=new Int_t[fNBinsCentrality];
169 }
170 }
171 for(Int_t psi=0;psi<fNBinsRP;psi++){
172 for(Int_t z=0;z<fNBinsZ;z++){
173 for(Int_t m=0;m<fNBinsCentrality;m++){
174 fNBGEvents[psi][z][m]=0;
175 }
176 }
177 }
178
179}
180
181//-------------------------------------------------------------
182
183Int_t AliConversionAODBGHandlerRP::GetZBinIndex(Double_t zvalue) const{
184 // see header file for documantation
185 if(fNBinsZ<2 || zvalue<=fBinLimitsArrayZ[0]){
186 return 0;
187 }
188
189 for(Int_t i=0; i<fNBinsZ ;i++){
190 if(zvalue >= fBinLimitsArrayZ[i] && zvalue <= fBinLimitsArrayZ[i+1]){
191 return i;
192 }
193 }
194 return -1;
195}
196//-------------------------------------------------------------
197Int_t AliConversionAODBGHandlerRP::GetCentralityBinIndex(Int_t multiplicity) const{
198 if(fNBinsCentrality<2){
199 return 0;
200 }
201
202 for(Int_t i=0; i<fNBinsCentrality ;i++){
203 if(multiplicity >= fBinLimitsArrayCentrality[i] && multiplicity < fBinLimitsArrayCentrality[i+1]){
204 return i;
205 }
206 }
207 return -1;
208}
209
210//-------------------------------------------------------------
211
212Int_t AliConversionAODBGHandlerRP::GetRPBinIndex(Double_t psivalue) const{
213
214 if(fNBinsRP<2 || psivalue<=fBinLimitsArrayRP[0]){
215 return 0;
216 }
217
218 for(Int_t i=0; i<fNBinsRP ;i++){
219 if(psivalue >= fBinLimitsArrayRP[i] && psivalue <= fBinLimitsArrayRP[i+1]){
220 return i;
221 }
222 }
223 return -1;
224}
225
226
227//-------------------------------------------------------------
228void AliConversionAODBGHandlerRP::AddEvent(TClonesArray * const eventGammas,Double_t psivalue,Double_t zvalue, Int_t multiplicity){
229
230
231 Int_t z = GetZBinIndex(zvalue);
232 Int_t m = GetCentralityBinIndex(multiplicity);
233 Int_t psi=GetRPBinIndex(psivalue);
234
235 // If Event Stack is full, replace the first entry (First in first out)
236 if(fBGEventCounter[psi][z][m] >= fNEvents){
237 fBGEventCounter[psi][z][m]=0;
238 }
239
240 // Update number of Events stored
241 if(fNBGEvents[psi][z][m] < fNEvents){
242 fNBGEvents[psi][z][m]++;
243 }
244
245
246 Int_t eventCounter=fBGEventCounter[psi][z][m];
247
248 //clear the vector for old gammas
249 for(UInt_t d=0;d<fBGEvents[psi][z][m][eventCounter].size();d++){
250 delete (AliAODConversionPhoton*)(fBGEvents[psi][z][m][eventCounter][d]);
251 }
252
253 fBGEvents[psi][z][m][eventCounter].clear();
254
255
256 // add the gammas to the vector
257
258 for(Int_t i=0; i< eventGammas->GetEntriesFast();i++){
259 fBGEvents[psi][z][m][eventCounter].push_back(new AliAODConversionPhoton(*(AliAODConversionPhoton*)(eventGammas->At(i))));
260 }
261
262 fBGEventCounter[psi][z][m]++;
263
264
265}
266
267//-------------------------------------------------------------
268AliGammaConversionPhotonVector* AliConversionAODBGHandlerRP::GetBGGoodGammas(Int_t psi,Int_t zbin, Int_t mbin, Int_t event){
269 //see headerfile for documentation
270 return &(fBGEvents[psi][zbin][mbin][event]);
271}
272