]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliESDZDC.cxx
removing redundant checks for overlapping run-ranges
[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 #include <TMath.h>
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   for(Int_t i=0; i<32; i++){
57     fVMEScaler[i]=0;
58     for(Int_t y=0; y<4; y++) fZDCTDCData[i][y]=0;
59   }
60 }
61
62 //______________________________________________________________________________
63 AliESDZDC::AliESDZDC(const AliESDZDC& zdc) :
64   TObject(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)
78 {
79   // copy constructor
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];
89   }
90   for(Int_t i=0; i<2; i++){
91     fZNACentrCoord[i] = zdc.fZNACentrCoord[i];
92     fZNCCentrCoord[i] = zdc.fZNCCentrCoord[i];
93   }
94   for(Int_t i=0; i<32; i++){
95     fVMEScaler[i] = zdc.fVMEScaler[i];
96     for(Int_t y=0; y<4; y++) fZDCTDCData[i][y] = zdc.fZDCTDCData[i][y];
97   }
98 }
99
100 //______________________________________________________________________________
101 AliESDZDC& AliESDZDC::operator=(const AliESDZDC&zdc)
102 {
103   // assigment operator
104   if(this!=&zdc) {
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];
121     }
122     //
123     fZDCParticipants = zdc.fZDCParticipants;
124     fZDCPartSideA = zdc.fZDCPartSideA;
125     fZDCPartSideC = zdc.fZDCPartSideC;
126     fImpactParameter = zdc.fImpactParameter;
127     fImpactParamSideA = zdc.fImpactParamSideA;
128     fImpactParamSideC = zdc.fImpactParamSideC;
129     //
130     for(Int_t i=0; i<2; i++){
131          fZNACentrCoord[i] = zdc.fZNACentrCoord[i];
132          fZNCCentrCoord[i] = zdc.fZNCCentrCoord[i];
133     }
134     //
135     fESDQuality = zdc.fESDQuality;
136     for(Int_t i=0; i<32; i++){
137       fVMEScaler[i] = zdc.fVMEScaler[i];
138       for(Int_t y=0; y<4; y++) fZDCTDCData[i][y] = zdc.fZDCTDCData[i][y];
139     }
140   } 
141   return *this;
142 }
143
144 //______________________________________________________________________________
145 void AliESDZDC::Copy(TObject &obj) const {
146   
147   // this overwrites the virtual TOBject::Copy()
148   // to allow run time copying without casting
149   // in AliESDEvent
150
151   if(this==&obj)return;
152   AliESDZDC *robj = dynamic_cast<AliESDZDC*>(&obj);
153   if(!robj)return; // not an AliESDZDC
154   *robj = *this;
155
156 }
157
158
159 //______________________________________________________________________________
160 void AliESDZDC::Reset()
161 {
162   // reset all data members
163   fZDCN1Energy=0;
164   fZDCP1Energy=0;
165   fZDCN2Energy=0;
166   fZDCP2Energy=0;
167   fZDCEMEnergy=0;
168   fZDCEMEnergy1=0;
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.;
174   }
175   fZDCParticipants=0;  
176   fZDCPartSideA=0;  
177   fZDCPartSideC=0;  
178   fImpactParameter=0;
179   fImpactParamSideA=0;
180   fImpactParamSideC=0;
181   for(Int_t i=0; i<2; i++){
182        fZNACentrCoord[i] = fZNCCentrCoord[i] = 0.;
183   }
184   fESDQuality=0;
185   for(Int_t i=0; i<32; i++){
186      fVMEScaler[i] = 0;
187      for(Int_t y=0; y<4; y++) fZDCTDCData[i][y] = 0;
188   }
189 }
190
191 //______________________________________________________________________________
192 void AliESDZDC::Print(const Option_t *) const
193 {
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);
199   //
200   printf(" ### VMEScaler (!=0): \n");
201   for(Int_t i=0; i<32; i++) if(fVMEScaler[i]!=0) printf("\t %d \n",fVMEScaler[i]);
202   printf("\n");
203   //
204   printf(" ### TDCData (!=0): \n");
205   for(Int_t i=0; i<32; i++){
206     for(Int_t j=0; j<4; j++)
207       if(fZDCTDCData[i][j]!=0) printf("\t %d \n",fZDCTDCData[i][j]);
208   }
209   printf("\n");
210 }
211
212 //______________________________________________________________________________
213 Bool_t AliESDZDC::GetZNCentroidInPbPb(Float_t beamEne, Double_t centrZNC[2], Double_t centrZNA[2]) 
214 {
215   // Provide coordinates of centroid over ZN (side C) front face
216   if(beamEne==0){
217     printf(" ZDC centroid in PbPb can't be calculated with E_beam = 0 !!!\n");
218     for(Int_t jj=0; jj<2; jj++) fZNCCentrCoord[jj] = 999.;
219     return kFALSE;
220   }
221
222   const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
223   const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
224   const Float_t alpha=0.395;
225   Float_t numXZNC=0., numYZNC=0., denZNC=0., cZNC, wZNC; 
226   Float_t numXZNA=0., numYZNA=0., denZNA=0., cZNA, wZNA; 
227   //
228   for(Int_t i=0; i<4; i++){
229     if(fZN1TowerEnergy[i+1]>0.) {
230       wZNC = TMath::Power(fZN1TowerEnergy[i+1], alpha);
231       numXZNC += x[i]*wZNC;
232       numYZNC += y[i]*wZNC;
233       denZNC += wZNC;
234     }
235     if(fZN2TowerEnergy[i+1]>0.) {
236       wZNA = TMath::Power(fZN2TowerEnergy[i+1], alpha);
237       numXZNA += x[i]*wZNA;
238       numYZNA += y[i]*wZNA;
239       denZNA += wZNA;
240     }
241   }
242   //
243   if(denZNC!=0){
244     Float_t nSpecnC = fZDCN1Energy/beamEne;
245     cZNC = 1.89358-0.71262/(nSpecnC+0.71789);
246     fZNCCentrCoord[0] = cZNC*numXZNC/denZNC;
247     fZNCCentrCoord[1] = cZNC*numYZNC/denZNC;
248   } 
249   else{
250     fZNCCentrCoord[0] = fZNCCentrCoord[1] = 999.;
251   }
252   if(denZNA!=0){
253     Float_t nSpecnA = fZDCN1Energy/beamEne;
254     cZNA = 1.89358-0.71262/(nSpecnA+0.71789);
255     fZNACentrCoord[0] = cZNA*numXZNA/denZNA;
256     fZNACentrCoord[1] = cZNA*numYZNA/denZNA;
257   } 
258   else{
259     fZNACentrCoord[0] = fZNACentrCoord[1] = 999.;
260   }
261   //
262   for(Int_t il=0; il<2; il++){
263     centrZNC[il] = fZNCCentrCoord[il];
264     centrZNA[il] = fZNACentrCoord[il];
265   }
266   
267   return kTRUE;
268 }
269
270 //______________________________________________________________________________
271 Bool_t AliESDZDC::GetZNCentroidInpp(Double_t centrZNC[2], Double_t centrZNA[2]) 
272 {
273   // Provide coordinates of centroid over ZN (side C) front face
274   const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
275   const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
276   const Float_t alpha=0.5;
277   Float_t numXZNC=0., numYZNC=0., denZNC=0., wZNC; 
278   Float_t numXZNA=0., numYZNA=0., denZNA=0., wZNA; 
279   //
280   for(Int_t i=0; i<4; i++){
281     if(fZN1TowerEnergy[i+1]>0.) {
282       wZNC = TMath::Power(fZN1TowerEnergy[i+1], alpha);
283       numXZNC += x[i]*wZNC;
284       numYZNC += y[i]*wZNC;
285       denZNC += wZNC;
286     }
287     if(fZN2TowerEnergy[i+1]>0.) {
288       wZNA = TMath::Power(fZN2TowerEnergy[i+1], alpha);
289       numXZNA += x[i]*wZNA;
290       numYZNA += y[i]*wZNA;
291       denZNA += wZNA;
292     }
293   }
294   //
295   if(denZNC!=0){
296     fZNCCentrCoord[0] = numXZNC/denZNC;
297     fZNCCentrCoord[1] = numYZNC/denZNC;
298   } 
299   else{
300     fZNCCentrCoord[0] = fZNCCentrCoord[1] = 999.;
301   }
302   if(denZNA!=0){
303     fZNACentrCoord[0] = numXZNA/denZNA;
304     fZNACentrCoord[1] = numYZNA/denZNA;
305   } 
306   else{
307     fZNACentrCoord[0] = fZNACentrCoord[1] = 999.;
308   }
309   //
310   for(Int_t il=0; il<2; il++){
311     centrZNC[il] = fZNCCentrCoord[il];
312     centrZNA[il] = fZNACentrCoord[il];
313   }
314   
315   return kTRUE;
316 }