]> git.uio.no Git - u/mrichter/AliRoot.git/blob - AliGeant4/AliModulesComposition.h
redesign of detector construction classes (see AliGeant4_geometry_History)
[u/mrichter/AliRoot.git] / AliGeant4 / AliModulesComposition.h
1 // $Id$
2 // Category: geometry
3 //
4 // Author: I. Hrivnacova
5 //
6 // Class AliModulesComposition
7 // ---------------------------
8 // Detector construction base class for building geometry
9 // composed from modules.
10
11 #ifndef ALI_MODULES_COMPOSITION_H
12 #define ALI_MODULES_COMPOSITION_H
13
14 #include "AliModulesCompositionMessenger.h"
15 #include "AliModuleType.h"
16
17 #include <G4VUserDetectorConstruction.hh>
18 #include <globals.hh>
19 #include <g4std/vector>
20
21 class AliModuleConstruction;
22 class AliMagneticField;
23
24 class G4VPhysicalVolume;
25
26 class AliModulesComposition : public G4VUserDetectorConstruction
27 {
28   typedef G4std::vector<AliModuleConstruction*> AliModuleConstructionVector;
29   
30   public:
31     AliModulesComposition();
32     // --> protected
33     // AliModulesComposition(const AliModulesComposition& right);
34     virtual ~AliModulesComposition();
35
36     // methods
37     virtual G4VPhysicalVolume* Construct() = 0;
38     virtual void GenerateXMLGeometry() const = 0;
39     virtual void PrintMaterials() const;
40
41     // set methods
42     void SetMagField(G4double fieldValue);
43     void SetReadGeometry(G4bool readGeometry);
44     void SetWriteGeometry(G4bool writeGeometry);
45     
46   protected:
47     AliModulesComposition(const AliModulesComposition& right);
48
49     // operators
50     AliModulesComposition& operator=(const AliModulesComposition& right);
51
52     // methods  
53     void AddModule(const G4String& name, 
54                    G4int version,
55                    AliModuleType moduleType = kDetector);
56     void ConstructModules();
57     void SetProcessConfigToModules(G4bool processConfig);
58     
59   private:    
60     // methods
61     void Configure();
62     void CreateG4Geometry();
63     void SetReadGeometryToModules(G4bool readGeometry);
64     void SetWriteGeometryToModules(G4bool writeGeometry);
65
66     // data members
67     AliModulesCompositionMessenger  fMessenger;      //messenger
68     AliModuleConstructionVector     fModuleConstructionVector; //..
69                                         //vector of AliModuleConstruction
70     AliMagneticField*  fMagneticField;  //magnetic field
71     G4bool             fReadGeometry;   //option applied to all modules
72     G4bool             fWriteGeometry;  //option applied to all modules     
73 };
74
75 // inline methods
76
77 inline void AliModulesComposition::SetReadGeometry(G4bool readGeometry)
78 { fReadGeometry = readGeometry; }
79
80 inline void AliModulesComposition::SetWriteGeometry(G4bool writeGeometry)
81 { fWriteGeometry = writeGeometry; }
82
83 #endif //ALI_MODULES_COMPOSITION_H
84