Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4ProcessManagerMessenger.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// G4ProcessManagerMessenger class implementation
27//
28// Description:
29// This is a messenger class to interface to exchange information
30// between ProcessManagerand UI.
31//
32// Author: H.Kurashige, 13 June 1997
33//---------------------------------------------------------------------
34
35#include "G4UImanager.hh"
36#include "G4UIdirectory.hh"
39
40#include "G4VProcess.hh"
41#include "G4ProcessManager.hh"
42#include "G4ParticleTable.hh"
43
45#include "G4ios.hh" // Include from 'system'
46#include <iomanip> // Include from 'system'
47#include <sstream>
48
49//---------------------------------------------------------------------
51 : theParticleTable(pTable)
52{
53 if ( theParticleTable == nullptr)
54 theParticleTable = G4ParticleTable::GetParticleTable();
55
56 // Command /particle/process
57 thisDirectory = new G4UIdirectory("/particle/process/");
58 thisDirectory->SetGuidance("Process Manager control commands.");
59
60 // Command /particle/process/dump
61 dumpCmd = new G4UIcmdWithAnInteger("/particle/process/dump",this);
62 dumpCmd->SetGuidance("dump process manager or process information");
63 dumpCmd->SetGuidance(" dump [process index]");
64 dumpCmd->SetGuidance(" process index: -1 for process manager");
65 dumpCmd->SetParameterName("index", true);
66 dumpCmd->SetDefaultValue(-1);
67
68 // Command /particle/process/verbose
69 verboseCmd = new G4UIcommand("/particle/process/verbose",this);
70 verboseCmd->SetGuidance("Set Verbose Level for Process or Process Manager");
71 verboseCmd->SetGuidance(" Verbose [Verbose] [process index]");
72 verboseCmd->SetGuidance(" process index: -1 for process manager");
73 G4UIparameter* param = new G4UIparameter("Verbose",'i',true);
74 param->SetDefaultValue(1);
75 verboseCmd->SetParameter(param);
76 param = new G4UIparameter("index",'i',true);
77 param->SetDefaultValue(-1);
78 verboseCmd->SetParameter(param);
80
81 // Command /particle/process/activate
82 activateCmd = new G4UIcmdWithAnInteger("/particle/process/activate",this);
83 activateCmd->SetGuidance("Activate process ");
84 activateCmd->SetGuidance(" Activate [process index]");
85 activateCmd->SetParameterName("index", false);
86 activateCmd->SetDefaultValue(0);
87 activateCmd->SetRange("index >=0");
88 activateCmd->AvailableForStates(G4State_Idle);
89
90 // Command /particle/process/inactivate
91 inactivateCmd = new G4UIcmdWithAnInteger("/particle/process/inactivate",this);
92 inactivateCmd->SetGuidance("Inactivate process ");
93 inactivateCmd->SetGuidance(" inactivate [process index]");
94 inactivateCmd->SetParameterName("index", false);
95 inactivateCmd->SetDefaultValue(0);
96 inactivateCmd->SetRange("index >=0");
97 inactivateCmd->AvailableForStates(G4State_Idle);
98}
99
100//---------------------------------------------------------------------
102{
103 delete activateCmd;
104 delete inactivateCmd;
105 delete verboseCmd;
106 delete dumpCmd;
107 delete thisDirectory;
108}
109
110//---------------------------------------------------------------------
111const G4ParticleDefinition* G4ProcessManagerMessenger::SetCurrentParticle()
112{
113 // access to selected particle in the G4ParticleTable
114 currentParticle = theParticleTable->GetSelectedParticle();
115 if (currentParticle == nullptr)
116 {
117 theManager = nullptr;
118 G4cout << "G4ProcessManagerMessenger::SetCurrentParticle() - not selected";
119 }
120 else
121 {
122 theManager = currentParticle->GetProcessManager();
123 theProcessList = theManager->GetProcessList();
124 }
125 return currentParticle;
126}
127
128//---------------------------------------------------------------------
130{
132 if (SetCurrentParticle() == nullptr)
133 {
134 ed << "Particle is not selected yet !! Command ignored.";
135 command->CommandFailed(ed);
136 return;
137 }
138 if( command == dumpCmd )
139 {
140 // Command /particle/process/dump
141 G4int index = dumpCmd->GetNewIntValue(newValue);
142 if (index <0)
143 {
144 theManager->DumpInfo();
145 }
146 else if ( index < theManager->GetProcessListLength())
147 {
148 currentProcess = (*theProcessList)(index);
149 if (currentProcess == nullptr)
150 {
151 ed << " no process at index of " << index
152 << " in the Process Vector";
153 command->CommandFailed(ed);
154 }
155 else
156 {
157 currentProcess->DumpInfo();
158 }
159 }
160 else
161 {
162 ed << " illegal index !!! ";
163 command->CommandFailed(ed);
164 currentProcess = nullptr;
165 }
166
167 }
168 else if( command==activateCmd )
169 {
170 // Command /particle/process/activate
171 theManager->SetProcessActivation(activateCmd->GetNewIntValue(newValue), true);
172 G4UImanager::GetUIpointer()->ApplyCommand("/run/physicsModified");
173
174 }
175 else if( command==inactivateCmd )
176 {
177 // Command /particle/process/inactivate
178 theManager->SetProcessActivation(inactivateCmd->GetNewIntValue(newValue), false);
179 G4UImanager::GetUIpointer()->ApplyCommand("/run/physicsModified");
180
181 }
182 else if( command==verboseCmd )
183 {
184 // Command /particle/process/Verbose
185 // inputstream for newValues
186 const char* temp = (const char*)(newValue);
187 std::istringstream is((char*)temp);
188 G4int Verbose, index;
189 is >>Verbose >>index;
190 if (index <0)
191 {
192 theManager->SetVerboseLevel(Verbose);
193
194 }
195 else if ( index < theManager->GetProcessListLength())
196 {
197 currentProcess = (*theProcessList)(index);
198 if (currentProcess == nullptr)
199 {
200 ed << " no process at index of " << index
201 << " in the Process Vector";
202 command->CommandFailed(ed);
203 }
204 else
205 {
206 currentProcess->SetVerboseLevel(Verbose);
207 }
208 }
209 else
210 {
211 ed << " illegal index !!! ";
212 command->CommandFailed(ed);
213 currentProcess = nullptr;
214 }
215 }
216}
217
218//---------------------------------------------------------------------
220{
221 if(SetCurrentParticle() == nullptr) return "";
222
223 if( command==verboseCmd )
224 {
225 // Command /particle/process/Verbose
226 return verboseCmd->ConvertToString(theManager->GetVerboseLevel());
227 }
228 else
229 {
230 return "";
231 }
232}
@ G4State_EventProc
@ G4State_Init
@ G4State_Idle
@ G4State_GeomClosed
@ G4State_PreInit
std::ostringstream G4ExceptionDescription
Definition: G4Exception.hh:40
int G4int
Definition: G4Types.hh:85
G4GLOB_DLL std::ostream G4cout
G4ProcessManager * GetProcessManager() const
static G4ParticleTable * GetParticleTable()
const G4ParticleDefinition * GetSelectedParticle() const
virtual void SetNewValue(G4UIcommand *command, G4String newValues)
virtual G4String GetCurrentValue(G4UIcommand *command)
G4ProcessManagerMessenger(G4ParticleTable *pTable=nullptr)
G4VProcess * SetProcessActivation(G4VProcess *aProcess, G4bool fActive)
void SetVerboseLevel(G4int value)
G4ProcessVector * GetProcessList() const
G4int GetVerboseLevel() const
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
static G4int GetNewIntValue(const char *paramString)
void SetDefaultValue(G4int defVal)
static G4String ConvertToString(G4bool boolVal)
Definition: G4UIcommand.cc:446
void SetParameter(G4UIparameter *const newParameter)
Definition: G4UIcommand.hh:147
void SetGuidance(const char *aGuidance)
Definition: G4UIcommand.hh:157
void CommandFailed(G4int errCode, G4ExceptionDescription &ed)
Definition: G4UIcommand.hh:179
void SetRange(const char *rs)
Definition: G4UIcommand.hh:121
void AvailableForStates(G4ApplicationState s1)
Definition: G4UIcommand.cc:287
G4int ApplyCommand(const char *aCommand)
Definition: G4UImanager.cc:495
static G4UImanager * GetUIpointer()
Definition: G4UImanager.cc:77
void SetDefaultValue(const char *theDefaultValue)
void SetVerboseLevel(G4int value)
Definition: G4VProcess.hh:416
virtual void DumpInfo() const
Definition: G4VProcess.cc:173