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++) fVMEScaler[i]=0;
59 //______________________________________________________________________________
60 AliESDZDC::AliESDZDC(const AliESDZDC& zdc) :
62 fZDCN1Energy(zdc.fZDCN1Energy),
63 fZDCP1Energy(zdc.fZDCP1Energy),
64 fZDCN2Energy(zdc.fZDCN2Energy),
65 fZDCP2Energy(zdc.fZDCP2Energy),
66 fZDCEMEnergy(zdc.fZDCEMEnergy),
67 fZDCEMEnergy1(zdc.fZDCEMEnergy1),
68 fZDCParticipants(zdc.fZDCParticipants),
69 fZDCPartSideA(zdc.fZDCPartSideA),
70 fZDCPartSideC(zdc.fZDCPartSideC),
71 fImpactParameter(zdc.fImpactParameter),
72 fImpactParamSideA(zdc.fImpactParamSideA),
73 fImpactParamSideC(zdc.fImpactParamSideC),
74 fESDQuality(zdc.fESDQuality)
77 for(Int_t i=0; i<5; i++){
78 fZN1TowerEnergy[i] = zdc.fZN1TowerEnergy[i];
79 fZN2TowerEnergy[i] = zdc.fZN2TowerEnergy[i];
80 fZP1TowerEnergy[i] = zdc.fZP1TowerEnergy[i];
81 fZP2TowerEnergy[i] = zdc.fZP2TowerEnergy[i];
82 fZN1TowerEnergyLR[i] = zdc.fZN1TowerEnergyLR[i];
83 fZN2TowerEnergyLR[i] = zdc.fZN2TowerEnergyLR[i];
84 fZP1TowerEnergyLR[i] = zdc.fZP1TowerEnergyLR[i];
85 fZP2TowerEnergyLR[i] = zdc.fZP2TowerEnergyLR[i];
87 for(Int_t i=0; i<2; i++){
88 fZNACentrCoord[i] = zdc.fZNACentrCoord[i];
89 fZNCCentrCoord[i] = zdc.fZNCCentrCoord[i];
91 for(Int_t i=0; i<32; i++) fVMEScaler[i] = zdc.fVMEScaler[i];
94 //______________________________________________________________________________
95 AliESDZDC& AliESDZDC::operator=(const AliESDZDC&zdc)
99 TObject::operator=(zdc);
100 fZDCN1Energy = zdc.fZDCN1Energy;
101 fZDCP1Energy = zdc.fZDCP1Energy;
102 fZDCN2Energy = zdc.fZDCN2Energy;
103 fZDCP2Energy = zdc.fZDCP2Energy;
104 fZDCEMEnergy = zdc.fZDCEMEnergy;
105 fZDCEMEnergy1 = zdc.fZDCEMEnergy1;
106 for(Int_t i=0; i<5; i++){
107 fZN1TowerEnergy[i] = zdc.fZN1TowerEnergy[i];
108 fZN2TowerEnergy[i] = zdc.fZN2TowerEnergy[i];
109 fZP1TowerEnergy[i] = zdc.fZP1TowerEnergy[i];
110 fZP2TowerEnergy[i] = zdc.fZP2TowerEnergy[i];
111 fZN1TowerEnergyLR[i] = zdc.fZN1TowerEnergyLR[i];
112 fZN2TowerEnergyLR[i] = zdc.fZN2TowerEnergyLR[i];
113 fZP1TowerEnergyLR[i] = zdc.fZP1TowerEnergyLR[i];
114 fZP2TowerEnergyLR[i] = zdc.fZP2TowerEnergyLR[i];
117 fZDCParticipants = zdc.fZDCParticipants;
118 fZDCPartSideA = zdc.fZDCPartSideA;
119 fZDCPartSideC = zdc.fZDCPartSideC;
120 fImpactParameter = zdc.fImpactParameter;
121 fImpactParamSideA = zdc.fImpactParamSideA;
122 fImpactParamSideC = zdc.fImpactParamSideC;
124 for(Int_t i=0; i<2; i++){
125 fZNACentrCoord[i] = zdc.fZNACentrCoord[i];
126 fZNCCentrCoord[i] = zdc.fZNCCentrCoord[i];
129 fESDQuality = zdc.fESDQuality;
130 for(Int_t i=0; i<32; i++) fVMEScaler[i] = zdc.fVMEScaler[i];
135 //______________________________________________________________________________
136 void AliESDZDC::Copy(TObject &obj) const {
138 // this overwrites the virtual TOBject::Copy()
139 // to allow run time copying without casting
142 if(this==&obj)return;
143 AliESDZDC *robj = dynamic_cast<AliESDZDC*>(&obj);
144 if(!robj)return; // not an AliESDZDC
150 //______________________________________________________________________________
151 void AliESDZDC::Reset()
153 // reset all data members
160 for(Int_t i=0; i<5; i++){
161 fZN1TowerEnergy[i] = fZN2TowerEnergy[i] = 0.;
162 fZP1TowerEnergy[i] = fZP2TowerEnergy[i] = 0.;
163 fZN1TowerEnergyLR[i] = fZN2TowerEnergyLR[i] = 0.;
164 fZP1TowerEnergyLR[i] = fZP2TowerEnergyLR[i] = 0.;
172 for(Int_t i=0; i<2; i++){
173 fZNACentrCoord[i] = fZNCCentrCoord[i] = 0.;
176 for(Int_t i=0; i<32; i++) fVMEScaler[i] = 0;
179 //______________________________________________________________________________
180 void AliESDZDC::Print(const Option_t *) const
182 // Print ESD for the ZDC
183 printf("\n \t E_{ZNC} = %f TeV, E_{ZPC} = %f TeV, E_{ZNA} = %f TeV, E_{ZPA} = %f TeV,"
184 " E_{ZEM} = %f GeV, Npart = %d, b = %1.2f fm\n",
185 fZDCN1Energy/1000.,fZDCP1Energy/1000.,fZDCN2Energy/1000.,fZDCP2Energy/1000.,
186 fZDCEMEnergy+fZDCEMEnergy1, fZDCParticipants,fImpactParameter);
188 printf(" ### fVMEScaler: \n");
189 for(Int_t i=0; i<32; i++) printf("\t datum %d: %d \n",i,fVMEScaler[i]);
193 //______________________________________________________________________________
194 Bool_t AliESDZDC::GetZNCentroidInPbPb(Float_t beamEne, Double_t centrZNC[2], Double_t centrZNA[2])
196 // Provide coordinates of centroid over ZN (side C) front face
198 printf(" ZDC centroid in PbPb can't be calculated with E_beam = 0 !!!\n");
199 for(Int_t jj=0; jj<2; jj++) fZNCCentrCoord[jj] = 999.;
203 const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
204 const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
205 const Float_t alpha=0.395;
206 Float_t numXZNC=0., numYZNC=0., denZNC=0., cZNC, wZNC;
207 Float_t numXZNA=0., numYZNA=0., denZNA=0., cZNA, wZNA;
209 for(Int_t i=0; i<4; i++){
210 if(fZN1TowerEnergy[i+1]>0.) {
211 wZNC = TMath::Power(fZN1TowerEnergy[i+1], alpha);
212 numXZNC += x[i]*wZNC;
213 numYZNC += y[i]*wZNC;
216 if(fZN2TowerEnergy[i+1]>0.) {
217 wZNA = TMath::Power(fZN1TowerEnergy[i+1], alpha);
218 numXZNA += x[i]*wZNA;
219 numYZNA += y[i]*wZNA;
225 Float_t nSpecnC = fZDCN1Energy/beamEne;
226 cZNC = 1.89358-0.71262/(nSpecnC+0.71789);
227 fZNCCentrCoord[0] = cZNC*numXZNC/denZNC;
228 fZNCCentrCoord[1] = cZNC*numYZNC/denZNC;
231 fZNCCentrCoord[0] = fZNCCentrCoord[1] = 999.;
234 Float_t nSpecnA = fZDCN1Energy/beamEne;
235 cZNA = 1.89358-0.71262/(nSpecnA+0.71789);
236 fZNCCentrCoord[0] = cZNA*numXZNA/denZNA;
237 fZNCCentrCoord[1] = cZNA*numYZNA/denZNA;
240 fZNACentrCoord[0] = fZNACentrCoord[1] = 999.;
243 for(Int_t il=0; il<2; il++){
244 centrZNC[il] = fZNCCentrCoord[il];
245 centrZNA[il] = fZNACentrCoord[il];
251 //______________________________________________________________________________
252 Bool_t AliESDZDC::GetZNCentroidInpp(Double_t centrZNC[2], Double_t centrZNA[2])
254 // Provide coordinates of centroid over ZN (side C) front face
255 const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
256 const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
257 const Float_t alpha=0.5;
258 Float_t numXZNC=0., numYZNC=0., denZNC=0., wZNC;
259 Float_t numXZNA=0., numYZNA=0., denZNA=0., wZNA;
261 for(Int_t i=0; i<4; i++){
262 if(fZN1TowerEnergy[i+1]>0.) {
263 wZNC = TMath::Power(fZN1TowerEnergy[i+1], alpha);
264 numXZNC += x[i]*wZNC;
265 numYZNC += y[i]*wZNC;
268 if(fZN2TowerEnergy[i+1]>0.) {
269 wZNA = TMath::Power(fZN2TowerEnergy[i+1], alpha);
270 numXZNA += x[i]*wZNA;
271 numYZNA += y[i]*wZNA;
277 fZNCCentrCoord[0] = numXZNC/denZNC;
278 fZNCCentrCoord[1] = numYZNC/denZNC;
281 fZNCCentrCoord[0] = fZNCCentrCoord[1] = 999.;
284 fZNACentrCoord[0] = numXZNA/denZNA;
285 fZNACentrCoord[1] = numYZNA/denZNA;
288 fZNACentrCoord[0] = fZNACentrCoord[1] = 999.;
291 for(Int_t il=0; il<2; il++){
292 centrZNC[il] = fZNCCentrCoord[il];
293 centrZNA[il] = fZNACentrCoord[il];