]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AOD/AliAODZDC.cxx
Update master to aliroot
[u/mrichter/AliRoot.git] / STEER / AOD / 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   fZNCTDC(-999.),
44   fZNATDC(-999.)
45 {
46 // Default constructor
47   for(Int_t i=0; i<5; i++){
48     fZNCTowerEnergy[i] = fZNATowerEnergy[i] = 0.;
49     fZPCTowerEnergy[i] = fZPATowerEnergy[i] = 0.;
50     fZNCTowerEnergyLR[i] = fZNATowerEnergyLR[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   fZNCTDC(zdcAOD.fZNCTDC),
72   fZNATDC(zdcAOD.fZNATDC)
73 {
74 // Constructor
75   for(Int_t i=0; i<5; i++){
76     fZNCTowerEnergy[i] = zdcAOD.fZNCTowerEnergy[i];
77     fZNATowerEnergy[i] = zdcAOD.fZNATowerEnergy[i];
78     fZPCTowerEnergy[i] = zdcAOD.fZPCTowerEnergy[i];
79     fZPATowerEnergy[i] = zdcAOD.fZPATowerEnergy[i];
80     fZNCTowerEnergyLR[i] = zdcAOD.fZNCTowerEnergyLR[i];
81     fZNATowerEnergyLR[i] = zdcAOD.fZNATowerEnergyLR[i];
82   }
83 }
84
85 //__________________________________________________________________________
86 AliAODZDC& AliAODZDC::operator=(const AliAODZDC& zdcAOD)
87 {
88   // Assignment operator
89   //
90   if(this!=&zdcAOD) {
91     TObject::operator=(zdcAOD);
92     fZNCEnergy  = zdcAOD.fZNCEnergy;
93     fZNAEnergy  = zdcAOD.fZNAEnergy;
94     fZPCEnergy  = zdcAOD.fZPCEnergy;
95     fZPAEnergy  = zdcAOD.fZPAEnergy;
96     fZEM1Energy = zdcAOD.fZEM1Energy;
97     fZEM2Energy = zdcAOD.fZEM2Energy;
98     for(Int_t i=0; i<5; i++){
99        fZNCTowerEnergy[i] = zdcAOD.fZNCTowerEnergy[i];
100        fZNATowerEnergy[i] = zdcAOD.fZNATowerEnergy[i];
101        fZPCTowerEnergy[i] = zdcAOD.fZPCTowerEnergy[i];
102        fZPATowerEnergy[i] = zdcAOD.fZPATowerEnergy[i];
103        fZNCTowerEnergyLR[i] = zdcAOD.fZNCTowerEnergyLR[i];
104        fZNATowerEnergyLR[i] = zdcAOD.fZNATowerEnergyLR[i];
105     }
106     //
107     fZDCParticipants = zdcAOD.fZDCParticipants;
108     fZDCPartSideA = zdcAOD.fZDCPartSideA;
109     fZDCPartSideC = zdcAOD.fZDCPartSideC;
110     fImpactParameter = zdcAOD.fImpactParameter;
111     fImpactParamSideA = zdcAOD.fImpactParamSideA;
112     fImpactParamSideC = zdcAOD.fImpactParamSideC;
113     //
114     //for(Int_t i=0; i<2; i++){
115     //     fZNACentrCoord[i] = zdcAOD.fZNACentrCoord[i];
116     //     fZNCCentrCoord[i] = zdcAOD.fZNCCentrCoord[i];
117     //}
118     //
119     fZDCTDCSum = zdcAOD.fZDCTDCSum;    
120     fZDCTDCDifference = zdcAOD.fZDCTDCDifference;
121     fZNCTDC = zdcAOD.fZNCTDC;
122     fZNATDC = zdcAOD.fZNATDC;
123
124   } 
125   return *this;
126 }
127
128 //______________________________________________________________________________
129 Double_t  AliAODZDC::GetZNCEnergy() const
130 {
131 // Return ZNC energy
132     if (fZNCEnergy < 0.) {
133         fZNCEnergy = 0.;
134         for(Int_t i=0; i<5; i++) fZNCEnergy += fZNCTowerEnergy[i];
135     }
136     return fZNCEnergy;
137 }
138
139 //______________________________________________________________________________
140 Double_t  AliAODZDC::GetZNAEnergy() const
141 {
142 // Return ZNA Energy
143     if (fZNAEnergy < 0.) {
144         fZNAEnergy = 0.;
145         for(Int_t i=0; i<5; i++) fZNAEnergy += fZNATowerEnergy[i];
146     }
147     return fZNAEnergy;
148 }
149
150 //______________________________________________________________________________
151 Double_t  AliAODZDC::GetZPCEnergy() const
152 {
153 // Return ZPC Energy
154     if (fZPCEnergy < 0.) {
155         fZPCEnergy = 0.;
156         for(Int_t i=0; i<5; i++) fZPCEnergy += fZPCTowerEnergy[i];
157     }
158     return fZPCEnergy;
159 }
160
161 //______________________________________________________________________________
162 Double_t  AliAODZDC::GetZPAEnergy() const
163 {
164 // Return ZPA Energy
165     if (fZPAEnergy < 0.) {
166         fZPAEnergy = 0.;
167         for(Int_t i=0; i<5; i++) fZPAEnergy += fZPATowerEnergy[i];
168     }
169     return fZPAEnergy;
170 }
171
172 //______________________________________________________________________________
173 void  AliAODZDC::SetZNCTowers(const Double_t value[5], const Double_t valueLR[5])
174 {
175   // Sets ZNC towers
176   for(Int_t i=0; i<5; i++){
177     fZNCTowerEnergy[i] = value[i];
178     fZNCTowerEnergyLR[i] = valueLR[i];
179   }
180 }
181
182 //______________________________________________________________________________
183 void  AliAODZDC::SetZNATowers(const Double_t value[5], const Double_t valueLR[5])
184 {
185   // Sets ZNA towers
186   for(Int_t i=0; i<5; i++){
187     fZNATowerEnergy[i] = value[i];
188     fZNATowerEnergyLR[i] = valueLR[i];
189   }
190 }
191
192 //______________________________________________________________________________
193 Bool_t AliAODZDC::GetZNCentroidInPbPb(Float_t beamEne, Double_t centrZNC[2], Double_t centrZNA[2]) 
194 {
195   // Provides coordinates of centroid over ZN (side C) front face in PbPb
196    if(beamEne==0){
197     printf(" ZDC centroid in PbPb can't be calculated with E_beam = 0 !!!\n");
198     //for(Int_t jj=0; jj<2; jj++) fZNCCentrCoord[jj] = 999.;
199     return kFALSE;
200   }
201
202   const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
203   const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
204   const Float_t alpha=0.395;
205   Float_t numXZNC=0., numYZNC=0., denZNC=0., cZNC, wZNC; 
206   Float_t numXZNA=0., numYZNA=0., denZNA=0., cZNA, wZNA; 
207   Float_t zncEnergy=0., znaEnergy=0.;
208   //
209   for(Int_t i=0; i<5; i++){
210     zncEnergy += fZNCTowerEnergy[i];
211     znaEnergy += fZNATowerEnergy[i];
212   }
213   for(Int_t i=0; i<4; i++){
214     if(fZNCTowerEnergy[i+1]>0.) {
215       wZNC = TMath::Power(fZNCTowerEnergy[i+1], alpha);
216       numXZNC += x[i]*wZNC;
217       numYZNC += y[i]*wZNC;
218       denZNC += wZNC;
219     }
220     if(fZNATowerEnergy[i+1]>0.) {
221       wZNA = TMath::Power(fZNATowerEnergy[i+1], alpha);
222       numXZNA += x[i]*wZNA;
223       numYZNA += y[i]*wZNA;
224       denZNA += wZNA;
225     }
226   }
227   //
228   if(denZNC!=0){
229     Float_t nSpecnC = zncEnergy/beamEne;
230     cZNC = 1.89358-0.71262/(nSpecnC+0.71789);
231     centrZNC[0] = cZNC*numXZNC/denZNC;
232     centrZNC[1] = cZNC*numYZNC/denZNC;
233   } 
234   else{
235     centrZNC[0] = centrZNC[1] = 999.;
236   }
237   if(denZNA!=0){
238     Float_t nSpecnA = znaEnergy/beamEne;
239     cZNA = 1.89358-0.71262/(nSpecnA+0.71789);
240     centrZNA[0] = cZNA*numXZNA/denZNA;
241     centrZNA[1] = cZNA*numYZNA/denZNA;
242   } 
243   else{
244     centrZNA[0] = centrZNA[1] = 999.;
245   }
246  
247   
248   return kTRUE;
249 }
250
251 //______________________________________________________________________________
252 Bool_t AliAODZDC::GetZNCentroidInpp(Double_t centrZNC[2], Double_t centrZNA[2]) 
253 {
254   // Provides coordinates of centroid over ZN (side C) front face in pp
255   const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
256   const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
257   const Float_t alpha=0.5;
258   Float_t numXZNC=0., numYZNC=0., denZNC=0., wZNC; 
259   Float_t numXZNA=0., numYZNA=0., denZNA=0., wZNA; 
260   //
261   for(Int_t i=0; i<4; i++){
262     if(fZNCTowerEnergy[i+1]>0.) {
263       wZNC = TMath::Power(fZNCTowerEnergy[i+1], alpha);
264       numXZNC += x[i]*wZNC;
265       numYZNC += y[i]*wZNC;
266       denZNC += wZNC;
267     }
268     if(fZNATowerEnergy[i+1]>0.) {
269       wZNA = TMath::Power(fZNATowerEnergy[i+1], alpha);
270       numXZNA += x[i]*wZNA;
271       numYZNA += y[i]*wZNA;
272       denZNA += wZNA;
273     }
274   }
275   //
276   if(denZNC!=0){
277     centrZNC[0] = numXZNC/denZNC;
278     centrZNC[1] = numYZNC/denZNC;
279   } 
280   else{
281     centrZNC[0] = centrZNC[1] = 999.;
282   }
283   if(denZNA!=0){
284     centrZNA[0] = numXZNA/denZNA;
285     centrZNA[1] = numYZNA/denZNA;
286   } 
287   else{
288     centrZNA[0] = centrZNA[1] = 999.;
289   }
290   
291   return kTRUE;
292 }