Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/persistency/ascii/src/G4tgrMaterialFactory.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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 
 31 #include "G4tgrMaterialFactory.hh"
 32 #include "G4tgrUtils.hh"
 33 #include "G4tgrElementSimple.hh"
 34 #include "G4tgrElementFromIsotopes.hh"
 35 #include "G4tgrMaterialSimple.hh"
 36 #include "G4tgrMaterialMixture.hh"
 37 #include "G4tgrFileReader.hh"
 38 #include "G4tgrMessenger.hh"
 39 
 40 G4ThreadLocal G4tgrMaterialFactory* G4tgrMaterialFactory::theInstance = nullptr;
 41 
 42 // --------------------------------------------------------------------
 43 G4tgrMaterialFactory::G4tgrMaterialFactory()
 44 {
 45 }
 46 
 47 // --------------------------------------------------------------------
 48 G4tgrMaterialFactory* G4tgrMaterialFactory::GetInstance()
 49 {
 50   if(theInstance == nullptr)
 51   {
 52     theInstance = new G4tgrMaterialFactory;
 53   }
 54   return theInstance;
 55 }
 56 
 57 // --------------------------------------------------------------------
 58 G4tgrMaterialFactory::~G4tgrMaterialFactory()
 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 // --------------------------------------------------------------------
 84 G4tgrIsotope* 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 // --------------------------------------------------------------------
 99 G4tgrElementSimple*
100 G4tgrMaterialFactory::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 
108   G4tgrElementSimple* elem = new G4tgrElementSimple(wl);
109   theG4tgrElements[elem->GetName()] = elem;
110 
111   return elem;
112 }
113 
114 // --------------------------------------------------------------------
115 G4tgrElementFromIsotopes*
116 G4tgrMaterialFactory::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 
124   G4tgrElementFromIsotopes* elem = new G4tgrElementFromIsotopes(wl);
125   theG4tgrElements[elem->GetName()] = elem;
126 
127   return elem;
128 }
129 
130 // --------------------------------------------------------------------
131 G4tgrMaterialSimple*
132 G4tgrMaterialFactory::AddMaterialSimple(const std::vector<G4String>& wl)
133 {
134 #ifdef G4VERBOSE
135   if(G4tgrMessenger::GetVerboseLevel() >= 2)
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 // --------------------------------------------------------------------
156 G4tgrMaterialMixture*
157 G4tgrMaterialFactory::AddMaterialMixture(const std::vector<G4String>& wl,
158                                          const G4String& mixtType)
159 {
160 #ifdef G4VERBOSE
161   if(G4tgrMessenger::GetVerboseLevel() >= 2)
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 
173   G4tgrMaterialMixture* mate;
174   mate = new G4tgrMaterialMixture(mixtType, wl);
175 
176   //---------- register this material
177   theG4tgrMaterials[mate->GetName()] = mate;
178 
179   return mate;
180 }
181 
182 // --------------------------------------------------------------------
183 G4tgrIsotope* G4tgrMaterialFactory::FindIsotope(const G4String& name) const
184 {
185 #ifdef G4VERBOSE
186   if(G4tgrMessenger::GetVerboseLevel() >= 3)
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
201     if(G4tgrMessenger::GetVerboseLevel() >= 3)
202     {
203       G4cout << " G4tgrIsotope found: " << ((*cite).second)->GetName()
204              << G4endl;
205     }
206 #endif
207     return (*cite).second;
208   }
209 }
210 
211 // --------------------------------------------------------------------
212 G4tgrElement* G4tgrMaterialFactory::FindElement(const G4String& name) const
213 {
214 #ifdef G4VERBOSE
215   if(G4tgrMessenger::GetVerboseLevel() >= 3)
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
229     if(G4tgrMessenger::GetVerboseLevel() >= 3)
230     {
231       DumpElementList();
232       G4cout << " G4tgrElement found: " << ((*cite).second)->GetName()
233              << G4endl;
234     }
235 #endif
236     return (*cite).second;
237   }
238 }
239 
240 // --------------------------------------------------------------------
241 G4tgrMaterial* G4tgrMaterialFactory::FindMaterial(const G4String& name) const
242 {
243 #ifdef G4VERBOSE
244   if(G4tgrMessenger::GetVerboseLevel() >= 3)
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 // --------------------------------------------------------------------
262 void G4tgrMaterialFactory::DumpIsotopeList() const
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 // --------------------------------------------------------------------
273 void G4tgrMaterialFactory::DumpElementList() const
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 // --------------------------------------------------------------------
284 void G4tgrMaterialFactory::DumpMaterialList() const
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 // --------------------------------------------------------------------
297 void 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
311     if(G4tgrMessenger::GetVerboseLevel() >= 1)
312     {
313       G4tgrUtils::DumpVS(wl, (G4String("!! WARNING: ") + msg).c_str());
314     }
315 #endif
316   }
317 }
318