]> git.uio.no Git - u/mrichter/AliRoot.git/blob - Flugg/FGeometryInit.hh
SetCaller() calls added to identify the routine that calls stpping. (E. Futo)
[u/mrichter/AliRoot.git] / Flugg / FGeometryInit.hh
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
33 #include <map>
34
35 class FluggNavigator;
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);
68   void PrintJrLtGeant();
69
70   //Map access methods
71   void  BuildMediaMap();
72   void  SetMediumFromName(const char* volName, int med, int volid);
73     //G4int GetRegionFromName(const char* volName) const;
74   G4int GetMedium(int) const;
75   int CurrentVolID(int ir, int& copyNo);
76   int CurrentVolOffID(int ir, int off, int& copyNo);
77   void Gmtod(double* xm, double* xd, int iflag);
78   void Gdtom(double* xd, double* xm, int iflag);    
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);
94
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;
111   G4int  fNRegions;
112   int* fRegionMediumMap;
113     
114   G4std::map<G4VPhysicalVolume*, int, G4std::less<G4VPhysicalVolume*> > fRegionVolumeMap;
115   G4std::map<G4VPhysicalVolume*, int, G4std::less<G4VPhysicalVolume*> > fMediumVolumeMap;
116   G4std::map<G4VPhysicalVolume*, int, G4std::less<G4VPhysicalVolume*> > fVolIdVolumeMap;
117
118   G4std::map<G4Material*, FlukaMaterial*, G4std::less<G4Material*> > G4FlukaMaterialMap;
119   G4std::map<G4Material*, FlukaCompound*, G4std::less<G4Material*> > G4FlukaCompoundMap;
120   //G4int NOfMaterials;
121 };
122
123 typedef  G4std::map<G4VPhysicalVolume*, int, G4std::less<G4VPhysicalVolume*> >::const_iterator RegionIterator;
124 typedef  G4std::vector<G4Material*>::const_iterator MatTableIterator;
125
126
127 //Include the file with the inline methods
128 #include "FGeometryInit.icc"
129
130 #endif