1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
17 //-------------------------------------------------------------------------
18 // Implementation of Class AliESDZDC
19 // This is a class that summarizes the ZDC data
21 // Origin: Christian Klein-Boesing, CERN, Christian.Klein-Boesing@cern.ch
22 //-------------------------------------------------------------------------
26 #include "AliESDZDC.h"
30 //______________________________________________________________________________
31 AliESDZDC::AliESDZDC() :
54 for(Int_t i=0; i<5; i++){
55 fZN1TowerEnergy[i] = fZN2TowerEnergy[i] = 0.;
56 fZP1TowerEnergy[i] = fZP2TowerEnergy[i] = 0.;
57 fZN1TowerEnergyLR[i] = fZN2TowerEnergyLR[i] = 0.;
58 fZP1TowerEnergyLR[i] = fZP2TowerEnergyLR[i] = 0.;
60 for(Int_t i=0; i<2; i++){
61 fZNACentrCoord[i] = fZNCCentrCoord[i] = 0.;
63 for(Int_t i=0; i<32; i++){
65 for(Int_t y=0; y<4; y++){
67 fZDCTDCCorrected[i][y]=0.;
72 //______________________________________________________________________________
73 AliESDZDC::AliESDZDC(const AliESDZDC& zdc) :
75 fZDCN1Energy(zdc.fZDCN1Energy),
76 fZDCP1Energy(zdc.fZDCP1Energy),
77 fZDCN2Energy(zdc.fZDCN2Energy),
78 fZDCP2Energy(zdc.fZDCP2Energy),
79 fZDCEMEnergy(zdc.fZDCEMEnergy),
80 fZDCEMEnergy1(zdc.fZDCEMEnergy1),
81 fZDCParticipants(zdc.fZDCParticipants),
82 fZDCPartSideA(zdc.fZDCPartSideA),
83 fZDCPartSideC(zdc.fZDCPartSideC),
84 fImpactParameter(zdc.fImpactParameter),
85 fImpactParamSideA(zdc.fImpactParamSideA),
86 fImpactParamSideC(zdc.fImpactParamSideC),
87 fESDQuality(zdc.fESDQuality),
88 fZNCTDChit(zdc.fZNCTDChit),
89 fZNATDChit(zdc.fZNATDChit),
90 fZPCTDChit(zdc.fZPCTDChit),
91 fZPATDChit(zdc.fZPATDChit),
92 fZEM1TDChit(zdc.fZEM1TDChit),
93 fZEM2TDChit(zdc.fZEM2TDChit)
97 for(Int_t i=0; i<5; i++){
98 fZN1TowerEnergy[i] = zdc.fZN1TowerEnergy[i];
99 fZN2TowerEnergy[i] = zdc.fZN2TowerEnergy[i];
100 fZP1TowerEnergy[i] = zdc.fZP1TowerEnergy[i];
101 fZP2TowerEnergy[i] = zdc.fZP2TowerEnergy[i];
102 fZN1TowerEnergyLR[i] = zdc.fZN1TowerEnergyLR[i];
103 fZN2TowerEnergyLR[i] = zdc.fZN2TowerEnergyLR[i];
104 fZP1TowerEnergyLR[i] = zdc.fZP1TowerEnergyLR[i];
105 fZP2TowerEnergyLR[i] = zdc.fZP2TowerEnergyLR[i];
107 for(Int_t i=0; i<2; i++){
108 fZNACentrCoord[i] = zdc.fZNACentrCoord[i];
109 fZNCCentrCoord[i] = zdc.fZNCCentrCoord[i];
111 for(Int_t i=0; i<32; i++){
112 fVMEScaler[i] = zdc.fVMEScaler[i];
113 for(Int_t y=0; y<4; y++){
114 fZDCTDCData[i][y] = zdc.fZDCTDCData[i][y];
115 fZDCTDCCorrected[i][y] = zdc.fZDCTDCCorrected[i][y];
120 //______________________________________________________________________________
121 AliESDZDC& AliESDZDC::operator=(const AliESDZDC&zdc)
123 // assigment operator
125 AliVZDC::operator=(zdc);
126 fZDCN1Energy = zdc.fZDCN1Energy;
127 fZDCP1Energy = zdc.fZDCP1Energy;
128 fZDCN2Energy = zdc.fZDCN2Energy;
129 fZDCP2Energy = zdc.fZDCP2Energy;
130 fZDCEMEnergy = zdc.fZDCEMEnergy;
131 fZDCEMEnergy1 = zdc.fZDCEMEnergy1;
132 for(Int_t i=0; i<5; i++){
133 fZN1TowerEnergy[i] = zdc.fZN1TowerEnergy[i];
134 fZN2TowerEnergy[i] = zdc.fZN2TowerEnergy[i];
135 fZP1TowerEnergy[i] = zdc.fZP1TowerEnergy[i];
136 fZP2TowerEnergy[i] = zdc.fZP2TowerEnergy[i];
137 fZN1TowerEnergyLR[i] = zdc.fZN1TowerEnergyLR[i];
138 fZN2TowerEnergyLR[i] = zdc.fZN2TowerEnergyLR[i];
139 fZP1TowerEnergyLR[i] = zdc.fZP1TowerEnergyLR[i];
140 fZP2TowerEnergyLR[i] = zdc.fZP2TowerEnergyLR[i];
143 fZDCParticipants = zdc.fZDCParticipants;
144 fZDCPartSideA = zdc.fZDCPartSideA;
145 fZDCPartSideC = zdc.fZDCPartSideC;
146 fImpactParameter = zdc.fImpactParameter;
147 fImpactParamSideA = zdc.fImpactParamSideA;
148 fImpactParamSideC = zdc.fImpactParamSideC;
150 for(Int_t i=0; i<2; i++){
151 fZNACentrCoord[i] = zdc.fZNACentrCoord[i];
152 fZNCCentrCoord[i] = zdc.fZNCCentrCoord[i];
155 fESDQuality = zdc.fESDQuality;
156 for(Int_t i=0; i<32; i++){
157 fVMEScaler[i] = zdc.fVMEScaler[i];
158 for(Int_t y=0; y<4; y++){
159 fZDCTDCData[i][y] = zdc.fZDCTDCData[i][y];
160 fZDCTDCCorrected[i][y] = zdc.fZDCTDCCorrected[i][y];
164 fZNCTDChit = zdc.fZNCTDChit;
165 fZNATDChit = zdc.fZNATDChit;
166 fZPCTDChit = zdc.fZPCTDChit;
167 fZPATDChit = zdc.fZPATDChit;
168 fZEM1TDChit = zdc.fZEM1TDChit;
169 fZEM2TDChit = zdc.fZEM2TDChit;
174 //______________________________________________________________________________
175 void AliESDZDC::Copy(TObject &obj) const {
177 // this overwrites the virtual TOBject::Copy()
178 // to allow run time copying without casting
181 if(this==&obj)return;
182 AliESDZDC *robj = dynamic_cast<AliESDZDC*>(&obj);
183 if(!robj)return; // not an AliESDZDC
189 //______________________________________________________________________________
190 void AliESDZDC::Reset()
192 // reset all data members
199 for(Int_t i=0; i<5; i++){
200 fZN1TowerEnergy[i] = fZN2TowerEnergy[i] = 0.;
201 fZP1TowerEnergy[i] = fZP2TowerEnergy[i] = 0.;
202 fZN1TowerEnergyLR[i] = fZN2TowerEnergyLR[i] = 0.;
203 fZP1TowerEnergyLR[i] = fZP2TowerEnergyLR[i] = 0.;
211 for(Int_t i=0; i<2; i++){
212 fZNACentrCoord[i] = fZNCCentrCoord[i] = 0.;
215 for(Int_t i=0; i<32; i++){
217 for(Int_t y=0; y<4; y++){
218 fZDCTDCData[i][y] = 0;
219 fZDCTDCCorrected[i][y] = 0.;
226 fZEM1TDChit = kFALSE;
227 fZEM2TDChit = kFALSE;
231 //______________________________________________________________________________
232 void AliESDZDC::Print(const Option_t *) const
234 // Print ESD for the ZDC
235 printf(" ### ZDC energies: \n");
236 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"
237 " \t E_ZPC = %1.2f GeV E_ZPA = %1.2f GeV"
238 "\n E_ZEM1 = %1.2f GeV, E_ZEM2 = %1.2f GeV\n \t Npart = %d, b = %1.2f fm\n",
239 fZDCN1Energy, fZN1TowerEnergy[0], fZN1TowerEnergy[1],
240 fZN1TowerEnergy[2], fZN1TowerEnergy[3], fZN1TowerEnergy[4],
241 fZDCN2Energy,fZN2TowerEnergy[0], fZN2TowerEnergy[1],
242 fZN2TowerEnergy[2], fZN2TowerEnergy[3], fZN2TowerEnergy[4],
243 fZDCP1Energy,fZDCP2Energy, fZDCEMEnergy, fZDCEMEnergy1,
244 fZDCParticipants,fImpactParameter);
246 /*printf(" ### VMEScaler (!=0): \n");
247 for(Int_t i=0; i<32; i++) if(fVMEScaler[i]!=0) printf("\t %d \n",fVMEScaler[i]);
250 printf(" ### TDCData (!=0): \n");
251 for(Int_t i=0; i<32; i++){
252 for(Int_t j=0; j<4; j++)
253 if(TMath::Abs(fZDCTDCCorrected[i][j])>1e-4) printf("\t %1.0f \n",fZDCTDCCorrected[i][j]);
258 //______________________________________________________________________________
259 Bool_t AliESDZDC::GetZNCentroidInPbPb(Float_t beamEne, Double_t centrZNC[2], Double_t centrZNA[2])
261 // Provide coordinates of centroid over ZN (side C) front face
263 printf(" ZDC centroid in PbPb can't be calculated with E_beam = 0 !!!\n");
264 for(Int_t jj=0; jj<2; jj++) fZNCCentrCoord[jj] = 999.;
268 const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
269 const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
270 const Float_t alpha=0.395;
271 Float_t numXZNC=0., numYZNC=0., denZNC=0., cZNC, wZNC;
272 Float_t numXZNA=0., numYZNA=0., denZNA=0., cZNA, wZNA;
274 for(Int_t i=0; i<4; i++){
275 if(fZN1TowerEnergy[i+1]>0.) {
276 wZNC = TMath::Power(fZN1TowerEnergy[i+1], alpha);
277 numXZNC += x[i]*wZNC;
278 numYZNC += y[i]*wZNC;
281 if(fZN2TowerEnergy[i+1]>0.) {
282 wZNA = TMath::Power(fZN2TowerEnergy[i+1], alpha);
283 numXZNA += x[i]*wZNA;
284 numYZNA += y[i]*wZNA;
290 Float_t nSpecnC = fZDCN1Energy/beamEne;
291 cZNC = 1.89358-0.71262/(nSpecnC+0.71789);
292 fZNCCentrCoord[0] = cZNC*numXZNC/denZNC;
293 fZNCCentrCoord[1] = cZNC*numYZNC/denZNC;
296 fZNCCentrCoord[0] = fZNCCentrCoord[1] = 999.;
299 Float_t nSpecnA = fZDCN2Energy/beamEne;
300 cZNA = 1.89358-0.71262/(nSpecnA+0.71789);
301 fZNACentrCoord[0] = cZNA*numXZNA/denZNA;
302 fZNACentrCoord[1] = cZNA*numYZNA/denZNA;
305 fZNACentrCoord[0] = fZNACentrCoord[1] = 999.;
308 for(Int_t il=0; il<2; il++){
309 centrZNC[il] = fZNCCentrCoord[il];
310 centrZNA[il] = fZNACentrCoord[il];
316 //______________________________________________________________________________
317 Bool_t AliESDZDC::GetZNCentroidInpp(Double_t centrZNC[2], Double_t centrZNA[2])
319 // Provide coordinates of centroid over ZN (side C) front face
320 const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
321 const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
322 const Float_t alpha=0.5;
323 Float_t numXZNC=0., numYZNC=0., denZNC=0., wZNC;
324 Float_t numXZNA=0., numYZNA=0., denZNA=0., wZNA;
326 for(Int_t i=0; i<4; i++){
327 if(fZN1TowerEnergy[i+1]>0.) {
328 wZNC = TMath::Power(fZN1TowerEnergy[i+1], alpha);
329 numXZNC += x[i]*wZNC;
330 numYZNC += y[i]*wZNC;
333 if(fZN2TowerEnergy[i+1]>0.) {
334 wZNA = TMath::Power(fZN2TowerEnergy[i+1], alpha);
335 numXZNA += x[i]*wZNA;
336 numYZNA += y[i]*wZNA;
342 fZNCCentrCoord[0] = numXZNC/denZNC;
343 fZNCCentrCoord[1] = numYZNC/denZNC;
346 fZNCCentrCoord[0] = fZNCCentrCoord[1] = 999.;
349 fZNACentrCoord[0] = numXZNA/denZNA;
350 fZNACentrCoord[1] = numYZNA/denZNA;
353 fZNACentrCoord[0] = fZNACentrCoord[1] = 999.;
356 for(Int_t il=0; il<2; il++){
357 centrZNC[il] = fZNCCentrCoord[il];
358 centrZNA[il] = fZNACentrCoord[il];