#ifndef ALI_TRANSPORTMONITOR__H
#define ALI_TRANSPORTMONITOR__H
#ifndef ROOT_TNamed
#include "TNamed.h"
#endif
#include <map>
#ifndef ROOT_TStopwatch
#include "TStopwatch.h"
#endif
#ifndef ROOT_TH2F
#include "TH2F.h"
#endif
class AliTransportMonitor : public TObject {
public:
class AliTransportMonitorVol : public TNamed {
public:
class AliPMonData {
public:
Int_t fPDG;
Double_t fEdt;
Double_t fTime;
AliPMonData() : fPDG(0), fEdt(0), fTime(0) {}
virtual ~AliPMonData() {}
ClassDef(AliPMonData, 1)
};
AliTransportMonitorVol();
virtual ~AliTransportMonitorVol();
Int_t GetNtypes() const {return fNtypes;}
void StepInfo(Int_t pdg,
Double_t energy,
Double_t dt,
Double_t x, Double_t y, Double_t z);
Double_t GetTotalTime() const {return fTotalTime;}
Double_t GetTime(Int_t itype) const {return fPData[itype].fTime;}
Double_t GetEmed(Int_t itype) const {return (fTotalTime>0)?fPData[itype].fEdt/fTotalTime : 0.;}
Int_t GetPDG(Int_t itype) const {return fPData[itype].fPDG;}
Double_t GetNSteps() const {return fNSteps;}
TH2F *GetHistogram() const {return fTimeRZ;}
AliPMonData *GetPMonData(Int_t itype) const {return &(fPData[itype]);}
void Merge(AliTransportMonitorVol* volM);
private:
AliPMonData &GetPMonData(Int_t pdg);
AliTransportMonitorVol(const AliTransportMonitorVol& other) : TNamed(other), fNtypes(0), fTotalTime(0), fNSteps(0), fPData(0), fTimeRZ(0), fParticles() {}
AliTransportMonitorVol &operator=(const AliTransportMonitorVol&) {return *this;}
private:
Int_t fNtypes;
Double_t fTotalTime;
Double_t fNSteps;
AliPMonData *fPData;
TH2F *fTimeRZ;
typedef std::map<Int_t, Int_t> ParticleMap_t;
typedef ParticleMap_t::iterator ParticleMapIt_t;
ParticleMap_t fParticles;
ClassDef(AliTransportMonitorVol,2)
};
private:
AliTransportMonitor(const AliTransportMonitor&other) : TObject(other), fTotalTime(0), fTimer(), fVolumeMon(0) {}
AliTransportMonitor &operator=(const AliTransportMonitor&) {return *this;}
public:
AliTransportMonitor();
AliTransportMonitor(Int_t nvolumes);
virtual ~AliTransportMonitor();
void StepInfo(Int_t volId,
Int_t pdg,
Double_t energy,
Double_t x, Double_t y, Double_t z);
void Print(Option_t *volName="") const;
void DummyStep();
void Start();
void Stop();
void Export(const char *fname);
TObjArray* GetVolumes() const {return fVolumeMon;}
void Merge(AliTransportMonitor* mergeMon);
static AliTransportMonitor *Import(const char *fname);
private:
Double_t fTotalTime;
TStopwatch fTimer;
TObjArray *fVolumeMon;
ClassDef(AliTransportMonitor,1)
};
#endif //ALI_TRANSPORTMONITOR__H
AliTransportMonitor.h:100 AliTransportMonitor.h:101 AliTransportMonitor.h:102 AliTransportMonitor.h:103 AliTransportMonitor.h:104 AliTransportMonitor.h:105 AliTransportMonitor.h:106 AliTransportMonitor.h:107