59 const xercesc::DOMNamedNodeMap*
const attributes
60 = atomElement->getAttributes();
61 XMLSize_t attributeCount = attributes->getLength();
63 for (XMLSize_t attribute_index=0;
64 attribute_index<attributeCount; attribute_index++)
66 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
68 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
71 const xercesc::DOMAttr*
const attribute
72 =
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);
75 G4Exception(
"G4GDMLReadMaterials::AtomRead()",
"InvalidRead",
82 if (attName==
"value") { value =
eval.
Evaluate(attValue); }
else
94 const xercesc::DOMNamedNodeMap*
const attributes
95 = compositeElement->getAttributes();
96 XMLSize_t attributeCount = attributes->getLength();
98 for (XMLSize_t attribute_index=0;
99 attribute_index<attributeCount; attribute_index++)
101 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
103 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
106 const xercesc::DOMAttr*
const attribute
107 =
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);
110 G4Exception(
"G4GDMLReadMaterials::CompositeRead()",
"InvalidRead",
118 if (attName==
"ref") { ref = attValue; }
129 const xercesc::DOMNamedNodeMap*
const attributes
130 = DElement->getAttributes();
131 XMLSize_t attributeCount = attributes->getLength();
133 for (XMLSize_t attribute_index=0;
134 attribute_index<attributeCount; attribute_index++)
136 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
138 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
141 const xercesc::DOMAttr*
const attribute
142 =
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);
145 G4Exception(
"G4GDMLReadMaterials::DRead()",
"InvalidRead",
152 if (attName==
"value") { value =
eval.
Evaluate(attValue); }
else
153 if (attName==
"unit") { unit =
eval.
Evaluate(attValue); }
164 const xercesc::DOMNamedNodeMap*
const attributes = PElement->getAttributes();
165 XMLSize_t attributeCount = attributes->getLength();
167 for (XMLSize_t attribute_index=0;
168 attribute_index<attributeCount; attribute_index++)
170 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
172 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
175 const xercesc::DOMAttr*
const attribute
176 =
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);
179 G4Exception(
"G4GDMLReadMaterials::PRead()",
"InvalidRead",
186 if (attName==
"value") { value =
eval.
Evaluate(attValue); }
else
187 if (attName==
"unit") { unit =
eval.
Evaluate(attValue); }
198 const xercesc::DOMNamedNodeMap*
const attributes = TElement->getAttributes();
199 XMLSize_t attributeCount = attributes->getLength();
201 for (XMLSize_t attribute_index=0;
202 attribute_index<attributeCount; attribute_index++)
204 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
206 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
209 const xercesc::DOMAttr*
const attribute
210 =
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);
213 G4Exception(
"G4GDMLReadMaterials::TRead()",
"InvalidRead",
220 if (attName==
"value") { value =
eval.
Evaluate(attValue); }
else
221 if (attName==
"unit") { unit =
eval.
Evaluate(attValue); }
232 const xercesc::DOMNamedNodeMap*
const attributes = PElement->getAttributes();
233 XMLSize_t attributeCount = attributes->getLength();
235 for (XMLSize_t attribute_index=0;
236 attribute_index<attributeCount; attribute_index++)
238 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
240 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
243 const xercesc::DOMAttr*
const attribute
244 =
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);
247 G4Exception(
"G4GDMLReadMaterials::MEERead()",
"InvalidRead",
254 if (attName==
"value") { value =
eval.
Evaluate(attValue); }
else
255 if (attName==
"unit") { unit =
eval.
Evaluate(attValue); }
269 const xercesc::DOMNamedNodeMap*
const attributes
270 = elementElement->getAttributes();
271 XMLSize_t attributeCount = attributes->getLength();
273 for (XMLSize_t attribute_index=0;
274 attribute_index<attributeCount; attribute_index++)
276 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
278 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
281 const xercesc::DOMAttr*
const attribute
282 =
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);
285 G4Exception(
"G4GDMLReadMaterials::ElementRead()",
"InvalidRead",
292 if (attName==
"name") { name =
GenerateName(attValue); }
else
293 if (attName==
"formula") { formula = attValue; }
else
299 for (xercesc::DOMNode* iter = elementElement->getFirstChild();
300 iter != 0; iter = iter->getNextSibling())
302 if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) {
continue; }
304 const xercesc::DOMElement*
const child
305 =
dynamic_cast<xercesc::DOMElement*
>(iter);
308 G4Exception(
"G4GDMLReadMaterials::ElementRead()",
"InvalidRead",
314 if (tag==
"atom") { a =
AtomRead(child); }
else
315 if (tag==
"fraction") { nComponents++; }
334 const xercesc::DOMNamedNodeMap*
const attributes
335 = fractionElement->getAttributes();
336 XMLSize_t attributeCount = attributes->getLength();
338 for (XMLSize_t attribute_index=0;
339 attribute_index<attributeCount; attribute_index++)
341 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
343 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
346 const xercesc::DOMAttr*
const attribute
347 =
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);
350 G4Exception(
"G4GDMLReadMaterials::FractionRead()",
"InvalidRead",
358 if (attName==
"ref") { ref = attValue; }
372 const xercesc::DOMNamedNodeMap*
const attributes
373 = isotopeElement->getAttributes();
374 XMLSize_t attributeCount = attributes->getLength();
376 for (XMLSize_t attribute_index=0;
377 attribute_index<attributeCount;attribute_index++)
379 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
381 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
384 const xercesc::DOMAttr*
const attribute
385 =
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);
388 G4Exception(
"G4GDMLReadMaterials::IsotopeRead()",
"InvalidRead",
395 if (attName==
"name") { name =
GenerateName(attValue); }
else
400 for (xercesc::DOMNode* iter = isotopeElement->getFirstChild();
401 iter != 0; iter = iter->getNextSibling())
403 if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) {
continue; }
405 const xercesc::DOMElement*
const child
406 =
dynamic_cast<xercesc::DOMElement*
>(iter);
409 G4Exception(
"G4GDMLReadMaterials::IsotopeRead()",
"InvalidRead",
415 if (tag==
"atom") { a =
AtomRead(child); }
433 const xercesc::DOMNamedNodeMap*
const attributes
434 = materialElement->getAttributes();
435 XMLSize_t attributeCount = attributes->getLength();
437 for (XMLSize_t attribute_index=0;
438 attribute_index<attributeCount; attribute_index++)
440 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
442 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
445 const xercesc::DOMAttr*
const attribute
446 =
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);
449 G4Exception(
"G4GDMLReadMaterials::MaterialRead()",
"InvalidRead",
456 if (attName==
"name") { name =
GenerateName(attValue); }
else
458 if (attName==
"state")
460 if (attValue==
"solid") { state =
kStateSolid; }
else
462 if (attValue==
"gas") { state =
kStateGas; }
468 for (xercesc::DOMNode* iter = materialElement->getFirstChild();
469 iter != 0; iter = iter->getNextSibling())
471 if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) {
continue; }
473 const xercesc::DOMElement*
const child
474 =
dynamic_cast<xercesc::DOMElement*
>(iter);
477 G4Exception(
"G4GDMLReadMaterials::MaterialRead()",
"InvalidRead",
483 if (tag==
"atom") { a =
AtomRead(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++; }
511 for (xercesc::DOMNode* iter = materialElement->getFirstChild();
512 iter != 0; iter = iter->getNextSibling())
514 if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) {
continue; }
516 const xercesc::DOMElement*
const child
517 =
dynamic_cast<xercesc::DOMElement*
>(iter);
520 G4Exception(
"G4GDMLReadMaterials::MaterialRead()",
"InvalidRead",
533 for (xercesc::DOMNode* iter = mixtureElement->getFirstChild();
534 iter != 0; iter = iter->getNextSibling())
536 if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) {
continue; }
538 const xercesc::DOMElement*
const child
539 =
dynamic_cast<xercesc::DOMElement*
>(iter);
542 G4Exception(
"G4GDMLReadMaterials::MixtureRead()",
"InvalidRead",
561 for (xercesc::DOMNode* iter = mixtureElement->getFirstChild();
562 iter != 0; iter = iter->getNextSibling())
564 if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) {
continue; }
566 const xercesc::DOMElement*
const child
567 =
dynamic_cast<xercesc::DOMElement*
>(iter);
570 G4Exception(
"G4GDMLReadMaterials::MixtureRead()",
"InvalidRead",
584 if (materialPtr != 0) { material->
AddMaterial(materialPtr,n); }
else
585 if (elementPtr != 0) { material->
AddElement(elementPtr,n); }
587 if ((materialPtr == 0) && (elementPtr == 0))
589 G4String error_msg =
"Referenced material/element '"
591 G4Exception(
"G4GDMLReadMaterials::MixtureRead()",
"InvalidSetup",
595 else if (tag==
"composite")
614 const xercesc::DOMNamedNodeMap*
const attributes
615 = propertyElement->getAttributes();
616 XMLSize_t attributeCount = attributes->getLength();
618 for (XMLSize_t attribute_index=0;
619 attribute_index<attributeCount; attribute_index++)
621 xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
623 if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
626 const xercesc::DOMAttr*
const attribute
627 =
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);
630 G4Exception(
"G4GDMLReadMaterials::PropertyRead()",
"InvalidRead",
637 if (attName==
"name") { name =
GenerateName(attValue); }
else
638 if (attName==
"ref") { matrix =
GetMatrix(ref=attValue); }
652 if (matrix.
GetRows() == 0) {
return; }
667 for (
size_t i=0; i<matrix.
GetRows(); i++)
680 for (xercesc::DOMNode* iter = materialsElement->getFirstChild();
681 iter != 0; iter = iter->getNextSibling())
683 if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) {
continue; }
685 const xercesc::DOMElement*
const child
686 =
dynamic_cast<xercesc::DOMElement*
>(iter);
689 G4Exception(
"G4GDMLReadMaterials::MaterialsRead()",
"InvalidRead",
695 if (tag==
"define") {
DefineRead(child); }
else
701 G4String error_msg =
"Unknown tag in materials: " + tag;
702 G4Exception(
"G4GDMLReadMaterials::MaterialsRead()",
"InvalidSetup",
718 if (verbose && !elementPtr)
720 G4String error_msg =
"Referenced element '" + ref +
"' was not found!";
721 G4Exception(
"G4GDMLReadMaterials::GetElement()",
"InvalidRead",
733 if (verbose && !isotopePtr)
735 G4String error_msg =
"Referenced isotope '" + ref +
"' was not found!";
736 G4Exception(
"G4GDMLReadMaterials::GetIsotope()",
"InvalidRead",
753 if (verbose && !materialPtr)
755 G4String error_msg =
"Referenced material '" + ref +
"' was not found!";
756 G4Exception(
"G4GDMLReadMaterials::GetMaterial()",
"InvalidRead",
G4double TRead(const xercesc::DOMElement *const)
G4IonisParamMat * GetIonisation() const
G4Material * FindOrBuildMaterial(const G4String &name, G4bool isotopes=true, G4bool warning=false)
G4int EvaluateInteger(const G4String &)
G4double GetQuantity(const G4String &)
G4double DRead(const xercesc::DOMElement *const)
static G4Element * GetElement(G4String name, G4bool warning=true)
void AddMaterial(G4Material *material, G4double fraction)
G4Material * GetMaterial(const G4String &, G4bool verbose=true) const
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
virtual void DefineRead(const xercesc::DOMElement *const)
void SetMeanExcitationEnergy(G4double value)
void SetMaterialPropertiesTable(G4MaterialPropertiesTable *anMPT)
virtual ~G4GDMLReadMaterials()
G4String Transcode(const XMLCh *const)
void InsertValues(G4double energy, G4double value)
G4double Get(size_t r, size_t c) const
static G4NistManager * Instance()
static G4Isotope * GetIsotope(const G4String &name, G4bool warning=false)
G4MaterialPropertyVector * AddProperty(const char *key, G4double *PhotonEnergies, G4double *PropertyValues, G4int NumEntries)
G4String RefRead(const xercesc::DOMElement *const)
G4double FractionRead(const xercesc::DOMElement *const, G4String &)
void MixtureRead(const xercesc::DOMElement *const, G4Element *)
G4Isotope * GetIsotope(const G4String &, G4bool verbose=true) const
G4int CompositeRead(const xercesc::DOMElement *const, G4String &)
G4GLOB_DLL std::ostream G4cout
void IsotopeRead(const xercesc::DOMElement *const)
G4PhysicsOrderedFreeVector G4MaterialPropertyVector
G4Element * GetElement(const G4String &, G4bool verbose=true) const
void AddIsotope(G4Isotope *isotope, G4double RelativeAbundance)
void AddConstProperty(const char *key, G4double PropertyValue)
virtual void MaterialsRead(const xercesc::DOMElement *const)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4String GenerateName(const G4String &name, G4bool strip=false)
G4double PRead(const xercesc::DOMElement *const)
G4MaterialPropertiesTable * GetMaterialPropertiesTable() const
G4double MEERead(const xercesc::DOMElement *const)
G4String Strip(const G4String &) const
void PropertyRead(const xercesc::DOMElement *const, G4Material *)
const XML_Char int const XML_Char * value
void AddElement(G4Element *element, G4int nAtoms)
void ElementRead(const xercesc::DOMElement *const)
G4Element * FindOrBuildElement(G4int Z, G4bool isotopes=true)
void MaterialRead(const xercesc::DOMElement *const)
G4double Evaluate(const G4String &)
G4GDMLMatrix GetMatrix(const G4String &)
G4double AtomRead(const xercesc::DOMElement *const)