]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliESDZDC.cxx
Pass run related information (beam energy, type, mag. field)
[u/mrichter/AliRoot.git] / STEER / AliESDZDC.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, 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 //-------------------------------------------------------------------------
18 //                      Implementation of   Class AliESDZDC
19 //   This is a class that summarizes the ZDC data
20 //   for the ESD   
21 //   Origin: Christian Klein-Boesing, CERN, Christian.Klein-Boesing@cern.ch 
22 //-------------------------------------------------------------------------
23
24
25
26 #include "AliESDZDC.h"
27
28 ClassImp(AliESDZDC)
29
30 //______________________________________________________________________________
31 AliESDZDC::AliESDZDC() :
32   TObject(),
33   fZDCN1Energy(0),
34   fZDCP1Energy(0),
35   fZDCN2Energy(0),
36   fZDCP2Energy(0),
37   fZDCEMEnergy(0),
38   fZDCEMEnergy1(0),
39   fZDCParticipants(0),
40   fZDCPartSideA(0),
41   fZDCPartSideC(0),
42   fImpactParameter(0),
43   fImpactParamSideA(0),
44   fImpactParamSideC(0),
45   fESDQuality(0)
46 {
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.;
52   }
53   for(Int_t i=0; i<2; i++){
54     fZNACentrCoord[i] = fZNCCentrCoord[i] = 0.;
55   }
56 }
57
58 //______________________________________________________________________________
59 AliESDZDC::AliESDZDC(const AliESDZDC& zdc) :
60   TObject(zdc),
61   fZDCN1Energy(zdc.fZDCN1Energy),
62   fZDCP1Energy(zdc.fZDCP1Energy),
63   fZDCN2Energy(zdc.fZDCN2Energy),
64   fZDCP2Energy(zdc.fZDCP2Energy),
65   fZDCEMEnergy(zdc.fZDCEMEnergy),
66   fZDCEMEnergy1(zdc.fZDCEMEnergy1),
67   fZDCParticipants(zdc.fZDCParticipants),
68   fZDCPartSideA(zdc.fZDCPartSideA),
69   fZDCPartSideC(zdc.fZDCPartSideC),
70   fImpactParameter(zdc.fImpactParameter),
71   fImpactParamSideA(zdc.fImpactParamSideA),
72   fImpactParamSideC(zdc.fImpactParamSideC),
73   fESDQuality(zdc.fESDQuality)
74 {
75   // copy constructor
76   for(Int_t i=0; i<5; i++){
77      fZN1TowerEnergy[i] = zdc.fZN1TowerEnergy[i];
78      fZN2TowerEnergy[i] = zdc.fZN2TowerEnergy[i];
79      fZP1TowerEnergy[i] = zdc.fZP1TowerEnergy[i];
80      fZP2TowerEnergy[i] = zdc.fZP2TowerEnergy[i];
81      fZN1TowerEnergyLR[i] = zdc.fZN1TowerEnergyLR[i];
82      fZN2TowerEnergyLR[i] = zdc.fZN2TowerEnergyLR[i];
83      fZP1TowerEnergyLR[i] = zdc.fZP1TowerEnergyLR[i];
84      fZP2TowerEnergyLR[i] = zdc.fZP2TowerEnergyLR[i];
85   }
86   for(Int_t i=0; i<2; i++){
87     fZNACentrCoord[i] = zdc.fZNACentrCoord[i];
88     fZNCCentrCoord[i] = zdc.fZNCCentrCoord[i];
89   }
90 }
91
92 //______________________________________________________________________________
93 AliESDZDC& AliESDZDC::operator=(const AliESDZDC&zdc)
94 {
95   // assigment operator
96   if(this!=&zdc) {
97     TObject::operator=(zdc);
98     fZDCN1Energy = zdc.fZDCN1Energy;
99     fZDCP1Energy = zdc.fZDCP1Energy;
100     fZDCN2Energy = zdc.fZDCN2Energy;
101     fZDCP2Energy = zdc.fZDCP2Energy;
102     fZDCEMEnergy = zdc.fZDCEMEnergy;
103     fZDCEMEnergy1 = zdc.fZDCEMEnergy1;
104     for(Int_t i=0; i<5; i++){
105        fZN1TowerEnergy[i] = zdc.fZN1TowerEnergy[i];
106        fZN2TowerEnergy[i] = zdc.fZN2TowerEnergy[i];
107        fZP1TowerEnergy[i] = zdc.fZP1TowerEnergy[i];
108        fZP2TowerEnergy[i] = zdc.fZP2TowerEnergy[i];
109        fZN1TowerEnergyLR[i] = zdc.fZN1TowerEnergyLR[i];
110        fZN2TowerEnergyLR[i] = zdc.fZN2TowerEnergyLR[i];
111        fZP1TowerEnergyLR[i] = zdc.fZP1TowerEnergyLR[i];
112        fZP2TowerEnergyLR[i] = zdc.fZP2TowerEnergyLR[i];
113     }
114     //
115     fZDCParticipants = zdc.fZDCParticipants;
116     fZDCPartSideA = zdc.fZDCPartSideA;
117     fZDCPartSideC = zdc.fZDCPartSideC;
118     fImpactParameter = zdc.fImpactParameter;
119     fImpactParamSideA = zdc.fImpactParamSideA;
120     fImpactParamSideC = zdc.fImpactParamSideC;
121     //
122     for(Int_t i=0; i<2; i++){
123          fZNACentrCoord[i] = zdc.fZNACentrCoord[i];
124          fZNCCentrCoord[i] = zdc.fZNCCentrCoord[i];
125     }
126     //
127     fESDQuality = zdc.fESDQuality;
128   } 
129   return *this;
130 }
131
132 //______________________________________________________________________________
133 void AliESDZDC::Copy(TObject &obj) const {
134   
135   // this overwrites the virtual TOBject::Copy()
136   // to allow run time copying without casting
137   // in AliESDEvent
138
139   if(this==&obj)return;
140   AliESDZDC *robj = dynamic_cast<AliESDZDC*>(&obj);
141   if(!robj)return; // not an AliESDZDC
142   *robj = *this;
143
144 }
145
146
147 //______________________________________________________________________________
148 void AliESDZDC::Reset()
149 {
150   // reset all data members
151   fZDCN1Energy=0;
152   fZDCP1Energy=0;
153   fZDCN2Energy=0;
154   fZDCP2Energy=0;
155   fZDCEMEnergy=0;
156   fZDCEMEnergy1=0;
157   for(Int_t i=0; i<5; i++){
158     fZN1TowerEnergy[i] = fZN2TowerEnergy[i] = 0.;
159     fZP1TowerEnergy[i] = fZP2TowerEnergy[i] = 0.;
160     fZN1TowerEnergyLR[i] = fZN2TowerEnergyLR[i] = 0.;
161     fZP1TowerEnergyLR[i] = fZP2TowerEnergyLR[i] = 0.;
162   }
163   fZDCParticipants=0;  
164   fZDCPartSideA=0;  
165   fZDCPartSideC=0;  
166   fImpactParameter=0;
167   fImpactParamSideA=0;
168   fImpactParamSideC=0;
169   for(Int_t i=0; i<2; i++){
170        fZNACentrCoord[i] = fZNCCentrCoord[i] = 0.;
171   }
172   fESDQuality=0;
173 }
174
175 //______________________________________________________________________________
176 void AliESDZDC::Print(const Option_t *) const
177 {
178   //  Print ESD for the ZDC
179   printf("\n \t E_{ZNC} = %f TeV, E_{ZPC} = %f TeV, E_{ZNA} = %f TeV, E_{ZPA} = %f TeV,"
180   " E_{ZEM} = %f GeV, Npart = %d, b = %1.2f fm\n",
181   fZDCN1Energy/1000.,fZDCP1Energy/1000.,fZDCN2Energy/1000.,fZDCP2Energy/1000.,
182   fZDCEMEnergy+fZDCEMEnergy1, fZDCParticipants,fImpactParameter);
183 }
184
185 //______________________________________________________________________________
186 Double32_t * AliESDZDC::GetZNCCentroid() 
187 {
188   // Provide coordinates of centroid over ZN (side C) front face
189   Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
190   Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
191   Float_t numX=0., numY=0., den=0.;
192   Float_t c, alpha=0.395, w;
193   //
194   for(Int_t i=0; i<4; i++){
195     if(fZN1TowerEnergy[i+1]<0.) fZN1TowerEnergy[i+1]=0.;
196     w = TMath::Power(fZN1TowerEnergy[i+1], alpha);
197     numX += x[i]*w;
198     numY += y[i]*w;
199     den += w;
200   }
201   if(den!=0){
202     // ATTENTION! Needs to be changed if E_beam(A-A) != 2.76 A TeV !!!!
203     Float_t nSpecn = fZDCN1Energy/2760.;
204     c = 1.89358-0.71262/(nSpecn+0.71789);
205     fZNCCentrCoord[0] = c*numX/den;
206     fZNCCentrCoord[1] = c*numY/den;
207   }
208   return fZNCCentrCoord;
209 }
210
211 //______________________________________________________________________________
212 Double32_t * AliESDZDC::GetZNACentroid() 
213 {
214   // Provide coordinates of centroid over ZN (side A) front face
215   Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
216   Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
217   Float_t numX=0., numY=0., den=0.;
218   Float_t c, alpha=0.395, w;
219
220   for(Int_t i=0; i<4; i++){
221     if(fZN2TowerEnergy[i+1]<0.) fZN2TowerEnergy[i+1]=0.;
222     w = TMath::Power(fZN2TowerEnergy[i+1], alpha);
223     numX += x[i]*w;
224     numY += y[i]*w;
225     den += w;
226   }
227   //
228   if(den!=0){
229     // ATTENTION! Needs to be changed if E_beam(A-A) != 2.76 A TeV !!!!
230     Float_t nSpecn = fZDCN2Energy/2760.;
231     c = 1.89358-0.71262/(nSpecn+0.71789);
232     fZNACentrCoord[0] = c*numX/den;
233     fZNACentrCoord[1] = c*numY/den;
234   }
235   return fZNACentrCoord;
236 }