Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4GDMLReadMaterials.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//
27// $Id$
28// GEANT4 tag $ Name:$
29//
30// class G4GDMLReadMaterials Implementation
31//
32// Original author: Zoltan Torzsok, November 2007
33//
34// --------------------------------------------------------------------
35
37
39#include "G4SystemOfUnits.hh"
40#include "G4Element.hh"
41#include "G4Isotope.hh"
42#include "G4Material.hh"
43#include "G4NistManager.hh"
44
46{
47}
48
50{
51}
52
54G4GDMLReadMaterials::AtomRead(const xercesc::DOMElement* const atomElement)
55{
56 G4double value = 0.0;
57 G4double unit = g/mole;
58
59 const xercesc::DOMNamedNodeMap* const attributes
60 = atomElement->getAttributes();
61 XMLSize_t attributeCount = attributes->getLength();
62
63 for (XMLSize_t attribute_index=0;
64 attribute_index<attributeCount; attribute_index++)
65 {
66 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
67
68 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
69 { continue; }
70
71 const xercesc::DOMAttr* const attribute
72 = dynamic_cast<xercesc::DOMAttr*>(attribute_node);
73 if (!attribute)
74 {
75 G4Exception("G4GDMLReadMaterials::AtomRead()", "InvalidRead",
76 FatalException, "No attribute found!");
77 return value;
78 }
79 const G4String attName = Transcode(attribute->getName());
80 const G4String attValue = Transcode(attribute->getValue());
81
82 if (attName=="value") { value = eval.Evaluate(attValue); } else
83 if (attName=="unit") { unit = eval.Evaluate(attValue); }
84 }
85
86 return value*unit;
87}
88
90CompositeRead(const xercesc::DOMElement* const compositeElement,G4String& ref)
91{
92 G4int n = 0;
93
94 const xercesc::DOMNamedNodeMap* const attributes
95 = compositeElement->getAttributes();
96 XMLSize_t attributeCount = attributes->getLength();
97
98 for (XMLSize_t attribute_index=0;
99 attribute_index<attributeCount; attribute_index++)
100 {
101 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
102
103 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
104 { continue; }
105
106 const xercesc::DOMAttr* const attribute
107 = dynamic_cast<xercesc::DOMAttr*>(attribute_node);
108 if (!attribute)
109 {
110 G4Exception("G4GDMLReadMaterials::CompositeRead()", "InvalidRead",
111 FatalException, "No attribute found!");
112 return n;
113 }
114 const G4String attName = Transcode(attribute->getName());
115 const G4String attValue = Transcode(attribute->getValue());
116
117 if (attName=="n") { n = eval.EvaluateInteger(attValue); } else
118 if (attName=="ref") { ref = attValue; }
119 }
120
121 return n;
122}
123
124G4double G4GDMLReadMaterials::DRead(const xercesc::DOMElement* const DElement)
125{
126 G4double value = 0.0;
127 G4double unit = g/cm3;
128
129 const xercesc::DOMNamedNodeMap* const attributes
130 = DElement->getAttributes();
131 XMLSize_t attributeCount = attributes->getLength();
132
133 for (XMLSize_t attribute_index=0;
134 attribute_index<attributeCount; attribute_index++)
135 {
136 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
137
138 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
139 { continue; }
140
141 const xercesc::DOMAttr* const attribute
142 = dynamic_cast<xercesc::DOMAttr*>(attribute_node);
143 if (!attribute)
144 {
145 G4Exception("G4GDMLReadMaterials::DRead()", "InvalidRead",
146 FatalException, "No attribute found!");
147 return value;
148 }
149 const G4String attName = Transcode(attribute->getName());
150 const G4String attValue = Transcode(attribute->getValue());
151
152 if (attName=="value") { value = eval.Evaluate(attValue); } else
153 if (attName=="unit") { unit = eval.Evaluate(attValue); }
154 }
155
156 return value*unit;
157}
158
159G4double G4GDMLReadMaterials::PRead(const xercesc::DOMElement* const PElement)
160{
161 G4double value = STP_Pressure;
162 G4double unit = pascal;
163
164 const xercesc::DOMNamedNodeMap* const attributes = PElement->getAttributes();
165 XMLSize_t attributeCount = attributes->getLength();
166
167 for (XMLSize_t attribute_index=0;
168 attribute_index<attributeCount; attribute_index++)
169 {
170 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
171
172 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
173 { continue; }
174
175 const xercesc::DOMAttr* const attribute
176 = dynamic_cast<xercesc::DOMAttr*>(attribute_node);
177 if (!attribute)
178 {
179 G4Exception("G4GDMLReadMaterials::PRead()", "InvalidRead",
180 FatalException, "No attribute found!");
181 return value;
182 }
183 const G4String attName = Transcode(attribute->getName());
184 const G4String attValue = Transcode(attribute->getValue());
185
186 if (attName=="value") { value = eval.Evaluate(attValue); } else
187 if (attName=="unit") { unit = eval.Evaluate(attValue); }
188 }
189
190 return value*unit;
191}
192
193G4double G4GDMLReadMaterials::TRead(const xercesc::DOMElement* const TElement)
194{
195 G4double value = STP_Temperature;
196 G4double unit = kelvin;
197
198 const xercesc::DOMNamedNodeMap* const attributes = TElement->getAttributes();
199 XMLSize_t attributeCount = attributes->getLength();
200
201 for (XMLSize_t attribute_index=0;
202 attribute_index<attributeCount; attribute_index++)
203 {
204 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
205
206 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
207 { continue; }
208
209 const xercesc::DOMAttr* const attribute
210 = dynamic_cast<xercesc::DOMAttr*>(attribute_node);
211 if (!attribute)
212 {
213 G4Exception("G4GDMLReadMaterials::TRead()", "InvalidRead",
214 FatalException, "No attribute found!");
215 return value;
216 }
217 const G4String attName = Transcode(attribute->getName());
218 const G4String attValue = Transcode(attribute->getValue());
219
220 if (attName=="value") { value = eval.Evaluate(attValue); } else
221 if (attName=="unit") { unit = eval.Evaluate(attValue); }
222 }
223
224 return value*unit;
225}
226
227G4double G4GDMLReadMaterials::MEERead(const xercesc::DOMElement* const PElement)
228{
229 G4double value = -1;
230 G4double unit = eV;
231
232 const xercesc::DOMNamedNodeMap* const attributes = PElement->getAttributes();
233 XMLSize_t attributeCount = attributes->getLength();
234
235 for (XMLSize_t attribute_index=0;
236 attribute_index<attributeCount; attribute_index++)
237 {
238 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
239
240 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
241 { continue; }
242
243 const xercesc::DOMAttr* const attribute
244 = dynamic_cast<xercesc::DOMAttr*>(attribute_node);
245 if (!attribute)
246 {
247 G4Exception("G4GDMLReadMaterials::MEERead()", "InvalidRead",
248 FatalException, "No attribute found!");
249 return value;
250 }
251 const G4String attName = Transcode(attribute->getName());
252 const G4String attValue = Transcode(attribute->getValue());
253
254 if (attName=="value") { value = eval.Evaluate(attValue); } else
255 if (attName=="unit") { unit = eval.Evaluate(attValue); }
256 }
257
258 return value*unit;
259}
260
262ElementRead(const xercesc::DOMElement* const elementElement)
263{
264 G4String name;
265 G4String formula;
266 G4double a = 0.0;
267 G4double Z = 0.0;
268
269 const xercesc::DOMNamedNodeMap* const attributes
270 = elementElement->getAttributes();
271 XMLSize_t attributeCount = attributes->getLength();
272
273 for (XMLSize_t attribute_index=0;
274 attribute_index<attributeCount; attribute_index++)
275 {
276 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
277
278 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
279 { continue; }
280
281 const xercesc::DOMAttr* const attribute
282 = dynamic_cast<xercesc::DOMAttr*>(attribute_node);
283 if (!attribute)
284 {
285 G4Exception("G4GDMLReadMaterials::ElementRead()", "InvalidRead",
286 FatalException, "No attribute found!");
287 return;
288 }
289 const G4String attName = Transcode(attribute->getName());
290 const G4String attValue = Transcode(attribute->getValue());
291
292 if (attName=="name") { name = GenerateName(attValue); } else
293 if (attName=="formula") { formula = attValue; } else
294 if (attName=="Z") { Z = eval.Evaluate(attValue); }
295 }
296
297 G4int nComponents = 0;
298
299 for (xercesc::DOMNode* iter = elementElement->getFirstChild();
300 iter != 0; iter = iter->getNextSibling())
301 {
302 if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) { continue; }
303
304 const xercesc::DOMElement* const child
305 = dynamic_cast<xercesc::DOMElement*>(iter);
306 if (!child)
307 {
308 G4Exception("G4GDMLReadMaterials::ElementRead()", "InvalidRead",
309 FatalException, "No child found!");
310 return;
311 }
312 const G4String tag = Transcode(child->getTagName());
313
314 if (tag=="atom") { a = AtomRead(child); } else
315 if (tag=="fraction") { nComponents++; }
316 }
317
318 if (nComponents>0)
319 {
320 MixtureRead(elementElement,
321 new G4Element(Strip(name),formula,nComponents));
322 }
323 else
324 {
325 new G4Element(Strip(name),formula,Z,a);
326 }
327}
328
330FractionRead(const xercesc::DOMElement* const fractionElement, G4String& ref)
331{
332 G4double n = 0.0;
333
334 const xercesc::DOMNamedNodeMap* const attributes
335 = fractionElement->getAttributes();
336 XMLSize_t attributeCount = attributes->getLength();
337
338 for (XMLSize_t attribute_index=0;
339 attribute_index<attributeCount; attribute_index++)
340 {
341 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
342
343 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
344 { continue; }
345
346 const xercesc::DOMAttr* const attribute
347 = dynamic_cast<xercesc::DOMAttr*>(attribute_node);
348 if (!attribute)
349 {
350 G4Exception("G4GDMLReadMaterials::FractionRead()", "InvalidRead",
351 FatalException, "No attribute found!");
352 return n;
353 }
354 const G4String attName = Transcode(attribute->getName());
355 const G4String attValue = Transcode(attribute->getValue());
356
357 if (attName=="n") { n = eval.Evaluate(attValue); } else
358 if (attName=="ref") { ref = attValue; }
359 }
360
361 return n;
362}
363
365IsotopeRead(const xercesc::DOMElement* const isotopeElement)
366{
367 G4String name;
368 G4int Z = 0;
369 G4int N = 0;
370 G4double a = 0.0;
371
372 const xercesc::DOMNamedNodeMap* const attributes
373 = isotopeElement->getAttributes();
374 XMLSize_t attributeCount = attributes->getLength();
375
376 for (XMLSize_t attribute_index=0;
377 attribute_index<attributeCount;attribute_index++)
378 {
379 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
380
381 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
382 { continue; }
383
384 const xercesc::DOMAttr* const attribute
385 = dynamic_cast<xercesc::DOMAttr*>(attribute_node);
386 if (!attribute)
387 {
388 G4Exception("G4GDMLReadMaterials::IsotopeRead()", "InvalidRead",
389 FatalException, "No attribute found!");
390 return;
391 }
392 const G4String attName = Transcode(attribute->getName());
393 const G4String attValue = Transcode(attribute->getValue());
394
395 if (attName=="name") { name = GenerateName(attValue); } else
396 if (attName=="Z") { Z = eval.EvaluateInteger(attValue); } else
397 if (attName=="N") { N = eval.EvaluateInteger(attValue); }
398 }
399
400 for (xercesc::DOMNode* iter = isotopeElement->getFirstChild();
401 iter != 0; iter = iter->getNextSibling())
402 {
403 if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) { continue; }
404
405 const xercesc::DOMElement* const child
406 = dynamic_cast<xercesc::DOMElement*>(iter);
407 if (!child)
408 {
409 G4Exception("G4GDMLReadMaterials::IsotopeRead()", "InvalidRead",
410 FatalException, "No child found!");
411 return;
412 }
413 const G4String tag = Transcode(child->getTagName());
414
415 if (tag=="atom") { a = AtomRead(child); }
416 }
417
418 new G4Isotope(Strip(name),Z,N,a);
419}
420
422MaterialRead(const xercesc::DOMElement* const materialElement)
423{
424 G4String name;
425 G4double Z = 0.0;
426 G4double a = 0.0;
427 G4double D = 0.0;
428 G4State state = kStateUndefined;
429 G4double T = STP_Temperature;
430 G4double P = STP_Pressure;
431 G4double MEE = -1.0;
432
433 const xercesc::DOMNamedNodeMap* const attributes
434 = materialElement->getAttributes();
435 XMLSize_t attributeCount = attributes->getLength();
436
437 for (XMLSize_t attribute_index=0;
438 attribute_index<attributeCount; attribute_index++)
439 {
440 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
441
442 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
443 { continue; }
444
445 const xercesc::DOMAttr* const attribute
446 = dynamic_cast<xercesc::DOMAttr*>(attribute_node);
447 if (!attribute)
448 {
449 G4Exception("G4GDMLReadMaterials::MaterialRead()", "InvalidRead",
450 FatalException, "No attribute found!");
451 return;
452 }
453 const G4String attName = Transcode(attribute->getName());
454 const G4String attValue = Transcode(attribute->getValue());
455
456 if (attName=="name") { name = GenerateName(attValue); } else
457 if (attName=="Z") { Z = eval.Evaluate(attValue); } else
458 if (attName=="state")
459 {
460 if (attValue=="solid") { state = kStateSolid; } else
461 if (attValue=="liquid") { state = kStateLiquid; } else
462 if (attValue=="gas") { state = kStateGas; }
463 }
464 }
465
466 size_t nComponents = 0;
467
468 for (xercesc::DOMNode* iter = materialElement->getFirstChild();
469 iter != 0; iter = iter->getNextSibling())
470 {
471 if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) { continue; }
472
473 const xercesc::DOMElement* const child
474 = dynamic_cast<xercesc::DOMElement*>(iter);
475 if (!child)
476 {
477 G4Exception("G4GDMLReadMaterials::MaterialRead()", "InvalidRead",
478 FatalException, "No child found!");
479 return;
480 }
481 const G4String tag = Transcode(child->getTagName());
482
483 if (tag=="atom") { a = AtomRead(child); } else
484 if (tag=="Dref") { D = GetQuantity(GenerateName(RefRead(child))); } else
485 if (tag=="Pref") { P = GetQuantity(GenerateName(RefRead(child))); } else
486 if (tag=="Tref") { T = GetQuantity(GenerateName(RefRead(child))); } else
487 if (tag=="MEEref") { MEE = GetQuantity(GenerateName(RefRead(child))); } else
488 if (tag=="D") { D = DRead(child); } else
489 if (tag=="P") { P = PRead(child); } else
490 if (tag=="T") { T = TRead(child); } else
491 if (tag=="MEE") { MEE = MEERead(child); } else
492 if (tag=="fraction" || tag=="composite") { nComponents++; }
493 }
494
495 G4Material* material = 0;
496
497 if (nComponents==0)
498 {
499 material = new G4Material(Strip(name),Z,a,D,state,T,P);
500 }
501 else
502 {
503 material = new G4Material(Strip(name),D,nComponents,state,T,P);
504 MixtureRead(materialElement, material);
505 }
506 if (MEE != -1) // ionisation potential (mean excitation energy)
507 {
508 material->GetIonisation()->SetMeanExcitationEnergy(MEE);
509 }
510
511 for (xercesc::DOMNode* iter = materialElement->getFirstChild();
512 iter != 0; iter = iter->getNextSibling())
513 {
514 if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) { continue; }
515
516 const xercesc::DOMElement* const child
517 = dynamic_cast<xercesc::DOMElement*>(iter);
518 if (!child)
519 {
520 G4Exception("G4GDMLReadMaterials::MaterialRead()", "InvalidRead",
521 FatalException, "No child found!");
522 return;
523 }
524 const G4String tag = Transcode(child->getTagName());
525
526 if (tag=="property") { PropertyRead(child,material); }
527 }
528}
529
531MixtureRead(const xercesc::DOMElement *const mixtureElement, G4Element *element)
532{
533 for (xercesc::DOMNode* iter = mixtureElement->getFirstChild();
534 iter != 0; iter = iter->getNextSibling())
535 {
536 if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) { continue; }
537
538 const xercesc::DOMElement* const child
539 = dynamic_cast<xercesc::DOMElement*>(iter);
540 if (!child)
541 {
542 G4Exception("G4GDMLReadMaterials::MixtureRead()", "InvalidRead",
543 FatalException, "No child found!");
544 return;
545 }
546 const G4String tag = Transcode(child->getTagName());
547
548 if (tag=="fraction")
549 {
550 G4String ref;
551 G4double n = FractionRead(child,ref);
552 element->AddIsotope(GetIsotope(GenerateName(ref,true)),n);
553 }
554 }
555}
556
558MixtureRead(const xercesc::DOMElement *const mixtureElement,
559 G4Material *material)
560{
561 for (xercesc::DOMNode* iter = mixtureElement->getFirstChild();
562 iter != 0; iter = iter->getNextSibling())
563 {
564 if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) { continue; }
565
566 const xercesc::DOMElement* const child
567 = dynamic_cast<xercesc::DOMElement*>(iter);
568 if (!child)
569 {
570 G4Exception("G4GDMLReadMaterials::MixtureRead()", "InvalidRead",
571 FatalException, "No child found!");
572 return;
573 }
574 const G4String tag = Transcode(child->getTagName());
575
576 if (tag=="fraction")
577 {
578 G4String ref;
579 G4double n = FractionRead(child,ref);
580
581 G4Material *materialPtr = GetMaterial(GenerateName(ref,true), false);
582 G4Element *elementPtr = GetElement(GenerateName(ref,true), false);
583
584 if (materialPtr != 0) { material->AddMaterial(materialPtr,n); } else
585 if (elementPtr != 0) { material->AddElement(elementPtr,n); }
586
587 if ((materialPtr == 0) && (elementPtr == 0))
588 {
589 G4String error_msg = "Referenced material/element '"
590 + GenerateName(ref,true) + "' was not found!";
591 G4Exception("G4GDMLReadMaterials::MixtureRead()", "InvalidSetup",
592 FatalException, error_msg);
593 }
594 }
595 else if (tag=="composite")
596 {
597 G4String ref;
598 G4int n = CompositeRead(child,ref);
599
600 G4Element *elementPtr = GetElement(GenerateName(ref,true));
601 material->AddElement(elementPtr,n);
602 }
603 }
604}
605
607PropertyRead(const xercesc::DOMElement* const propertyElement,
608 G4Material* material)
609{
610 G4String name;
611 G4String ref;
612 G4GDMLMatrix matrix;
613
614 const xercesc::DOMNamedNodeMap* const attributes
615 = propertyElement->getAttributes();
616 XMLSize_t attributeCount = attributes->getLength();
617
618 for (XMLSize_t attribute_index=0;
619 attribute_index<attributeCount; attribute_index++)
620 {
621 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
622
623 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
624 { continue; }
625
626 const xercesc::DOMAttr* const attribute
627 = dynamic_cast<xercesc::DOMAttr*>(attribute_node);
628 if (!attribute)
629 {
630 G4Exception("G4GDMLReadMaterials::PropertyRead()", "InvalidRead",
631 FatalException, "No attribute found!");
632 return;
633 }
634 const G4String attName = Transcode(attribute->getName());
635 const G4String attValue = Transcode(attribute->getValue());
636
637 if (attName=="name") { name = GenerateName(attValue); } else
638 if (attName=="ref") { matrix = GetMatrix(ref=attValue); }
639 }
640
641 /*
642 if (matrix.GetCols() != 2)
643 {
644 G4String error_msg = "Referenced matrix '" + ref
645 + "' should have \n two columns as a property table for material: "
646 + material->GetName();
647 G4Exception("G4GDMLReadMaterials::PropertyRead()", "InvalidRead",
648 FatalException, error_msg);
649 }
650 */
651
652 if (matrix.GetRows() == 0) { return; }
653
655 if (!matprop)
656 {
657 matprop = new G4MaterialPropertiesTable();
658 material->SetMaterialPropertiesTable(matprop);
659 }
660 if (matrix.GetCols() == 1) // constant property assumed
661 {
662 matprop->AddConstProperty(Strip(name), matrix.Get(0,0));
663 }
664 else // build the material properties vector
665 {
667 for (size_t i=0; i<matrix.GetRows(); i++)
668 {
669 propvect->InsertValues(matrix.Get(i,0),matrix.Get(i,1));
670 }
671 matprop->AddProperty(Strip(name),propvect);
672 }
673}
674
676MaterialsRead(const xercesc::DOMElement* const materialsElement)
677{
678 G4cout << "G4GDML: Reading materials..." << G4endl;
679
680 for (xercesc::DOMNode* iter = materialsElement->getFirstChild();
681 iter != 0; iter = iter->getNextSibling())
682 {
683 if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) { continue; }
684
685 const xercesc::DOMElement* const child
686 = dynamic_cast<xercesc::DOMElement*>(iter);
687 if (!child)
688 {
689 G4Exception("G4GDMLReadMaterials::MaterialsRead()", "InvalidRead",
690 FatalException, "No child found!");
691 return;
692 }
693 const G4String tag = Transcode(child->getTagName());
694
695 if (tag=="define") { DefineRead(child); } else
696 if (tag=="element") { ElementRead(child); } else
697 if (tag=="isotope") { IsotopeRead(child); } else
698 if (tag=="material") { MaterialRead(child); }
699 else
700 {
701 G4String error_msg = "Unknown tag in materials: " + tag;
702 G4Exception("G4GDMLReadMaterials::MaterialsRead()", "InvalidSetup",
703 FatalException, error_msg);
704 }
705 }
706}
707
709GetElement(const G4String& ref, G4bool verbose) const
710{
711 G4Element* elementPtr = G4Element::GetElement(ref,false);
712
713 if (!elementPtr)
714 {
715 elementPtr = G4NistManager::Instance()->FindOrBuildElement(ref);
716 }
717
718 if (verbose && !elementPtr)
719 {
720 G4String error_msg = "Referenced element '" + ref + "' was not found!";
721 G4Exception("G4GDMLReadMaterials::GetElement()", "InvalidRead",
722 FatalException, error_msg);
723 }
724
725 return elementPtr;
726}
727
729 G4bool verbose) const
730{
731 G4Isotope* isotopePtr = G4Isotope::GetIsotope(ref,false);
732
733 if (verbose && !isotopePtr)
734 {
735 G4String error_msg = "Referenced isotope '" + ref + "' was not found!";
736 G4Exception("G4GDMLReadMaterials::GetIsotope()", "InvalidRead",
737 FatalException, error_msg);
738 }
739
740 return isotopePtr;
741}
742
744 G4bool verbose) const
745{
746 G4Material *materialPtr = G4Material::GetMaterial(ref,false);
747
748 if (!materialPtr)
749 {
750 materialPtr = G4NistManager::Instance()->FindOrBuildMaterial(ref);
751 }
752
753 if (verbose && !materialPtr)
754 {
755 G4String error_msg = "Referenced material '" + ref + "' was not found!";
756 G4Exception("G4GDMLReadMaterials::GetMaterial()", "InvalidRead",
757 FatalException, error_msg);
758 }
759
760 return materialPtr;
761}
@ FatalException
G4PhysicsOrderedFreeVector G4MaterialPropertyVector
G4State
Definition: G4Material.hh:114
@ kStateSolid
Definition: G4Material.hh:114
@ kStateLiquid
Definition: G4Material.hh:114
@ kStateGas
Definition: G4Material.hh:114
@ kStateUndefined
Definition: G4Material.hh:114
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
#define pascal
void AddIsotope(G4Isotope *isotope, G4double RelativeAbundance)
Definition: G4Element.cc:147
static G4Element * GetElement(G4String name, G4bool warning=true)
Definition: G4Element.cc:413
G4double Evaluate(const G4String &)
G4int EvaluateInteger(const G4String &)
size_t GetCols() const
G4double Get(size_t r, size_t c) const
size_t GetRows() const
G4double GetQuantity(const G4String &)
G4GDMLMatrix GetMatrix(const G4String &)
G4String RefRead(const xercesc::DOMElement *const)
virtual void DefineRead(const xercesc::DOMElement *const)
void PropertyRead(const xercesc::DOMElement *const, G4Material *)
G4double MEERead(const xercesc::DOMElement *const)
void MixtureRead(const xercesc::DOMElement *const, G4Element *)
G4double DRead(const xercesc::DOMElement *const)
G4double AtomRead(const xercesc::DOMElement *const)
G4Material * GetMaterial(const G4String &, G4bool verbose=true) const
G4Element * GetElement(const G4String &, G4bool verbose=true) const
G4double PRead(const xercesc::DOMElement *const)
G4Isotope * GetIsotope(const G4String &, G4bool verbose=true) const
G4int CompositeRead(const xercesc::DOMElement *const, G4String &)
virtual void MaterialsRead(const xercesc::DOMElement *const)
G4double TRead(const xercesc::DOMElement *const)
G4double FractionRead(const xercesc::DOMElement *const, G4String &)
void ElementRead(const xercesc::DOMElement *const)
void IsotopeRead(const xercesc::DOMElement *const)
void MaterialRead(const xercesc::DOMElement *const)
G4String Strip(const G4String &) const
Definition: G4GDMLRead.cc:100
G4String GenerateName(const G4String &name, G4bool strip=false)
Definition: G4GDMLRead.cc:68
G4String Transcode(const XMLCh *const)
Definition: G4GDMLRead.cc:55
G4GDMLEvaluator eval
Definition: G4GDMLRead.hh:144
void SetMeanExcitationEnergy(G4double value)
static G4Isotope * GetIsotope(const G4String &name, G4bool warning=false)
Definition: G4Isotope.cc:196
void AddConstProperty(const char *key, G4double PropertyValue)
G4MaterialPropertyVector * AddProperty(const char *key, G4double *PhotonEnergies, G4double *PropertyValues, G4int NumEntries)
G4MaterialPropertiesTable * GetMaterialPropertiesTable() const
Definition: G4Material.hh:251
G4IonisParamMat * GetIonisation() const
Definition: G4Material.hh:225
void AddElement(G4Element *element, G4int nAtoms)
Definition: G4Material.cc:341
void AddMaterial(G4Material *material, G4double fraction)
Definition: G4Material.cc:447
void SetMaterialPropertiesTable(G4MaterialPropertiesTable *anMPT)
Definition: G4Material.hh:248
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
Definition: G4Material.cc:576
G4Material * FindOrBuildMaterial(const G4String &name, G4bool isotopes=true, G4bool warning=false)
static G4NistManager * Instance()
G4Element * FindOrBuildElement(G4int Z, G4bool isotopes=true)
void InsertValues(G4double energy, G4double value)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
Definition: xmlparse.cc:179