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
11 #ifndef FGeometryInit_h
12 #define FGeometryInit_h 1
14 //#include "g4std/fstream"
15 //#include "g4std/iomanip"
16 //#include "g4rw/cstring.h"
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"
39 class FGeometryInit : public G4TransportationManager {
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();
52 void PrintHistories();
54 void DeleteHistories();
55 void UpdateHistories(const G4NavigationHistory *, G4int);
56 inline G4TouchableHistory * GetTouchableHistory();
57 inline G4TouchableHistory * GetOldNavHist();
58 inline G4TouchableHistory * GetTempNavHist();
61 inline void DelHistArray();
62 inline G4int * GetHistArray();
64 void InitJrLtGeantArray();
65 inline G4int * GetJrLtGeantArray();
66 inline G4int GetLttcFlagGeant();
67 void SetLttcFlagGeant(G4int);
68 void PrintJrLtGeant();
73 void SetMediumFromName(const char* volName, int med, int volid);
74 //G4int GetRegionFromName(const char* volName) const;
75 int GetLastMaterialIndex() const;
76 G4int GetMedium(int) const;
77 int CurrentVolID(int ir, int& copyNo);
78 int CurrentVolOffID(int ir, int off, int& copyNo);
79 void Gmtod(double* xm, double* xd, int iflag);
80 void Gdtom(double* xd, double* xm, int iflag);
83 void BuildRegionsMap();
84 void PrintRegionsMap(std::ostream& os);
85 void BuildMaterialTables();
86 FlukaMaterial* BuildFlukaMaterialFromElement(const G4Element* element,
88 FlukaMaterial* BuildFlukaMaterialFromIsotope(const G4Isotope* isotope,
90 FlukaCompound* BuildFlukaCompoundFromMaterial(const G4Material* material);
91 FlukaCompound* BuildFlukaCompoundFromElement(const G4Element* element,
93 void PrintMaterialTables(std::ostream& os);
94 void PrintAssignmat(std::ostream& os);
95 void PrintMagneticField(std::ostream& os);
98 FGeometryInit(); //costructor
101 G4VUserDetectorConstruction * fDetector;
102 G4FieldManager * fFieldManager;
103 G4TransportationManager * fTransportationManager;
104 static FGeometryInit *flagInstance;
105 G4VPhysicalVolume * myTopNode;
106 G4GeometryManager * ptrGeoMan;
108 G4TouchableHistory * ptrTouchHist;
109 G4TouchableHistory * ptrOldNavHist;
110 G4TouchableHistory * ptrTempNavHist;
111 G4int * ptrJrLtGeant;
114 int* fRegionMediumMap;
116 std::map<G4VPhysicalVolume*, int, std::less<G4VPhysicalVolume*> > fRegionVolumeMap;
117 std::map<G4VPhysicalVolume*, int, std::less<G4VPhysicalVolume*> > fMediumVolumeMap;
118 std::map<G4VPhysicalVolume*, int, std::less<G4VPhysicalVolume*> > fVolIdVolumeMap;
120 std::map<G4Material*, FlukaMaterial*, std::less<G4Material*> > G4FlukaMaterialMap;
121 std::map<G4Material*, FlukaCompound*, std::less<G4Material*> > G4FlukaCompoundMap;
122 //G4int NOfMaterials;
125 typedef std::map<G4VPhysicalVolume*, int, std::less<G4VPhysicalVolume*> >::const_iterator RegionIterator;
126 typedef std::vector<G4Material*>::const_iterator MatTableIterator;
129 //Include the file with the inline methods
130 #include "FGeometryInit.icc"