]> git.uio.no Git - u/mrichter/AliRoot.git/blob - AliGeant4/AliModulesCompositionMessenger.cxx
Initial version
[u/mrichter/AliRoot.git] / AliGeant4 / AliModulesCompositionMessenger.cxx
1 // $Id$
2 // Category: geometry
3 //
4 // See the class description in the header file.
5
6 #include "AliModulesCompositionMessenger.h"
7 #include "AliModulesComposition.h"
8 #include "AliGlobals.h"
9
10 #include <G4UIdirectory.hh>
11 #include <G4UIcmdWithAString.hh>
12 #include <G4UIcmdWithoutParameter.hh>
13 #include <G4UIcmdWithABool.hh>
14 #include <G4UIcmdWithADoubleAndUnit.hh>
15
16 //_____________________________________________________________________________
17 AliModulesCompositionMessenger::AliModulesCompositionMessenger(
18                                    AliModulesComposition* modulesComposition)
19   : fModulesComposition(modulesComposition)
20 {
21 //
22   fDirectory = new G4UIdirectory("/aliDet/");
23   fDirectory->SetGuidance("Detector construction control commands.");
24
25   fSwitchOnCmd = new G4UIcmdWithAString("/aliDet/switchOn", this);
26   fSwitchOnCmd->SetGuidance("Define the module to be built.");
27   fSwitchOnCmd->SetGuidance("Available modules:");
28   G4String listAvailableDets = "NONE, ALL, PPR, ";  
29   listAvailableDets 
30     = listAvailableDets + modulesComposition->GetAvailableDetsListWithCommas();
31   fSwitchOnCmd->SetGuidance(listAvailableDets);
32   fSwitchOnCmd->SetParameterName("module", false);
33   fSwitchOnCmd->AvailableForStates(PreInit);;
34
35   fSwitchOffCmd = new G4UIcmdWithAString("/aliDet/switchOff", this);
36   fSwitchOffCmd->SetGuidance("Define the module not to be built.");
37   fSwitchOffCmd->SetGuidance("Available modules:");
38   G4String listDetsNames = "ALL, "; 
39   listDetsNames
40     = listDetsNames + modulesComposition->GetDetNamesListWithCommas();
41   fSwitchOffCmd->SetGuidance(listDetsNames);
42   fSwitchOffCmd->SetParameterName("module", false);
43   fSwitchOffCmd->AvailableForStates(PreInit);;
44
45   fListCmd 
46     = new G4UIcmdWithoutParameter("/aliDet/list", this);
47   fListCmd->SetGuidance("List the currently switched modules.");
48   fListCmd
49     ->AvailableForStates(PreInit, Init, Idle, GeomClosed, EventProc);
50
51   fListAvailableCmd 
52     = new G4UIcmdWithoutParameter("/aliDet/listAvailable", this);
53   fListAvailableCmd->SetGuidance("List all available modules.");
54   fListAvailableCmd
55     ->AvailableForStates(PreInit, Init, Idle, GeomClosed, EventProc);
56
57   fFieldValueCmd = new G4UIcmdWithADoubleAndUnit("/aliDet/fieldValue", this);
58   fFieldValueCmd->SetGuidance("Define magnetic field in Z direction.");
59   fFieldValueCmd->SetParameterName("fieldValue", false, false);
60   fFieldValueCmd->SetDefaultUnit("tesla");
61   fFieldValueCmd->SetUnitCategory("Magnetic flux density");
62   fFieldValueCmd->AvailableForStates(PreInit,Idle);  
63   
64   fSetReadGeometryCmd 
65     = new G4UIcmdWithABool("/aliDet/readGeometry", this);
66   fSetReadGeometryCmd->SetGuidance("Read geometry from g3calls.dat files");
67   fSetReadGeometryCmd->SetParameterName("readGeometry", false);
68   fSetReadGeometryCmd->AvailableForStates(PreInit);  
69  
70   fSetWriteGeometryCmd 
71     = new G4UIcmdWithABool("/aliDet/writeGeometry", this);
72   fSetWriteGeometryCmd->SetGuidance("Write geometry to g3calls.dat file");
73   fSetWriteGeometryCmd->SetParameterName("writeGeometry", false);
74   fSetWriteGeometryCmd->AvailableForStates(PreInit);   
75
76   fPrintMaterialsCmd 
77     = new G4UIcmdWithoutParameter("/aliDet/printMaterials", this);
78   fPrintMaterialsCmd->SetGuidance("Prints all materials.");
79   fPrintMaterialsCmd->AvailableForStates(PreInit, Init, Idle);   
80
81   fGenerateXMLCmd 
82     = new G4UIcmdWithoutParameter("/aliDet/generateXML", this);
83   fGenerateXMLCmd->SetGuidance("Generate geometry XML file.");
84   fGenerateXMLCmd->AvailableForStates(Idle);   
85
86
87   // set candidates list
88   SetCandidates();
89
90   // set default values to a detector
91   fModulesComposition->SwitchDetOn("NONE");
92 }
93
94 //_____________________________________________________________________________
95 AliModulesCompositionMessenger::AliModulesCompositionMessenger() {
96 //
97 }
98
99 //_____________________________________________________________________________
100 AliModulesCompositionMessenger::AliModulesCompositionMessenger(
101                                 const AliModulesCompositionMessenger& right)
102 {
103 //
104   AliGlobals::Exception(
105     "AliModulesCompositionMessenger is protected from copying.");
106 }
107
108 //_____________________________________________________________________________
109 AliModulesCompositionMessenger::~AliModulesCompositionMessenger() {
110 //
111   delete fDirectory;
112   delete fSwitchOnCmd;
113   delete fSwitchOffCmd;
114   delete fListCmd;
115   delete fListAvailableCmd;
116   delete fFieldValueCmd;
117   delete fSetReadGeometryCmd;
118   delete fSetWriteGeometryCmd;
119   delete fPrintMaterialsCmd;
120   delete fGenerateXMLCmd;
121 }
122
123 // operators
124
125 //_____________________________________________________________________________
126 AliModulesCompositionMessenger& 
127 AliModulesCompositionMessenger::operator=(
128                                 const AliModulesCompositionMessenger& right)
129 {
130   // check assignement to self
131   if (this == &right) return *this;
132
133   AliGlobals::Exception(
134      "AliModulesCompositionMessenger is protected from assigning.");
135     
136   return *this;  
137 }    
138           
139 // public methods
140   
141 //_____________________________________________________________________________
142 void AliModulesCompositionMessenger::SetNewValue(G4UIcommand* command, G4String newValues)
143 {
144 // Applies command to the associated object.
145 // ---
146
147   if (command == fSwitchOnCmd) {  
148     fModulesComposition->SwitchDetOn(newValues); 
149   }
150   else if (command == fSwitchOffCmd) {  
151     fModulesComposition->SwitchDetOff(newValues); 
152   }
153   else if (command == fListCmd) {  
154     fModulesComposition->PrintSwitchedDets(); 
155   }
156   else if (command == fListAvailableCmd) {  
157     fModulesComposition->PrintAvailableDets(); 
158   }
159   else if (command == fFieldValueCmd) {  
160     fModulesComposition
161       ->SetMagField(fFieldValueCmd->GetNewDoubleValue(newValues)); 
162   }
163   else if (command == fSetReadGeometryCmd) {
164     fModulesComposition->SetReadGeometry(
165                          fSetReadGeometryCmd->GetNewBoolValue(newValues));
166   }  
167   else if (command == fSetWriteGeometryCmd) {
168     fModulesComposition->SetWriteGeometry(
169                          fSetWriteGeometryCmd->GetNewBoolValue(newValues));
170   }    
171   else if (command == fPrintMaterialsCmd) {
172     fModulesComposition->PrintMaterials();
173   }    
174   else if (command == fGenerateXMLCmd) {
175     fModulesComposition->GenerateXMLGeometry();
176   }    
177 }
178
179 //_____________________________________________________________________________
180 void AliModulesCompositionMessenger::SetCandidates() 
181 {
182 // Builds candidates list.
183 // ---
184
185   G4String candidatesList = "NONE ALL PPR ";
186   candidatesList += fModulesComposition->GetDetNamesList();;
187   candidatesList += fModulesComposition->GetAvailableDetsList();
188   fSwitchOnCmd->SetCandidates(candidatesList);
189
190   candidatesList = "ALL ";
191   candidatesList += fModulesComposition->GetDetNamesList();;
192   fSwitchOffCmd->SetCandidates(candidatesList);
193 }