]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TGeant4/TG4GeometryServices.h
Modified AddTracks. Should be backward compatible
[u/mrichter/AliRoot.git] / TGeant4 / TG4GeometryServices.h
1 // $Id$
2 // Category: geometry
3 //
4 // Author: I. Hrivnacova
5 //
6 // Class TG4GeometryServices
7 // -------------------------
8 // The class provides service methods for accessing to Geant4 geometry,
9 // namely using AliMC volumes and materials identifiers. 
10
11 #ifndef TG4_GEOMETRY_SERVICES_H
12 #define TG4_GEOMETRY_SERVICES_H
13
14 #include "TG4Globals.h"
15
16 #include <globals.hh>
17
18 #include <Rtypes.h>
19
20 class TG4IntMap;
21 class TG4NameMap;
22 class TG4Limits;
23 class TG4G3ControlVector;
24
25 class G4Material;
26 class G4LogicalVolume;
27 class G4VPhysicalVolume;
28 class G4UserLimits;
29
30 class TG4GeometryServices
31 {
32   public:
33     TG4GeometryServices(TG4IntMap* mediumMap, TG4NameMap* nameMap);
34     // --> protected
35     // TG4GeometryServices();
36     // TG4GeometryServices(const TG4GeometryServices& right);
37     virtual ~TG4GeometryServices();
38
39     // static access method
40     static TG4GeometryServices* Instance();
41
42     // methods
43            // utilities  
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;
50
51     G4Material* MixMaterials(G4String name, G4double density,
52                              const TG4StringVector& matNames, 
53                              const TG4doubleVector& matWeights);
54            // printing 
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;
59
60     // set methods
61     void SetWorld(G4VPhysicalVolume* world);
62
63     // get methods
64            // volumes
65     Int_t NofG3Volumes() const; 
66     Int_t NofG4LogicalVolumes() const; 
67     Int_t NofG4PhysicalVolumes() const; 
68     G4bool IsSpecialControls() const;
69     G4VPhysicalVolume* GetWorld() const;
70
71     TG4Limits* GetLimits(G4UserLimits* limits) const;
72     const G4String& GetMapSecond(const G4String& name);
73
74     G4LogicalVolume* FindLogicalVolume(const G4String& name, 
75                                        G4bool silent = false) const;
76     TG4Limits*       FindLimits(const G4String& name, 
77                                        G4bool silent = false) const;
78
79           // materials
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;
86
87   protected:
88     TG4GeometryServices();
89     TG4GeometryServices(const TG4GeometryServices& right);
90
91     // operators
92     TG4GeometryServices& operator=(const TG4GeometryServices& right);
93
94   private:
95     // methods        
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;
101
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)
106  
107     // data members
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)
111 };
112
113 // inline methods
114 inline TG4GeometryServices* TG4GeometryServices::Instance()
115 { return fgInstance; }
116
117 inline void TG4GeometryServices::SetWorld(G4VPhysicalVolume* world)
118 { fWorld = world; }
119
120 inline G4VPhysicalVolume* TG4GeometryServices::GetWorld() const
121 { return fWorld; }
122
123 #endif //TG4_GEOMETRY_SERVICES_H
124