]> git.uio.no Git - u/mrichter/AliRoot.git/blob - AliGeant4/AliModulesComposition.h
ca90b8d2a5fa8880767b9d23edf87e556e031a06
[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 independent modules with availability of interactive modules
10 // setup.
11
12 #ifndef ALI_MODULES_COMPOSITION_H
13 #define ALI_MODULES_COMPOSITION_H
14
15 #include "AliModulesCompositionMessenger.h"
16 #include "AliModuleType.h"
17
18 #include <G4VUserDetectorConstruction.hh>
19 #include <globals.hh>
20 #include <g4std/vector>
21
22 class AliSingleModuleConstruction;
23 class AliDetSwitch;
24 class AliMoreModulesConstruction;
25 class AliMagneticField;
26
27 class G4VPhysicalVolume;
28
29 class AliModulesComposition : public G4VUserDetectorConstruction
30 {
31   typedef G4std::vector<AliDetSwitch*>    DetSwitchVector;
32   typedef DetSwitchVector::iterator       DetSwitchIterator;
33   typedef DetSwitchVector::const_iterator DetSwitchConstIterator;
34
35   typedef G4std::vector<AliSingleModuleConstruction*> SingleModuleVector;
36   typedef SingleModuleVector::iterator                SingleModuleIterator;    
37
38   public:
39     AliModulesComposition();
40     // --> protected
41     // AliModulesComposition(const AliModulesComposition& right);
42     virtual ~AliModulesComposition();
43
44     // methods
45     virtual G4VPhysicalVolume* Construct() = 0;
46     void SwitchDetOn(const G4String& moduleNameVer);
47     void SwitchDetOn(const G4String& moduleName, G4int version);
48     void SwitchDetOnDefault(const G4String& moduleName);
49     void SwitchDetOnPPR(const G4String& moduleName);
50     void SwitchDetOff(const G4String& moduleName);
51     void PrintSwitchedDets() const;
52     void PrintAvailableDets() const;
53     void PrintMaterials() const;
54     void GenerateXMLGeometry() const;
55
56     // set methods
57     void SetMagField(G4double fieldValue);
58     void SetReadGeometry(G4bool readGeometry);
59     void SetWriteGeometry(G4bool writeGeometry);
60     void SetProcessConfigToModules(G4bool processConfig);
61     
62     // get methods
63     G4String GetSwitchedDetsList() const;
64     G4String GetAvailableDetsList() const;
65     G4String GetAvailableDetsListWithCommas() const;
66     G4String GetDetNamesList() const;
67     G4String GetDetNamesListWithCommas() const;
68     
69   protected:
70     AliModulesComposition(const AliModulesComposition& right);
71
72     // operators
73     AliModulesComposition& operator=(const AliModulesComposition& right);
74
75     // methods  
76     void AddDetSwitch(AliDetSwitch* detSwitch);
77     void AddSingleModuleConstruction(const G4String& name, G4int version,
78                                      AliModuleType moduleType = kDetector);
79     void AddMoreModuleConstruction(const G4String& name, G4int version,
80                                      AliModuleType moduleType = kDetector);
81     void ConstructModules();
82
83     // get methods
84     AliDetSwitch* GetDetSwitch(const G4String& moduleName) const;
85
86     // data members
87     DetSwitchVector  fDetSwitchVector; //vector of AliDetSwitch
88     
89   private:    
90     // methods
91     void SetReadGeometryToModules(G4bool readGeometry);
92     void SetWriteGeometryToModules(G4bool writeGeometry);
93
94     // data members
95     SingleModuleVector           fModuleConstructionVector; //vector of 
96                                           //single module constructions 
97     AliMoreModulesConstruction*  fMoreModulesConstruction;  //..
98                                           //dependent modules construction
99
100     AliMagneticField*               fMagneticField;  //magnetic field
101     AliModulesCompositionMessenger  fMessenger;      //messenger
102     G4bool  fReadGeometry;        //option applied to all modules
103     G4bool  fWriteGeometry;       //option applied to all modules     
104 };
105
106 // inline methods
107
108 inline void AliModulesComposition::SetReadGeometry(G4bool readGeometry)
109 { fReadGeometry = readGeometry; }
110
111 inline void AliModulesComposition::SetWriteGeometry(G4bool writeGeometry)
112 { fWriteGeometry = writeGeometry; }
113
114 #endif //ALI_MODULES_COMPOSITION_H
115