4 // Detector construction base class for building geometry
5 // composed from independent modules with availability of interactive modules
8 #ifndef ALI_MODULES_COMPOSITION_H
9 #define ALI_MODULES_COMPOSITION_H
11 #include "AliModuleType.h"
13 #include <G4VUserDetectorConstruction.hh>
16 #include <g4rw/tpordvec.h>
18 class AliSingleModuleConstruction;
20 class AliModulesCompositionMessenger;
21 class AliMoreModulesConstruction;
22 class AliMagneticField;
24 class G4VPhysicalVolume;
26 class AliModulesComposition : public G4VUserDetectorConstruction
28 typedef G4RWTPtrOrderedVector<AliDetSwitch> AliDetSwitchRWVector;
29 typedef G4RWTPtrOrderedVector<AliSingleModuleConstruction>
30 AliSingleModuleConstructionRWVector;
33 AliModulesComposition();
35 // AliModulesComposition(const AliModulesComposition& right);
36 virtual ~AliModulesComposition();
39 virtual G4VPhysicalVolume* Construct() = 0;
40 void SwitchDetOn(G4String moduleNameVer);
41 void SwitchDetOn(G4String moduleName, G4int version);
42 void SwitchDetOnDefault(G4String moduleName);
43 void SwitchDetOff(G4String moduleName);
44 void PrintSwitchedDets() const;
45 void PrintAvailableDets() const;
46 void PrintMaterials() const;
47 void GenerateXMLGeometry() const;
50 void SetMagField(G4double fieldValue);
51 void SetAllLVSensitive(G4bool allLVSensitive);
52 void SetForceAllLVSensitive(G4bool allLVSensitive);
53 void SetReadGeometry(G4bool readGeometry);
54 void SetWriteGeometry(G4bool writeGeometry);
55 void SetProcessConfigToModules(G4bool processConfig);
58 const G4RWTPtrOrderedVector<AliDetSwitch>& GetDetSwitchVector() const;
59 G4String GetSwitchedDetsList() const;
60 G4String GetAvailableDetsList() const;
61 G4String GetAvailableDetsListWithCommas() const;
62 G4String GetDetNamesList() const;
63 G4String GetDetNamesListWithCommas() const;
64 //G4ThreeVector GetMagField() const;
67 AliModulesComposition(const AliModulesComposition& right);
70 AliModulesComposition& operator=(const AliModulesComposition& right);
73 void AddDetSwitch(AliDetSwitch* detSwitch);
74 void AddSingleModuleConstruction(G4String moduleName, G4int version,
75 AliModuleType moduleType = kDetector);
76 void AddMoreModuleConstruction(G4String moduleName, G4int version,
77 AliModuleType moduleType = kDetector);
78 void ConstructModules();
82 void SetReadGeometryToModules(G4bool readGeometry);
83 void SetWriteGeometryToModules(G4bool writeGeometry);
84 void SetAllLVSensitiveToModules(G4bool allSensitive);
87 AliDetSwitchRWVector fDetSwitchVector; //..
88 //vector of AliDetSwitch
89 AliSingleModuleConstructionRWVector fModuleConstructionVector; //..
91 //AliSingleModuleConstruction
92 AliMoreModulesConstruction* fMoreModulesConstruction; //..
93 //AliMoreModulesConstruction
95 AliMagneticField* fMagneticField; //magnetic field
96 AliModulesCompositionMessenger* fMessenger; //messenger
97 G4bool fAllLVSensitive; //option applied to all modules
98 //(overriden by modules specific setting)
99 G4bool fForceAllLVSensitive; //option applied to all modules
100 //(overrides modules specific setting)
101 G4bool fReadGeometry; //option applied to all modules
102 G4bool fWriteGeometry; //option applied to all modules
107 inline void AliModulesComposition::SetAllLVSensitive(G4bool allLVSensitive)
108 { fAllLVSensitive = allLVSensitive; }
110 inline void AliModulesComposition::SetForceAllLVSensitive(G4bool forceAllLVSensitive)
111 { fForceAllLVSensitive = forceAllLVSensitive; }
113 inline void AliModulesComposition::SetReadGeometry(G4bool readGeometry)
114 { fReadGeometry = readGeometry; }
116 inline void AliModulesComposition::SetWriteGeometry(G4bool writeGeometry)
117 { fWriteGeometry = writeGeometry; }
119 #endif //ALI_MODULES_COMPOSITION_H