4 // Author: I. Hrivnacova
6 // Class TG4GeometryServices
7 // -------------------------
8 // The class provides service methods for accessing to Geant4 geometry,
9 // namely using AliMC volumes and materials identifiers.
11 #ifndef TG4_GEOMETRY_SERVICES_H
12 #define TG4_GEOMETRY_SERVICES_H
14 #include "TG4Globals.h"
23 class TG4G3ControlVector;
26 class G4LogicalVolume;
27 class G4VPhysicalVolume;
30 class TG4GeometryServices
33 TG4GeometryServices(TG4IntMap* mediumMap, TG4NameMap* nameMap);
35 // TG4GeometryServices();
36 // TG4GeometryServices(const TG4GeometryServices& right);
37 virtual ~TG4GeometryServices();
39 // static access method
40 static TG4GeometryServices* Instance();
44 G4double* CreateG4doubleArray(Float_t* array, G4int size) const;
45 G4String CutName(const char* name) const;
46 G4String CutMaterialName(const char* name) const;
47 G4String G4ToG3VolumeName(const G4String& name) const;
48 G4String GenerateLimitsName(G4int id, const G4String& medName,
49 const G4String& matName) const;
51 G4Material* MixMaterials(G4String name, G4double density,
52 const TG4StringVector& matNames,
53 const TG4doubleVector& matWeights);
55 void PrintNameMap() const;
56 void PrintLimits(const G4String& name) const;
57 void PrintVolumeLimits(const G4String& volumeName) const;
58 void PrintStatistics(G4bool open, G4bool close) const;
61 void SetWorld(G4VPhysicalVolume* world);
65 Int_t NofG3Volumes() const;
66 Int_t NofG4LogicalVolumes() const;
67 Int_t NofG4PhysicalVolumes() const;
68 G4bool IsSpecialControls() const;
69 G4VPhysicalVolume* GetWorld() const;
71 TG4Limits* GetLimits(G4UserLimits* limits) const;
72 const G4String& GetMapSecond(const G4String& name);
74 G4LogicalVolume* FindLogicalVolume(const G4String& name,
75 G4bool silent = false) const;
76 TG4Limits* FindLimits(const G4String& name,
77 G4bool silent = false) const;
80 G4int GetMediumId(G4LogicalVolume* lv) const;
81 G4double GetEffA(G4Material* material) const;
82 G4double GetEffZ(G4Material* material) const;
83 G4Material* FindMaterial(G4double a, G4double z, G4double density) const;
84 G4Material* FindMaterial(G4double* a, G4double* z, G4double density,
85 G4int nmat, G4double* wmat) const;
88 TG4GeometryServices();
89 TG4GeometryServices(const TG4GeometryServices& right);
92 TG4GeometryServices& operator=(const TG4GeometryServices& right);
96 G4bool IsG3Volume(const G4String& lvName) const;
97 G4bool CompareElement(G4double a, G4double z, const G4Element* elem) const;
98 G4bool CompareMaterial(G4int nofElements, G4double density,
99 const G4Material* material) const;
100 G4double* ConvertAtomWeight(G4int nmat, G4double* a, G4double* wmat) const;
102 // static data members
103 static TG4GeometryServices* fgInstance; //this instance
104 static const G4double fgkAZTolerance; //A,Z tolerance
105 static const G4double fgkDensityTolerance;//density tolerance (percentual)
108 TG4IntMap* fMediumMap; //map of volumes names to medias IDs
109 TG4NameMap* fNameMap; //map of volumes names to modules names
110 G4VPhysicalVolume* fWorld; //top pgysical volume (world)
114 inline TG4GeometryServices* TG4GeometryServices::Instance()
115 { return fgInstance; }
117 inline void TG4GeometryServices::SetWorld(G4VPhysicalVolume* world)
120 inline G4VPhysicalVolume* TG4GeometryServices::GetWorld() const
123 #endif //TG4_GEOMETRY_SERVICES_H