Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4tgrMaterialFactory.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// G4tgrMaterialFactory implementation
27//
28// Author: P.Arce, CIEMAT (November 2007)
29// --------------------------------------------------------------------
30
32#include "G4tgrUtils.hh"
33#include "G4tgrElementSimple.hh"
37#include "G4tgrFileReader.hh"
38#include "G4tgrMessenger.hh"
39
40G4ThreadLocal G4tgrMaterialFactory* G4tgrMaterialFactory::theInstance = nullptr;
41
42// --------------------------------------------------------------------
43G4tgrMaterialFactory::G4tgrMaterialFactory()
44{
45}
46
47// --------------------------------------------------------------------
49{
50 if(theInstance == nullptr)
51 {
52 theInstance = new G4tgrMaterialFactory;
53 }
54 return theInstance;
55}
56
57// --------------------------------------------------------------------
59{
60 for(auto isotcite = theG4tgrIsotopes.cbegin();
61 isotcite != theG4tgrIsotopes.cend(); ++isotcite)
62 {
63 delete(*isotcite).second;
64 }
65 theG4tgrIsotopes.clear();
66
67 for(auto elemcite = theG4tgrElements.cbegin();
68 elemcite != theG4tgrElements.cend(); ++elemcite)
69 {
70 delete(*elemcite).second;
71 }
72 theG4tgrElements.clear();
73
74 for(auto matcite = theG4tgrMaterials.cbegin();
75 matcite != theG4tgrMaterials.cend(); ++matcite)
76 {
77 delete(*matcite).second;
78 }
79 theG4tgrMaterials.clear();
80 delete theInstance;
81}
82
83// --------------------------------------------------------------------
84G4tgrIsotope* G4tgrMaterialFactory::AddIsotope(const std::vector<G4String>& wl)
85{
86 //---------- Look if isotope exists
87 if(FindIsotope(G4tgrUtils::GetString(wl[1])) != 0)
88 {
89 ErrorAlreadyExists("isotope", wl);
90 }
91
92 G4tgrIsotope* isot = new G4tgrIsotope(wl);
93 theG4tgrIsotopes[isot->GetName()] = isot;
94
95 return isot;
96}
97
98// --------------------------------------------------------------------
100G4tgrMaterialFactory::AddElementSimple(const std::vector<G4String>& wl)
101{
102 //---------- Look if element exists
103 if(FindElement(G4tgrUtils::GetString(wl[1])) != 0)
104 {
105 ErrorAlreadyExists("element", wl);
106 }
107
109 theG4tgrElements[elem->GetName()] = elem;
110
111 return elem;
112}
113
114// --------------------------------------------------------------------
116G4tgrMaterialFactory::AddElementFromIsotopes(const std::vector<G4String>& wl)
117{
118 //---------- Look if element exists
119 if(FindElement(G4tgrUtils::GetString(wl[1])) != 0)
120 {
121 ErrorAlreadyExists("element", wl);
122 }
123
125 theG4tgrElements[elem->GetName()] = elem;
126
127 return elem;
128}
129
130// --------------------------------------------------------------------
132G4tgrMaterialFactory::AddMaterialSimple(const std::vector<G4String>& wl)
133{
134#ifdef G4VERBOSE
136 {
137 G4cout << " G4tgrMaterialFactory::AddMaterialSimple" << wl[1] << G4endl;
138 }
139#endif
140
141 //---------- Look if material exists
142 if(FindMaterial(G4tgrUtils::GetString(wl[1])) != 0)
143 {
144 ErrorAlreadyExists("material simple", wl);
145 }
146
147 G4tgrMaterialSimple* mate = new G4tgrMaterialSimple("MaterialSimple", wl);
148
149 //---------- register this material
150 theG4tgrMaterials[mate->GetName()] = mate;
151
152 return mate;
153}
154
155// --------------------------------------------------------------------
157G4tgrMaterialFactory::AddMaterialMixture(const std::vector<G4String>& wl,
158 const G4String& mixtType)
159{
160#ifdef G4VERBOSE
162 {
163 G4cout << " G4tgrMaterialFactory::AddMaterialMixture " << wl[1] << G4endl;
164 }
165#endif
166
167 //---------- Look if material already exists
168 if(FindMaterial(G4tgrUtils::GetString(wl[1])) != 0)
169 {
170 ErrorAlreadyExists("material mixture", wl);
171 }
172
174 mate = new G4tgrMaterialMixture(mixtType, wl);
175
176 //---------- register this material
177 theG4tgrMaterials[mate->GetName()] = mate;
178
179 return mate;
180}
181
182// --------------------------------------------------------------------
184{
185#ifdef G4VERBOSE
187 {
188 G4cout << " G4tgrMaterialFactory::FindIsotope() - " << name << G4endl;
189 }
190#endif
191
192 G4mstgrisot::const_iterator cite;
193 cite = theG4tgrIsotopes.find(name);
194 if(cite == theG4tgrIsotopes.cend())
195 {
196 return nullptr;
197 }
198 else
199 {
200#ifdef G4VERBOSE
202 {
203 G4cout << " G4tgrIsotope found: " << ((*cite).second)->GetName()
204 << G4endl;
205 }
206#endif
207 return (*cite).second;
208 }
209}
210
211// --------------------------------------------------------------------
213{
214#ifdef G4VERBOSE
216 {
217 G4cout << " G4tgrMaterialFactory::FindElement() - " << name << G4endl;
218 }
219#endif
220 G4mstgrelem::const_iterator cite;
221 cite = theG4tgrElements.find(name);
222 if(cite == theG4tgrElements.cend())
223 {
224 return nullptr;
225 }
226 else
227 {
228#ifdef G4VERBOSE
230 {
232 G4cout << " G4tgrElement found: " << ((*cite).second)->GetName()
233 << G4endl;
234 }
235#endif
236 return (*cite).second;
237 }
238}
239
240// --------------------------------------------------------------------
242{
243#ifdef G4VERBOSE
245 {
246 G4cout << " G4tgrMaterialFactory::FindMaterial() - " << name << G4endl;
247 }
248#endif
249 G4mstgrmate::const_iterator cite;
250 cite = theG4tgrMaterials.find(name);
251 if(cite == theG4tgrMaterials.cend())
252 {
253 return nullptr;
254 }
255 else
256 {
257 return (*cite).second;
258 }
259}
260
261// --------------------------------------------------------------------
263{
264 G4cout << " @@@@@@@@@@@@@@@@ DUMPING G4tgrIsotope's List " << G4endl;
265 for(auto cite = theG4tgrIsotopes.cbegin();
266 cite != theG4tgrIsotopes.cend(); ++cite)
267 {
268 G4cout << " ISOT: " << (*cite).second->GetName() << G4endl;
269 }
270}
271
272// --------------------------------------------------------------------
274{
275 G4cout << " @@@@@@@@@@@@@@@@ DUMPING G4tgrElement's List " << G4endl;
276 for(auto cite = theG4tgrElements.cbegin();
277 cite != theG4tgrElements.cend(); ++cite)
278 {
279 G4cout << " ELEM: " << (*cite).second->GetName() << G4endl;
280 }
281}
282
283// --------------------------------------------------------------------
285{
286 G4cout << " @@@@@@@@@@@@@@@@ DUMPING G4tgrMaterial's List " << G4endl;
287 for(auto cite = theG4tgrMaterials.cbegin();
288 cite != theG4tgrMaterials.cend(); ++cite)
289 {
290 G4tgrMaterial* mate = (*cite).second;
291 G4cout << " MATE: " << mate->GetName() << " Type: " << mate->GetType()
292 << " NoComponents= " << mate->GetNumberOfComponents() << G4endl;
293 }
294}
295
296// --------------------------------------------------------------------
297void G4tgrMaterialFactory::ErrorAlreadyExists(const G4String& object,
298 const std::vector<G4String>& wl,
299 const G4bool bNoRepeating)
300{
301 G4String msg = object + G4String(" repeated");
302 if(bNoRepeating)
303 {
304 G4tgrUtils::DumpVS(wl, (G4String("!!!! EXITING: ") + msg).c_str());
305 G4Exception("G4tgrMaterialFactory", "FatalError", FatalException,
306 "Aborting...");
307 }
308 else
309 {
310#ifdef G4VERBOSE
312 {
313 G4tgrUtils::DumpVS(wl, (G4String("!! WARNING: ") + msg).c_str());
314 }
315#endif
316 }
317}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
bool G4bool
Definition: G4Types.hh:86
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
const G4String & GetName() const
Definition: G4tgrElement.hh:46
const G4String & GetName() const
Definition: G4tgrIsotope.hh:54
G4tgrMaterial * FindMaterial(const G4String &name) const
static G4tgrMaterialFactory * GetInstance()
G4tgrElementFromIsotopes * AddElementFromIsotopes(const std::vector< G4String > &wl)
G4tgrElementSimple * AddElementSimple(const std::vector< G4String > &wl)
G4tgrElement * FindElement(const G4String &name) const
G4tgrMaterialMixture * AddMaterialMixture(const std::vector< G4String > &wl, const G4String &mixtType)
G4tgrIsotope * FindIsotope(const G4String &name) const
G4tgrIsotope * AddIsotope(const std::vector< G4String > &wl)
G4tgrMaterialSimple * AddMaterialSimple(const std::vector< G4String > &wl)
const G4String & GetName() const
const G4String & GetType() const
G4int GetNumberOfComponents() const
static G4int GetVerboseLevel()
static G4String GetString(const G4String &str)
Definition: G4tgrUtils.cc:173
static void DumpVS(const std::vector< G4String > &wl, const char *msg)
Definition: G4tgrUtils.cc:153
#define G4ThreadLocal
Definition: tls.hh:77