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