Line data Source code
1 : /**************************************************************************
2 : * Copyright(c) 1998-2007, 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 : // Class for AOD ZDC data
18 : // Author: Chiara Oppedisano
19 : // Chiara.Oppedisano@cern.ch March 2011
20 : //-------------------------------------------------------------------------
21 :
22 : #include <TMath.h>
23 : #include "AliAODZDC.h"
24 :
25 170 : ClassImp(AliAODZDC)
26 :
27 : AliAODZDC::AliAODZDC() :
28 2 : AliVZDC(),
29 2 : fZNCEnergy(-999.),
30 2 : fZNAEnergy(-999.),
31 2 : fZPCEnergy(-999.),
32 2 : fZPAEnergy(-999.),
33 2 : fZEM1Energy(0.),
34 2 : fZEM2Energy(0.),
35 2 : fZDCParticipants(0),
36 2 : fZDCPartSideA(0),
37 2 : fZDCPartSideC(0),
38 2 : fImpactParameter(0),
39 2 : fImpactParamSideA(0),
40 2 : fImpactParamSideC(0),
41 2 : fZDCTDCSum(0),
42 2 : fZDCTDCDifference(0),
43 2 : fZNCTDC(-999.),
44 2 : fZNATDC(-999.),
45 2 : fZPCTDC(-999.),
46 2 : fZPATDC(-999.),
47 2 : fIsZNAfired(kFALSE),
48 2 : fIsZNCfired(kFALSE),
49 2 : fIsZPAfired(kFALSE),
50 2 : fIsZPCfired(kFALSE)
51 10 : {
52 : // Default constructor
53 24 : for(Int_t i=0; i<5; i++){
54 10 : fZNCTowerEnergy[i] = fZNATowerEnergy[i] = 0.;
55 10 : fZPCTowerEnergy[i] = fZPATowerEnergy[i] = 0.;
56 10 : fZNCTowerEnergyLR[i] = fZNATowerEnergyLR[i] = 0.;
57 10 : fZPCTowerEnergyLR[i] = fZPATowerEnergyLR[i] = 0.;
58 : }
59 20 : for(Int_t i=0; i<4; i++){
60 8 : fZNCTDCm[i] = fZNATDCm[i] = fZPCTDCm[i] = fZPATDCm[i] = -999.;
61 : }
62 4 : }
63 :
64 : //__________________________________________________________________________
65 : AliAODZDC::AliAODZDC(const AliAODZDC &zdcAOD) :
66 0 : AliVZDC(zdcAOD),
67 0 : fZNCEnergy(zdcAOD.fZNCEnergy),
68 0 : fZNAEnergy(zdcAOD.fZNAEnergy),
69 0 : fZPCEnergy(zdcAOD.fZPCEnergy),
70 0 : fZPAEnergy(zdcAOD.fZPAEnergy),
71 0 : fZEM1Energy(zdcAOD.fZEM1Energy),
72 0 : fZEM2Energy(zdcAOD.fZEM2Energy),
73 0 : fZDCParticipants(zdcAOD.fZDCParticipants),
74 0 : fZDCPartSideA(zdcAOD.fZDCPartSideA),
75 0 : fZDCPartSideC(zdcAOD.fZDCPartSideC),
76 0 : fImpactParameter(zdcAOD.fImpactParameter),
77 0 : fImpactParamSideA(zdcAOD.fImpactParamSideA),
78 0 : fImpactParamSideC(zdcAOD.fImpactParamSideC),
79 0 : fZDCTDCSum(zdcAOD.fZDCTDCSum),
80 0 : fZDCTDCDifference(zdcAOD.fZDCTDCDifference),
81 0 : fZNCTDC(zdcAOD.fZNCTDC),
82 0 : fZNATDC(zdcAOD.fZNATDC),
83 0 : fZPCTDC(zdcAOD.fZPCTDC),
84 0 : fZPATDC(zdcAOD.fZPATDC),
85 0 : fIsZNAfired(zdcAOD.fIsZNAfired),
86 0 : fIsZNCfired(zdcAOD.fIsZNCfired),
87 0 : fIsZPAfired(zdcAOD.fIsZPAfired),
88 0 : fIsZPCfired(zdcAOD.fIsZPCfired)
89 :
90 0 : {
91 : // Constructor
92 0 : for(Int_t i=0; i<5; i++){
93 0 : fZNCTowerEnergy[i] = zdcAOD.fZNCTowerEnergy[i];
94 0 : fZNATowerEnergy[i] = zdcAOD.fZNATowerEnergy[i];
95 0 : fZPCTowerEnergy[i] = zdcAOD.fZPCTowerEnergy[i];
96 0 : fZPATowerEnergy[i] = zdcAOD.fZPATowerEnergy[i];
97 0 : fZNCTowerEnergyLR[i] = zdcAOD.fZNCTowerEnergyLR[i];
98 0 : fZNATowerEnergyLR[i] = zdcAOD.fZNATowerEnergyLR[i];
99 0 : fZPCTowerEnergyLR[i] = zdcAOD.fZPCTowerEnergyLR[i];
100 0 : fZPATowerEnergyLR[i] = zdcAOD.fZPATowerEnergyLR[i];
101 : }
102 0 : for(Int_t i=0; i<4; i++){
103 0 : fZNCTDCm[i] = zdcAOD.fZNCTDCm[i];
104 0 : fZNATDCm[i] = zdcAOD.fZNATDCm[i];
105 0 : fZPCTDCm[i] = zdcAOD.fZPCTDCm[i];
106 0 : fZPATDCm[i] = zdcAOD.fZPATDCm[i];
107 : }
108 0 : }
109 :
110 : //__________________________________________________________________________
111 : AliAODZDC& AliAODZDC::operator=(const AliAODZDC& zdcAOD)
112 : {
113 : // Assignment operator
114 : //
115 0 : if(this!=&zdcAOD) {
116 0 : TObject::operator=(zdcAOD);
117 0 : fZNCEnergy = zdcAOD.fZNCEnergy;
118 0 : fZNAEnergy = zdcAOD.fZNAEnergy;
119 0 : fZPCEnergy = zdcAOD.fZPCEnergy;
120 0 : fZPAEnergy = zdcAOD.fZPAEnergy;
121 0 : fZEM1Energy = zdcAOD.fZEM1Energy;
122 0 : fZEM2Energy = zdcAOD.fZEM2Energy;
123 0 : for(Int_t i=0; i<5; i++){
124 0 : fZNCTowerEnergy[i] = zdcAOD.fZNCTowerEnergy[i];
125 0 : fZNATowerEnergy[i] = zdcAOD.fZNATowerEnergy[i];
126 0 : fZPCTowerEnergy[i] = zdcAOD.fZPCTowerEnergy[i];
127 0 : fZPATowerEnergy[i] = zdcAOD.fZPATowerEnergy[i];
128 0 : fZNCTowerEnergyLR[i] = zdcAOD.fZNCTowerEnergyLR[i];
129 0 : fZNATowerEnergyLR[i] = zdcAOD.fZNATowerEnergyLR[i];
130 0 : fZPCTowerEnergyLR[i] = zdcAOD.fZPCTowerEnergyLR[i];
131 0 : fZPATowerEnergyLR[i] = zdcAOD.fZPATowerEnergyLR[i];
132 : }
133 : //
134 0 : fZDCParticipants = zdcAOD.fZDCParticipants;
135 0 : fZDCPartSideA = zdcAOD.fZDCPartSideA;
136 0 : fZDCPartSideC = zdcAOD.fZDCPartSideC;
137 0 : fImpactParameter = zdcAOD.fImpactParameter;
138 0 : fImpactParamSideA = zdcAOD.fImpactParamSideA;
139 0 : fImpactParamSideC = zdcAOD.fImpactParamSideC;
140 : //
141 0 : fZDCTDCSum = zdcAOD.fZDCTDCSum;
142 0 : fZDCTDCDifference = zdcAOD.fZDCTDCDifference;
143 0 : fZNCTDC = zdcAOD.fZNCTDC;
144 0 : fZNATDC = zdcAOD.fZNATDC;
145 0 : fZPCTDC = zdcAOD.fZPCTDC;
146 0 : fZPATDC = zdcAOD.fZPATDC;
147 0 : for(Int_t i=0; i<4; i++){
148 0 : fZNCTDCm[i] = zdcAOD.fZNCTDCm[i];
149 0 : fZNATDCm[i] = zdcAOD.fZNATDCm[i];
150 0 : fZPCTDCm[i] = zdcAOD.fZPCTDCm[i];
151 0 : fZPATDCm[i] = zdcAOD.fZPATDCm[i];
152 : }
153 0 : fIsZNAfired = zdcAOD.fIsZNAfired;
154 0 : fIsZNCfired = zdcAOD.fIsZNCfired;
155 0 : fIsZPAfired = zdcAOD.fIsZPAfired;
156 0 : fIsZPCfired = zdcAOD.fIsZPCfired;
157 0 : }
158 0 : return *this;
159 : }
160 :
161 : //______________________________________________________________________________
162 : void AliAODZDC::SetZNCTowers(const Double_t value[5], const Double_t valueLR[5])
163 : {
164 : // Sets ZNC towers
165 104 : for(Int_t i=0; i<5; i++){
166 40 : fZNCTowerEnergy[i] = value[i];
167 40 : fZNCTowerEnergyLR[i] = valueLR[i];
168 : }
169 8 : }
170 :
171 : //______________________________________________________________________________
172 : void AliAODZDC::SetZNATowers(const Double_t value[5], const Double_t valueLR[5])
173 : {
174 : // Sets ZNA towers
175 104 : for(Int_t i=0; i<5; i++){
176 40 : fZNATowerEnergy[i] = value[i];
177 40 : fZNATowerEnergyLR[i] = valueLR[i];
178 : }
179 8 : }
180 :
181 : //______________________________________________________________________________
182 : void AliAODZDC::SetZPCTowers(const Double_t value[5], const Double_t valueLR[5])
183 : {
184 : // Sets ZPC towers
185 104 : for(Int_t i=0; i<5; i++){
186 40 : fZPCTowerEnergy[i] = value[i];
187 40 : fZPCTowerEnergyLR[i] = valueLR[i];
188 : }
189 8 : }
190 :
191 : //______________________________________________________________________________
192 : void AliAODZDC::SetZPATowers(const Double_t value[5], const Double_t valueLR[5])
193 : {
194 : // Sets ZPA towers
195 104 : for(Int_t i=0; i<5; i++){
196 40 : fZPATowerEnergy[i] = value[i];
197 40 : fZPATowerEnergyLR[i] = valueLR[i];
198 : }
199 8 : }
200 :
201 : //______________________________________________________________________________
202 : Bool_t AliAODZDC::GetZNCentroidInPbPb(Float_t beamEne, Double_t centrZNC[2], Double_t centrZNA[2])
203 : {
204 : // Provides coordinates of centroid over ZN (side C) front face in PbPb
205 0 : if(beamEne==0){
206 0 : printf(" ZDC centroid in PbPb can't be calculated with E_beam = 0 !!!\n");
207 : //for(Int_t jj=0; jj<2; jj++) fZNCCentrCoord[jj] = 999.;
208 0 : return kFALSE;
209 : }
210 :
211 : const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
212 : const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
213 : const Float_t alpha=0.395;
214 : Float_t numXZNC=0., numYZNC=0., denZNC=0., cZNC, wZNC;
215 : Float_t numXZNA=0., numYZNA=0., denZNA=0., cZNA, wZNA;
216 : Float_t zncEnergy=0., znaEnergy=0.;
217 : //
218 0 : for(Int_t i=0; i<5; i++){
219 0 : zncEnergy += fZNCTowerEnergy[i];
220 0 : znaEnergy += fZNATowerEnergy[i];
221 : }
222 0 : for(Int_t i=0; i<4; i++){
223 0 : if(fZNCTowerEnergy[i+1]>0.) {
224 0 : wZNC = TMath::Power(fZNCTowerEnergy[i+1], alpha);
225 0 : numXZNC += x[i]*wZNC;
226 0 : numYZNC += y[i]*wZNC;
227 0 : denZNC += wZNC;
228 0 : }
229 0 : if(fZNATowerEnergy[i+1]>0.) {
230 0 : wZNA = TMath::Power(fZNATowerEnergy[i+1], alpha);
231 0 : numXZNA += x[i]*wZNA;
232 0 : numYZNA += y[i]*wZNA;
233 0 : denZNA += wZNA;
234 0 : }
235 : }
236 : //
237 0 : if(denZNC!=0){
238 0 : Float_t nSpecnC = zncEnergy/beamEne;
239 0 : cZNC = 1.89358-0.71262/(nSpecnC+0.71789);
240 0 : centrZNC[0] = cZNC*numXZNC/denZNC;
241 0 : centrZNC[1] = cZNC*numYZNC/denZNC;
242 0 : }
243 : else{
244 0 : centrZNC[0] = centrZNC[1] = 999.;
245 : }
246 0 : if(denZNA!=0){
247 0 : Float_t nSpecnA = znaEnergy/beamEne;
248 0 : cZNA = 1.89358-0.71262/(nSpecnA+0.71789);
249 0 : centrZNA[0] = cZNA*numXZNA/denZNA;
250 0 : centrZNA[1] = cZNA*numYZNA/denZNA;
251 0 : }
252 : else{
253 0 : centrZNA[0] = centrZNA[1] = 999.;
254 : }
255 :
256 :
257 : return kTRUE;
258 0 : }
259 :
260 : //______________________________________________________________________________
261 : Bool_t AliAODZDC::GetZNCentroidInpp(Double_t centrZNC[2], Double_t centrZNA[2])
262 : {
263 : // Provides coordinates of centroid over ZN (side C) front face in pp
264 : const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
265 : const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
266 : const Float_t alpha=0.5;
267 : Float_t numXZNC=0., numYZNC=0., denZNC=0., wZNC;
268 : Float_t numXZNA=0., numYZNA=0., denZNA=0., wZNA;
269 : //
270 0 : for(Int_t i=0; i<4; i++){
271 0 : if(fZNCTowerEnergy[i+1]>0.) {
272 0 : wZNC = TMath::Power(fZNCTowerEnergy[i+1], alpha);
273 0 : numXZNC += x[i]*wZNC;
274 0 : numYZNC += y[i]*wZNC;
275 0 : denZNC += wZNC;
276 0 : }
277 0 : if(fZNATowerEnergy[i+1]>0.) {
278 0 : wZNA = TMath::Power(fZNATowerEnergy[i+1], alpha);
279 0 : numXZNA += x[i]*wZNA;
280 0 : numYZNA += y[i]*wZNA;
281 0 : denZNA += wZNA;
282 0 : }
283 : }
284 : //
285 0 : if(denZNC!=0){
286 0 : centrZNC[0] = numXZNC/denZNC;
287 0 : centrZNC[1] = numYZNC/denZNC;
288 0 : }
289 : else{
290 0 : centrZNC[0] = centrZNC[1] = 999.;
291 : }
292 0 : if(denZNA!=0){
293 0 : centrZNA[0] = numXZNA/denZNA;
294 0 : centrZNA[1] = numYZNA/denZNA;
295 0 : }
296 : else{
297 0 : centrZNA[0] = centrZNA[1] = 999.;
298 : }
299 :
300 0 : return kTRUE;
301 : }
302 :
303 : //______________________________________________________________________________
304 : Bool_t AliAODZDC::GetTDCSum(Float_t sum[4])
305 : {
306 : // Provides value(s) != -999 if both ZN are fired
307 0 : for(int i=0; i<4; i++) sum[i] = -999.;
308 : int ind=0;
309 0 : if(IsZNANDfired()){
310 0 : for(Int_t i=0;i<4;++i){
311 0 : if(fZNCTDCm[i]>-999){
312 0 : for(Int_t j=0;j<4;++j){
313 0 : if(fZNATDCm[j]>-999){
314 0 : sum[ind] = fZNCTDCm[i]+fZNATDCm[j];
315 0 : ind++;
316 0 : } // if ZNA[j] is hit
317 : } // Loop over ZNA TDC hits
318 0 : } // if ZNC[i] is hit
319 : } // Loop over ZNC TDC hits
320 0 : return kTRUE;
321 : } // ZN AND
322 0 : else return kFALSE;
323 0 : }
324 :
325 : //______________________________________________________________________________
326 : Bool_t AliAODZDC::GetTDCDiff(Float_t diff[4])
327 : {
328 : // Provides value(s) != -999 if both ZN are fired
329 0 : for(int i=0; i<4; i++) diff[i] = -999.;
330 : int ind=0;
331 0 : if(IsZNANDfired()){
332 0 : for(Int_t i=0;i<4;++i){
333 0 : if(fZNCTDCm[i]>-999){
334 0 : for(Int_t j=0;j<4;++j){
335 0 : if(fZNATDCm[j]>-999){
336 0 : diff[ind] = fZNCTDCm[i]-fZNATDCm[j];
337 0 : ind++;
338 0 : } // if ZNA[j] is hit
339 : } // Loop over ZNA TDC hits
340 0 : } // if ZNC[i] is hit
341 : } // Loop over ZNC TDC hits
342 0 : return kTRUE;
343 : } // ZN AND
344 0 : else return kFALSE;
345 0 : }
|