]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AOD/AliAODHeader.cxx
Moving the classes that belong to the following libraries: STEERBase, ESD, CDB, AOD...
[u/mrichter/AliRoot.git] / STEER / AOD / 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 "AliCentrality.h"
25 #include "AliEventplane.h"
26 #include <TGeoMatrix.h>
27 #include <TObjString.h>
28
29 ClassImp(AliAODHeader)
30
31 //______________________________________________________________________________
32 AliAODHeader::AliAODHeader() : 
33   AliVHeader(),
34   fMagneticField(-999.),
35   fMuonMagFieldScale(-999.),
36   fCentrality(-999.),
37   fEventplane(-999.),
38   fZDCN1Energy(-999.),
39   fZDCP1Energy(-999.),
40   fZDCN2Energy(-999.),
41   fZDCP2Energy(-999.),
42   fNQTheta(0),
43   fQTheta(0x0),
44   fTriggerMask(0),
45   fFiredTriggers(),
46   fRunNumber(-999),  
47   fRefMult(-999),
48   fRefMultPos(-999),
49   fRefMultNeg(-999),
50   fNMuons(0),
51   fNDimuons(0),
52   fEventType(0),
53   fOrbitNumber(0),
54   fPeriodNumber(0),
55   fBunchCrossNumber(0),
56   fTriggerCluster(0), 
57   fDiamondZ(0.), 
58   fDiamondSig2Z(0.),
59   fOfflineTrigger(0),
60   fESDFileName(""),
61   fEventNumberESDFile(-1),
62   fL0TriggerInputs(0),
63   fL1TriggerInputs(0),
64   fL2TriggerInputs(0),
65   fTPConlyRefMult(-1), 
66   fCentralityP(0),
67   fEventplaneP(0)
68 {
69   // default constructor
70
71   SetName("header");
72   for(int j=0; j<2; j++) fZDCEMEnergy[j] = -999.;
73   for(Int_t i=0; i<2; i++) fDiamondXY[i]=0.;
74   fDiamondCovXY[0]=fDiamondCovXY[2]=3.*3.;
75   fDiamondCovXY[1]=0.;
76   for (Int_t m=0; m<kNPHOSMatrix; m++) fPHOSMatrix[m]=NULL;
77   for (Int_t sm=0; sm<kNEMCALMatrix; sm++) fEMCALMatrix[sm]=NULL;
78   for (Int_t i = 0; i < 6; i++)  fITSClusters[i] = 0;
79 }
80
81 //______________________________________________________________________________
82 AliAODHeader::AliAODHeader(Int_t nRun, 
83                            UShort_t nBunchX,
84                            UInt_t nOrbit,
85                            UInt_t nPeriod,
86                            const Char_t *title) :
87   AliVHeader(),
88   fMagneticField(-999.),
89   fMuonMagFieldScale(-999.),
90   fCentrality(-999.),
91   fEventplane(-999.),
92   fZDCN1Energy(-999.),
93   fZDCP1Energy(-999.),
94   fZDCN2Energy(-999.),
95   fZDCP2Energy(-999.),
96   fNQTheta(0),
97   fQTheta(0x0),
98   fTriggerMask(0),
99   fFiredTriggers(),
100   fRunNumber(nRun),
101   fRefMult(-999),
102   fRefMultPos(-999),
103   fRefMultNeg(-999),
104   fNMuons(0),
105   fNDimuons(0),
106   fEventType(0),
107   fOrbitNumber(nOrbit),
108   fPeriodNumber(nPeriod),
109   fBunchCrossNumber(nBunchX),
110   fTriggerCluster(0), 
111   fDiamondZ(0.), 
112   fDiamondSig2Z(0.),
113   fOfflineTrigger(0),
114   fESDFileName(""),
115   fEventNumberESDFile(-1),
116   fL0TriggerInputs(0),
117   fL1TriggerInputs(0),
118   fL2TriggerInputs(0),
119   fTPConlyRefMult(-1), 
120   fCentralityP(0),
121   fEventplaneP(0)
122 {
123   // constructor
124
125   SetName("header");
126   SetTitle(title);
127   for(int j=0; j<2; j++) fZDCEMEnergy[j] = -999.;
128   for(Int_t i=0; i<2; i++) fDiamondXY[i]=0.;
129   fDiamondCovXY[0]=fDiamondCovXY[2]=3.*3.;
130   fDiamondCovXY[1]=0.;
131   for (Int_t m=0; m<kNPHOSMatrix; m++) fPHOSMatrix[m]=NULL;
132   for (Int_t sm=0; sm<kNEMCALMatrix; sm++) fEMCALMatrix[sm]=NULL;
133 }
134
135 //______________________________________________________________________________
136 AliAODHeader::AliAODHeader(Int_t nRun, 
137                            UShort_t nBunchX,
138                            UInt_t nOrbit,
139                            UInt_t nPeriod,
140                            Int_t refMult,
141                            Int_t refMultPos,
142                            Int_t refMultNeg,
143                            Double_t magField,
144                            Double_t muonMagFieldScale,
145                            Double_t cent,
146                            Double_t eventplane,
147                            Double_t n1Energy,
148                            Double_t p1Energy,
149                            Double_t n2Energy,
150                            Double_t p2Energy,
151                            Double_t *emEnergy,
152                            ULong64_t trigMask,
153                            UChar_t trigClus,
154                            UInt_t evttype,
155                            const Char_t *title,
156                            Int_t nMuons,
157                            Int_t nDimuons) :
158   AliVHeader(),
159   fMagneticField(magField),
160   fMuonMagFieldScale(muonMagFieldScale),
161   fCentrality(cent),
162   fEventplane(eventplane),
163   fZDCN1Energy(n1Energy),
164   fZDCP1Energy(p1Energy),
165   fZDCN2Energy(n2Energy),
166   fZDCP2Energy(p2Energy),
167   fNQTheta(0),
168   fQTheta(0x0),
169   fTriggerMask(trigMask),
170   fFiredTriggers(),
171   fRunNumber(nRun),  
172   fRefMult(refMult),
173   fRefMultPos(refMultPos),
174   fRefMultNeg(refMultNeg),
175   fNMuons(nMuons),
176   fNDimuons(nDimuons),
177   fEventType(evttype),
178   fOrbitNumber(nOrbit),
179   fPeriodNumber(nPeriod),
180   fBunchCrossNumber(nBunchX),
181   fTriggerCluster(trigClus),
182   fDiamondZ(0.), 
183   fDiamondSig2Z(0.),
184   fOfflineTrigger(0),
185   fESDFileName(""),
186   fEventNumberESDFile(-1),
187   fL0TriggerInputs(0),
188   fL1TriggerInputs(0),
189   fL2TriggerInputs(0),
190   fTPConlyRefMult(-1), 
191   fCentralityP(0),
192   fEventplaneP(0)
193 {
194   // constructor
195
196   SetName("header");
197   SetTitle(title);
198   for(int j=0; j<2; j++) fZDCEMEnergy[j] = emEnergy[j];
199   for(Int_t i=0; i<2; i++) fDiamondXY[i]=0.;
200   fDiamondCovXY[0]=fDiamondCovXY[2]=3.*3.;
201   fDiamondCovXY[1]=0.;
202   for (Int_t m=0; m<kNPHOSMatrix; m++) fPHOSMatrix[m]=NULL;
203   for (Int_t sm=0; sm<kNEMCALMatrix; sm++) fEMCALMatrix[sm]=NULL;
204   for (Int_t i = 0; i < 6; i++)  fITSClusters[i] = 0;
205 }
206
207 //______________________________________________________________________________
208 AliAODHeader::~AliAODHeader() 
209 {
210   // destructor
211   delete fCentralityP;
212   delete fEventplaneP;
213   RemoveQTheta();
214 }
215
216 //______________________________________________________________________________
217 AliAODHeader::AliAODHeader(const AliAODHeader& hdr) :
218   AliVHeader(hdr),
219   fMagneticField(hdr.fMagneticField),
220   fMuonMagFieldScale(hdr.fMuonMagFieldScale),
221   fCentrality(hdr.fCentrality),
222   fEventplane(hdr.fEventplane),
223   fZDCN1Energy(hdr.fZDCN1Energy),
224   fZDCP1Energy(hdr.fZDCP1Energy),
225   fZDCN2Energy(hdr.fZDCN2Energy),
226   fZDCP2Energy(hdr.fZDCP2Energy),
227   fNQTheta(0),
228   fQTheta(0x0),
229   fTriggerMask(hdr.fTriggerMask),
230   fFiredTriggers(hdr.fFiredTriggers),
231   fRunNumber(hdr.fRunNumber),  
232   fRefMult(hdr.fRefMult), 
233   fRefMultPos(hdr.fRefMultPos), 
234   fRefMultNeg(hdr.fRefMultNeg),
235   fNMuons(hdr.fNMuons),
236   fNDimuons(hdr.fNDimuons),
237   fEventType(hdr.fEventType),
238   fOrbitNumber(hdr.fOrbitNumber),
239   fPeriodNumber(hdr.fPeriodNumber),
240   fBunchCrossNumber(hdr.fBunchCrossNumber),
241   fTriggerCluster(hdr.fTriggerCluster), 
242   fDiamondZ(hdr.fDiamondZ), 
243   fDiamondSig2Z(hdr.fDiamondSig2Z),
244   fOfflineTrigger(hdr.fOfflineTrigger),
245   fESDFileName(hdr.fESDFileName),
246   fEventNumberESDFile(hdr.fEventNumberESDFile),
247   fL0TriggerInputs(hdr.fL0TriggerInputs),
248   fL1TriggerInputs(hdr.fL1TriggerInputs),
249   fL2TriggerInputs(hdr.fL2TriggerInputs),
250   fTPConlyRefMult(hdr.fTPConlyRefMult), 
251   fCentralityP(new AliCentrality(*hdr.fCentralityP)),
252   fEventplaneP(new AliEventplane(*hdr.fEventplaneP))
253 {
254   // Copy constructor.
255   
256   SetName(hdr.fName);
257   SetTitle(hdr.fTitle);
258   SetQTheta(hdr.fQTheta, hdr.fNQTheta);
259   SetZDCEMEnergy(hdr.fZDCEMEnergy[0], hdr.fZDCEMEnergy[1]);
260   for(Int_t i=0; i<2; i++) fDiamondXY[i]=hdr.fDiamondXY[i];
261   for(Int_t i=0; i<3; i++) fDiamondCovXY[i]=hdr.fDiamondCovXY[i];
262
263
264   for(Int_t m=0; m<kNPHOSMatrix; m++){
265       if(hdr.fPHOSMatrix[m])
266           fPHOSMatrix[m]=new TGeoHMatrix(*(hdr.fPHOSMatrix[m])) ;
267       else
268           fPHOSMatrix[m]=0;
269   }
270   
271   for(Int_t sm=0; sm<kNEMCALMatrix; sm++){
272       if(hdr.fEMCALMatrix[sm])
273           fEMCALMatrix[sm]=new TGeoHMatrix(*(hdr.fEMCALMatrix[sm])) ;
274       else
275           fEMCALMatrix[sm]=0;
276   }
277   for (Int_t i = 0; i < 6; i++)  fITSClusters[i] = hdr.fITSClusters[i];
278 }
279
280 //______________________________________________________________________________
281 AliAODHeader& AliAODHeader::operator=(const AliAODHeader& hdr)
282 {
283   // Assignment operator
284   if(this!=&hdr) {
285     
286      AliVHeader::operator=(hdr);
287     
288     fMagneticField    = hdr.fMagneticField;
289     fMuonMagFieldScale= hdr.fMuonMagFieldScale;
290     fCentrality       = hdr.fCentrality;
291     fEventplane       = hdr.fEventplane;
292     fZDCN1Energy      = hdr.fZDCN1Energy;
293     fZDCP1Energy      = hdr.fZDCP1Energy;
294     fZDCN2Energy      = hdr.fZDCN2Energy;
295     fZDCP2Energy      = hdr.fZDCP2Energy;
296     fTriggerMask      = hdr.fTriggerMask;
297     fFiredTriggers    = hdr.fFiredTriggers;
298     fRunNumber        = hdr.fRunNumber;
299     fRefMult          = hdr.fRefMult;
300     fRefMultPos       = hdr.fRefMultPos;
301     fRefMultNeg       = hdr.fRefMultNeg;
302     fEventType        = hdr.fEventType;
303     fOrbitNumber      = hdr.fOrbitNumber;
304     fPeriodNumber     = hdr.fPeriodNumber;
305     fBunchCrossNumber = hdr.fBunchCrossNumber;
306     fTriggerCluster   = hdr.fTriggerCluster;
307     fNMuons           = hdr.fNMuons;
308     fNDimuons         = hdr.fNDimuons;
309     fDiamondZ         = hdr.fDiamondZ;
310     fDiamondSig2Z     = hdr.fDiamondSig2Z;
311     fOfflineTrigger   = hdr.fOfflineTrigger;
312     fESDFileName      = hdr.fESDFileName;
313     fEventNumberESDFile = hdr.fEventNumberESDFile;
314     fL0TriggerInputs    = hdr.fL0TriggerInputs;
315     fL1TriggerInputs    = hdr.fL1TriggerInputs;
316     fL2TriggerInputs    = hdr.fL2TriggerInputs;
317     fTPConlyRefMult     = hdr.fTPConlyRefMult;
318
319     if(hdr.fEventplaneP){
320       if(fEventplaneP)*fEventplaneP = *hdr.fEventplaneP;
321       else fEventplaneP = new AliEventplane(*hdr.fEventplaneP);
322     }
323
324     if(hdr.fCentralityP){
325       if(fCentralityP)*fCentralityP = *hdr.fCentralityP;
326       else fCentralityP = new AliCentrality(*hdr.fCentralityP);
327     }
328
329     SetName(hdr.fName);
330     SetTitle(hdr.fTitle);
331     SetQTheta(hdr.fQTheta, hdr.fNQTheta);
332     SetZDCEMEnergy(hdr.fZDCEMEnergy[0], hdr.fZDCEMEnergy[1]);
333     for(Int_t i=0; i<2; i++) fDiamondXY[i]=hdr.fDiamondXY[i];
334     for(Int_t i=0; i<3; i++) fDiamondCovXY[i]=hdr.fDiamondCovXY[i];
335
336     for(Int_t m=0; m<kNPHOSMatrix; m++){
337       if(hdr.fPHOSMatrix[m]){
338         if(fPHOSMatrix[m])delete fPHOSMatrix[m];
339         fPHOSMatrix[m]=new TGeoHMatrix(*(hdr.fPHOSMatrix[m])) ;
340       }
341       else
342         fPHOSMatrix[m]=0;
343     }
344     
345     for(Int_t sm=0; sm<kNEMCALMatrix; sm++){
346       if(hdr.fEMCALMatrix[sm]){
347         if(fEMCALMatrix[sm])delete fEMCALMatrix[sm];
348         fEMCALMatrix[sm]=new TGeoHMatrix(*(hdr.fEMCALMatrix[sm])) ;
349       }
350       else
351         fEMCALMatrix[sm]=0;
352     }
353     
354   }
355
356   for (Int_t i = 0; i < 6; i++)  fITSClusters[i] = hdr.fITSClusters[i];
357   return *this;
358 }
359
360 //______________________________________________________________________________
361 void AliAODHeader::SetQTheta(Double_t *QTheta, UInt_t size) 
362 {
363   if (QTheta && size>0) {
364     if (size != (UInt_t)fNQTheta) {
365       RemoveQTheta();
366       fNQTheta = size;
367       fQTheta = new Double_t[fNQTheta];
368     }
369     
370     for (Int_t i = 0; i < fNQTheta; i++) {
371       fQTheta[i] = QTheta[i];
372     }
373   } else {
374     RemoveQTheta();
375   }
376
377   return;
378 }
379
380 //______________________________________________________________________________
381 Double_t AliAODHeader::GetQTheta(UInt_t i) const
382 {
383   if (fQTheta && i < (UInt_t)fNQTheta) {
384     return fQTheta[i];
385   } else {
386     return -999.;
387   }
388 }
389
390 //______________________________________________________________________________
391 void AliAODHeader::RemoveQTheta()
392 {
393   delete[] fQTheta;
394   fQTheta = 0x0;
395   fNQTheta = 0;
396
397   return;
398 }
399
400 void AliAODHeader::Clear(Option_t* /*opt*/)
401 {
402 // Clear memory
403   RemoveQTheta();
404   if (fCentralityP){
405     delete fCentralityP;
406     fCentralityP = 0;
407     fCentrality = -999;
408   }
409   if (fEventplaneP){
410     delete fEventplaneP;
411     fEventplaneP = 0;
412     fEventplane = -999;
413   }
414   return;
415 }
416
417 //______________________________________________________________________________
418 void AliAODHeader::Print(Option_t* /*option*/) const 
419 {
420   // prints event information
421
422   printf("Run #                   : %d\n", fRunNumber);
423   printf("Bunch Crossing  #       : %d\n", fBunchCrossNumber);
424   printf("Orbit Number #          : %d\n", fOrbitNumber);
425   printf("Period Number #         : %d\n", fPeriodNumber);
426   printf("Trigger mask            : %lld\n", fTriggerMask);
427   printf("Trigger cluster         : %d\n", fTriggerCluster);
428   printf("Event Type              : %d\n", fEventType);
429   printf("Magnetic field          : %f\n", fMagneticField);
430   printf("Muon mag. field scale   : %f\n", fMuonMagFieldScale);
431   
432   printf("Centrality              : %f\n", fCentrality);
433   printf("Event plane             : %f\n", fEventplane);
434   printf("ZDC N1 Energy           : %f\n", fZDCN1Energy);
435   printf("ZDC P1 Energy           : %f\n", fZDCP1Energy);
436   printf("ZDC N2 Energy           : %f\n", fZDCN2Energy);
437   printf("ZDC P2 Energy           : %f\n", fZDCP2Energy);
438   printf("ZDC EM1 Energy          : %f\n", fZDCEMEnergy[0]);
439   printf("ZDC EM2 Energy          : %f\n", fZDCEMEnergy[1]);
440   printf("ref. Multiplicity       : %d\n", fRefMult);
441   printf("ref. Multiplicity (pos) : %d\n", fRefMultPos);
442   printf("ref. Multiplicity (neg) : %d\n", fRefMultNeg);
443   printf("number of muons         : %d\n", fNMuons);
444   printf("number of dimuons       : %d\n", fNDimuons);
445   printf("offline trigger         : %u\n", fOfflineTrigger);
446
447   if (fQTheta) {
448     for (UInt_t i = 0; i<(UInt_t)fNQTheta; i++) {
449       printf("QTheta[%d]              : %13.3e\n", i, GetQTheta(i));
450     }
451   }
452
453   return;
454 }