]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TGeant4/TG4GeometryManager.h
Coding Rule violations corrected.
[u/mrichter/AliRoot.git] / TGeant4 / TG4GeometryManager.h
1 // $Id$
2 // Category: geometry
3 //
4 // Author: V. Berejnoi, I. Hrivnacova
5 //
6 // Class TG4GeometryManager
7 // ------------------------
8 // Geant4 implementation of the MonteCarlo interface methods                    
9 // for building Geant4 geometry and access to it.
10
11 #ifndef TG4_GEOMETRY_MANAGER_H
12 #define TG4_GEOMETRY_MANAGER_H
13
14 #include "TG4Verbose.h"
15 #include "TG4NameMap.h"
16 #include "TG4IntMap.h"
17 #include "TG4Globals.h"
18
19 #include <globals.hh>
20
21 #include <Rtypes.h>
22
23
24 class TG4GeometryOutputManager;
25 class TG4GeometryServices;
26 class TG4G3CutVector;
27 class TG4G3ControlVector;
28
29 class G4VPhysicalVolume;
30
31 class TG4GeometryManager : public TG4Verbose
32 {
33   public:
34     TG4GeometryManager();
35     // --> protected
36     // TG4GeometryManager(const TG4GeometryManager& right);
37     virtual ~TG4GeometryManager();
38
39     // static access method
40     static TG4GeometryManager* Instance();
41
42     //
43     // methods (from the base class)
44     
45     // detector composition
46     void  Material(Int_t& kmat, const char* name, Float_t a, 
47                      Float_t z, Float_t dens, Float_t radl, Float_t absl,
48                      Float_t* buf, Int_t nwbuf);
49     void  Mixture(Int_t& kmat, const char *name, Float_t *a, 
50                      Float_t *z, Float_t dens, Int_t nlmat, Float_t *wmat);
51     void  Medium(Int_t& kmed, const char *name, Int_t nmat, 
52                      Int_t isvol, Int_t ifield, Float_t fieldm, Float_t tmaxfd, 
53                      Float_t stemax, Float_t deemax, Float_t epsil, 
54                      Float_t stmin, Float_t* ubuf, Int_t nbuf);
55     void  Matrix(Int_t& krot, Double_t thetaX, Double_t phiX, 
56                      Double_t thetaY, Double_t phiY, Double_t thetaZ, 
57                      Double_t phiZ);
58     void  Matrix(Int_t& krot, Float_t thetaX, Float_t phiX, 
59                      Float_t thetaY, Float_t phiY, Float_t thetaZ, 
60                      Float_t phiZ);
61
62     // functions from GBASE 
63     void  Ggclos(); 
64
65     // functions from GCONS 
66     void  Gfmate(Int_t imat, char *name, Float_t &a, Float_t &z,  
67                          Float_t &dens, Float_t &radl, Float_t &absl,
68                          Float_t* ubuf, Int_t& nbuf); 
69     void  Gstpar(Int_t itmed, const char *param, Float_t parval); 
70     void  SetCerenkov(Int_t itmed, Int_t npckov, Float_t *ppckov,
71                          Float_t *absco, Float_t *effic, Float_t *rindex); 
72
73     // functions from GGEOM 
74     Int_t Gsvolu(const char *name, const char *shape, Int_t nmed,  
75                          Double_t *upar, Int_t np); 
76     Int_t Gsvolu(const char *name, const char *shape, Int_t nmed,  
77                          Float_t *upar, Int_t np); 
78     void  Gsdvn(const char *name, const char *mother, Int_t ndiv, 
79                         Int_t iaxis);
80     void  Gsdvn2(const char *name, const char *mother, Int_t ndiv, 
81                          Int_t iaxis, Double_t c0i, Int_t numed); 
82     void  Gsdvn2(const char *name, const char *mother, Int_t ndiv, 
83                          Int_t iaxis, Float_t c0i, Int_t numed); 
84     void  Gsdvt(const char *name, const char *mother, Double_t step,
85                          Int_t iaxis, Int_t numed, Int_t ndvmx); 
86     void  Gsdvt(const char *name, const char *mother, Float_t step,
87                          Int_t iaxis, Int_t numed, Int_t ndvmx); 
88     void  Gsdvt2(const char *name, const char *mother, Double_t step, 
89                          Int_t iaxis, Double_t c0, Int_t numed, Int_t ndvmx); 
90     void  Gsdvt2(const char *name, const char *mother, Float_t step, 
91                          Int_t iaxis, Float_t c0, Int_t numed, Int_t ndvmx); 
92
93     void  Gsord(const char *name, Int_t iax); 
94     void  Gspos(const char *name, Int_t nr, const char *mother,  
95                         Double_t x, Double_t y, Double_t z, Int_t irot, 
96                         const char *konly); 
97     void  Gspos(const char *name, Int_t nr, const char *mother,  
98                         Float_t x, Float_t y, Float_t z, Int_t irot, 
99                         const char *konly); 
100     void  Gsposp(const char *name, Int_t nr, const char *mother,  
101                          Double_t x, Double_t y, Double_t z, Int_t irot,
102                          const char *konly, Double_t *upar, Int_t np); 
103     void  Gsposp(const char *name, Int_t nr, const char *mother,  
104                          Float_t x, Float_t y, Float_t z, Int_t irot,
105                          const char *konly, Float_t *upar, Int_t np); 
106     void  Gsbool(const char* onlyVolName, const char* manyVolName);
107         
108     // Euclid                  
109     void WriteEuclid(const char* fileName, const char* topVolName, 
110                          Int_t number, Int_t nlevel); //new
111                                
112     // end of methods
113     // 
114
115     //
116     // methods for Geant4 only 
117  
118     G4VPhysicalVolume* CreateG4Geometry();
119     void SetUserLimits(const TG4G3CutVector& cuts,
120                        const TG4G3ControlVector& controls) const;
121     void ReadG3Geometry(G4String filePath);
122     void UseG3TrackingMediaLimits();
123     void ClearG3Tables();       
124     void ClearG3TablesFinal();
125     void OpenOutFile(G4String filePath);
126     void CloseOutFile();
127     
128     // set methods
129     void SetWriteGeometry(G4bool writeGeometry);
130     void SetMapSecond(const G4String& name);
131      
132   protected:
133     TG4GeometryManager(const TG4GeometryManager& right);
134
135     // operators
136     TG4GeometryManager& operator=(const TG4GeometryManager& right);
137
138   private:
139     // methods
140     void FillMediumMap();
141         
142     // static data members
143     static TG4GeometryManager*  fgInstance;     //this instance
144     static const G4double       fgLimitDensity; //material density limit
145                                                 //for setting max allowed step 
146     static const G4double       fgMaxStep;      //max allowed step in materials 
147                                                 //with density < fLimitDensity
148
149     // data members
150     TG4GeometryOutputManager*   fOutputManager;   //output manager 
151     TG4GeometryServices*        fGeometryServices;//geometry services
152     TG4IntMap        fMediumMap;       //map of volumes names to medias IDs
153     TG4NameMap       fNameMap;         //map of volumes names to modules names
154     TG4StringVector  fMaterialNameVector; // vector of material names sorted in the
155                                           // the order of materials in G3Mat
156     TG4StringVector  fMediumNameVector;   // vector of material names sorted in the
157                                           // the order of medias in G3Med
158     G4int            fMediumCounter;   //global medium counter
159     G4int            fMaterialCounter; //global material counter
160     G4int            fMatrixCounter;   //global matrix counter
161     G4bool           fUseG3TMLimits;   //if true: G3 limits are passed to G4 
162                                        //(in development)
163     G4bool           fWriteGeometry;   //if true: geometry parameters are written
164                                        //in a file (ASCII)  
165 };
166
167 // inline methods
168 inline TG4GeometryManager* TG4GeometryManager::Instance()
169 { return fgInstance; }
170
171 #endif //TG4_GEOMETRY_MANAGER_H
172