]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliAODHeader.cxx
Transient pointer of ESDtrack back to the event introduced.
[u/mrichter/AliRoot.git] / STEER / AliAODHeader.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 /* $Id$ */
17
18 //-------------------------------------------------------------------------
19 //     AOD event base class
20 //     Author: Markus Oldenburg, CERN
21 //-------------------------------------------------------------------------
22
23 #include "AliAODHeader.h"
24 #include <TGeoMatrix.h>
25 #include <TObjString.h>
26
27 ClassImp(AliAODHeader)
28
29 //______________________________________________________________________________
30 AliAODHeader::AliAODHeader() : 
31   AliVHeader(),
32   fMagneticField(-999.),
33   fMuonMagFieldScale(-999.),
34   fCentrality(-999.),
35   fZDCN1Energy(-999.),
36   fZDCP1Energy(-999.),
37   fZDCN2Energy(-999.),
38   fZDCP2Energy(-999.),
39   fNQTheta(0),
40   fQTheta(0x0),
41   fTriggerMask(0),
42   fFiredTriggers(),
43   fRunNumber(-999),  
44   fRefMult(-999),
45   fRefMultPos(-999),
46   fRefMultNeg(-999),
47   fEventType(0),
48   fOrbitNumber(0),
49   fPeriodNumber(0),
50   fBunchCrossNumber(0),
51   fTriggerCluster(0)
52 {
53   // default constructor
54
55   SetName("header");
56   for(int j=0; j<2; j++) fZDCEMEnergy[j] = -999.;
57   for(Int_t i=0; i<2; i++) fDiamondXY[i]=0.;
58   fDiamondCovXY[0]=fDiamondCovXY[2]=3.*3.;
59   fDiamondCovXY[1]=0.;
60   for (Int_t m=0; m<kNPHOSMatrix; m++) fPHOSMatrix[m]=NULL;
61   for (Int_t sm=0; sm<kNEMCALMatrix; sm++) fEMCALMatrix[sm]=NULL;
62 }
63
64 //______________________________________________________________________________
65 AliAODHeader::AliAODHeader(Int_t nRun, 
66                            UShort_t nBunchX,
67                            UInt_t nOrbit,
68                            UInt_t nPeriod,
69                            const Char_t *title) :
70   AliVHeader(),
71   fMagneticField(-999.),
72   fMuonMagFieldScale(-999.),
73   fCentrality(-999.),
74   fZDCN1Energy(-999.),
75   fZDCP1Energy(-999.),
76   fZDCN2Energy(-999.),
77   fZDCP2Energy(-999.),
78   fNQTheta(0),
79   fQTheta(0x0),
80   fTriggerMask(0),
81   fFiredTriggers(),
82   fRunNumber(nRun),
83   fRefMult(-999),
84   fRefMultPos(-999),
85   fRefMultNeg(-999),
86   fEventType(0),
87   fOrbitNumber(nOrbit),
88   fPeriodNumber(nPeriod),
89   fBunchCrossNumber(nBunchX),
90   fTriggerCluster(0)
91 {
92   // constructor
93
94   SetName("header");
95   SetTitle(title);
96   for(int j=0; j<2; j++) fZDCEMEnergy[j] = -999.;
97   for(Int_t i=0; i<2; i++) fDiamondXY[i]=0.;
98   fDiamondCovXY[0]=fDiamondCovXY[2]=3.*3.;
99   fDiamondCovXY[1]=0.;
100   for (Int_t m=0; m<kNPHOSMatrix; m++) fPHOSMatrix[m]=NULL;
101   for (Int_t sm=0; sm<kNEMCALMatrix; sm++) fEMCALMatrix[sm]=NULL;
102 }
103
104 //______________________________________________________________________________
105 AliAODHeader::AliAODHeader(Int_t nRun, 
106                            UShort_t nBunchX,
107                            UInt_t nOrbit,
108                            UInt_t nPeriod,
109                            Int_t refMult,
110                            Int_t refMultPos,
111                            Int_t refMultNeg,
112                            Double_t magField,
113                            Double_t muonMagFieldScale,
114                            Double_t cent,
115                            Double_t n1Energy,
116                            Double_t p1Energy,
117                            Double_t n2Energy,
118                            Double_t p2Energy,
119                            Double_t *emEnergy,
120                            ULong64_t trigMask,
121                            UChar_t trigClus,
122                            UInt_t evttype,
123                            const Char_t *title) :
124   AliVHeader(),
125   fMagneticField(magField),
126   fMuonMagFieldScale(muonMagFieldScale),
127   fCentrality(cent),
128   fZDCN1Energy(n1Energy),
129   fZDCP1Energy(p1Energy),
130   fZDCN2Energy(n2Energy),
131   fZDCP2Energy(p2Energy),
132   fNQTheta(0),
133   fQTheta(0x0),
134   fTriggerMask(trigMask),
135   fFiredTriggers(),
136   fRunNumber(nRun),  
137   fRefMult(refMult),
138   fRefMultPos(refMultPos),
139   fRefMultNeg(refMultNeg),
140   fEventType(evttype),
141   fOrbitNumber(nOrbit),
142   fPeriodNumber(nPeriod),
143   fBunchCrossNumber(nBunchX),
144   fTriggerCluster(trigClus)
145 {
146   // constructor
147
148   SetName("header");
149   SetTitle(title);
150   for(int j=0; j<2; j++) fZDCEMEnergy[j] = emEnergy[j];
151   for(Int_t i=0; i<2; i++) fDiamondXY[i]=0.;
152   fDiamondCovXY[0]=fDiamondCovXY[2]=3.*3.;
153   fDiamondCovXY[1]=0.;
154   for (Int_t m=0; m<kNPHOSMatrix; m++) fPHOSMatrix[m]=NULL;
155   for (Int_t sm=0; sm<kNEMCALMatrix; sm++) fEMCALMatrix[sm]=NULL;
156 }
157
158 //______________________________________________________________________________
159 AliAODHeader::~AliAODHeader() 
160 {
161   // destructor
162   
163   RemoveQTheta();
164 }
165
166 //______________________________________________________________________________
167 AliAODHeader::AliAODHeader(const AliAODHeader& hdr) :
168   AliVHeader(hdr),
169   fMagneticField(hdr.fMagneticField),
170   fMuonMagFieldScale(hdr.fMuonMagFieldScale),
171   fCentrality(hdr.fCentrality),
172   fZDCN1Energy(hdr.fZDCN1Energy),
173   fZDCP1Energy(hdr.fZDCP1Energy),
174   fZDCN2Energy(hdr.fZDCN2Energy),
175   fZDCP2Energy(hdr.fZDCP2Energy),
176   fNQTheta(0),
177   fQTheta(0x0),
178   fTriggerMask(hdr.fTriggerMask),
179   fFiredTriggers(hdr.fFiredTriggers),
180   fRunNumber(hdr.fRunNumber),  
181   fRefMult(hdr.fRefMult), 
182   fRefMultPos(hdr.fRefMultPos), 
183   fRefMultNeg(hdr.fRefMultNeg),
184   fEventType(hdr.fEventType),
185   fOrbitNumber(hdr.fOrbitNumber),
186   fPeriodNumber(hdr.fPeriodNumber),
187   fBunchCrossNumber(hdr.fBunchCrossNumber),
188   fTriggerCluster(hdr.fTriggerCluster)
189 {
190   // Copy constructor.
191   
192   SetName(hdr.fName);
193   SetTitle(hdr.fTitle);
194   SetQTheta(hdr.fQTheta, hdr.fNQTheta);
195   SetZDCEMEnergy(hdr.fZDCEMEnergy[0], hdr.fZDCEMEnergy[1]);
196   for(Int_t i=0; i<2; i++) fDiamondXY[i]=hdr.fDiamondXY[i];
197   for(Int_t i=0; i<3; i++) fDiamondCovXY[i]=hdr.fDiamondCovXY[i];
198
199
200   for(Int_t m=0; m<kNPHOSMatrix; m++){
201       if(hdr.fPHOSMatrix[m])
202           fPHOSMatrix[m]=new TGeoHMatrix(*(hdr.fPHOSMatrix[m])) ;
203       else
204           fPHOSMatrix[m]=0;
205   }
206   
207   for(Int_t sm=0; sm<kNEMCALMatrix; sm++){
208       if(hdr.fEMCALMatrix[sm])
209           fEMCALMatrix[sm]=new TGeoHMatrix(*(hdr.fEMCALMatrix[sm])) ;
210       else
211           fEMCALMatrix[sm]=0;
212   }
213
214 }
215
216 //______________________________________________________________________________
217 AliAODHeader& AliAODHeader::operator=(const AliAODHeader& hdr)
218 {
219   // Assignment operator
220   if(this!=&hdr) {
221     
222      AliVHeader::operator=(hdr);
223     
224     fMagneticField    = hdr.fMagneticField;
225     fMuonMagFieldScale= hdr.fMuonMagFieldScale;
226     fCentrality       = hdr.fCentrality;
227     fZDCN1Energy      = hdr.fZDCN1Energy;
228     fZDCP1Energy      = hdr.fZDCP1Energy;
229     fZDCN2Energy      = hdr.fZDCN2Energy;
230     fZDCP2Energy      = hdr.fZDCP2Energy;
231     fTriggerMask      = hdr.fTriggerMask;
232     fFiredTriggers    = hdr.fFiredTriggers;
233     fRunNumber        = hdr.fRunNumber;
234     fRefMult          = hdr.fRefMult;
235     fRefMultPos       = hdr.fRefMultPos;
236     fRefMultNeg       = hdr.fRefMultNeg;
237     fEventType        = hdr.fEventType;
238     fOrbitNumber      = hdr.fOrbitNumber;
239     fPeriodNumber     = hdr.fPeriodNumber;
240     fBunchCrossNumber = hdr.fBunchCrossNumber;
241     fTriggerCluster   = hdr.fTriggerCluster;
242
243     SetName(hdr.fName);
244     SetTitle(hdr.fTitle);
245     SetQTheta(hdr.fQTheta, hdr.fNQTheta);
246     SetZDCEMEnergy(hdr.fZDCEMEnergy[0], hdr.fZDCEMEnergy[1]);
247     for(Int_t i=0; i<2; i++) fDiamondXY[i]=hdr.fDiamondXY[i];
248     for(Int_t i=0; i<3; i++) fDiamondCovXY[i]=hdr.fDiamondCovXY[i];
249
250     for(Int_t m=0; m<kNPHOSMatrix; m++){
251         if(hdr.fPHOSMatrix[m])
252             fPHOSMatrix[m]=new TGeoHMatrix(*(hdr.fPHOSMatrix[m])) ;
253         else
254             fPHOSMatrix[m]=0;
255     }
256     
257     for(Int_t sm=0; sm<kNEMCALMatrix; sm++){
258         if(hdr.fEMCALMatrix[sm])
259             fEMCALMatrix[sm]=new TGeoHMatrix(*(hdr.fEMCALMatrix[sm])) ;
260         else
261             fEMCALMatrix[sm]=0;
262   }
263
264   }
265
266
267   return *this;
268 }
269
270 //______________________________________________________________________________
271 void AliAODHeader::SetQTheta(Double_t *QTheta, UInt_t size) 
272 {
273   if (QTheta && size>0) {
274     if (size != (UInt_t)fNQTheta) {
275       RemoveQTheta();
276       fNQTheta = size;
277       fQTheta = new Double_t[fNQTheta];
278     }
279     
280     for (Int_t i = 0; i < fNQTheta; i++) {
281       fQTheta[i] = QTheta[i];
282     }
283   } else {
284     RemoveQTheta();
285   }
286
287   return;
288 }
289
290 //______________________________________________________________________________
291 Double_t AliAODHeader::GetQTheta(UInt_t i) const
292 {
293   if (fQTheta && i < (UInt_t)fNQTheta) {
294     return fQTheta[i];
295   } else {
296     return -999.;
297   }
298 }
299
300 //______________________________________________________________________________
301 void AliAODHeader::RemoveQTheta()
302 {
303   delete[] fQTheta;
304   fQTheta = 0x0;
305   fNQTheta = 0;
306
307   return;
308 }
309
310 //______________________________________________________________________________
311 void AliAODHeader::Print(Option_t* /*option*/) const 
312 {
313   // prints event information
314
315   printf("Run #                   : %d\n", fRunNumber);
316   printf("Bunch Crossing  #       : %d\n", fBunchCrossNumber);
317   printf("Orbit Number #          : %d\n", fOrbitNumber);
318   printf("Period Number #         : %d\n", fPeriodNumber);
319   printf("Trigger mask            : %lld\n", fTriggerMask);
320   printf("Trigger cluster         : %d\n", fTriggerCluster);
321   printf("Event Type              : %d\n", fEventType);
322   printf("Magnetic field          : %f\n", fMagneticField);
323   printf("Muon mag. field scale   : %f\n", fMuonMagFieldScale);
324   
325   printf("Centrality              : %f\n", fCentrality);
326   printf("ZDC N1 Energy           : %f\n", fZDCN1Energy);
327   printf("ZDC P1 Energy           : %f\n", fZDCP1Energy);
328   printf("ZDC N2 Energy           : %f\n", fZDCN2Energy);
329   printf("ZDC P2 Energy           : %f\n", fZDCP2Energy);
330   printf("ZDC EM1 Energy          : %f\n", fZDCEMEnergy[0]);
331   printf("ZDC EM2 Energy          : %f\n", fZDCEMEnergy[1]);
332   printf("ref. Multiplicity       : %d\n", fRefMult);
333   printf("ref. Multiplicity (pos) : %d\n", fRefMultPos);
334   printf("ref. Multiplicity (neg) : %d\n", fRefMultNeg);
335
336   if (fQTheta) {
337     for (UInt_t i = 0; i<(UInt_t)fNQTheta; i++) {
338       printf("QTheta[%d]              : %13.3e\n", i, GetQTheta(i));
339     }
340   }
341
342   return;
343 }