4 // Author: I. Hrivnacova
6 // Class AliModulesComposition
7 // ---------------------------
8 // Detector construction base class for building geometry
9 // composed from independent modules with availability of interactive modules
12 #ifndef ALI_MODULES_COMPOSITION_H
13 #define ALI_MODULES_COMPOSITION_H
15 #include "AliModulesCompositionMessenger.h"
16 #include "AliModuleType.h"
18 #include <G4VUserDetectorConstruction.hh>
20 #include <g4std/vector>
22 class AliSingleModuleConstruction;
24 class AliMoreModulesConstruction;
25 class AliMagneticField;
27 class G4VPhysicalVolume;
29 class AliModulesComposition : public G4VUserDetectorConstruction
31 typedef G4std::vector<AliDetSwitch*> DetSwitchVector;
32 typedef DetSwitchVector::iterator DetSwitchIterator;
33 typedef DetSwitchVector::const_iterator DetSwitchConstIterator;
35 typedef G4std::vector<AliSingleModuleConstruction*> SingleModuleVector;
36 typedef SingleModuleVector::iterator SingleModuleIterator;
39 AliModulesComposition();
41 // AliModulesComposition(const AliModulesComposition& right);
42 virtual ~AliModulesComposition();
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;
57 void SetMagField(G4double fieldValue);
58 void SetReadGeometry(G4bool readGeometry);
59 void SetWriteGeometry(G4bool writeGeometry);
60 void SetProcessConfigToModules(G4bool processConfig);
63 G4String GetSwitchedDetsList() const;
64 G4String GetAvailableDetsList() const;
65 G4String GetAvailableDetsListWithCommas() const;
66 G4String GetDetNamesList() const;
67 G4String GetDetNamesListWithCommas() const;
70 AliModulesComposition(const AliModulesComposition& right);
73 AliModulesComposition& operator=(const AliModulesComposition& right);
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();
84 AliDetSwitch* GetDetSwitch(const G4String& moduleName) const;
87 DetSwitchVector fDetSwitchVector; //vector of AliDetSwitch
91 void SetReadGeometryToModules(G4bool readGeometry);
92 void SetWriteGeometryToModules(G4bool writeGeometry);
95 SingleModuleVector fModuleConstructionVector; //vector of
96 //single module constructions
97 AliMoreModulesConstruction* fMoreModulesConstruction; //..
98 //dependent modules construction
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
108 inline void AliModulesComposition::SetReadGeometry(G4bool readGeometry)
109 { fReadGeometry = readGeometry; }
111 inline void AliModulesComposition::SetWriteGeometry(G4bool writeGeometry)
112 { fWriteGeometry = writeGeometry; }
114 #endif //ALI_MODULES_COMPOSITION_H