1 /**************************************************************************
2 * Copyright(c) 1998-2007, 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 **************************************************************************/
16 //-------------------------------------------------------------------------
17 // Class for AOD ZDC data
18 // Author: Chiara Oppedisano
19 // Chiara.Oppedisano@cern.ch March 2011
20 //-------------------------------------------------------------------------
23 #include "AliAODZDC.h"
27 AliAODZDC::AliAODZDC() :
44 for(Int_t i=0; i<5; i++){
45 fZNCTowerEnergy[i] = fZNATowerEnergy[i] = 0.;
46 fZPCTowerEnergy[i] = fZPATowerEnergy[i] = 0.;
47 fZNCTowerEnergyLR[i] = fZNATowerEnergyLR[i] = 0.;
49 //for(Int_t i=0; i<2; i++){
50 // fZNACentrCoord[i] = fZNCCentrCoord[i] = 0.;
54 //__________________________________________________________________________
55 AliAODZDC::AliAODZDC(const AliAODZDC &zdcAOD) :
57 fZNCEnergy(zdcAOD.fZNCEnergy),
58 fZNAEnergy(zdcAOD.fZNAEnergy),
59 fZPCEnergy(zdcAOD.fZPCEnergy),
60 fZPAEnergy(zdcAOD.fZPAEnergy),
61 fZEM1Energy(zdcAOD.fZEM1Energy),
62 fZEM2Energy(zdcAOD.fZEM2Energy),
63 fZDCParticipants(zdcAOD.fZDCParticipants),
64 fZDCPartSideA(zdcAOD.fZDCPartSideA),
65 fZDCPartSideC(zdcAOD.fZDCPartSideC),
66 fImpactParameter(zdcAOD.fImpactParameter),
67 fImpactParamSideA(zdcAOD.fImpactParamSideA),
68 fImpactParamSideC(zdcAOD.fImpactParamSideC),
69 fZDCTDCSum(zdcAOD.fZDCTDCSum),
70 fZDCTDCDifference(zdcAOD.fZDCTDCDifference)
72 for(Int_t i=0; i<5; i++){
73 fZNCTowerEnergy[i] = zdcAOD.fZNCTowerEnergy[i];
74 fZNATowerEnergy[i] = zdcAOD.fZNATowerEnergy[i];
75 fZPCTowerEnergy[i] = zdcAOD.fZPCTowerEnergy[i];
76 fZPATowerEnergy[i] = zdcAOD.fZPATowerEnergy[i];
77 fZNCTowerEnergyLR[i] = zdcAOD.fZNCTowerEnergyLR[i];
78 fZNATowerEnergyLR[i] = zdcAOD.fZNATowerEnergyLR[i];
80 //for(Int_t i=0; i<2; i++){
81 // fZNACentrCoord[i] = zdcAOD.fZNACentrCoord[i];
82 // fZNCCentrCoord[i] = zdcAOD.fZNCCentrCoord[i];
86 //__________________________________________________________________________
87 AliAODZDC& AliAODZDC::operator=(const AliAODZDC& zdcAOD)
89 // Assignment operator
92 TObject::operator=(zdcAOD);
93 fZNCEnergy = zdcAOD.fZNCEnergy;
94 fZNAEnergy = zdcAOD.fZNAEnergy;
95 fZPCEnergy = zdcAOD.fZPCEnergy;
96 fZPAEnergy = zdcAOD.fZPAEnergy;
97 fZEM1Energy = zdcAOD.fZEM1Energy;
98 fZEM2Energy = zdcAOD.fZEM2Energy;
99 for(Int_t i=0; i<5; i++){
100 fZNCTowerEnergy[i] = zdcAOD.fZNCTowerEnergy[i];
101 fZNATowerEnergy[i] = zdcAOD.fZNATowerEnergy[i];
102 fZPCTowerEnergy[i] = zdcAOD.fZPCTowerEnergy[i];
103 fZPATowerEnergy[i] = zdcAOD.fZPATowerEnergy[i];
104 fZNCTowerEnergyLR[i] = zdcAOD.fZNCTowerEnergyLR[i];
105 fZNATowerEnergyLR[i] = zdcAOD.fZNATowerEnergyLR[i];
108 fZDCParticipants = zdcAOD.fZDCParticipants;
109 fZDCPartSideA = zdcAOD.fZDCPartSideA;
110 fZDCPartSideC = zdcAOD.fZDCPartSideC;
111 fImpactParameter = zdcAOD.fImpactParameter;
112 fImpactParamSideA = zdcAOD.fImpactParamSideA;
113 fImpactParamSideC = zdcAOD.fImpactParamSideC;
115 //for(Int_t i=0; i<2; i++){
116 // fZNACentrCoord[i] = zdcAOD.fZNACentrCoord[i];
117 // fZNCCentrCoord[i] = zdcAOD.fZNCCentrCoord[i];
120 fZDCTDCSum = zdcAOD.fZDCTDCSum;
121 fZDCTDCDifference = zdcAOD.fZDCTDCDifference;
126 //______________________________________________________________________________
127 Double_t AliAODZDC::GetZNCEnergy() const
129 if (fZNCEnergy < 0.) {
131 for(Int_t i=0; i<5; i++) fZNCEnergy += fZNCTowerEnergy[i];
136 //______________________________________________________________________________
137 Double_t AliAODZDC::GetZNAEnergy() const
139 if (fZNAEnergy < 0.) {
141 for(Int_t i=0; i<5; i++) fZNAEnergy += fZNATowerEnergy[i];
146 //______________________________________________________________________________
147 Double_t AliAODZDC::GetZPCEnergy() const
149 if (fZPCEnergy < 0.) {
151 for(Int_t i=0; i<5; i++) fZPCEnergy += fZPCTowerEnergy[i];
156 //______________________________________________________________________________
157 Double_t AliAODZDC::GetZPAEnergy() const
159 if (fZPAEnergy < 0.) {
161 for(Int_t i=0; i<5; i++) fZPAEnergy += fZPATowerEnergy[i];
166 //______________________________________________________________________________
167 void AliAODZDC::SetZNCTowers(const Double_t value[5], const Double_t valueLR[5])
170 for(Int_t i=0; i<5; i++){
171 fZNCTowerEnergy[i] = value[i];
172 fZNCTowerEnergyLR[i] = valueLR[i];
176 //______________________________________________________________________________
177 void AliAODZDC::SetZNATowers(const Double_t value[5], const Double_t valueLR[5])
180 for(Int_t i=0; i<5; i++){
181 fZNATowerEnergy[i] = value[i];
182 fZNATowerEnergyLR[i] = valueLR[i];
186 //______________________________________________________________________________
187 Bool_t AliAODZDC::GetZNCentroidInPbPb(Float_t beamEne, Double_t centrZNC[2], Double_t centrZNA[2])
189 // Provides coordinates of centroid over ZN (side C) front face in PbPb
191 printf(" ZDC centroid in PbPb can't be calculated with E_beam = 0 !!!\n");
192 //for(Int_t jj=0; jj<2; jj++) fZNCCentrCoord[jj] = 999.;
196 const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
197 const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
198 const Float_t alpha=0.395;
199 Float_t numXZNC=0., numYZNC=0., denZNC=0., cZNC, wZNC;
200 Float_t numXZNA=0., numYZNA=0., denZNA=0., cZNA, wZNA;
201 Float_t zncEnergy=0., znaEnergy=0.;
203 for(Int_t i=0; i<5; i++){
204 zncEnergy += fZNCTowerEnergy[i];
205 znaEnergy += fZNCTowerEnergy[i];
207 for(Int_t i=0; i<4; i++){
208 if(fZNCTowerEnergy[i+1]>0.) {
209 wZNC = TMath::Power(fZNCTowerEnergy[i+1], alpha);
210 numXZNC += x[i]*wZNC;
211 numYZNC += y[i]*wZNC;
214 if(fZNATowerEnergy[i+1]>0.) {
215 wZNA = TMath::Power(fZNATowerEnergy[i+1], alpha);
216 numXZNA += x[i]*wZNA;
217 numYZNA += y[i]*wZNA;
223 Float_t nSpecnC = zncEnergy/beamEne;
224 cZNC = 1.89358-0.71262/(nSpecnC+0.71789);
225 centrZNC[0] = cZNC*numXZNC/denZNC;
226 centrZNC[1] = cZNC*numYZNC/denZNC;
229 centrZNC[0] = centrZNC[1] = 999.;
232 Float_t nSpecnA = znaEnergy/beamEne;
233 cZNA = 1.89358-0.71262/(nSpecnA+0.71789);
234 centrZNA[0] = cZNA*numXZNA/denZNA;
235 centrZNA[1] = cZNA*numYZNA/denZNA;
238 centrZNA[0] = centrZNA[1] = 999.;
245 //______________________________________________________________________________
246 Bool_t AliAODZDC::GetZNCentroidInpp(Double_t centrZNC[2], Double_t centrZNA[2])
248 // Provides coordinates of centroid over ZN (side C) front face in pp
249 const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
250 const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
251 const Float_t alpha=0.5;
252 Float_t numXZNC=0., numYZNC=0., denZNC=0., wZNC;
253 Float_t numXZNA=0., numYZNA=0., denZNA=0., wZNA;
255 for(Int_t i=0; i<4; i++){
256 if(fZNCTowerEnergy[i+1]>0.) {
257 wZNC = TMath::Power(fZNCTowerEnergy[i+1], alpha);
258 numXZNC += x[i]*wZNC;
259 numYZNC += y[i]*wZNC;
262 if(fZNATowerEnergy[i+1]>0.) {
263 wZNA = TMath::Power(fZNATowerEnergy[i+1], alpha);
264 numXZNA += x[i]*wZNA;
265 numYZNA += y[i]*wZNA;
271 centrZNC[0] = numXZNC/denZNC;
272 centrZNC[1] = numYZNC/denZNC;
275 centrZNC[0] = centrZNC[1] = 999.;
278 centrZNA[0] = numXZNA/denZNA;
279 centrZNA[1] = numYZNA/denZNA;
282 centrZNA[0] = centrZNA[1] = 999.;