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