Possibility to not write syswatch info to file (default)
[u/mrichter/AliRoot.git] / STEER / ESD / 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   AliVZDC(),
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   fZNCTDChit(kFALSE),
47   fZNATDChit(kFALSE),
48   fZPCTDChit(kFALSE),
49   fZPATDChit(kFALSE),
50   fZEM1TDChit(kFALSE),
51   fZEM2TDChit(kFALSE)
52
53 {
54   for(Int_t i=0; i<5; i++){
55     fZN1TowerEnergy[i] = fZN2TowerEnergy[i] = 0.;
56     fZP1TowerEnergy[i] = fZP2TowerEnergy[i] = 0.;
57     fZN1TowerEnergyLR[i] = fZN2TowerEnergyLR[i] = 0.;
58     fZP1TowerEnergyLR[i] = fZP2TowerEnergyLR[i] = 0.;
59   }
60   for(Int_t i=0; i<2; i++){
61     fZNACentrCoord[i] = fZNCCentrCoord[i] = 0.;
62   }
63   for(Int_t i=0; i<32; i++){
64     fVMEScaler[i]=0;
65     for(Int_t y=0; y<4; y++){
66       fZDCTDCData[i][y]=0;
67       fZDCTDCCorrected[i][y]=0.;
68     }
69   }
70 }
71
72 //______________________________________________________________________________
73 AliESDZDC::AliESDZDC(const AliESDZDC& zdc) :
74   AliVZDC(zdc),
75   fZDCN1Energy(zdc.fZDCN1Energy),
76   fZDCP1Energy(zdc.fZDCP1Energy),
77   fZDCN2Energy(zdc.fZDCN2Energy),
78   fZDCP2Energy(zdc.fZDCP2Energy),
79   fZDCEMEnergy(zdc.fZDCEMEnergy),
80   fZDCEMEnergy1(zdc.fZDCEMEnergy1),
81   fZDCParticipants(zdc.fZDCParticipants),
82   fZDCPartSideA(zdc.fZDCPartSideA),
83   fZDCPartSideC(zdc.fZDCPartSideC),
84   fImpactParameter(zdc.fImpactParameter),
85   fImpactParamSideA(zdc.fImpactParamSideA),
86   fImpactParamSideC(zdc.fImpactParamSideC),
87   fESDQuality(zdc.fESDQuality),
88   fZNCTDChit(zdc.fZNCTDChit),
89   fZNATDChit(zdc.fZNATDChit),
90   fZPCTDChit(zdc.fZPCTDChit),
91   fZPATDChit(zdc.fZPATDChit),
92   fZEM1TDChit(zdc.fZEM1TDChit),
93   fZEM2TDChit(zdc.fZEM2TDChit)
94
95 {
96   // copy constructor
97   for(Int_t i=0; i<5; i++){
98      fZN1TowerEnergy[i] = zdc.fZN1TowerEnergy[i];
99      fZN2TowerEnergy[i] = zdc.fZN2TowerEnergy[i];
100      fZP1TowerEnergy[i] = zdc.fZP1TowerEnergy[i];
101      fZP2TowerEnergy[i] = zdc.fZP2TowerEnergy[i];
102      fZN1TowerEnergyLR[i] = zdc.fZN1TowerEnergyLR[i];
103      fZN2TowerEnergyLR[i] = zdc.fZN2TowerEnergyLR[i];
104      fZP1TowerEnergyLR[i] = zdc.fZP1TowerEnergyLR[i];
105      fZP2TowerEnergyLR[i] = zdc.fZP2TowerEnergyLR[i];
106   }
107   for(Int_t i=0; i<2; i++){
108     fZNACentrCoord[i] = zdc.fZNACentrCoord[i];
109     fZNCCentrCoord[i] = zdc.fZNCCentrCoord[i];
110   }
111   for(Int_t i=0; i<32; i++){
112     fVMEScaler[i] = zdc.fVMEScaler[i];
113     for(Int_t y=0; y<4; y++){
114        fZDCTDCData[i][y] = zdc.fZDCTDCData[i][y];
115        fZDCTDCCorrected[i][y] = zdc.fZDCTDCCorrected[i][y];
116     }
117   }
118 }
119
120 //______________________________________________________________________________
121 AliESDZDC& AliESDZDC::operator=(const AliESDZDC&zdc)
122 {
123   // assigment operator
124   if(this!=&zdc) {
125     AliVZDC::operator=(zdc);
126     fZDCN1Energy = zdc.fZDCN1Energy;
127     fZDCP1Energy = zdc.fZDCP1Energy;
128     fZDCN2Energy = zdc.fZDCN2Energy;
129     fZDCP2Energy = zdc.fZDCP2Energy;
130     fZDCEMEnergy = zdc.fZDCEMEnergy;
131     fZDCEMEnergy1 = zdc.fZDCEMEnergy1;
132     for(Int_t i=0; i<5; i++){
133        fZN1TowerEnergy[i] = zdc.fZN1TowerEnergy[i];
134        fZN2TowerEnergy[i] = zdc.fZN2TowerEnergy[i];
135        fZP1TowerEnergy[i] = zdc.fZP1TowerEnergy[i];
136        fZP2TowerEnergy[i] = zdc.fZP2TowerEnergy[i];
137        fZN1TowerEnergyLR[i] = zdc.fZN1TowerEnergyLR[i];
138        fZN2TowerEnergyLR[i] = zdc.fZN2TowerEnergyLR[i];
139        fZP1TowerEnergyLR[i] = zdc.fZP1TowerEnergyLR[i];
140        fZP2TowerEnergyLR[i] = zdc.fZP2TowerEnergyLR[i];
141     }
142     //
143     fZDCParticipants = zdc.fZDCParticipants;
144     fZDCPartSideA = zdc.fZDCPartSideA;
145     fZDCPartSideC = zdc.fZDCPartSideC;
146     fImpactParameter = zdc.fImpactParameter;
147     fImpactParamSideA = zdc.fImpactParamSideA;
148     fImpactParamSideC = zdc.fImpactParamSideC;
149     //
150     for(Int_t i=0; i<2; i++){
151          fZNACentrCoord[i] = zdc.fZNACentrCoord[i];
152          fZNCCentrCoord[i] = zdc.fZNCCentrCoord[i];
153     }
154     //
155     fESDQuality = zdc.fESDQuality;
156     for(Int_t i=0; i<32; i++){
157       fVMEScaler[i] = zdc.fVMEScaler[i];
158       for(Int_t y=0; y<4; y++){ 
159          fZDCTDCData[i][y] = zdc.fZDCTDCData[i][y];
160          fZDCTDCCorrected[i][y] = zdc.fZDCTDCCorrected[i][y];
161       }
162     }
163   } 
164   fZNCTDChit = zdc.fZNCTDChit;
165   fZNATDChit = zdc.fZNATDChit;
166   fZPCTDChit = zdc.fZPCTDChit;
167   fZPATDChit = zdc.fZPATDChit;
168   fZEM1TDChit = zdc.fZEM1TDChit;
169   fZEM2TDChit = zdc.fZEM2TDChit;
170  
171   return *this;
172 }
173
174 //______________________________________________________________________________
175 void AliESDZDC::Copy(TObject &obj) const {
176   
177   // this overwrites the virtual TOBject::Copy()
178   // to allow run time copying without casting
179   // in AliESDEvent
180
181   if(this==&obj)return;
182   AliESDZDC *robj = dynamic_cast<AliESDZDC*>(&obj);
183   if(!robj)return; // not an AliESDZDC
184   *robj = *this;
185
186 }
187
188
189 //______________________________________________________________________________
190 void AliESDZDC::Reset()
191 {
192   // reset all data members
193   fZDCN1Energy=0;
194   fZDCP1Energy=0;
195   fZDCN2Energy=0;
196   fZDCP2Energy=0;
197   fZDCEMEnergy=0;
198   fZDCEMEnergy1=0;
199   for(Int_t i=0; i<5; i++){
200     fZN1TowerEnergy[i] = fZN2TowerEnergy[i] = 0.;
201     fZP1TowerEnergy[i] = fZP2TowerEnergy[i] = 0.;
202     fZN1TowerEnergyLR[i] = fZN2TowerEnergyLR[i] = 0.;
203     fZP1TowerEnergyLR[i] = fZP2TowerEnergyLR[i] = 0.;
204   }
205   fZDCParticipants=0;  
206   fZDCPartSideA=0;  
207   fZDCPartSideC=0;  
208   fImpactParameter=0;
209   fImpactParamSideA=0;
210   fImpactParamSideC=0;
211   for(Int_t i=0; i<2; i++){
212        fZNACentrCoord[i] = fZNCCentrCoord[i] = 0.;
213   }
214   fESDQuality=0;
215   for(Int_t i=0; i<32; i++){
216      fVMEScaler[i] = 0;
217      for(Int_t y=0; y<4; y++){
218         fZDCTDCData[i][y] = 0;
219         fZDCTDCCorrected[i][y] = 0.;
220      }
221   }
222   fZNCTDChit = kFALSE;
223   fZNATDChit = kFALSE;
224   fZPCTDChit = kFALSE;
225   fZPATDChit = kFALSE;
226   fZEM1TDChit = kFALSE;
227   fZEM2TDChit = kFALSE;
228
229 }
230
231 //______________________________________________________________________________
232 void AliESDZDC::Print(const Option_t *) const
233 {
234   //  Print ESD for the ZDC
235   printf(" ### ZDC energies: \n");
236   printf("\n \t E_ZNC = %1.2f (%1.2f+%1.2f+%1.2f+%1.2f+%1.2f) GeV \n \t E_ZNA = %1.2f (%1.2f+%1.2f+%1.2f+%1.2f+%1.2f) GeV\n"
237   " \t E_ZPC = %1.2f GeV E_ZPA = %1.2f GeV"
238   "\n E_ZEM1 = %1.2f GeV,   E_ZEM2 = %1.2f GeV\n \t Npart = %d, b = %1.2f fm\n",
239   fZDCN1Energy, fZN1TowerEnergy[0], fZN1TowerEnergy[1], 
240   fZN1TowerEnergy[2], fZN1TowerEnergy[3], fZN1TowerEnergy[4], 
241   fZDCN2Energy,fZN2TowerEnergy[0], fZN2TowerEnergy[1], 
242   fZN2TowerEnergy[2], fZN2TowerEnergy[3], fZN2TowerEnergy[4], 
243   fZDCP1Energy,fZDCP2Energy, fZDCEMEnergy, fZDCEMEnergy1, 
244   fZDCParticipants,fImpactParameter);
245   //
246   /*printf(" ### VMEScaler (!=0): \n");
247   for(Int_t i=0; i<32; i++) if(fVMEScaler[i]!=0) printf("\t %d \n",fVMEScaler[i]);
248   printf("\n");
249   //
250   printf(" ### TDCData (!=0): \n");
251   for(Int_t i=0; i<32; i++){
252     for(Int_t j=0; j<4; j++)
253       if(TMath::Abs(fZDCTDCCorrected[i][j])>1e-4) printf("\t %1.0f \n",fZDCTDCCorrected[i][j]);
254   }*/
255   printf("\n");
256 }
257
258 //______________________________________________________________________________
259 Bool_t AliESDZDC::GetZNCentroidInPbPb(Float_t beamEne, Double_t centrZNC[2], Double_t centrZNA[2]) 
260 {
261   // Provide coordinates of centroid over ZN (side C) front face
262   if(beamEne==0){
263     printf(" ZDC centroid in PbPb can't be calculated with E_beam = 0 !!!\n");
264     for(Int_t jj=0; jj<2; jj++) fZNCCentrCoord[jj] = 999.;
265     return kFALSE;
266   }
267
268   const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
269   const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
270   const Float_t alpha=0.395;
271   Float_t numXZNC=0., numYZNC=0., denZNC=0., cZNC, wZNC; 
272   Float_t numXZNA=0., numYZNA=0., denZNA=0., cZNA, wZNA; 
273   //
274   for(Int_t i=0; i<4; i++){
275     if(fZN1TowerEnergy[i+1]>0.) {
276       wZNC = TMath::Power(fZN1TowerEnergy[i+1], alpha);
277       numXZNC += x[i]*wZNC;
278       numYZNC += y[i]*wZNC;
279       denZNC += wZNC;
280     }
281     if(fZN2TowerEnergy[i+1]>0.) {
282       wZNA = TMath::Power(fZN2TowerEnergy[i+1], alpha);
283       numXZNA += x[i]*wZNA;
284       numYZNA += y[i]*wZNA;
285       denZNA += wZNA;
286     }
287   }
288   //
289   if(denZNC!=0){
290     Float_t nSpecnC = fZDCN1Energy/beamEne;
291     cZNC = 1.89358-0.71262/(nSpecnC+0.71789);
292     fZNCCentrCoord[0] = cZNC*numXZNC/denZNC;
293     fZNCCentrCoord[1] = cZNC*numYZNC/denZNC;
294   } 
295   else{
296     fZNCCentrCoord[0] = fZNCCentrCoord[1] = 999.;
297   }
298   if(denZNA!=0){
299     Float_t nSpecnA = fZDCN2Energy/beamEne;
300     cZNA = 1.89358-0.71262/(nSpecnA+0.71789);
301     fZNACentrCoord[0] = cZNA*numXZNA/denZNA;
302     fZNACentrCoord[1] = cZNA*numYZNA/denZNA;
303   } 
304   else{
305     fZNACentrCoord[0] = fZNACentrCoord[1] = 999.;
306   }
307   //
308   for(Int_t il=0; il<2; il++){
309     centrZNC[il] = fZNCCentrCoord[il];
310     centrZNA[il] = fZNACentrCoord[il];
311   }
312   
313   return kTRUE;
314 }
315
316 //______________________________________________________________________________
317 Bool_t AliESDZDC::GetZNCentroidInpp(Double_t centrZNC[2], Double_t centrZNA[2]) 
318 {
319   // Provide coordinates of centroid over ZN (side C) front face
320   const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
321   const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
322   const Float_t alpha=0.5;
323   Float_t numXZNC=0., numYZNC=0., denZNC=0., wZNC; 
324   Float_t numXZNA=0., numYZNA=0., denZNA=0., wZNA; 
325   //
326   for(Int_t i=0; i<4; i++){
327     if(fZN1TowerEnergy[i+1]>0.) {
328       wZNC = TMath::Power(fZN1TowerEnergy[i+1], alpha);
329       numXZNC += x[i]*wZNC;
330       numYZNC += y[i]*wZNC;
331       denZNC += wZNC;
332     }
333     if(fZN2TowerEnergy[i+1]>0.) {
334       wZNA = TMath::Power(fZN2TowerEnergy[i+1], alpha);
335       numXZNA += x[i]*wZNA;
336       numYZNA += y[i]*wZNA;
337       denZNA += wZNA;
338     }
339   }
340   //
341   if(denZNC!=0){
342     fZNCCentrCoord[0] = numXZNC/denZNC;
343     fZNCCentrCoord[1] = numYZNC/denZNC;
344   } 
345   else{
346     fZNCCentrCoord[0] = fZNCCentrCoord[1] = 999.;
347   }
348   if(denZNA!=0){
349     fZNACentrCoord[0] = numXZNA/denZNA;
350     fZNACentrCoord[1] = numYZNA/denZNA;
351   } 
352   else{
353     fZNACentrCoord[0] = fZNACentrCoord[1] = 999.;
354   }
355   //
356   for(Int_t il=0; il<2; il++){
357     centrZNC[il] = fZNCCentrCoord[il];
358     centrZNA[il] = fZNACentrCoord[il];
359   }
360   
361   return kTRUE;
362 }