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
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)
Definition: G4Exception.cc:59
float G4float
Definition: G4Types.hh:84
bool G4bool
Definition: G4Types.hh:86
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
@ WLSIZE_EQ
Definition: G4tgrUtils.hh:47
static G4String ConvertToString(G4bool boolVal)
Definition: G4UIcommand.cc:446
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)
Definition: G4tgrUtils.cc:490
static G4double GetDouble(const G4String &str, G4double unitval=1.)
Definition: G4tgrUtils.cc:198
#define G4ThreadLocal
Definition: tls.hh:77