4 // Author: I. Hrivnacova
6 // Class AliModulesComposition
7 // ---------------------------
8 // See the class description in the header file.
10 #include "AliModulesComposition.h"
11 #include "AliModuleConstruction.h"
12 #include "AliMagneticField.h"
13 #include "AliGlobals.h"
15 #include "AliModule.h"
17 #include "TG4GeometryManager.h"
19 #include <G4Material.hh>
21 //_____________________________________________________________________________
22 AliModulesComposition::AliModulesComposition()
23 : fReadGeometry(false),
24 fWriteGeometry(false),
30 //_____________________________________________________________________________
31 AliModulesComposition::AliModulesComposition(const AliModulesComposition& right)
35 AliGlobals::Exception("AliModulesComposition is protected from copying.");
38 //_____________________________________________________________________________
39 AliModulesComposition::~AliModulesComposition() {
41 delete fMagneticField;
46 //_____________________________________________________________________________
47 AliModulesComposition&
48 AliModulesComposition::operator=(const AliModulesComposition& right)
50 // check assignement to self
51 if (this == &right) return *this;
53 AliGlobals::Exception("AliModulesComposition is protected from assigning.");
62 //_____________________________________________________________________________
63 void AliModulesComposition::Configure()
65 // Executes the detectors setup Root macros
66 // (extracted from AliRoot Config.C) and
71 G4int nofModules = fModuleConstructionVector.size();
73 if (nofModules == 0) {
75 "AliModulesComposition::Configure: No modules are defined.");
79 for (G4int i=0; i<nofModules; i++)
80 fModuleConstructionVector[i]->Configure();
84 //_____________________________________________________________________________
85 void AliModulesComposition::CreateG4Geometry()
87 // Constructs geometry.
88 // G3 tables are process for all modules alltogether.
92 G4int nofModules = fModuleConstructionVector.size();
94 if (nofModules == 0) {
96 "AliModulesComposition::CreateG4Geometry: No modules are defined.");
100 // get geometry manager
101 TG4GeometryManager* pGeometryManager = TG4GeometryManager::Instance();
104 for (i=0; i<nofModules; i++) {
106 // fModuleConstructionVector[i]->Configure(files);
108 // register module name in the name map
109 AliModule* module = fModuleConstructionVector[i]->GetAliModule();
110 pGeometryManager->SetMapSecond(module->GetName());
112 G4bool readGeometry = fModuleConstructionVector[i]->GetReadGeometry();
113 G4bool writeGeometry = fModuleConstructionVector[i]->GetWriteGeometry();
114 G4String dataFilePath = fModuleConstructionVector[i]->GetDataFilePath();
117 // TG4GeometryManager uses g3tog4 methods for reading
118 // g3calls.dat files - as these methods do not fill name map
119 // they cannot be used for constructing more modules
122 // pGeometryManager->SetWriteGeometry(false);
123 // pGeometryManager->ReadG3Geometry(dataFilePath);
125 G4String text = "AliModulesComposition::Construct - Limitation:\n";
126 text = text + " Reading g3calls.dat is not implemented.";
127 AliGlobals::Exception(text);
130 // set geometry output stream for this module
131 pGeometryManager->SetWriteGeometry(writeGeometry);
133 pGeometryManager->OpenOutFile(dataFilePath);
135 // create geometry from AliRoot
137 // construct materials
138 module->CreateMaterials();
140 // construct G3 geometry
141 module->CreateGeometry();
144 pGeometryManager->CloseOutFile();
148 // construct G4 geometry
149 pGeometryManager->CreateG4Geometry();
152 // pGeometryManager->PrintNameMap();
154 for (i=0; i<nofModules; i++) {
156 // construct geometry for display
157 fModuleConstructionVector[i]->GetAliModule()->BuildGeometry();
160 // reset TG4GeometryManager
161 pGeometryManager->ClearG3Tables();
164 //_____________________________________________________________________________
165 void AliModulesComposition::SetReadGeometryToModules(G4bool readGeometry)
167 // Sets readGeometry control to all modules.
170 for (G4int i=0; i<fModuleConstructionVector.size(); i++)
171 fModuleConstructionVector[i]->SetReadGeometry(readGeometry);
174 //_____________________________________________________________________________
175 void AliModulesComposition::SetWriteGeometryToModules(G4bool writeGeometry)
177 // Sets writeGeometry control to all modules.
180 for (G4int i=0; i<fModuleConstructionVector.size(); i++)
181 fModuleConstructionVector[i]->SetWriteGeometry(writeGeometry);
188 //_____________________________________________________________________________
189 void AliModulesComposition::AddModule(const G4String& name,
191 AliModuleType moduleType)
193 // Adds module to the module construction vector.
196 AliModuleConstruction* moduleConstruction
197 = new AliModuleConstruction(name, version, moduleType);
199 fModuleConstructionVector.push_back(moduleConstruction);
202 //_____________________________________________________________________________
203 void AliModulesComposition::ConstructModules()
205 // Construct geometry of all modules (both standalone and dependent.)
208 // set common options
209 SetReadGeometryToModules(fReadGeometry);
210 SetWriteGeometryToModules(fWriteGeometry);
215 // construct dependent modules
219 //_____________________________________________________________________________
220 void AliModulesComposition::SetProcessConfigToModules(G4bool processConfig)
222 // Sets processConfig control to all modules.
225 for (G4int i=0; i<fModuleConstructionVector.size(); i++)
226 fModuleConstructionVector[i]->SetProcessConfig(processConfig);
233 //_____________________________________________________________________________
234 void AliModulesComposition::PrintMaterials() const
236 // Prints all materials.
239 const G4MaterialTable* matTable = G4Material::GetMaterialTable();
243 //_____________________________________________________________________________
244 void AliModulesComposition::SetMagField(G4double fieldValue)
246 // Sets uniform magnetic field to specified value.
249 // create fields if it does not exist
250 if (!fMagneticField) fMagneticField = new AliMagneticField();
253 fMagneticField->SetFieldValue(fieldValue);