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
G4CascadeParamMessenger.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// Define simple UI commands as alternative to environment variables
27//
28// 20130304 M. Kelsey -- Add flag to collect and display cascade structure
29// 20130621 M. Kelsey -- Add flag for CHECK_ECONS, replacing #ifdef's; add
30// flag to use three-body momentum parametrizations
31// 20130703 M. Kelsey -- Add flag for USE_PHASESPACE
32// 20141030 M. Kelsey -- Add flag to enable direct pi-N absorption
33// 20141211 M. Kelsey -- Change PIN_ABSORPTION flag to double, for energy cut
34// 20200110 M. Kelsey -- Reset cmdDir to 0 before .../cascade/ directory.
35
38#include "G4UIcmdWithABool.hh"
39#include "G4UIcmdWithADouble.hh"
40#include "G4UIcmdWithAString.hh"
43#include "G4UIcommand.hh"
44#include "G4UIcommandTree.hh"
45#include "G4UIdirectory.hh"
46#include "G4UImanager.hh"
47
48
49// Constructor and destructor
50
52 : G4UImessenger(), theParams(params), cmdDir(0), localCmdDir(false) {
53 // NOTE: Put under same top-level tree as EM
54 CreateDirectory("/process/had/","Hadronic processes"); cmdDir=0;
55 CreateDirectory("/process/had/cascade/","Bertini-esque cascade parameters");
56
57 verboseCmd = CreateCommand<G4UIcmdWithAnInteger>("verbose",
58 "Enable information messages");
59 balanceCmd = CreateCommand<G4UIcmdWithABool>("checkBalance",
60 "Enable internal conservation checking");
61 reportCmd = CreateCommand<G4UIcmdWithoutParameter>("report",
62 "Dump all non-default parameter settings");
63 usePreCoCmd = CreateCommand<G4UIcmdWithABool>("usePreCompound",
64 "Use PreCompoundModel for nuclear de-excitation");
65 doCoalCmd = CreateCommand<G4UIcmdWithABool>("doCoalescence",
66 "Apply final-state nucleon clustering");
67 piNAbsCmd = CreateCommand<G4UIcmdWithADouble>("piNAbsorption",
68 "Probability for pion absorption on single nucleon");
69 historyCmd = CreateCommand<G4UIcmdWithABool>("showHistory",
70 "Collect and report full structure of cascade");
71 use3BodyCmd = CreateCommand<G4UIcmdWithABool>("use3BodyMom",
72 "Use three-body momentum parametrizations");
73 usePSCmd = CreateCommand<G4UIcmdWithABool>("usePhaseSpace",
74 "Use Kopylov N-body momentum generator");
75 randomFileCmd = CreateCommand<G4UIcmdWithAString>("randomFile",
76 "Save random-engine to file at each interaction");
77 nucUseBestCmd = CreateCommand<G4UIcmdWithABool>("useBestNuclearModel",
78 "Use all physical-units for nuclear structure");
79 nucRad2parCmd = CreateCommand<G4UIcmdWithADouble>("useTwoParamNuclearRadius",
80 "Use R = C1*cbrt(A) + C2/cbrt(A)");
81 nucRadScaleCmd = CreateCommand<G4UIcmdWithADouble>("nuclearRadiusScale",
82 "Set length scale for nuclear model");
83 nucRadSmallCmd = CreateCommand<G4UIcmdWithADouble>("smallNucleusRadius",
84 "Set radius of A<4 nuclei");
85 nucRadAlphaCmd = CreateCommand<G4UIcmdWithADouble>("alphaRadiusScale",
86 "Fraction of small-radius for He-4");
87 nucRadTrailingCmd = CreateCommand<G4UIcmdWithADouble>("shadowningRadius",
88 "Effective nucleon radius for trailing effect");
89 nucFermiScaleCmd = CreateCommand<G4UIcmdWithADouble>("fermiScale",
90 "Scale factor for fermi momentum");
91 nucXsecScaleCmd = CreateCommand<G4UIcmdWithADouble>("crossSectionScale",
92 "Scale fator for total cross-sections");
93 nucGammaQDCmd = CreateCommand<G4UIcmdWithADouble>("gammaQuasiDeutScale",
94 "Scale factor for gamma-quasideutron cross-sections");
95 coalDPmax2Cmd = CreateCommand<G4UIcmdWithADouble>("cluster2DPmax",
96 "Maximum momentum for p-n clusters");
97 coalDPmax3Cmd = CreateCommand<G4UIcmdWithADouble>("cluster3DPmax",
98 "Maximum momentum for ppn/pnn clusters");
99 coalDPmax4Cmd = CreateCommand<G4UIcmdWithADouble>("cluster4DPmax",
100 "Maximum momentum for alpha clusters");
101}
102
104 delete verboseCmd;
105 delete balanceCmd;
106 delete reportCmd;
107 delete usePreCoCmd;
108 delete doCoalCmd;
109 delete piNAbsCmd;
110 delete historyCmd;
111 delete use3BodyCmd;
112 delete usePSCmd;
113 delete randomFileCmd;
114 delete nucUseBestCmd;
115 delete nucRad2parCmd;
116 delete nucRadScaleCmd;
117 delete nucRadSmallCmd;
118 delete nucRadAlphaCmd;
119 delete nucRadTrailingCmd;
120 delete nucFermiScaleCmd;
121 delete nucXsecScaleCmd;
122 delete nucGammaQDCmd;
123 delete coalDPmax2Cmd;
124 delete coalDPmax3Cmd;
125 delete coalDPmax4Cmd;
126 if (localCmdDir) delete cmdDir;
127}
128
129
130// Create or reuse existing UIdirectory path
131
133 const char* desc) {
135 if (!UIman) return;
136
137 // Directory path must be absolute, prepend "/" if ncessary
138 G4String fullPath = path;
139 if (fullPath[0] != '/') fullPath.insert(0, '/', 1);
140 if (fullPath.back() != '/') fullPath.append('/', 1);
141
142 // See if input path has already been registered
143 G4UIcommand* foundPath = UIman->GetTree()->FindPath(fullPath);
144 if (foundPath) cmdDir = dynamic_cast<G4UIdirectory*>(foundPath);
145
146 if (!cmdDir) { // Create local deletable directory
147 localCmdDir = true;
148 cmdDir = new G4UIdirectory(fullPath.c_str());
149 cmdDir->SetGuidance(desc);
150 }
151}
152
153
154// Use command argument (literal string) to set envvar maps in container
155
157 if (cmd == reportCmd) theParams->DumpConfig(G4cout);
158
159 if (cmd == verboseCmd)
160 theParams->G4CASCADE_VERBOSE = strdup(arg.c_str());
161
162 if (cmd == balanceCmd)
163 theParams->G4CASCADE_CHECK_ECONS = StoB(arg) ? strdup(arg.c_str()) : 0;
164
165 if (cmd == usePreCoCmd)
166 theParams->G4CASCADE_USE_PRECOMPOUND = StoB(arg) ? strdup(arg.c_str()) : 0;
167
168 if (cmd == doCoalCmd)
169 theParams->G4CASCADE_DO_COALESCENCE = StoB(arg) ? strdup(arg.c_str()) : 0;
170
171 if (cmd == piNAbsCmd)
172 theParams->G4CASCADE_PIN_ABSORPTION = strdup(arg.c_str());
173
174 if (cmd == historyCmd)
175 theParams->G4CASCADE_SHOW_HISTORY = StoB(arg) ? strdup(arg.c_str()) : 0;
176
177 if (cmd == use3BodyCmd)
178 theParams->G4CASCADE_USE_3BODYMOM = StoB(arg) ? strdup(arg.c_str()) : 0;
179
180 if (cmd == usePSCmd)
181 theParams->G4CASCADE_USE_PHASESPACE = StoB(arg) ? strdup(arg.c_str()) : 0;
182
183 if (cmd == randomFileCmd)
184 theParams->G4CASCADE_RANDOM_FILE = arg.empty() ? 0 : strdup(arg.c_str());
185
186 if (cmd == nucUseBestCmd)
187 theParams->G4NUCMODEL_USE_BEST = StoB(arg) ? strdup(arg.c_str()) : 0;
188
189// if (cmd == nucRad2parCmd)
190// theParams->G4NUCMODEL_RAD_2PAR = strdup(arg.c_str());
191 if (cmd == nucRad2parCmd)
192 theParams->G4NUCMODEL_RAD_2PAR = StoB(arg) ? strdup(arg.c_str()) : 0;
193
194 if (cmd == nucRadScaleCmd)
195 theParams->G4NUCMODEL_RAD_SCALE = strdup(arg.c_str());
196
197 if (cmd == nucRadSmallCmd)
198 theParams->G4NUCMODEL_RAD_SMALL = strdup(arg.c_str());
199
200 if (cmd == nucRadAlphaCmd)
201 theParams->G4NUCMODEL_RAD_ALPHA = strdup(arg.c_str());
202
203 if (cmd == nucRadTrailingCmd)
204 theParams->G4NUCMODEL_RAD_TRAILING = strdup(arg.c_str());
205
206 if (cmd == nucFermiScaleCmd)
207 theParams->G4NUCMODEL_FERMI_SCALE = strdup(arg.c_str());
208
209 if (cmd == nucXsecScaleCmd)
210 theParams->G4NUCMODEL_XSEC_SCALE = strdup(arg.c_str());
211
212 if (cmd == nucGammaQDCmd)
213 theParams->G4NUCMODEL_GAMMAQD = strdup(arg.c_str());
214
215 if (cmd == coalDPmax2Cmd)
216 theParams->DPMAX_2CLUSTER = strdup(arg.c_str());
217
218 if (cmd == coalDPmax3Cmd)
219 theParams->DPMAX_3CLUSTER = strdup(arg.c_str());
220
221 if (cmd == coalDPmax4Cmd)
222 theParams->DPMAX_4CLUSTER = strdup(arg.c_str());
223
224 theParams->Initialize(); // Update numerical values from settings
225}
G4GLOB_DLL std::ostream G4cout
virtual void SetNewValue(G4UIcommand *command, G4String newValue)
G4CascadeParamMessenger(G4CascadeParameters *params)
void CreateDirectory(const char *path, const char *desc)
G4UIcommand * FindPath(const char *commandPath) const
void SetGuidance(const char *aGuidance)
Definition: G4UIcommand.hh:157
G4UIcommandTree * GetTree() const
Definition: G4UImanager.hh:186
static G4UImanager * GetUIpointer()
Definition: G4UImanager.cc:77
G4bool StoB(G4String s)