]>
Commit | Line | Data |
---|---|---|
1 | /************************************************************************** | |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
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 | **************************************************************************/ | |
15 | ||
16 | ||
17 | //------------------------------------------------------------------------- | |
18 | // Implementation of Class AliESDZDC | |
19 | // This is a class that summarizes the ZDC data | |
20 | // for the ESD | |
21 | // Origin: Christian Klein-Boesing, CERN, Christian.Klein-Boesing@cern.ch | |
22 | //------------------------------------------------------------------------- | |
23 | ||
24 | #include <TMath.h> | |
25 | ||
26 | #include "AliESDZDC.h" | |
27 | ||
28 | ClassImp(AliESDZDC) | |
29 | ||
30 | //______________________________________________________________________________ | |
31 | AliESDZDC::AliESDZDC() : | |
32 | AliVZDC(), | |
33 | fZDCN1Energy(0), | |
34 | fZDCP1Energy(0), | |
35 | fZDCN2Energy(0), | |
36 | fZDCP2Energy(0), | |
37 | fZDCEMEnergy(0), | |
38 | fZDCEMEnergy1(0), | |
39 | fZDCParticipants(0), | |
40 | fZDCPartSideA(0), | |
41 | fZDCPartSideC(0), | |
42 | fImpactParameter(0), | |
43 | fImpactParamSideA(0), | |
44 | fImpactParamSideC(0), | |
45 | fESDQuality(0) | |
46 | { | |
47 | for(Int_t i=0; i<5; i++){ | |
48 | fZN1TowerEnergy[i] = fZN2TowerEnergy[i] = 0.; | |
49 | fZP1TowerEnergy[i] = fZP2TowerEnergy[i] = 0.; | |
50 | fZN1TowerEnergyLR[i] = fZN2TowerEnergyLR[i] = 0.; | |
51 | fZP1TowerEnergyLR[i] = fZP2TowerEnergyLR[i] = 0.; | |
52 | } | |
53 | for(Int_t i=0; i<2; i++){ | |
54 | fZNACentrCoord[i] = fZNCCentrCoord[i] = 0.; | |
55 | } | |
56 | for(Int_t i=0; i<32; i++){ | |
57 | fVMEScaler[i]=0; | |
58 | for(Int_t y=0; y<4; y++){ | |
59 | fZDCTDCData[i][y]=0; | |
60 | fZDCTDCCorrected[i][y]=0.; | |
61 | } | |
62 | } | |
63 | } | |
64 | ||
65 | //______________________________________________________________________________ | |
66 | AliESDZDC::AliESDZDC(const AliESDZDC& zdc) : | |
67 | AliVZDC(zdc), | |
68 | fZDCN1Energy(zdc.fZDCN1Energy), | |
69 | fZDCP1Energy(zdc.fZDCP1Energy), | |
70 | fZDCN2Energy(zdc.fZDCN2Energy), | |
71 | fZDCP2Energy(zdc.fZDCP2Energy), | |
72 | fZDCEMEnergy(zdc.fZDCEMEnergy), | |
73 | fZDCEMEnergy1(zdc.fZDCEMEnergy1), | |
74 | fZDCParticipants(zdc.fZDCParticipants), | |
75 | fZDCPartSideA(zdc.fZDCPartSideA), | |
76 | fZDCPartSideC(zdc.fZDCPartSideC), | |
77 | fImpactParameter(zdc.fImpactParameter), | |
78 | fImpactParamSideA(zdc.fImpactParamSideA), | |
79 | fImpactParamSideC(zdc.fImpactParamSideC), | |
80 | fESDQuality(zdc.fESDQuality) | |
81 | { | |
82 | // copy constructor | |
83 | for(Int_t i=0; i<5; i++){ | |
84 | fZN1TowerEnergy[i] = zdc.fZN1TowerEnergy[i]; | |
85 | fZN2TowerEnergy[i] = zdc.fZN2TowerEnergy[i]; | |
86 | fZP1TowerEnergy[i] = zdc.fZP1TowerEnergy[i]; | |
87 | fZP2TowerEnergy[i] = zdc.fZP2TowerEnergy[i]; | |
88 | fZN1TowerEnergyLR[i] = zdc.fZN1TowerEnergyLR[i]; | |
89 | fZN2TowerEnergyLR[i] = zdc.fZN2TowerEnergyLR[i]; | |
90 | fZP1TowerEnergyLR[i] = zdc.fZP1TowerEnergyLR[i]; | |
91 | fZP2TowerEnergyLR[i] = zdc.fZP2TowerEnergyLR[i]; | |
92 | } | |
93 | for(Int_t i=0; i<2; i++){ | |
94 | fZNACentrCoord[i] = zdc.fZNACentrCoord[i]; | |
95 | fZNCCentrCoord[i] = zdc.fZNCCentrCoord[i]; | |
96 | } | |
97 | for(Int_t i=0; i<32; i++){ | |
98 | fVMEScaler[i] = zdc.fVMEScaler[i]; | |
99 | for(Int_t y=0; y<4; y++){ | |
100 | fZDCTDCData[i][y] = zdc.fZDCTDCData[i][y]; | |
101 | fZDCTDCCorrected[i][y] = zdc.fZDCTDCCorrected[i][y]; | |
102 | } | |
103 | } | |
104 | } | |
105 | ||
106 | //______________________________________________________________________________ | |
107 | AliESDZDC& AliESDZDC::operator=(const AliESDZDC&zdc) | |
108 | { | |
109 | // assigment operator | |
110 | if(this!=&zdc) { | |
111 | AliVZDC::operator=(zdc); | |
112 | fZDCN1Energy = zdc.fZDCN1Energy; | |
113 | fZDCP1Energy = zdc.fZDCP1Energy; | |
114 | fZDCN2Energy = zdc.fZDCN2Energy; | |
115 | fZDCP2Energy = zdc.fZDCP2Energy; | |
116 | fZDCEMEnergy = zdc.fZDCEMEnergy; | |
117 | fZDCEMEnergy1 = zdc.fZDCEMEnergy1; | |
118 | for(Int_t i=0; i<5; i++){ | |
119 | fZN1TowerEnergy[i] = zdc.fZN1TowerEnergy[i]; | |
120 | fZN2TowerEnergy[i] = zdc.fZN2TowerEnergy[i]; | |
121 | fZP1TowerEnergy[i] = zdc.fZP1TowerEnergy[i]; | |
122 | fZP2TowerEnergy[i] = zdc.fZP2TowerEnergy[i]; | |
123 | fZN1TowerEnergyLR[i] = zdc.fZN1TowerEnergyLR[i]; | |
124 | fZN2TowerEnergyLR[i] = zdc.fZN2TowerEnergyLR[i]; | |
125 | fZP1TowerEnergyLR[i] = zdc.fZP1TowerEnergyLR[i]; | |
126 | fZP2TowerEnergyLR[i] = zdc.fZP2TowerEnergyLR[i]; | |
127 | } | |
128 | // | |
129 | fZDCParticipants = zdc.fZDCParticipants; | |
130 | fZDCPartSideA = zdc.fZDCPartSideA; | |
131 | fZDCPartSideC = zdc.fZDCPartSideC; | |
132 | fImpactParameter = zdc.fImpactParameter; | |
133 | fImpactParamSideA = zdc.fImpactParamSideA; | |
134 | fImpactParamSideC = zdc.fImpactParamSideC; | |
135 | // | |
136 | for(Int_t i=0; i<2; i++){ | |
137 | fZNACentrCoord[i] = zdc.fZNACentrCoord[i]; | |
138 | fZNCCentrCoord[i] = zdc.fZNCCentrCoord[i]; | |
139 | } | |
140 | // | |
141 | fESDQuality = zdc.fESDQuality; | |
142 | for(Int_t i=0; i<32; i++){ | |
143 | fVMEScaler[i] = zdc.fVMEScaler[i]; | |
144 | for(Int_t y=0; y<4; y++){ | |
145 | fZDCTDCData[i][y] = zdc.fZDCTDCData[i][y]; | |
146 | fZDCTDCCorrected[i][y] = zdc.fZDCTDCCorrected[i][y]; | |
147 | } | |
148 | } | |
149 | } | |
150 | return *this; | |
151 | } | |
152 | ||
153 | //______________________________________________________________________________ | |
154 | void AliESDZDC::Copy(TObject &obj) const { | |
155 | ||
156 | // this overwrites the virtual TOBject::Copy() | |
157 | // to allow run time copying without casting | |
158 | // in AliESDEvent | |
159 | ||
160 | if(this==&obj)return; | |
161 | AliESDZDC *robj = dynamic_cast<AliESDZDC*>(&obj); | |
162 | if(!robj)return; // not an AliESDZDC | |
163 | *robj = *this; | |
164 | ||
165 | } | |
166 | ||
167 | ||
168 | //______________________________________________________________________________ | |
169 | void AliESDZDC::Reset() | |
170 | { | |
171 | // reset all data members | |
172 | fZDCN1Energy=0; | |
173 | fZDCP1Energy=0; | |
174 | fZDCN2Energy=0; | |
175 | fZDCP2Energy=0; | |
176 | fZDCEMEnergy=0; | |
177 | fZDCEMEnergy1=0; | |
178 | for(Int_t i=0; i<5; i++){ | |
179 | fZN1TowerEnergy[i] = fZN2TowerEnergy[i] = 0.; | |
180 | fZP1TowerEnergy[i] = fZP2TowerEnergy[i] = 0.; | |
181 | fZN1TowerEnergyLR[i] = fZN2TowerEnergyLR[i] = 0.; | |
182 | fZP1TowerEnergyLR[i] = fZP2TowerEnergyLR[i] = 0.; | |
183 | } | |
184 | fZDCParticipants=0; | |
185 | fZDCPartSideA=0; | |
186 | fZDCPartSideC=0; | |
187 | fImpactParameter=0; | |
188 | fImpactParamSideA=0; | |
189 | fImpactParamSideC=0; | |
190 | for(Int_t i=0; i<2; i++){ | |
191 | fZNACentrCoord[i] = fZNCCentrCoord[i] = 0.; | |
192 | } | |
193 | fESDQuality=0; | |
194 | for(Int_t i=0; i<32; i++){ | |
195 | fVMEScaler[i] = 0; | |
196 | for(Int_t y=0; y<4; y++){ | |
197 | fZDCTDCData[i][y] = 0; | |
198 | fZDCTDCCorrected[i][y] = 0.; | |
199 | } | |
200 | } | |
201 | } | |
202 | ||
203 | //______________________________________________________________________________ | |
204 | void AliESDZDC::Print(const Option_t *) const | |
205 | { | |
206 | // Print ESD for the ZDC | |
207 | printf(" ### ZDC energies: \n"); | |
208 | printf("\n \t E_ZNC = %1.2f (%1.2f+%1.2f+%1.2f+%1.2f+%1.2f) GeV \n \t E_ZNA = %1.2f (%1.2f+%1.2f+%1.2f+%1.2f+%1.2f) GeV\n" | |
209 | " \t E_ZPC = %1.2f GeV E_ZPA = %1.2f GeV" | |
210 | "\n E_ZEM1 = %1.2f GeV, E_ZEM2 = %1.2f GeV\n \t Npart = %d, b = %1.2f fm\n", | |
211 | fZDCN1Energy, fZN1TowerEnergy[0], fZN1TowerEnergy[1], | |
212 | fZN1TowerEnergy[2], fZN1TowerEnergy[3], fZN1TowerEnergy[4], | |
213 | fZDCN2Energy,fZN2TowerEnergy[0], fZN2TowerEnergy[1], | |
214 | fZN2TowerEnergy[2], fZN2TowerEnergy[3], fZN2TowerEnergy[4], | |
215 | fZDCP1Energy,fZDCP2Energy, fZDCEMEnergy, fZDCEMEnergy1, | |
216 | fZDCParticipants,fImpactParameter); | |
217 | // | |
218 | /*printf(" ### VMEScaler (!=0): \n"); | |
219 | for(Int_t i=0; i<32; i++) if(fVMEScaler[i]!=0) printf("\t %d \n",fVMEScaler[i]); | |
220 | printf("\n"); | |
221 | // | |
222 | printf(" ### TDCData (!=0): \n"); | |
223 | for(Int_t i=0; i<32; i++){ | |
224 | for(Int_t j=0; j<4; j++) | |
225 | if(TMath::Abs(fZDCTDCCorrected[i][j])>1e-4) printf("\t %1.0f \n",fZDCTDCCorrected[i][j]); | |
226 | }*/ | |
227 | printf("\n"); | |
228 | } | |
229 | ||
230 | //______________________________________________________________________________ | |
231 | Bool_t AliESDZDC::GetZNCentroidInPbPb(Float_t beamEne, Double_t centrZNC[2], Double_t centrZNA[2]) | |
232 | { | |
233 | // Provide coordinates of centroid over ZN (side C) front face | |
234 | if(beamEne==0){ | |
235 | printf(" ZDC centroid in PbPb can't be calculated with E_beam = 0 !!!\n"); | |
236 | for(Int_t jj=0; jj<2; jj++) fZNCCentrCoord[jj] = 999.; | |
237 | return kFALSE; | |
238 | } | |
239 | ||
240 | const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75}; | |
241 | const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75}; | |
242 | const Float_t alpha=0.395; | |
243 | Float_t numXZNC=0., numYZNC=0., denZNC=0., cZNC, wZNC; | |
244 | Float_t numXZNA=0., numYZNA=0., denZNA=0., cZNA, wZNA; | |
245 | // | |
246 | for(Int_t i=0; i<4; i++){ | |
247 | if(fZN1TowerEnergy[i+1]>0.) { | |
248 | wZNC = TMath::Power(fZN1TowerEnergy[i+1], alpha); | |
249 | numXZNC += x[i]*wZNC; | |
250 | numYZNC += y[i]*wZNC; | |
251 | denZNC += wZNC; | |
252 | } | |
253 | if(fZN2TowerEnergy[i+1]>0.) { | |
254 | wZNA = TMath::Power(fZN2TowerEnergy[i+1], alpha); | |
255 | numXZNA += x[i]*wZNA; | |
256 | numYZNA += y[i]*wZNA; | |
257 | denZNA += wZNA; | |
258 | } | |
259 | } | |
260 | // | |
261 | if(denZNC!=0){ | |
262 | Float_t nSpecnC = fZDCN1Energy/beamEne; | |
263 | cZNC = 1.89358-0.71262/(nSpecnC+0.71789); | |
264 | fZNCCentrCoord[0] = cZNC*numXZNC/denZNC; | |
265 | fZNCCentrCoord[1] = cZNC*numYZNC/denZNC; | |
266 | } | |
267 | else{ | |
268 | fZNCCentrCoord[0] = fZNCCentrCoord[1] = 999.; | |
269 | } | |
270 | if(denZNA!=0){ | |
271 | Float_t nSpecnA = fZDCN2Energy/beamEne; | |
272 | cZNA = 1.89358-0.71262/(nSpecnA+0.71789); | |
273 | fZNACentrCoord[0] = cZNA*numXZNA/denZNA; | |
274 | fZNACentrCoord[1] = cZNA*numYZNA/denZNA; | |
275 | } | |
276 | else{ | |
277 | fZNACentrCoord[0] = fZNACentrCoord[1] = 999.; | |
278 | } | |
279 | // | |
280 | for(Int_t il=0; il<2; il++){ | |
281 | centrZNC[il] = fZNCCentrCoord[il]; | |
282 | centrZNA[il] = fZNACentrCoord[il]; | |
283 | } | |
284 | ||
285 | return kTRUE; | |
286 | } | |
287 | ||
288 | //______________________________________________________________________________ | |
289 | Bool_t AliESDZDC::GetZNCentroidInpp(Double_t centrZNC[2], Double_t centrZNA[2]) | |
290 | { | |
291 | // Provide coordinates of centroid over ZN (side C) front face | |
292 | const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75}; | |
293 | const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75}; | |
294 | const Float_t alpha=0.5; | |
295 | Float_t numXZNC=0., numYZNC=0., denZNC=0., wZNC; | |
296 | Float_t numXZNA=0., numYZNA=0., denZNA=0., wZNA; | |
297 | // | |
298 | for(Int_t i=0; i<4; i++){ | |
299 | if(fZN1TowerEnergy[i+1]>0.) { | |
300 | wZNC = TMath::Power(fZN1TowerEnergy[i+1], alpha); | |
301 | numXZNC += x[i]*wZNC; | |
302 | numYZNC += y[i]*wZNC; | |
303 | denZNC += wZNC; | |
304 | } | |
305 | if(fZN2TowerEnergy[i+1]>0.) { | |
306 | wZNA = TMath::Power(fZN2TowerEnergy[i+1], alpha); | |
307 | numXZNA += x[i]*wZNA; | |
308 | numYZNA += y[i]*wZNA; | |
309 | denZNA += wZNA; | |
310 | } | |
311 | } | |
312 | // | |
313 | if(denZNC!=0){ | |
314 | fZNCCentrCoord[0] = numXZNC/denZNC; | |
315 | fZNCCentrCoord[1] = numYZNC/denZNC; | |
316 | } | |
317 | else{ | |
318 | fZNCCentrCoord[0] = fZNCCentrCoord[1] = 999.; | |
319 | } | |
320 | if(denZNA!=0){ | |
321 | fZNACentrCoord[0] = numXZNA/denZNA; | |
322 | fZNACentrCoord[1] = numYZNA/denZNA; | |
323 | } | |
324 | else{ | |
325 | fZNACentrCoord[0] = fZNACentrCoord[1] = 999.; | |
326 | } | |
327 | // | |
328 | for(Int_t il=0; il<2; il++){ | |
329 | centrZNC[il] = fZNCCentrCoord[il]; | |
330 | centrZNA[il] = fZNACentrCoord[il]; | |
331 | } | |
332 | ||
333 | return kTRUE; | |
334 | } |