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() :
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.;
53 for(Int_t i=0; i<2; i++){
54 fZNACentrCoord[i] = fZNCCentrCoord[i] = 0.;
56 for(Int_t i=0; i<32; i++){
62 //______________________________________________________________________________
63 AliESDZDC::AliESDZDC(const AliESDZDC& zdc) :
65 fZDCN1Energy(zdc.fZDCN1Energy),
66 fZDCP1Energy(zdc.fZDCP1Energy),
67 fZDCN2Energy(zdc.fZDCN2Energy),
68 fZDCP2Energy(zdc.fZDCP2Energy),
69 fZDCEMEnergy(zdc.fZDCEMEnergy),
70 fZDCEMEnergy1(zdc.fZDCEMEnergy1),
71 fZDCParticipants(zdc.fZDCParticipants),
72 fZDCPartSideA(zdc.fZDCPartSideA),
73 fZDCPartSideC(zdc.fZDCPartSideC),
74 fImpactParameter(zdc.fImpactParameter),
75 fImpactParamSideA(zdc.fImpactParamSideA),
76 fImpactParamSideC(zdc.fImpactParamSideC),
77 fESDQuality(zdc.fESDQuality)
80 for(Int_t i=0; i<5; i++){
81 fZN1TowerEnergy[i] = zdc.fZN1TowerEnergy[i];
82 fZN2TowerEnergy[i] = zdc.fZN2TowerEnergy[i];
83 fZP1TowerEnergy[i] = zdc.fZP1TowerEnergy[i];
84 fZP2TowerEnergy[i] = zdc.fZP2TowerEnergy[i];
85 fZN1TowerEnergyLR[i] = zdc.fZN1TowerEnergyLR[i];
86 fZN2TowerEnergyLR[i] = zdc.fZN2TowerEnergyLR[i];
87 fZP1TowerEnergyLR[i] = zdc.fZP1TowerEnergyLR[i];
88 fZP2TowerEnergyLR[i] = zdc.fZP2TowerEnergyLR[i];
90 for(Int_t i=0; i<2; i++){
91 fZNACentrCoord[i] = zdc.fZNACentrCoord[i];
92 fZNCCentrCoord[i] = zdc.fZNCCentrCoord[i];
94 for(Int_t i=0; i<32; i++){
95 fVMEScaler[i] = zdc.fVMEScaler[i];
96 fZDCTDCData[i] = zdc.fZDCTDCData[i];
100 //______________________________________________________________________________
101 AliESDZDC& AliESDZDC::operator=(const AliESDZDC&zdc)
103 // assigment operator
105 TObject::operator=(zdc);
106 fZDCN1Energy = zdc.fZDCN1Energy;
107 fZDCP1Energy = zdc.fZDCP1Energy;
108 fZDCN2Energy = zdc.fZDCN2Energy;
109 fZDCP2Energy = zdc.fZDCP2Energy;
110 fZDCEMEnergy = zdc.fZDCEMEnergy;
111 fZDCEMEnergy1 = zdc.fZDCEMEnergy1;
112 for(Int_t i=0; i<5; i++){
113 fZN1TowerEnergy[i] = zdc.fZN1TowerEnergy[i];
114 fZN2TowerEnergy[i] = zdc.fZN2TowerEnergy[i];
115 fZP1TowerEnergy[i] = zdc.fZP1TowerEnergy[i];
116 fZP2TowerEnergy[i] = zdc.fZP2TowerEnergy[i];
117 fZN1TowerEnergyLR[i] = zdc.fZN1TowerEnergyLR[i];
118 fZN2TowerEnergyLR[i] = zdc.fZN2TowerEnergyLR[i];
119 fZP1TowerEnergyLR[i] = zdc.fZP1TowerEnergyLR[i];
120 fZP2TowerEnergyLR[i] = zdc.fZP2TowerEnergyLR[i];
123 fZDCParticipants = zdc.fZDCParticipants;
124 fZDCPartSideA = zdc.fZDCPartSideA;
125 fZDCPartSideC = zdc.fZDCPartSideC;
126 fImpactParameter = zdc.fImpactParameter;
127 fImpactParamSideA = zdc.fImpactParamSideA;
128 fImpactParamSideC = zdc.fImpactParamSideC;
130 for(Int_t i=0; i<2; i++){
131 fZNACentrCoord[i] = zdc.fZNACentrCoord[i];
132 fZNCCentrCoord[i] = zdc.fZNCCentrCoord[i];
135 fESDQuality = zdc.fESDQuality;
136 for(Int_t i=0; i<32; i++){
137 fVMEScaler[i] = zdc.fVMEScaler[i];
138 fZDCTDCData[i] = zdc.fZDCTDCData[i];
144 //______________________________________________________________________________
145 void AliESDZDC::Copy(TObject &obj) const {
147 // this overwrites the virtual TOBject::Copy()
148 // to allow run time copying without casting
151 if(this==&obj)return;
152 AliESDZDC *robj = dynamic_cast<AliESDZDC*>(&obj);
153 if(!robj)return; // not an AliESDZDC
159 //______________________________________________________________________________
160 void AliESDZDC::Reset()
162 // reset all data members
169 for(Int_t i=0; i<5; i++){
170 fZN1TowerEnergy[i] = fZN2TowerEnergy[i] = 0.;
171 fZP1TowerEnergy[i] = fZP2TowerEnergy[i] = 0.;
172 fZN1TowerEnergyLR[i] = fZN2TowerEnergyLR[i] = 0.;
173 fZP1TowerEnergyLR[i] = fZP2TowerEnergyLR[i] = 0.;
181 for(Int_t i=0; i<2; i++){
182 fZNACentrCoord[i] = fZNCCentrCoord[i] = 0.;
185 for(Int_t i=0; i<32; i++){
191 //______________________________________________________________________________
192 void AliESDZDC::Print(const Option_t *) const
194 // Print ESD for the ZDC
195 printf("\n \t E_{ZNC} = %f TeV, E_{ZPC} = %f TeV, E_{ZNA} = %f TeV, E_{ZPA} = %f TeV,"
196 " E_{ZEM} = %f GeV, Npart = %d, b = %1.2f fm\n",
197 fZDCN1Energy/1000.,fZDCP1Energy/1000.,fZDCN2Energy/1000.,fZDCP2Energy/1000.,
198 fZDCEMEnergy+fZDCEMEnergy1, fZDCParticipants,fImpactParameter);
200 printf(" ### VMEScaler (!=0): \n");
201 for(Int_t i=0; i<32; i++) if(fVMEScaler[i]!=0) printf("\t %d \n",fVMEScaler[i]);
204 printf(" ### TDCData (!=0): \n");
205 for(Int_t i=0; i<32; i++) if(fZDCTDCData[i]!=0) printf("\t %d \n",fZDCTDCData[i]);
209 //______________________________________________________________________________
210 Bool_t AliESDZDC::GetZNCentroidInPbPb(Float_t beamEne, Double_t centrZNC[2], Double_t centrZNA[2])
212 // Provide coordinates of centroid over ZN (side C) front face
214 printf(" ZDC centroid in PbPb can't be calculated with E_beam = 0 !!!\n");
215 for(Int_t jj=0; jj<2; jj++) fZNCCentrCoord[jj] = 999.;
219 const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
220 const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
221 const Float_t alpha=0.395;
222 Float_t numXZNC=0., numYZNC=0., denZNC=0., cZNC, wZNC;
223 Float_t numXZNA=0., numYZNA=0., denZNA=0., cZNA, wZNA;
225 for(Int_t i=0; i<4; i++){
226 if(fZN1TowerEnergy[i+1]>0.) {
227 wZNC = TMath::Power(fZN1TowerEnergy[i+1], alpha);
228 numXZNC += x[i]*wZNC;
229 numYZNC += y[i]*wZNC;
232 if(fZN2TowerEnergy[i+1]>0.) {
233 wZNA = TMath::Power(fZN2TowerEnergy[i+1], alpha);
234 numXZNA += x[i]*wZNA;
235 numYZNA += y[i]*wZNA;
241 Float_t nSpecnC = fZDCN1Energy/beamEne;
242 cZNC = 1.89358-0.71262/(nSpecnC+0.71789);
243 fZNCCentrCoord[0] = cZNC*numXZNC/denZNC;
244 fZNCCentrCoord[1] = cZNC*numYZNC/denZNC;
247 fZNCCentrCoord[0] = fZNCCentrCoord[1] = 999.;
250 Float_t nSpecnA = fZDCN1Energy/beamEne;
251 cZNA = 1.89358-0.71262/(nSpecnA+0.71789);
252 fZNACentrCoord[0] = cZNA*numXZNA/denZNA;
253 fZNACentrCoord[1] = cZNA*numYZNA/denZNA;
256 fZNACentrCoord[0] = fZNACentrCoord[1] = 999.;
259 for(Int_t il=0; il<2; il++){
260 centrZNC[il] = fZNCCentrCoord[il];
261 centrZNA[il] = fZNACentrCoord[il];
267 //______________________________________________________________________________
268 Bool_t AliESDZDC::GetZNCentroidInpp(Double_t centrZNC[2], Double_t centrZNA[2])
270 // Provide coordinates of centroid over ZN (side C) front face
271 const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
272 const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
273 const Float_t alpha=0.5;
274 Float_t numXZNC=0., numYZNC=0., denZNC=0., wZNC;
275 Float_t numXZNA=0., numYZNA=0., denZNA=0., wZNA;
277 for(Int_t i=0; i<4; i++){
278 if(fZN1TowerEnergy[i+1]>0.) {
279 wZNC = TMath::Power(fZN1TowerEnergy[i+1], alpha);
280 numXZNC += x[i]*wZNC;
281 numYZNC += y[i]*wZNC;
284 if(fZN2TowerEnergy[i+1]>0.) {
285 wZNA = TMath::Power(fZN2TowerEnergy[i+1], alpha);
286 numXZNA += x[i]*wZNA;
287 numYZNA += y[i]*wZNA;
293 fZNCCentrCoord[0] = numXZNC/denZNC;
294 fZNCCentrCoord[1] = numYZNC/denZNC;
297 fZNCCentrCoord[0] = fZNCCentrCoord[1] = 999.;
300 fZNACentrCoord[0] = numXZNA/denZNA;
301 fZNACentrCoord[1] = numYZNA/denZNA;
304 fZNACentrCoord[0] = fZNACentrCoord[1] = 999.;
307 for(Int_t il=0; il<2; il++){
308 centrZNC[il] = fZNCCentrCoord[il];
309 centrZNA[il] = fZNACentrCoord[il];