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