4 // Author: I. Hrivnacova
8 // See the class description in the header file.
10 #include "TG4Messenger.h"
11 #include "TG4GeometryManager.h"
12 #include "TG4GeometryServices.h"
13 #include "TG4StepManager.h"
14 #include "TG4PhysicsManager.h"
15 #include "TG4G3PhysicsManager.h"
16 #include "TG4G3CutVector.h"
17 #include "TG4G3ControlVector.h"
18 #include "TG4ProcessControlMap.h"
19 #include "TG4ProcessMCMap.h"
21 #include <G4UIcmdWithoutParameter.hh>
22 #include <G4UIcmdWithABool.hh>
23 #include <G4UIcmdWithAString.hh>
25 //_____________________________________________________________________________
26 TG4Messenger::TG4Messenger(TG4GeometryManager* geometryManager,
27 TG4PhysicsManager* physicsManager,
28 TG4StepManager* stepManager)
29 : fGeometryManager(geometryManager),
30 fPhysicsManager(physicsManager),
31 fStepManager(stepManager)
35 = new G4UIcmdWithABool("/g4mc/setEM", this);
36 fSetEMCmd->SetGuidance("Set electromagnetic physics.");
37 fSetEMCmd->SetParameterName("EMControl", false);
38 fSetEMCmd->AvailableForStates(PreInit);
41 = new G4UIcmdWithABool("/g4mc/setMuon", this);
42 fSetMuonCmd->SetGuidance("Set muon physics.");
43 fSetMuonCmd->SetParameterName("EMControl", false);
44 fSetMuonCmd->AvailableForStates(PreInit);
47 = new G4UIcmdWithABool("/g4mc/setHadron", this);
48 fSetHadronCmd->SetGuidance("Set hadron physics.");
49 fSetHadronCmd->SetParameterName("HadronControl", false);
50 fSetHadronCmd->AvailableForStates(PreInit);
53 = new G4UIcmdWithABool("/g4mc/setOptical", this);
54 fSetOpticalCmd->SetGuidance("Set Cerenkov and optical physics.");
55 fSetOpticalCmd->SetParameterName("OpticalControl", false);
56 fSetOpticalCmd->AvailableForStates(PreInit);
59 = new G4UIcmdWithABool("/g4mc/setSpecialCuts", this);
60 fSetSpecialCutsCmd->SetGuidance("Set special cuts process.");
62 ->SetGuidance("!! Support for this option is under development.");
63 fSetSpecialCutsCmd->SetParameterName("SpecialCutsControl", false);
64 fSetSpecialCutsCmd->AvailableForStates(PreInit);
66 fSetSpecialControlsCmd
67 = new G4UIcmdWithABool("/g4mc/setSpecialControls", this);
68 fSetSpecialControlsCmd->SetGuidance("Set special controls process.");
69 fSetSpecialControlsCmd
70 ->SetGuidance("!! Support for this option is under development.");
71 fSetSpecialControlsCmd->SetParameterName("SpecialFlagsControl", false);
72 fSetSpecialControlsCmd->AvailableForStates(PreInit);
75 = new G4UIcmdWithoutParameter("/g4mc/setProcessActivation", this);
76 fProcessActivationCmd->SetGuidance("Activate/inactivate physics processes.");
77 fProcessActivationCmd->AvailableForStates(Idle);
80 = new G4UIcmdWithoutParameter("/g4mc/printProcessMCMap", this);
82 ->SetGuidance("Prints mapping of G4 processes to G3 controls.");
83 fPrintProcessMCMapCmd->AvailableForStates(Idle);
85 fPrintProcessControlMapCmd
86 = new G4UIcmdWithoutParameter("/g4mc/printProcessControlMap", this);
87 fPrintProcessControlMapCmd
88 ->SetGuidance("Prints mapping of G4 processes to G3 controls.");
89 fPrintProcessControlMapCmd->AvailableForStates(Idle);
92 = new G4UIcmdWithAString("/g4mc/printVolumeLimits", this);
94 ->SetGuidance("Prints the limits set to the specified volume.");
95 fPrintVolumeLimitsCmd->SetParameterName("PrintVolumeLimits", false);
96 fPrintVolumeLimitsCmd->AvailableForStates(Idle);
99 = new G4UIcmdWithoutParameter("/g4mc/printGeneralCuts", this);
101 ->SetGuidance("Prints the general G3 cuts.");
102 fPrintGeneralCutsCmd->AvailableForStates(Idle);
104 fPrintGeneralControlsCmd
105 = new G4UIcmdWithoutParameter("/g4mc/printGeneralControls", this);
106 fPrintGeneralControlsCmd
107 ->SetGuidance("Prints the general G3 process controls.");
108 fPrintGeneralControlsCmd->AvailableForStates(Idle);
111 //_____________________________________________________________________________
112 TG4Messenger::TG4Messenger(){
116 //_____________________________________________________________________________
117 TG4Messenger::TG4Messenger(const TG4Messenger& right) {
119 TG4Globals::Exception("TG4Messenger is protected from copying.");
122 //_____________________________________________________________________________
123 TG4Messenger::~TG4Messenger() {
127 delete fSetHadronCmd;
128 delete fSetOpticalCmd;
129 delete fSetSpecialCutsCmd;
130 delete fSetSpecialControlsCmd;
131 delete fProcessActivationCmd;
132 delete fPrintProcessMCMapCmd;
133 delete fPrintProcessControlMapCmd;
134 delete fPrintVolumeLimitsCmd;
135 delete fPrintGeneralCutsCmd;
136 delete fPrintGeneralControlsCmd;
141 //_____________________________________________________________________________
142 TG4Messenger& TG4Messenger::operator=(const TG4Messenger& right)
144 // check assignement to self
145 if (this == &right) return *this;
147 TG4Globals::Exception("TG4Messenger is protected from assigning.");
154 //_____________________________________________________________________________
155 void TG4Messenger::SetNewValue(G4UIcommand* command, G4String newValue)
157 // Applies command to the associated object.
160 if (command == fSetEMCmd) {
162 ->SetEMPhysics(fSetEMCmd->GetNewBoolValue(newValue));
164 if (command == fSetMuonCmd) {
166 ->SetMuonPhysics(fSetMuonCmd->GetNewBoolValue(newValue));
168 else if (command == fSetHadronCmd) {
170 ->SetHadronPhysics(fSetHadronCmd->GetNewBoolValue(newValue));
172 else if (command == fSetOpticalCmd) {
174 ->SetOpticalPhysics(fSetOpticalCmd->GetNewBoolValue(newValue));
176 else if (command == fSetSpecialCutsCmd) {
178 ->SetSpecialCutsPhysics(fSetSpecialCutsCmd->GetNewBoolValue(newValue));
180 else if (command == fSetSpecialControlsCmd) {
182 ->SetSpecialControlsPhysics(
183 fSetSpecialControlsCmd->GetNewBoolValue(newValue));
185 else if (command == fProcessActivationCmd) {
186 fPhysicsManager->SetProcessActivation();
188 else if (command == fPrintProcessMCMapCmd) {
189 TG4ProcessMCMap::Instance()->PrintAll();
191 else if (command == fPrintProcessControlMapCmd) {
192 TG4ProcessControlMap::Instance()->PrintAll();
194 else if (command == fPrintVolumeLimitsCmd) {
195 TG4GeometryServices::Instance()->PrintVolumeLimits(newValue);
197 else if (command == fPrintGeneralCutsCmd) {
198 TG4G3PhysicsManager::Instance()->GetCutVector()->Print();
200 else if (command == fPrintGeneralControlsCmd) {
201 TG4G3PhysicsManager::Instance()->GetControlVector()->Print();