4 // See the class description in the header file.
6 #include "AliModulesComposition.h"
7 #include "AliModulesCompositionMessenger.h"
8 #include "AliSingleModuleConstruction.h"
9 #include "AliMoreModulesConstruction.h"
10 #include "AliMagneticField.h"
11 #include "AliGlobals.h"
13 #include <G4UniformMagField.hh>
14 #include <G4FieldManager.hh>
15 #include <G4TransportationManager.hh>
17 AliModulesComposition::AliModulesComposition()
18 : fAllLVSensitive(false),
23 fMoreModulesConstruction = new AliMoreModulesConstruction();
24 fMagneticField = new AliMagneticField();
25 fMessenger = new AliModulesCompositionMessenger(this);
28 AliModulesComposition::AliModulesComposition(const AliModulesComposition& right)
31 AliGlobals::Exception("AliModulesComposition is protected from copying.");
34 AliModulesComposition::~AliModulesComposition() {
36 delete fMoreModulesConstruction;
37 delete fMagneticField;
40 // destroy det switch vector
41 fDetSwitchVector.clearAndDestroy();
43 // destroy det construction vector
44 fModuleConstructionVector.clearAndDestroy();
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.");
62 void AliModulesComposition::AddDetSwitch(AliDetSwitch* detSwitch)
64 // Adds detSwitch to the detSwitch vector.
67 fDetSwitchVector.insert(detSwitch);
68 fMessenger->SetCandidates();
71 void AliModulesComposition::AddSingleModuleConstruction(G4String moduleName,
72 G4int version, AliModuleType moduleType)
74 // Adds SingleModuleConstruction.
77 AliSingleModuleConstruction* moduleConstruction
78 = new AliSingleModuleConstruction(moduleName, version, moduleType);
79 fModuleConstructionVector.insert(moduleConstruction);
82 void AliModulesComposition::AddMoreModuleConstruction(G4String moduleName,
83 G4int version, AliModuleType moduleType)
85 // Adds module to MoreModulesConstruction (construction of dependent
89 fMoreModulesConstruction->AddModule(moduleName, version, moduleType);
92 void AliModulesComposition::ConstructModules()
94 // Construct geometry of all modules (both standalone and dependent.)
98 SetReadGeometryToModules(fReadGeometry);
99 SetWriteGeometryToModules(fWriteGeometry);
100 SetAllLVSensitiveToModules(fAllLVSensitive);
101 // common setAllLVSensitive is overridden by Config.in
104 // one module constructions
105 G4int nofDets = fModuleConstructionVector.entries();
106 for (G4int i=0; i<nofDets; i++) {
107 G4cout << "Module " << fModuleConstructionVector[i]->GetDetName()
108 << " will be constructed now." << G4endl;
109 fModuleConstructionVector[i]->Construct();
112 // more modules construction
113 G4int nofModules = fMoreModulesConstruction->GetNofModules();
115 G4cout << "Dependent modules will be constructed now." << G4endl;
116 fMoreModulesConstruction->Construct();
120 void AliModulesComposition::SetReadGeometryToModules(G4bool readGeometry)
122 // Sets readGeometry control to all modules.
125 // single module constructions
126 G4int nofDets = fModuleConstructionVector.entries();
128 for (i=0; i<nofDets; i++)
129 fModuleConstructionVector[i]->SetReadGeometry(readGeometry);
131 // more modules construction
132 nofDets = fMoreModulesConstruction->GetNofModules();
133 for (i=0; i<nofDets; i++) {
134 AliSingleModuleConstruction* moduleConstruction
135 = fMoreModulesConstruction->GetModuleConstruction(i);
136 moduleConstruction->SetReadGeometry(readGeometry);
140 void AliModulesComposition::SetWriteGeometryToModules(G4bool writeGeometry)
142 // Sets writeGeometry control to all modules.
145 // single module constructions
146 G4int nofDets = fModuleConstructionVector.entries();
148 for (i=0; i<nofDets; i++)
149 fModuleConstructionVector[i]->SetWriteGeometry(writeGeometry);
151 // more modules construction
152 nofDets = fMoreModulesConstruction->GetNofModules();
153 for (i=0; i<nofDets; i++) {
154 AliSingleModuleConstruction* moduleConstruction
155 = fMoreModulesConstruction->GetModuleConstruction(i);
156 moduleConstruction->SetWriteGeometry(writeGeometry);
160 void AliModulesComposition::SetAllLVSensitiveToModules(G4bool allSensitive)
162 // Sets setAllSensitive control to all modules.
165 // single module constructions
166 G4int nofDets = fModuleConstructionVector.entries();
168 for (i=0; i<nofDets; i++)
169 fModuleConstructionVector[i]->SetAllLVSensitive(allSensitive);
171 // more modules construction
172 nofDets = fMoreModulesConstruction->GetNofModules();
173 for (i=0; i<nofDets; i++) {
174 AliSingleModuleConstruction* moduleConstruction
175 = fMoreModulesConstruction->GetModuleConstruction(i);
176 moduleConstruction->SetAllLVSensitive(allSensitive);
180 void AliModulesComposition::SetProcessConfigToModules(G4bool processConfig)
182 // Sets processConfig control to all modules.
185 // single module constructions
186 G4int nofDets = fModuleConstructionVector.entries();
188 for (i=0; i<nofDets; i++)
189 fModuleConstructionVector[i]->SetProcessConfig(processConfig);
191 // more modules construction
192 nofDets = fMoreModulesConstruction->GetNofModules();
193 for (i=0; i<nofDets; i++) {
194 AliSingleModuleConstruction* moduleConstruction
195 = fMoreModulesConstruction->GetModuleConstruction(i);
196 moduleConstruction->SetProcessConfig(processConfig);
202 void AliModulesComposition::SwitchDetOn(G4String moduleNameVer)
204 // Switchs on module specified by name and version.
207 G4int nofDets = fDetSwitchVector.entries();
208 if (moduleNameVer == "ALL") {
209 for (G4int id=0; id<nofDets; id++) {
210 G4int defaultVersion = fDetSwitchVector[id]->GetDefaultVersion();
211 fDetSwitchVector[id]->SwitchOn(defaultVersion);
214 else if (moduleNameVer == "NONE") {
215 for (G4int id=0; id<nofDets; id++)
216 fDetSwitchVector[id]->SwitchOff();
219 // get version number
220 G4int len = moduleNameVer.length();
221 G4String moduleName = moduleNameVer(0, len-1);
222 G4String version = moduleNameVer(len-1, 1);
223 G4int iVersion = AliGlobals::StringToInt(version);
226 // in case the version number is not provided
227 // the default one is set
228 SwitchDetOnDefault(moduleNameVer);
231 SwitchDetOn(moduleName, iVersion);
235 void AliModulesComposition::SwitchDetOn(G4String moduleName, G4int version)
237 // Switchs on module specified by name and version.
240 G4int nofDets = fDetSwitchVector.entries();
241 for (G4int id=0; id<nofDets; id++) {
242 G4String iDetName = fDetSwitchVector[id]->GetDetName();
243 if (iDetName == moduleName) {
244 fDetSwitchVector[id]->SwitchOn(version);
248 AliGlobals::Exception(
249 "AliModulesComposition: Wrong detector name for " + moduleName + ".");
252 void AliModulesComposition::SwitchDetOnDefault(G4String moduleName)
254 // Switchs on module specified by name with default version.
257 G4int nofDets = fDetSwitchVector.entries();
258 for (G4int id=0; id<nofDets; id++) {
259 G4String iDetName = fDetSwitchVector[id]->GetDetName();
260 if (iDetName == moduleName) {
261 fDetSwitchVector[id]->SwitchOnDefault();
265 AliGlobals::Exception(
266 "AliModulesComposition: Wrong detector name for " + moduleName + ".");
269 void AliModulesComposition::SwitchDetOff(G4String moduleName)
271 // Switchs off module specified by name.
274 G4int nofDets = fDetSwitchVector.entries();
275 if (moduleName == "ALL") {
276 for (G4int id=0; id<nofDets; id++)
277 fDetSwitchVector[id]->SwitchOff();
280 for (G4int id=0; id<nofDets; id++) {
281 G4String iDetName = fDetSwitchVector[id]->GetDetName();
282 if (iDetName == moduleName) {
283 fDetSwitchVector[id]->SwitchOff();
288 AliGlobals::Exception(
289 "AliModulesComposition: Wrong detector name for " + moduleName + ".");
292 void AliModulesComposition::PrintSwitchedDets() const
294 // Lists switched detectors.
297 G4String svList = GetSwitchedDetsList();
299 G4cout << "Switched Alice detectors: " << G4endl;
300 G4cout << "--------------------------" << G4endl;
301 G4cout << svList << G4endl;
304 void AliModulesComposition::PrintAvailableDets() const
306 // Lists available detectors.
309 G4String avList = GetAvailableDetsList();
311 G4cout << "Available Alice detectors: " << G4endl;
312 G4cout << "---------------------------" << G4endl;
313 G4cout << avList << G4endl;
316 G4String AliModulesComposition::GetSwitchedDetsList() const
318 // Returns list of switched detectors.
321 G4String svList = "";
323 G4int nofDets = fDetSwitchVector.entries();
324 G4int nofSwitchedDets = 0;
325 for (G4int id=0; id<nofDets; id++) {
326 G4int iVersion = fDetSwitchVector[id]->GetSwitchedVersion();
329 G4String moduleNameVer = fDetSwitchVector[id]->GetDetName();
330 AliGlobals::AppendNumberToString(moduleNameVer, iVersion);
331 svList += moduleNameVer;
336 if (nofSwitchedDets == nofDets) svList = "ALL: " + svList;
337 if (nofSwitchedDets == 0) svList = "NONE";
342 const G4RWTPtrOrderedVector<AliDetSwitch>&
343 AliModulesComposition::GetDetSwitchVector() const
345 // Returns detSwitch vector.
348 //const AliDetSwitchVector& vector = fDetSwitchVector;
349 const G4RWTPtrOrderedVector<AliDetSwitch>& vector = fDetSwitchVector;
353 G4String AliModulesComposition::GetAvailableDetsList() const
355 // Returns list of available detectors.
358 G4String svList = "";
360 G4int nofDets = fDetSwitchVector.entries();
361 for (G4int id=0; id<nofDets; id++) {
362 G4int nofVersions = fDetSwitchVector[id]->GetNofVersions();
363 for (G4int iv=0; iv<nofVersions; iv++) {
364 G4String moduleNameVer = fDetSwitchVector[id]->GetDetName();
365 AliGlobals::AppendNumberToString(moduleNameVer, iv);
366 svList += moduleNameVer;
374 G4String AliModulesComposition::GetAvailableDetsListWithCommas() const
376 // Returns list of available detectors with commas.
379 G4String svList = "";
381 G4int nofDets = fDetSwitchVector.entries();
382 for (G4int id=0; id<nofDets; id++) {
383 G4int nofVersions = fDetSwitchVector[id]->GetNofVersions();
384 for (G4int iv=0; iv<nofVersions; iv++) {
385 G4String moduleNameVer = fDetSwitchVector[id]->GetDetName();
386 AliGlobals::AppendNumberToString(moduleNameVer, iv);
387 svList += moduleNameVer;
388 if (iv<nofVersions-1) svList += "/";
389 else if (id < nofDets-1) svList += ", ";
396 G4String AliModulesComposition::GetDetNamesList() const
398 // Returns list of detector names.
401 G4String svList = "";
403 G4int nofDets = fDetSwitchVector.entries();
404 for (G4int id=0; id<nofDets; id++) {
405 svList += fDetSwitchVector[id]->GetDetName();
412 G4String AliModulesComposition::GetDetNamesListWithCommas() const
414 // Returns list of detector names with commas.
417 G4String svList = "";
419 G4int nofDets = fDetSwitchVector.entries();
420 for (G4int id=0; id<nofDets; id++) {
421 svList += fDetSwitchVector[id]->GetDetName();
422 if (id < nofDets-1) svList += ", ";
428 void AliModulesComposition::SetMagField(G4double fieldValue)
430 // Sets uniform magnetic field to specified value.
433 fMagneticField->SetFieldValue(fieldValue);