ROOT logo
#ifndef ALIMC_H
#define ALIMC_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

//
// This is the ALICE implementation of TVirtualMCApplication
// for simulation with different implementations
// of the Virtual MonteCarlo
//

#include <TArrayF.h>
#include <TArrayI.h>
#include <TClonesArray.h>
#include <TList.h>
#include <TMCProcess.h>
#include <TVirtualMCApplication.h>

class TParticle;
class TFile;
class TTree;

class AliGenerator;
class AliTrackReference;
class AliTransportMonitor;

class AliMC : public TVirtualMCApplication {
public:
    AliMC();
    AliMC(const char *name, const char *title);
    virtual ~AliMC();
    
//
//  MC Application
//
   virtual  void  ConstructGeometry();
   virtual  Bool_t  MisalignGeometry();
   virtual  void  ConstructOpGeometry();
   virtual  void  AddParticles();
   virtual  void  InitGeometry();     
   virtual  void  SetAllAlignableVolumes();     
   virtual  void  GeneratePrimaries();
   virtual  void  BeginEvent();
   virtual  void  BeginPrimary();
   virtual  void  PreTrack();
   virtual  void  Stepping();         
   virtual  void  PostTrack();
   virtual  void  FinishPrimary();
   virtual  void  FinishEvent();
   virtual  Double_t  TrackingZmax() const {return fTrZmax;}
   virtual  Double_t  TrackingRmax() const {return fTrRmax;}
   virtual  Int_t   DetFromMate(Int_t i) const { return (*fImedia)[i];}
//

   virtual  AliGenerator* Generator() const {return fGenerator;}
   virtual  void SetGenerator(AliGenerator *generator);
   virtual  void ResetGenerator(AliGenerator *generator);

//
   virtual  void ReadTransPar();
   virtual  void MediaTable();
   virtual  void EnergySummary();
   virtual  void FinishRun();
   void          AddEnergyDeposit(Int_t id, Float_t edep) 
                                       {fEventEnergy[id]+=edep;}
   virtual  void  ResetHits();
   virtual  void  ResetDigits();
   virtual  void  ResetSDigits();
   virtual  void  TrackingLimits( Float_t rmax=1.e10, Float_t zmax=1.e10)
       {fTrRmax=rmax; fTrZmax=zmax;}
   virtual  void  DecayLimits( Float_t rmin = -1., Float_t rmax = -1., Int_t pdg = 0)
       {fRDecayMin = rmin; fRDecayMax = rmax; fDecayPdg = pdg;}
   
   virtual  void  Init();
   virtual  void  SetTransPar(const char *filename="$(ALICE_ROOT)/data/galice.cuts");
   //PH
   virtual  void  AddHit(Int_t id, Int_t track, Int_t *vol, Float_t *hits) const;
   virtual  void  AddDigit(Int_t id, Int_t *tracks, Int_t *digits) const;
   virtual  void  AddHitList(TCollection *hitList) {if (hitList) fHitLists->Add(hitList);}
   Int_t          GetCurrentTrackNumber() const;
   virtual  void  DumpPart (Int_t i) const;
   virtual  void  DumpPStack () const;
   TList*         GetHitLists() const {return fHitLists ;}
   Int_t          GetNtrack() const;
   virtual  Int_t GetPrimary(Int_t track) const;
   const TObjArray* Particles() const;
   TParticle     *Particle(Int_t i) const;
   virtual  void  PushTrack(Int_t done, Int_t parent, Int_t pdg, 
			   const Float_t *pmom, const Float_t *vpos, const Float_t *polar, 
			   Float_t tof, TMCProcess mech, Int_t &ntr,
			   Float_t weight = 1, Int_t is = 0) const;
   virtual  void  PushTrack(Int_t done, Int_t parent, Int_t pdg,
			   Double_t px, Double_t py, Double_t pz, Double_t e,
			   Double_t vx, Double_t vy, Double_t vz, Double_t tof,
			   Double_t polx, Double_t poly, Double_t polz,
			   TMCProcess mech, Int_t &ntr, Float_t weight=1,
			   Int_t is = 0) const;
   virtual  void  SetHighWaterMark(Int_t nt) const;
   
   virtual  void  KeepTrack(Int_t itra) const;
   virtual  void  FlagTrack(Int_t track) const;
   virtual  void  SetCurrentTrack(Int_t track) const;                           
// Track reference related
   AliTrackReference* AddTrackReference(Int_t label, Int_t id = -999);
   // const TClonesArray*      TrackReferences()   const {return &fTrackReferences;}
   virtual void       RemapTrackReferencesIDs(const Int_t *map); //remaping track references MI
   virtual void       ResetTrackReferences();
   virtual void       FixParticleDecaytime();
// Geometry related
   void           SetGeometryFromCDB();
   Bool_t         IsGeometryFromCDB() const;
// Monitor transport   
   void           SetUseMonitoring(Bool_t flag=kTRUE)      { fUseMonitoring = flag; }
   AliTransportMonitor *GetTransportMonitor() const        { return fMonitor; }
// Random number generator status
   void           SetSaveRndmStatus(Bool_t value)          { fSaveRndmStatus = value; }  
   void           SetSaveRndmStatusPerEvent(Bool_t value)  { fSaveRndmEventStatus = value; }  
   void           SetReadRndmStatus(Bool_t value)          { fReadRndmStatus = value; };   
   void           SetRndmFileName(const TString& fileName) { fRndmFileName = fileName; };   

 private:
   AliMC(const AliMC&); // Not implemented
   AliMC& operator= (const AliMC&); // Not implemented
   void MakeTmpTrackRefsTree();
   void ReorderAndExpandTreeTR();
 private:
   void RemapHits();
   AliGenerator  *fGenerator;         //  Generator used in the MC
   Bool_t         fSaveRndmStatus;    //! Options to save random engine status
   Bool_t         fSaveRndmEventStatus; //! Options to save random engine status for each event
   Bool_t         fReadRndmStatus;    //! Options to read random engine status
   Bool_t         fUseMonitoring;     //! Activate monitoring
   TString        fRndmFileName;      //! The file name of random engine status to be read in
   TArrayF        fEventEnergy;       //! Energy deposit for current event
   TArrayF        fSummEnergy;        //! Energy per event in each volume
   TArrayF        fSum2Energy;        //! Energy squared per event in each volume
   Float_t        fTrRmax;            //  Maximum radius for tracking
   Float_t        fTrZmax;            //  Maximu z for tracking
   Float_t        fRDecayMax;         //  Maximum radius for decay
   Float_t        fRDecayMin;         //  Minimum radius for decay
   Int_t          fDecayPdg;          //  PDG code of particle with forced decay length
   TArrayI       *fImedia;            //! Array of correspondence between media and detectors
   TString        fTransParName;      //  Name of the transport parameters file
   AliTransportMonitor *fMonitor;     //! Transport monitoring tool
   TList         *fHitLists;          //! Lists of hits to be remapped by PurifyKine
   //Temporary Track Reference tree related
   TTree         *fTmpTreeTR;            //! Temporary track reference tree
   TFile         *fTmpFileTR;            //! Temporary track reference file
   TClonesArray   fTrackReferences;      //! List of track references - for one primary track only
   TClonesArray   fTmpTrackReferences;   //! Temporary list of track references - for one primary track only
   ClassDef(AliMC, 4)
};

 
#endif
 AliMC.h:1
 AliMC.h:2
 AliMC.h:3
 AliMC.h:4
 AliMC.h:5
 AliMC.h:6
 AliMC.h:7
 AliMC.h:8
 AliMC.h:9
 AliMC.h:10
 AliMC.h:11
 AliMC.h:12
 AliMC.h:13
 AliMC.h:14
 AliMC.h:15
 AliMC.h:16
 AliMC.h:17
 AliMC.h:18
 AliMC.h:19
 AliMC.h:20
 AliMC.h:21
 AliMC.h:22
 AliMC.h:23
 AliMC.h:24
 AliMC.h:25
 AliMC.h:26
 AliMC.h:27
 AliMC.h:28
 AliMC.h:29
 AliMC.h:30
 AliMC.h:31
 AliMC.h:32
 AliMC.h:33
 AliMC.h:34
 AliMC.h:35
 AliMC.h:36
 AliMC.h:37
 AliMC.h:38
 AliMC.h:39
 AliMC.h:40
 AliMC.h:41
 AliMC.h:42
 AliMC.h:43
 AliMC.h:44
 AliMC.h:45
 AliMC.h:46
 AliMC.h:47
 AliMC.h:48
 AliMC.h:49
 AliMC.h:50
 AliMC.h:51
 AliMC.h:52
 AliMC.h:53
 AliMC.h:54
 AliMC.h:55
 AliMC.h:56
 AliMC.h:57
 AliMC.h:58
 AliMC.h:59
 AliMC.h:60
 AliMC.h:61
 AliMC.h:62
 AliMC.h:63
 AliMC.h:64
 AliMC.h:65
 AliMC.h:66
 AliMC.h:67
 AliMC.h:68
 AliMC.h:69
 AliMC.h:70
 AliMC.h:71
 AliMC.h:72
 AliMC.h:73
 AliMC.h:74
 AliMC.h:75
 AliMC.h:76
 AliMC.h:77
 AliMC.h:78
 AliMC.h:79
 AliMC.h:80
 AliMC.h:81
 AliMC.h:82
 AliMC.h:83
 AliMC.h:84
 AliMC.h:85
 AliMC.h:86
 AliMC.h:87
 AliMC.h:88
 AliMC.h:89
 AliMC.h:90
 AliMC.h:91
 AliMC.h:92
 AliMC.h:93
 AliMC.h:94
 AliMC.h:95
 AliMC.h:96
 AliMC.h:97
 AliMC.h:98
 AliMC.h:99
 AliMC.h:100
 AliMC.h:101
 AliMC.h:102
 AliMC.h:103
 AliMC.h:104
 AliMC.h:105
 AliMC.h:106
 AliMC.h:107
 AliMC.h:108
 AliMC.h:109
 AliMC.h:110
 AliMC.h:111
 AliMC.h:112
 AliMC.h:113
 AliMC.h:114
 AliMC.h:115
 AliMC.h:116
 AliMC.h:117
 AliMC.h:118
 AliMC.h:119
 AliMC.h:120
 AliMC.h:121
 AliMC.h:122
 AliMC.h:123
 AliMC.h:124
 AliMC.h:125
 AliMC.h:126
 AliMC.h:127
 AliMC.h:128
 AliMC.h:129
 AliMC.h:130
 AliMC.h:131
 AliMC.h:132
 AliMC.h:133
 AliMC.h:134
 AliMC.h:135
 AliMC.h:136
 AliMC.h:137
 AliMC.h:138
 AliMC.h:139
 AliMC.h:140
 AliMC.h:141
 AliMC.h:142
 AliMC.h:143
 AliMC.h:144
 AliMC.h:145
 AliMC.h:146
 AliMC.h:147
 AliMC.h:148
 AliMC.h:149
 AliMC.h:150
 AliMC.h:151
 AliMC.h:152
 AliMC.h:153
 AliMC.h:154
 AliMC.h:155
 AliMC.h:156
 AliMC.h:157