1 /**************************************************************************
2 * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 //-------------------------------------------------------------------------
19 // AOD event base class
20 // Author: Markus Oldenburg, CERN
21 //-------------------------------------------------------------------------
23 #include "AliAODHeader.h"
24 #include "AliCentrality.h"
25 #include "AliEventplane.h"
26 #include <TGeoMatrix.h>
27 #include <TObjString.h>
29 ClassImp(AliAODHeader)
31 //______________________________________________________________________________
32 AliAODHeader::AliAODHeader() :
34 fMagneticField(-999.),
35 fMuonMagFieldScale(-999.),
61 fEventNumberESDFile(-1),
69 // default constructor
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.;
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;
83 //______________________________________________________________________________
84 AliAODHeader::AliAODHeader(Int_t nRun,
88 const Char_t *title) :
90 fMagneticField(-999.),
91 fMuonMagFieldScale(-999.),
109 fOrbitNumber(nOrbit),
110 fPeriodNumber(nPeriod),
111 fBunchCrossNumber(nBunchX),
117 fEventNumberESDFile(-1),
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.;
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;
139 //______________________________________________________________________________
140 AliAODHeader::AliAODHeader(Int_t nRun,
148 Double_t muonMagFieldScale,
159 const Float_t *vzeroEqFactors,
164 fMagneticField(magField),
165 fMuonMagFieldScale(muonMagFieldScale),
167 fEventplane(eventplane),
168 fZDCN1Energy(n1Energy),
169 fZDCP1Energy(p1Energy),
170 fZDCN2Energy(n2Energy),
171 fZDCP2Energy(p2Energy),
174 fTriggerMask(trigMask),
178 fRefMultPos(refMultPos),
179 fRefMultNeg(refMultNeg),
183 fOrbitNumber(nOrbit),
184 fPeriodNumber(nPeriod),
185 fBunchCrossNumber(nBunchX),
186 fTriggerCluster(trigClus),
191 fEventNumberESDFile(-1),
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.;
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;
214 //______________________________________________________________________________
215 AliAODHeader::~AliAODHeader()
223 //______________________________________________________________________________
224 AliAODHeader::AliAODHeader(const AliAODHeader& 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),
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))
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];
271 for(Int_t m=0; m<kNPHOSMatrix; m++){
272 if(hdr.fPHOSMatrix[m])
273 fPHOSMatrix[m]=new TGeoHMatrix(*(hdr.fPHOSMatrix[m])) ;
278 for(Int_t sm=0; sm<kNEMCALMatrix; sm++){
279 if(hdr.fEMCALMatrix[sm])
280 fEMCALMatrix[sm]=new TGeoHMatrix(*(hdr.fEMCALMatrix[sm])) ;
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];
290 //______________________________________________________________________________
291 AliAODHeader& AliAODHeader::operator=(const AliAODHeader& hdr)
293 // Assignment operator
296 AliVHeader::operator=(hdr);
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;
329 if(hdr.fEventplaneP){
330 if(fEventplaneP)*fEventplaneP = *hdr.fEventplaneP;
331 else fEventplaneP = new AliEventplane(*hdr.fEventplaneP);
334 if(hdr.fCentralityP){
335 if(fCentralityP)*fCentralityP = *hdr.fCentralityP;
336 else fCentralityP = new AliCentrality(*hdr.fCentralityP);
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];
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])) ;
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])) ;
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];
373 //______________________________________________________________________________
374 void AliAODHeader::SetQTheta(Double_t *QTheta, UInt_t size)
376 if (QTheta && size>0) {
377 if (size != (UInt_t)fNQTheta) {
380 fQTheta = new Double_t[fNQTheta];
383 for (Int_t i = 0; i < fNQTheta; i++) {
384 fQTheta[i] = QTheta[i];
393 //______________________________________________________________________________
394 Double_t AliAODHeader::GetQTheta(UInt_t i) const
396 if (fQTheta && i < (UInt_t)fNQTheta) {
403 //______________________________________________________________________________
404 void AliAODHeader::RemoveQTheta()
413 void AliAODHeader::Clear(Option_t* /*opt*/)
430 //______________________________________________________________________________
431 void AliAODHeader::Print(Option_t* /*option*/) const
433 // prints event information
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);
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);
461 for (UInt_t i = 0; i<(UInt_t)fNQTheta; i++) {
462 printf("QTheta[%d] : %13.3e\n", i, GetQTheta(i));
465 printf("V0 Eq factors: ");
466 for (Int_t j=0; j<64; ++j) printf(" %.3f",fVZEROEqFactors[j]);