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 : AliVerbose("modulesComposition"),
25 fWriteGeometry(false),
31 //_____________________________________________________________________________
32 AliModulesComposition::AliModulesComposition(const AliModulesComposition& right)
33 : AliVerbose("modulesComposition"),
37 AliGlobals::Exception("AliModulesComposition is protected from copying.");
40 //_____________________________________________________________________________
41 AliModulesComposition::~AliModulesComposition() {
43 delete fMagneticField;
48 //_____________________________________________________________________________
49 AliModulesComposition&
50 AliModulesComposition::operator=(const AliModulesComposition& right)
52 // check assignement to self
53 if (this == &right) return *this;
55 AliGlobals::Exception("AliModulesComposition is protected from assigning.");
64 //_____________________________________________________________________________
65 void AliModulesComposition::Configure()
67 // Executes the detectors setup Root macros
68 // (extracted from AliRoot Config.C) and
73 G4int nofModules = fModuleConstructionVector.size();
75 if (nofModules == 0) {
77 "AliModulesComposition::Configure: No modules are defined.");
81 for (G4int i=0; i<nofModules; i++)
82 fModuleConstructionVector[i]->Configure();
86 //_____________________________________________________________________________
87 void AliModulesComposition::CreateG4Geometry()
89 // Constructs geometry.
90 // G3 tables are process for all modules alltogether.
94 G4int nofModules = fModuleConstructionVector.size();
96 if (nofModules == 0) {
98 "AliModulesComposition::CreateG4Geometry: No modules are defined.");
102 // get geometry manager
103 TG4GeometryManager* pGeometryManager = TG4GeometryManager::Instance();
106 for (i=0; i<nofModules; i++) {
108 // fModuleConstructionVector[i]->Configure(files);
110 // register module name in the name map
111 AliModule* module = fModuleConstructionVector[i]->GetAliModule();
112 pGeometryManager->SetMapSecond(module->GetName());
114 G4bool readGeometry = fModuleConstructionVector[i]->GetReadGeometry();
115 G4bool writeGeometry = fModuleConstructionVector[i]->GetWriteGeometry();
116 G4String dataFilePath = fModuleConstructionVector[i]->GetDataFilePath();
119 // TG4GeometryManager uses g3tog4 methods for reading
120 // g3calls.dat files - as these methods do not fill name map
121 // they cannot be used for constructing more modules
124 // pGeometryManager->SetWriteGeometry(false);
125 // pGeometryManager->ReadG3Geometry(dataFilePath);
127 G4String text = "AliModulesComposition::Construct - Limitation:\n";
128 text = text + " Reading g3calls.dat is not implemented.";
129 AliGlobals::Exception(text);
132 // set geometry output stream for this module
133 pGeometryManager->SetWriteGeometry(writeGeometry);
135 pGeometryManager->OpenOutFile(dataFilePath);
137 // create geometry from AliRoot
139 // construct materials
140 module->CreateMaterials();
142 // construct G3 geometry
143 module->CreateGeometry();
146 pGeometryManager->CloseOutFile();
150 // construct G4 geometry
151 pGeometryManager->CreateG4Geometry();
154 // pGeometryManager->PrintNameMap();
157 // moved to AliSDConstruction
158 // to be performed after Init (required for MUON)
160 for (i=0; i<nofModules; i++) {
162 // construct geometry for display
163 fModuleConstructionVector[i]->GetAliModule()->BuildGeometry();
167 // reset TG4GeometryManager
168 pGeometryManager->ClearG3Tables();
171 //_____________________________________________________________________________
172 void AliModulesComposition::SetReadGeometryToModules(G4bool readGeometry)
174 // Sets readGeometry control to all modules.
177 for (G4int i=0; i<fModuleConstructionVector.size(); i++)
178 fModuleConstructionVector[i]->SetReadGeometry(readGeometry);
181 //_____________________________________________________________________________
182 void AliModulesComposition::SetWriteGeometryToModules(G4bool writeGeometry)
184 // Sets writeGeometry control to all modules.
187 for (G4int i=0; i<fModuleConstructionVector.size(); i++)
188 fModuleConstructionVector[i]->SetWriteGeometry(writeGeometry);
195 //_____________________________________________________________________________
196 void AliModulesComposition::AddModule(const G4String& name,
198 AliModuleType moduleType)
200 // Adds module to the module construction vector.
203 AliModuleConstruction* moduleConstruction
204 = new AliModuleConstruction(name, version, moduleType);
206 fModuleConstructionVector.push_back(moduleConstruction);
209 //_____________________________________________________________________________
210 void AliModulesComposition::ConstructModules()
212 // Construct geometry of all modules (both standalone and dependent.)
215 // set common options
216 SetReadGeometryToModules(fReadGeometry);
217 SetWriteGeometryToModules(fWriteGeometry);
222 // construct dependent modules
226 //_____________________________________________________________________________
227 void AliModulesComposition::SetProcessConfigToModules(G4bool processConfig)
229 // Sets processConfig control to all modules.
232 for (G4int i=0; i<fModuleConstructionVector.size(); i++)
233 fModuleConstructionVector[i]->SetProcessConfig(processConfig);
240 //_____________________________________________________________________________
241 void AliModulesComposition::PrintMaterials() const
243 // Prints all materials.
246 const G4MaterialTable* matTable = G4Material::GetMaterialTable();
250 //_____________________________________________________________________________
251 void AliModulesComposition::SetMagField(G4double fieldValue)
253 // Sets uniform magnetic field to specified value.
256 // create fields if it does not exist
257 if (!fMagneticField) fMagneticField = new AliMagneticField();
260 fMagneticField->SetFieldValue(fieldValue);