26911512 |
1 | |
2 | // Flugg tag |
3 | |
4 | // modified 10/IX/99 for including preStepPoint |
5 | // modified 28/IX/99 for delating allocated memory |
6 | // modified 4/X/99 function FreeMemory |
7 | // modified 2/III/00 base class G4TransportationManager included |
8 | // modified 20/III/00 PrintHistories() included |
9 | |
10 | |
11 | #ifndef FGeometryInit_h |
12 | #define FGeometryInit_h 1 |
13 | |
14 | //#include "g4std/fstream" |
15 | //#include "g4std/iomanip" |
16 | //#include "g4rw/cstring.h" |
17 | #include "globals.hh" |
18 | |
19 | #include "G4LogicalVolume.hh" |
20 | #include "G4PhysicalVolumeStore.hh" |
21 | #include "G4VPhysicalVolume.hh" |
22 | #include "G4Material.hh" |
23 | #include "G4MaterialTable.hh" |
24 | #include "G4Isotope.hh" |
25 | #include "G4VUserDetectorConstruction.hh" |
26 | #include "G4TouchableHistory.hh" |
27 | #include "G4GeometryManager.hh" |
28 | #include "G4FieldManager.hh" |
29 | #include "G4UniformMagField.hh" |
30 | #include "G4TransportationManager.hh" |
31 | |
32 | |
26d97e06 |
33 | #include <map> |
34 | |
26911512 |
35 | class FluggNavigator; |
26d97e06 |
36 | class FlukaMaterial; |
37 | class FlukaCompound; |
38 | |
39 | class FGeometryInit : public G4TransportationManager { |
40 | |
41 | public: |
42 | ~FGeometryInit(); //destructor |
43 | static FGeometryInit *GetInstance(); |
44 | inline FluggNavigator *getNavigatorForTracking(); |
45 | inline G4FieldManager * getFieldManager(); |
46 | inline void setDetConstruction(G4VUserDetectorConstruction* detector); |
47 | inline void setDetector(); |
48 | inline void setMotherVolume(); |
49 | void createFlukaMatFile(); |
50 | void closeGeometry(); |
51 | |
52 | void PrintHistories(); |
53 | void InitHistories(); |
54 | void DeleteHistories(); |
55 | void UpdateHistories(const G4NavigationHistory *, G4int); |
56 | inline G4TouchableHistory * GetTouchableHistory(); |
57 | inline G4TouchableHistory * GetOldNavHist(); |
58 | inline G4TouchableHistory * GetTempNavHist(); |
59 | |
60 | void InitHistArray(); |
61 | inline void DelHistArray(); |
62 | inline G4int * GetHistArray(); |
63 | |
64 | void InitJrLtGeantArray(); |
65 | inline G4int * GetJrLtGeantArray(); |
66 | inline G4int GetLttcFlagGeant(); |
67 | void SetLttcFlagGeant(G4int); |
bf547b2f |
68 | void PrintJrLtGeant(); |
69 | |
70 | //Map access methods |
1617d9fa |
71 | void BuildMediaMap(); |
6a53de92 |
72 | void SetMediumFromName(const char* volName, int med, int volid); |
1617d9fa |
73 | //G4int GetRegionFromName(const char* volName) const; |
74 | G4int GetMedium(int) const; |
6a53de92 |
75 | int CurrentVolID(int ir, int& copyNo); |
76 | int CurrentVolOffID(int ir, int off, int& copyNo); |
dc37cac6 |
77 | void Gmtod(double* xm, double* xd, int iflag); |
78 | void Gdtom(double* xd, double* xm, int iflag); |
26d97e06 |
79 | |
80 | protected: |
81 | void BuildRegionsMap(); |
82 | void PrintRegionsMap(G4std::ostream& os); |
83 | void BuildMaterialTables(); |
84 | FlukaMaterial* BuildFlukaMaterialFromElement(const G4Element* element, |
85 | G4double matDensity); |
86 | FlukaMaterial* BuildFlukaMaterialFromIsotope(const G4Isotope* isotope, |
87 | G4double matDensity); |
88 | FlukaCompound* BuildFlukaCompoundFromMaterial(const G4Material* material); |
89 | FlukaCompound* BuildFlukaCompoundFromElement(const G4Element* element, |
90 | G4double matDensity); |
91 | void PrintMaterialTables(G4std::ostream& os); |
92 | void PrintAssignmat(G4std::ostream& os); |
93 | void PrintMagneticField(G4std::ostream& os); |
26911512 |
94 | |
26d97e06 |
95 | private: |
96 | FGeometryInit(); //costructor |
97 | |
98 | private: |
99 | G4VUserDetectorConstruction * fDetector; |
100 | G4FieldManager * fFieldManager; |
101 | G4TransportationManager * fTransportationManager; |
102 | static FGeometryInit *flagInstance; |
103 | G4VPhysicalVolume * myTopNode; |
104 | G4GeometryManager * ptrGeoMan; |
105 | G4int * ptrArray; |
106 | G4TouchableHistory * ptrTouchHist; |
107 | G4TouchableHistory * ptrOldNavHist; |
108 | G4TouchableHistory * ptrTempNavHist; |
109 | G4int * ptrJrLtGeant; |
110 | G4int flagLttcGeant; |
1617d9fa |
111 | G4int fNRegions; |
112 | int* fRegionMediumMap; |
113 | |
26d97e06 |
114 | G4std::map<G4VPhysicalVolume*, int, G4std::less<G4VPhysicalVolume*> > fRegionVolumeMap; |
1617d9fa |
115 | G4std::map<G4VPhysicalVolume*, int, G4std::less<G4VPhysicalVolume*> > fMediumVolumeMap; |
6a53de92 |
116 | G4std::map<G4VPhysicalVolume*, int, G4std::less<G4VPhysicalVolume*> > fVolIdVolumeMap; |
1617d9fa |
117 | |
26d97e06 |
118 | G4std::map<G4Material*, FlukaMaterial*, G4std::less<G4Material*> > G4FlukaMaterialMap; |
119 | G4std::map<G4Material*, FlukaCompound*, G4std::less<G4Material*> > G4FlukaCompoundMap; |
120 | //G4int NOfMaterials; |
26911512 |
121 | }; |
122 | |
bf547b2f |
123 | typedef G4std::map<G4VPhysicalVolume*, int, G4std::less<G4VPhysicalVolume*> >::const_iterator RegionIterator; |
26d97e06 |
124 | typedef G4std::vector<G4Material*>::const_iterator MatTableIterator; |
125 | |
26911512 |
126 | |
127 | //Include the file with the inline methods |
128 | #include "FGeometryInit.icc" |
129 | |
130 | #endif |