Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4tgrParameterMgr.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// G4tgrParameterMgr implementation
27//
28// Author: P.Arce, CIEMAT (November 2007)
29// --------------------------------------------------------------------
30
31#include "G4tgrParameterMgr.hh"
32#include "G4tgrUtils.hh"
35#include "G4tgrFileReader.hh"
36#include "G4tgrMessenger.hh"
37#include "G4UIcommand.hh"
38
39G4ThreadLocal G4tgrParameterMgr* G4tgrParameterMgr::theInstance = nullptr;
40
41// --------------------------------------------------------------------
42G4tgrParameterMgr::G4tgrParameterMgr()
43{
44}
45
46// --------------------------------------------------------------------
47G4tgrParameterMgr::~G4tgrParameterMgr()
48{
49 delete theInstance;
50}
51
52// --------------------------------------------------------------------
54{
55 if(theInstance == nullptr)
56 {
57 theInstance = new G4tgrParameterMgr;
58 }
59 return theInstance;
60}
61
62// --------------------------------------------------------------------
63void G4tgrParameterMgr::AddParameterNumber(const std::vector<G4String>& wl,
64 G4bool mustBeNew)
65{
66 CheckIfNewParameter(wl, mustBeNew);
67
68 //----- Convert third argument to double, but then store it as string
69 // for later use in CLHEP evaluator
70 G4float val = G4tgrUtils::GetDouble(wl[2]);
71 theParameterList[wl[1]] = G4UIcommand::ConvertToString(val);
72
73#ifdef G4VERBOSE
75 {
76 G4cout << " G4tgrParameterMgr::AddParameterNumber() -"
77 << " parameter added " << wl[1] << " = " << theParameterList[wl[1]]
78 << G4endl;
79 }
80#endif
81}
82
83// --------------------------------------------------------------------
84void G4tgrParameterMgr::AddParameterString(const std::vector<G4String>& wl,
85 G4bool mustBeNew)
86{
87 CheckIfNewParameter(wl, mustBeNew);
88
89 //----- Store parameter as string
90 theParameterList[wl[1]] = wl[2];
91
92#ifdef G4VERBOSE
94 {
95 G4cout << " G4tgrParameterMgr::AddParameterString() -"
96 << " parameter added " << wl[1] << " = " << theParameterList[wl[1]]
97 << G4endl;
98 }
99#endif
100}
101
102// --------------------------------------------------------------------
103void G4tgrParameterMgr::CheckIfNewParameter(const std::vector<G4String>& wl,
104 G4bool mustBeNew)
105{
106 //---------- Find first if it exists already
107 G4bool existsAlready;
108 G4mapss::const_iterator sdite = theParameterList.find(wl[1]);
109 if(sdite == theParameterList.cend())
110 {
111 existsAlready = false;
112 }
113 else
114 {
115 existsAlready = true;
116 }
117
118 if(existsAlready)
119 {
120 if(mustBeNew)
121 {
122 G4String ErrMessage = "Parameter already exists... " + wl[1];
123 G4Exception("G4tgrParameterMgr::CheckParameter()", "IllegalConstruct",
124 FatalException, ErrMessage);
125 }
126 else
127 {
128 G4String WarMessage = "Parameter already exists... " + wl[1];
129 G4Exception("G4tgrParameterMgr::CheckParameter()", "NotRecommended",
130 JustWarning, WarMessage);
131 }
132 }
133
134 //---------- Check for miminum number of words read
135 G4tgrUtils::CheckWLsize(wl, 3, WLSIZE_EQ, "Parameter::AddParameter");
136}
137
138// --------------------------------------------------------------------
140{
141 G4String par = "";
142
143 G4mapss::const_iterator sdite = theParameterList.find(name);
144 if(sdite == theParameterList.cend())
145 {
146 if(exists)
147 {
148 DumpList();
149 G4String ErrMessage = "Parameter not found in list: " + name;
150 G4Exception("G4tgrParameterMgr::FindParameter()", "InvalidSetup",
151 FatalException, ErrMessage);
152 }
153 }
154 else
155 {
156 exists = 1;
157 par = ((*sdite).second);
158#ifdef G4VERBOSE
160 {
161 G4cout << " G4tgrParameterMgr::FindParameter() -"
162 << " parameter found " << name << " = " << par << G4endl;
163 }
164#endif
165 }
166
167 return par;
168}
169
170// --------------------------------------------------------------------
172{
173 //---------- Dump number of objects of each class
174 G4cout << " @@@@@@@@@@@@@@@@@@ Dumping parameter list " << G4endl;
175 for(auto cite = theParameterList.cbegin();
176 cite != theParameterList.cend(); ++cite)
177 {
178 G4cout << (*cite).first << " = " << (*cite).second << G4endl;
179 }
180}
@ JustWarning
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
float G4float
Definition G4Types.hh:84
bool G4bool
Definition G4Types.hh:86
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
@ WLSIZE_EQ
Definition G4tgrUtils.hh:47
static G4String ConvertToString(G4bool boolVal)
static G4int GetVerboseLevel()
void CheckIfNewParameter(const std::vector< G4String > &wl, G4bool mustBeNew)
void AddParameterNumber(const std::vector< G4String > &wl, G4bool mustBeNew=false)
void AddParameterString(const std::vector< G4String > &wl, G4bool mustBeNew=false)
G4String FindParameter(const G4String &name, G4bool exists=true)
static G4tgrParameterMgr * GetInstance()
static void CheckWLsize(const std::vector< G4String > &wl, unsigned int nWCheck, WLSIZEtype st, const G4String &methodName)
static G4double GetDouble(const G4String &str, G4double unitval=1.)
#define G4ThreadLocal
Definition tls.hh:77