Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4HadronicDeveloperParameters.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//
27
29 static G4HadronicDeveloperParameters instance;
30 return instance;
31}
32
33G4HadronicDeveloperParameters::G4HadronicDeveloperParameters(){
34}
35
36G4HadronicDeveloperParameters::G4HadronicDeveloperParameters( const G4HadronicDeveloperParameters& ){
37}
38
39G4bool G4HadronicDeveloperParameters::SetDefault( const std::string name , const G4bool value ){
40 G4bool status = false;
41 const std::map< std::string , const G4bool >::iterator it = b_defaults.find( name );
42 if ( it == b_defaults.end() ) {
43 status = true;
44 b_defaults.insert( std::pair<std::string, const G4bool>( name , value ) );
45 b_values.insert( std::pair<std::string, G4bool>( name , value ) );
46 } else {
47 /*error*/
48 issue_is_already_defined( name );
49 }
50 return status;
51}
52
53G4bool G4HadronicDeveloperParameters::SetDefault( const std::string name , const G4int value , G4int lower_limit , G4int upper_limit ){
54 G4bool status = false;
55 const std::map< std::string , const G4int >::iterator it = i_defaults.find( name );
56 if ( it == i_defaults.end() ) {
57 status = true;
58 i_defaults.insert( std::pair<std::string, const G4int>( name , value ) );
59 i_values.insert( std::pair<std::string, G4int>( name , value ) );
60 i_limits.insert( std::pair< std::string,std::pair< const G4int , const G4int> >( name, std::pair< const G4int , const G4int> ( lower_limit , upper_limit ) ) );
61 } else {
62 /*error*/
63 issue_is_already_defined( name );
64 }
65 return status;
66}
67
68G4bool G4HadronicDeveloperParameters::SetDefault( const std::string name , const G4double value , G4double lower_limit , G4double upper_limit ){
69 G4bool status = false;
70 const std::map< std::string , const G4double >::iterator it = defaults.find( name );
71 if ( it == defaults.end() ) {
72 status = true;
73 defaults.insert( std::pair<std::string, const G4double>( name , value ) );
74 values.insert( std::pair<std::string, G4double>( name , value ) );
75 limits.insert( std::pair< std::string,std::pair< const G4double , const G4double> >( name, std::pair< const G4double , const G4double> ( lower_limit , upper_limit ) ) );
76 } else {
77 /*error*/
78 issue_is_already_defined( name );
79 }
80 return status;
81}
82
83G4bool G4HadronicDeveloperParameters::Set( const std::string name , const G4bool value ){
84 G4bool status = false;
85 const std::map<std::string,G4bool>::iterator it = b_values.find( name );
86 if ( it != b_values.end() ) {
87 if ( it->second == b_defaults.find(name)->second ) {
88 status = true;
89 it->second = value;
90 } else {
91 /*change more than once*/
92 issue_has_changed( name );
93 }
94 } else {
95 /*Parameter of "name" does not exist*/
96 issue_no_param( name );
97 }
98 return status;
99}
100
101G4bool G4HadronicDeveloperParameters::Set( const std::string name , const G4int value ){
102 G4bool status = false;
103 const std::map<std::string,G4int>::iterator it = i_values.find( name );
104 if ( it != i_values.end() ) {
105 if ( it->second == i_defaults.find(name)->second ) {
106 if ( check_value_within_limits( i_limits.find(name)->second , value ) ) {
107 /*value is OK*/
108 status = true;
109 it->second = value;
110 } else {
111 /*Value is outside of valid range*/
112 issue_non_eligible_value( name );
113 }
114 } else {
115 /*change more than once*/
116 issue_has_changed( name );
117 }
118 } else {
119 /*Parameter of "name" does not exist*/
120 issue_no_param( name );
121 }
122 return status;
123}
124
125G4bool G4HadronicDeveloperParameters::Set( const std::string name , const G4double value ){
126 G4bool status = false;
127 const std::map<std::string,G4double>::iterator it = values.find( name );
128 if ( it != values.end() ) {
129 if ( it->second == defaults.find(name)->second ) {
130 if ( check_value_within_limits( limits.find(name)->second , value ) ) {
131 /*value is OK*/
132 status = true;
133 it->second = value;
134 } else {
135 /*Value is outside of valid range*/
136 issue_non_eligible_value( name );
137 }
138 } else {
139 /*change more than once*/
140 issue_has_changed( name );
141 }
142 } else {
143 /*Parameter of "name" does not exist*/
144 issue_no_param( name );
145 }
146 return status;
147}
148
149G4bool G4HadronicDeveloperParameters::GetDefault( const std::string name , G4bool& value ) {
150 G4bool status = false;
151 const std::map<std::string,const G4bool>::iterator it = b_defaults.find( name );
152 if ( it != b_defaults.end() ) {
153 status = true;
154 value = it->second;
155 } else {
156 /*Parameter of "name" does not exist*/
157 issue_no_param( name );
158 }
159 return status;
160}
161
162G4bool G4HadronicDeveloperParameters::GetDefault( const std::string name , G4int& value ) {
163 G4bool status = false;
164 const std::map<std::string,const G4int>::iterator it = i_defaults.find( name );
165 if ( it != i_defaults.end() ) {
166 status = true;
167 value = it->second;
168 } else {
169 /*Parameter of "name" does not exist*/
170 issue_no_param( name );
171 }
172 return status;
173}
174
176 G4bool status = false;
177 const std::map<std::string,const G4double>::iterator it = defaults.find( name );
178 if ( it != defaults.end() ) {
179 status = true;
180 value = it->second;
181 } else {
182 /*Parameter of "name" does not exist*/
183 issue_no_param( name );
184 }
185 return status;
186}
187
188G4bool G4HadronicDeveloperParameters::Get( const std::string name , G4double& value ) {
189 return get( name , value );
190}
191
193 return get( name , value , true );
194}
195
196G4bool G4HadronicDeveloperParameters::get( const std::string name , G4bool& value , G4bool check_change ) {
197 G4bool status = false;
198 const std::map<std::string,G4bool>::iterator it = b_values.find( name );
199 if ( it != b_values.end() ) {
200 status = true;
201 value = it->second;
202 if ( check_change && value != b_defaults.find(name)->second ) {
203 //Parameter "name" has changed from default
204 issue_is_modified( name );
205 }
206 } else {
207 //Parameter of "name" does not exist
208 issue_no_param( name );
209 }
210 return status;
211}
212
213G4bool G4HadronicDeveloperParameters::Get( const std::string name , G4int& value ) {
214 return get( name , value );
215}
216
217G4bool G4HadronicDeveloperParameters::DeveloperGet( const std::string name , G4int& value ) {
218 return get( name , value , true );
219}
220
221G4bool G4HadronicDeveloperParameters::get( const std::string name , G4int& value , G4bool check_change ) {
222 G4bool status = false;
223 const std::map<std::string,G4int>::iterator it = i_values.find( name );
224 if ( it != i_values.end() ) {
225 status = true;
226 value = it->second;
227 if ( check_change && value != i_defaults.find(name)->second ) {
228 //Parameter "name" has changed from default
229 issue_is_modified( name );
230 }
231 } else {
232 //Parameter of "name" does not exist
233 issue_no_param( name );
234 }
235 return status;
236}
237
238G4bool G4HadronicDeveloperParameters::Get( const std::string name , G4bool& value ) {
239 return get( name , value );
240}
241
243 return get( name , value , true );
244}
245
246G4bool G4HadronicDeveloperParameters::get( const std::string name , G4double& value , G4bool check_change ) {
247 G4bool status = false;
248 const std::map<std::string,G4double>::iterator it = values.find( name );
249 if ( it != values.end() ) {
250 status = true;
251 value = it->second;
252 if ( check_change && value != defaults.find(name)->second ) {
253 /*Parameter "name" has changed from default*/
254 issue_is_modified( name );
255 }
256 } else {
257 /*Parameter of "name" does not exist*/
258 issue_no_param( name );
259 }
260 return status;
261}
262
263void G4HadronicDeveloperParameters::Dump( const std::string name ) {
264 //const std::map<std::string,G4double>::iterator it = values.find( name );
265 if ( b_values.find( name ) != b_values.end() ) {
266 G4cout << "G4HadronicDeveloperParameters: "
267 << "name = " << name
268 << ", default value = " << b_defaults.find( name )->second
269 << ", current value = " << b_values.find( name )->second
270 << "." << G4endl;
271 } else if ( i_values.find( name ) != i_values.end() ) {
272 G4cout << "G4HadronicDeveloperParameters: "
273 << "name = " << name
274 << ", default value = " << i_defaults.find( name )->second
275 << ", lower limit = " << i_limits.find( name )->second.first
276 << ", upper limit = " << i_limits.find( name )->second.second
277 << ", current value = " << i_values.find( name )->second
278 << "." << G4endl;
279 } else if ( values.find( name ) != values.end() ) {
280 G4cout << "G4HadronicDeveloperParameters: "
281 << "name = " << name
282 << ", default value = " << defaults.find( name )->second
283 << ", lower limit = " << limits.find( name )->second.first
284 << ", upper limit = " << limits.find( name )->second.second
285 << ", current value = " << values.find( name )->second
286 << "." << G4endl;
287 } else {
288 /*Parameter of "name" does not exist*/
289 issue_no_param( name );
290 }
291}
292
293G4bool G4HadronicDeveloperParameters::check_value_within_limits( std::pair<const G4double,const G4double>& alimits , const G4double value ){
294 if ( alimits.first <= value && value <= alimits.second ) {
295 return true;
296 } else {
297 return false;
298 }
299}
300
301G4bool G4HadronicDeveloperParameters::check_value_within_limits( std::pair<const G4int,const G4int>& alimits , const G4int value ){
302 if ( alimits.first <= value && value <= alimits.second ) {
303 return true;
304 } else {
305 return false;
306 }
307}
308
309void G4HadronicDeveloperParameters::issue_no_param( const std::string& name ){
310 std::string text("Parameter ");
311 text += name;
312 text += " does not exist.";
313 G4Exception( "G4HadronicDeveloperParameters" , "HadDevPara_001", FatalException , text.c_str() );
314}
315
316void G4HadronicDeveloperParameters::issue_has_changed( const std::string& name ) {
317 std::string text("Parameter ");
318 text += name;
319 text += " has already been changed once.";
320 G4Exception( "G4HadronicDeveloperParameters" , "HadDevPara_002", FatalException , text.c_str() );
321}
322void G4HadronicDeveloperParameters::issue_non_eligible_value( const std::string& name ) {
323 std::string text("The value of the parameter ");
324 text += name;
325 text += " is outside the allowable range.";
326 G4Exception( "G4HadronicDeveloperParameters" , "HadDevPara_003", FatalException , text.c_str() );
327}
328void G4HadronicDeveloperParameters::issue_is_already_defined( const std::string& name ) {
329 std::string text("Parameter ");
330 text += name;
331 text += " is already defined.";
332 G4Exception( "G4HadronicDeveloperParameters" , "HadDevPara_004", FatalException , text.c_str() );
333}
334void G4HadronicDeveloperParameters::issue_is_modified( const std::string& name ) {
335 std::string text("Parameter ");
336 text += name;
337 text += " has changed from default value.";
338 G4Exception( "G4HadronicDeveloperParameters" , "HadDevPara_005", JustWarning , text.c_str() );
339}
@ JustWarning
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:59
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
G4bool DeveloperGet(const std::string name, G4bool &value)
G4bool Get(const std::string name, G4bool &value)
G4bool Set(const std::string name, const G4bool)
static G4HadronicDeveloperParameters & GetInstance()
G4bool SetDefault(const std::string name, const G4bool value)
G4bool GetDefault(const std::string name, G4bool &value)
const char * name(G4int ptype)