]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliAODZDC.cxx
Fixing in/out tags in documentation
[u/mrichter/AliRoot.git] / STEER / AliAODZDC.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-2007, 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 //     Class for AOD ZDC data
18 //     Author: Chiara Oppedisano
19 //     Chiara.Oppedisano@cern.ch March 2011
20 //-------------------------------------------------------------------------
21
22 #include <TMath.h>
23 #include "AliAODZDC.h"
24
25 ClassImp(AliAODZDC)
26
27 AliAODZDC::AliAODZDC() :
28   AliVZDC(),
29   fZNCEnergy(-999.),
30   fZNAEnergy(-999.),
31   fZPCEnergy(-999.),
32   fZPAEnergy(-999.),
33   fZEM1Energy(0.),
34   fZEM2Energy(0.),
35   fZDCParticipants(0),
36   fZDCPartSideA(0),
37   fZDCPartSideC(0),
38   fImpactParameter(0),
39   fImpactParamSideA(0),
40   fImpactParamSideC(0),
41   fZDCTDCSum(0),         
42   fZDCTDCDifference(0)
43 {
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.;
48   }
49   //for(Int_t i=0; i<2; i++){
50   //  fZNACentrCoord[i] = fZNCCentrCoord[i] = 0.;
51   //}
52 }
53
54 //__________________________________________________________________________
55 AliAODZDC::AliAODZDC(const AliAODZDC &zdcAOD) :
56   AliVZDC(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)
71 {
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];
79   }
80   //for(Int_t i=0; i<2; i++){
81   //  fZNACentrCoord[i] = zdcAOD.fZNACentrCoord[i];
82   //  fZNCCentrCoord[i] = zdcAOD.fZNCCentrCoord[i];
83   //}
84 }
85
86 //__________________________________________________________________________
87 AliAODZDC& AliAODZDC::operator=(const AliAODZDC& zdcAOD)
88 {
89   // Assignment operator
90   //
91   if(this!=&zdcAOD) {
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];
106     }
107     //
108     fZDCParticipants = zdcAOD.fZDCParticipants;
109     fZDCPartSideA = zdcAOD.fZDCPartSideA;
110     fZDCPartSideC = zdcAOD.fZDCPartSideC;
111     fImpactParameter = zdcAOD.fImpactParameter;
112     fImpactParamSideA = zdcAOD.fImpactParamSideA;
113     fImpactParamSideC = zdcAOD.fImpactParamSideC;
114     //
115     //for(Int_t i=0; i<2; i++){
116     //     fZNACentrCoord[i] = zdcAOD.fZNACentrCoord[i];
117     //     fZNCCentrCoord[i] = zdcAOD.fZNCCentrCoord[i];
118     //}
119     //
120     fZDCTDCSum = zdcAOD.fZDCTDCSum;    
121     fZDCTDCDifference = zdcAOD.fZDCTDCDifference;
122   } 
123   return *this;
124 }
125
126 //______________________________________________________________________________
127 Double_t  AliAODZDC::GetZNCEnergy() const
128 {
129     if (fZNCEnergy < 0.) {
130         fZNCEnergy = 0.;
131         for(Int_t i=0; i<5; i++) fZNCEnergy += fZNCTowerEnergy[i];
132     }
133     return fZNCEnergy;
134 }
135
136 //______________________________________________________________________________
137 Double_t  AliAODZDC::GetZNAEnergy() const
138 {
139     if (fZNAEnergy < 0.) {
140         fZNAEnergy = 0.;
141         for(Int_t i=0; i<5; i++) fZNAEnergy += fZNATowerEnergy[i];
142     }
143     return fZNAEnergy;
144 }
145
146 //______________________________________________________________________________
147 Double_t  AliAODZDC::GetZPCEnergy() const
148 {
149     if (fZPCEnergy < 0.) {
150         fZPCEnergy = 0.;
151         for(Int_t i=0; i<5; i++) fZPCEnergy += fZPCTowerEnergy[i];
152     }
153     return fZPCEnergy;
154 }
155
156 //______________________________________________________________________________
157 Double_t  AliAODZDC::GetZPAEnergy() const
158 {
159     if (fZPAEnergy < 0.) {
160         fZPAEnergy = 0.;
161         for(Int_t i=0; i<5; i++) fZPAEnergy += fZPATowerEnergy[i];
162     }
163     return fZPAEnergy;
164 }
165
166 //______________________________________________________________________________
167 void  AliAODZDC::SetZNCTowers(const Double_t value[5], const Double_t valueLR[5])
168 {
169   // Sets ZNC towers
170   for(Int_t i=0; i<5; i++){
171     fZNCTowerEnergy[i] = value[i];
172     fZNCTowerEnergyLR[i] = valueLR[i];
173   }
174 }
175
176 //______________________________________________________________________________
177 void  AliAODZDC::SetZNATowers(const Double_t value[5], const Double_t valueLR[5])
178 {
179   // Sets ZNA towers
180   for(Int_t i=0; i<5; i++){
181     fZNATowerEnergy[i] = value[i];
182     fZNATowerEnergyLR[i] = valueLR[i];
183   }
184 }
185
186 //______________________________________________________________________________
187 Bool_t AliAODZDC::GetZNCentroidInPbPb(Float_t beamEne, Double_t centrZNC[2], Double_t centrZNA[2]) 
188 {
189   // Provides coordinates of centroid over ZN (side C) front face in PbPb
190    if(beamEne==0){
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.;
193     return kFALSE;
194   }
195
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.;
202   //
203   for(Int_t i=0; i<5; i++){
204     zncEnergy += fZNCTowerEnergy[i];
205     znaEnergy += fZNCTowerEnergy[i];
206   }
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;
212       denZNC += wZNC;
213     }
214     if(fZNATowerEnergy[i+1]>0.) {
215       wZNA = TMath::Power(fZNATowerEnergy[i+1], alpha);
216       numXZNA += x[i]*wZNA;
217       numYZNA += y[i]*wZNA;
218       denZNA += wZNA;
219     }
220   }
221   //
222   if(denZNC!=0){
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;
227   } 
228   else{
229     centrZNC[0] = centrZNC[1] = 999.;
230   }
231   if(denZNA!=0){
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;
236   } 
237   else{
238     centrZNA[0] = centrZNA[1] = 999.;
239   }
240  
241   
242   return kTRUE;
243 }
244
245 //______________________________________________________________________________
246 Bool_t AliAODZDC::GetZNCentroidInpp(Double_t centrZNC[2], Double_t centrZNA[2]) 
247 {
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; 
254   //
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;
260       denZNC += wZNC;
261     }
262     if(fZNATowerEnergy[i+1]>0.) {
263       wZNA = TMath::Power(fZNATowerEnergy[i+1], alpha);
264       numXZNA += x[i]*wZNA;
265       numYZNA += y[i]*wZNA;
266       denZNA += wZNA;
267     }
268   }
269   //
270   if(denZNC!=0){
271     centrZNC[0] = numXZNC/denZNC;
272     centrZNC[1] = numYZNC/denZNC;
273   } 
274   else{
275     centrZNC[0] = centrZNC[1] = 999.;
276   }
277   if(denZNA!=0){
278     centrZNA[0] = numXZNA/denZNA;
279     centrZNA[1] = numYZNA/denZNA;
280   } 
281   else{
282     centrZNA[0] = centrZNA[1] = 999.;
283   }
284   
285   return kTRUE;
286 }