1 #ifndef ALI_TRANSPORTMONITOR__H
2 #define ALI_TRANSPORTMONITOR__H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
12 #ifndef ROOT_TStopwatch
13 #include "TStopwatch.h"
20 // Class that can be plugged in the simulation to monitor transport timing per
21 // particle for each geometry volume.
23 // andrei.gheata@cern.ch
27 //______________________________________________________________________________
28 class AliTransportMonitor : public TObject {
30 //________________________________________________________________
31 class AliTransportMonitorVol : public TNamed {
33 //___________________________________________________
36 Int_t fPDG; // particle PDG
37 Double_t fEdt; // Energy * dt integral
38 Double_t fTime; // Total transport time for the particle in this volume
39 AliPMonData() : fPDG(0), fEdt(0), fTime(0) {}
40 void Merge(AliPMonData* pdata) {fTime = 0.5*(fTime+pdata->fTime); fEdt = 0.5 * (fEdt+pdata->fEdt);}
41 virtual ~AliPMonData() {}
42 ClassDef(AliPMonData, 1) // Basic monitoring info structure
44 //___________________________________________________
45 AliTransportMonitorVol();
46 virtual ~AliTransportMonitorVol();
48 Int_t GetNtypes() const {return fNtypes;}
49 void StepInfo(Int_t pdg,
52 Double_t x, Double_t y, Double_t z);
53 Double_t GetTotalTime() const {return fTotalTime;}
54 Double_t GetTime(Int_t itype) const {return fPData[itype].fTime;}
55 Double_t GetEmed(Int_t itype) const {return (fTotalTime>0)?fPData[itype].fEdt/fTotalTime : 0.;}
56 Int_t GetPDG(Int_t itype) const {return fPData[itype].fPDG;}
57 TH2F *GetHistogram() const {return fTimeRZ;}
58 AliPMonData *GetPMonData(Int_t itype) const {AliPMonData obj = fPData[itype]; return &obj;}
59 void Merge(AliTransportMonitorVol* volM);
61 AliPMonData &GetPMonData(Int_t pdg);
62 AliTransportMonitorVol(const AliTransportMonitorVol& other) : TNamed(other), fNtypes(0), fTotalTime(0), fPData(0), fTimeRZ(0), fParticles() {}
63 AliTransportMonitorVol &operator=(const AliTransportMonitorVol&) {return *this;}
65 Int_t fNtypes; // Number of different particle types
66 Double_t fTotalTime; // Total time spent in this volume
67 AliPMonData *fPData; //[fNtypes] Array of particle data
68 TH2F *fTimeRZ; // Timing R-Z histogram per volume
69 typedef std::map<Int_t, Int_t> ParticleMap_t;
70 typedef ParticleMap_t::iterator ParticleMapIt_t;
71 ParticleMap_t fParticles; //! Map of stored particla data
73 ClassDef(AliTransportMonitorVol,1) // Helper to hold particle info per volume
75 //________________________________________________________________
77 AliTransportMonitor(const AliTransportMonitor&other) : TObject(other), fTotalTime(0), fTimer(), fVolumeMon(0) {}
78 AliTransportMonitor &operator=(const AliTransportMonitor&) {return *this;}
80 AliTransportMonitor();
81 AliTransportMonitor(Int_t nvolumes);
82 virtual ~AliTransportMonitor();
84 void StepInfo(Int_t volId,
87 Double_t x, Double_t y, Double_t z);
88 void Print(Option_t *volName="") const;
92 void Export(const char *fname);
93 TObjArray* GetVolumes() const {return fVolumeMon;}
94 void Merge(AliTransportMonitor* mergeMon);
95 static AliTransportMonitor *Import(const char *fname);
97 Double_t fTotalTime; // Total simulation time
98 TStopwatch fTimer; //! Global timer
99 TObjArray *fVolumeMon; // Array of monitoring objects per volume
101 ClassDef(AliTransportMonitor,1) // Class to monitor timing per volume
103 //______________________________________________________________________________
106 #endif //ALI_TRANSPORTMONITOR__H