60    const xercesc::DOMNamedNodeMap* 
const attributes
    61          = atomElement->getAttributes();
    62    XMLSize_t attributeCount = attributes->getLength();
    64    for (XMLSize_t attribute_index=0;
    65         attribute_index<attributeCount; attribute_index++)
    67       xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
    69       if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
    72       const xercesc::DOMAttr* 
const attribute
    73             = 
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);   
    76         G4Exception(
"G4GDMLReadMaterials::AtomRead()", 
"InvalidRead",
    83       if (attName==
"value") { value = 
eval.
Evaluate(attValue); } 
else    86         G4Exception(
"G4GDMLReadMaterials::AtomRead()", 
"InvalidRead",
    99    const xercesc::DOMNamedNodeMap* 
const attributes
   100          = compositeElement->getAttributes();
   101    XMLSize_t attributeCount = attributes->getLength();
   103    for (XMLSize_t attribute_index=0;
   104         attribute_index<attributeCount; attribute_index++)
   106       xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
   108       if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
   111       const xercesc::DOMAttr* 
const attribute
   112             = 
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);   
   115         G4Exception(
"G4GDMLReadMaterials::CompositeRead()", 
"InvalidRead",
   123       if (attName==
"ref") { ref = attValue; }
   134    const xercesc::DOMNamedNodeMap* 
const attributes
   135          = DElement->getAttributes();
   136    XMLSize_t attributeCount = attributes->getLength();
   138    for (XMLSize_t attribute_index=0;
   139         attribute_index<attributeCount; attribute_index++)
   141       xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
   143       if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
   146       const xercesc::DOMAttr* 
const attribute
   147             = 
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);   
   150         G4Exception(
"G4GDMLReadMaterials::DRead()", 
"InvalidRead",
   157       if (attName==
"value") { value = 
eval.
Evaluate(attValue); } 
else   158     if (attName==
"unit")  {
   161         G4Exception(
"G4GDMLReadMaterials::DRead()", 
"InvalidRead",
   174    const xercesc::DOMNamedNodeMap* 
const attributes = PElement->getAttributes();
   175    XMLSize_t attributeCount = attributes->getLength();
   177    for (XMLSize_t attribute_index=0;
   178         attribute_index<attributeCount; attribute_index++)
   180       xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
   182       if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
   185       const xercesc::DOMAttr* 
const attribute
   186             = 
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);   
   189         G4Exception(
"G4GDMLReadMaterials::PRead()", 
"InvalidRead",
   196       if (attName==
"value") { value = 
eval.
Evaluate(attValue); } 
else   199         G4Exception(
"G4GDMLReadMaterials::PRead()", 
"InvalidRead",
   212    const xercesc::DOMNamedNodeMap* 
const attributes = TElement->getAttributes();
   213    XMLSize_t attributeCount = attributes->getLength();
   215    for (XMLSize_t attribute_index=0;
   216         attribute_index<attributeCount; attribute_index++)
   218       xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
   220       if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
   223       const xercesc::DOMAttr* 
const attribute
   224             = 
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);   
   227         G4Exception(
"G4GDMLReadMaterials::TRead()", 
"InvalidRead",
   234       if (attName==
"value") { value = 
eval.
Evaluate(attValue); } 
else   237         G4Exception(
"G4GDMLReadMaterials::TRead()", 
"InvalidRead",
   250    const xercesc::DOMNamedNodeMap* 
const attributes = PElement->getAttributes();
   251    XMLSize_t attributeCount = attributes->getLength();
   253    for (XMLSize_t attribute_index=0;
   254         attribute_index<attributeCount; attribute_index++)
   256       xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
   258       if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
   261       const xercesc::DOMAttr* 
const attribute
   262             = 
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);
   265         G4Exception(
"G4GDMLReadMaterials::MEERead()", 
"InvalidRead",
   272       if (attName==
"value") { value = 
eval.
Evaluate(attValue); } 
else   275         G4Exception(
"G4GDMLReadMaterials::MEERead()", 
"InvalidRead",
   291    const xercesc::DOMNamedNodeMap* 
const attributes
   292          = elementElement->getAttributes();
   293    XMLSize_t attributeCount = attributes->getLength();
   295    for (XMLSize_t attribute_index=0;
   296         attribute_index<attributeCount; attribute_index++)
   298       xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
   300       if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
   303       const xercesc::DOMAttr* 
const attribute
   304             = 
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);   
   307         G4Exception(
"G4GDMLReadMaterials::ElementRead()", 
"InvalidRead",
   314       if (attName==
"name") { name = 
GenerateName(attValue); } 
else   315       if (attName==
"formula") { formula = attValue; } 
else   321    for (xercesc::DOMNode* iter = elementElement->getFirstChild();
   322         iter != 0; iter = iter->getNextSibling())
   324       if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) { 
continue; }
   326       const xercesc::DOMElement* 
const child
   327             = 
dynamic_cast<xercesc::DOMElement*
>(iter);
   330         G4Exception(
"G4GDMLReadMaterials::ElementRead()", 
"InvalidRead",
   336       if (tag==
"atom") { a = 
AtomRead(child); }  
else   337       if (tag==
"fraction") { nComponents++; }
   356    const xercesc::DOMNamedNodeMap* 
const attributes
   357          = fractionElement->getAttributes();
   358    XMLSize_t attributeCount = attributes->getLength();
   360    for (XMLSize_t attribute_index=0;
   361         attribute_index<attributeCount; attribute_index++)
   363       xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
   365       if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
   368       const xercesc::DOMAttr* 
const attribute
   369             = 
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);   
   372         G4Exception(
"G4GDMLReadMaterials::FractionRead()", 
"InvalidRead",
   380       if (attName==
"ref") { ref = attValue; }
   394    const xercesc::DOMNamedNodeMap* 
const attributes
   395          = isotopeElement->getAttributes();
   396    XMLSize_t attributeCount = attributes->getLength();
   398    for (XMLSize_t attribute_index=0;
   399         attribute_index<attributeCount;attribute_index++)
   401       xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
   403       if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
   406       const xercesc::DOMAttr* 
const attribute
   407             = 
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);   
   410         G4Exception(
"G4GDMLReadMaterials::IsotopeRead()", 
"InvalidRead",
   417       if (attName==
"name") { name = 
GenerateName(attValue); } 
else   422    for (xercesc::DOMNode* iter = isotopeElement->getFirstChild();
   423         iter != 0; iter = iter->getNextSibling())
   425       if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) { 
continue; }
   427       const xercesc::DOMElement* 
const child
   428             = 
dynamic_cast<xercesc::DOMElement*
>(iter);
   431         G4Exception(
"G4GDMLReadMaterials::IsotopeRead()", 
"InvalidRead",
   437       if (tag==
"atom")  { a = 
AtomRead(child); }
   455    const xercesc::DOMNamedNodeMap* 
const attributes
   456          = materialElement->getAttributes();
   457    XMLSize_t attributeCount = attributes->getLength();
   459    for (XMLSize_t attribute_index=0;
   460         attribute_index<attributeCount; attribute_index++)
   462       xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
   464       if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
   467       const xercesc::DOMAttr* 
const attribute
   468             = 
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);   
   471         G4Exception(
"G4GDMLReadMaterials::MaterialRead()", 
"InvalidRead",
   478       if (attName==
"name") { name = 
GenerateName(attValue); } 
else   480       if (attName==
"state")
   482          if (attValue==
"solid")  { state = 
kStateSolid;  } 
else   484          if (attValue==
"gas")    { state = 
kStateGas; }
   490    for (xercesc::DOMNode* iter = materialElement->getFirstChild();
   491         iter != 0; iter = iter->getNextSibling())
   493       if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) { 
continue; }
   495       const xercesc::DOMElement* 
const child
   496             = 
dynamic_cast<xercesc::DOMElement*
>(iter);
   499         G4Exception(
"G4GDMLReadMaterials::MaterialRead()", 
"InvalidRead",
   505       if (tag==
"atom") { a = 
AtomRead(child); } 
else   510       if (tag==
"D") { D = 
DRead(child); } 
else   511       if (tag==
"P") { P = 
PRead(child); } 
else   512       if (tag==
"T") { T = 
TRead(child); } 
else   513       if (tag==
"MEE") { MEE = 
MEERead(child); } 
else   514       if (tag==
"fraction" || tag==
"composite")  { nComponents++; }
   533    for (xercesc::DOMNode* iter = materialElement->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::MaterialRead()", 
"InvalidRead",
   555    for (xercesc::DOMNode* iter = mixtureElement->getFirstChild();
   556         iter != 0; iter = iter->getNextSibling())
   558       if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) { 
continue; }
   560       const xercesc::DOMElement* 
const child
   561             = 
dynamic_cast<xercesc::DOMElement*
>(iter);
   564         G4Exception(
"G4GDMLReadMaterials::MixtureRead()", 
"InvalidRead",
   583    for (xercesc::DOMNode* iter = mixtureElement->getFirstChild();
   584         iter != 0; iter = iter->getNextSibling())
   586       if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) { 
continue; }
   588       const xercesc::DOMElement* 
const child
   589             = 
dynamic_cast<xercesc::DOMElement*
>(iter);
   592         G4Exception(
"G4GDMLReadMaterials::MixtureRead()", 
"InvalidRead",
   606          if (elementPtr != 0)  { material->
AddElement(elementPtr,n); } 
else   607          if (materialPtr != 0) { material->
AddMaterial(materialPtr,n); }
   609          if ((materialPtr == 0) && (elementPtr == 0))
   611             G4String error_msg = 
"Referenced material/element '"   613             G4Exception(
"G4GDMLReadMaterials::MixtureRead()", 
"InvalidSetup",
   617       else if (tag==
"composite")
   636    const xercesc::DOMNamedNodeMap* 
const attributes
   637          = propertyElement->getAttributes();
   638    XMLSize_t attributeCount = attributes->getLength();
   640    for (XMLSize_t attribute_index=0;
   641         attribute_index<attributeCount; attribute_index++)
   643       xercesc::DOMNode* attribute_node = attributes->item(attribute_index);
   645       if (attribute_node->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
   648       const xercesc::DOMAttr* 
const attribute
   649             = 
dynamic_cast<xercesc::DOMAttr*
>(attribute_node);   
   652         G4Exception(
"G4GDMLReadMaterials::PropertyRead()", 
"InvalidRead",
   659       if (attName==
"name") { name = 
GenerateName(attValue); } 
else   660       if (attName==
"ref")  { matrix = 
GetMatrix(ref=attValue); }
   674    if (matrix.
GetRows() == 0) { 
return; }
   689      for (
size_t i=0; i<matrix.
GetRows(); i++)
   702    for (xercesc::DOMNode* iter = materialsElement->getFirstChild();
   703         iter != 0; iter = iter->getNextSibling())
   705       if (iter->getNodeType() != xercesc::DOMNode::ELEMENT_NODE) { 
continue; }
   707       const xercesc::DOMElement* 
const child
   708             = 
dynamic_cast<xercesc::DOMElement*
>(iter);
   711         G4Exception(
"G4GDMLReadMaterials::MaterialsRead()", 
"InvalidRead",
   717       if (tag==
"define")   { 
DefineRead(child);  }  
else    723         G4String error_msg = 
"Unknown tag in materials: " + tag;
   724         G4Exception(
"G4GDMLReadMaterials::MaterialsRead()", 
"InvalidSetup",
   740    if (verbose && !elementPtr)
   742      G4String error_msg = 
"Referenced element '" + ref + 
"' was not found!";
   743      G4Exception(
"G4GDMLReadMaterials::GetElement()", 
"InvalidRead",
   755    if (verbose && !isotopePtr)
   757      G4String error_msg = 
"Referenced isotope '" + ref + 
"' was not found!";
   758      G4Exception(
"G4GDMLReadMaterials::GetIsotope()", 
"InvalidRead",
   775    if (verbose && !materialPtr)
   777      G4String error_msg = 
"Referenced material '" + ref + 
"' was not found!";
   778      G4Exception(
"G4GDMLReadMaterials::GetMaterial()", 
"InvalidRead",
 
G4IonisParamMat * GetIonisation() const
 
G4double TRead(const xercesc::DOMElement *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)
 
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
 
virtual void DefineRead(const xercesc::DOMElement *const)
 
void SetMeanExcitationEnergy(G4double value)
 
void SetMaterialPropertiesTable(G4MaterialPropertiesTable *anMPT)
 
G4MaterialPropertiesTable * GetMaterialPropertiesTable() const
 
static const double hep_pascal
 
virtual ~G4GDMLReadMaterials()
 
G4String Transcode(const XMLCh *const)
 
void InsertValues(G4double energy, G4double value)
 
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 *)
 
static G4double GetValueOf(const G4String &)
 
G4int CompositeRead(const xercesc::DOMElement *const, G4String &)
 
G4GLOB_DLL std::ostream G4cout
 
void IsotopeRead(const xercesc::DOMElement *const)
 
G4PhysicsOrderedFreeVector G4MaterialPropertyVector
 
G4String Strip(const G4String &) const
 
void AddIsotope(G4Isotope *isotope, G4double RelativeAbundance)
 
G4Element * GetElement(const G4String &, G4bool verbose=true) const
 
G4double Get(size_t r, size_t c) const
 
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)
 
static const double kelvin
 
static G4String GetCategory(const G4String &)
 
G4String GenerateName(const G4String &name, G4bool strip=false)
 
G4double PRead(const xercesc::DOMElement *const)
 
G4double MEERead(const xercesc::DOMElement *const)
 
void PropertyRead(const xercesc::DOMElement *const, G4Material *)
 
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)
 
G4Isotope * GetIsotope(const G4String &, G4bool verbose=true) const
 
G4Material * GetMaterial(const G4String &, G4bool verbose=true) const
 
G4double Evaluate(const G4String &)
 
G4GDMLMatrix GetMatrix(const G4String &)
 
G4double AtomRead(const xercesc::DOMElement *const)