From 7b6331f7d820d0e52243b2f2f0ca48c8cab9c845 Mon Sep 17 00:00:00 2001
From: Andrea Dell'Acqua <andrea.dellacqua@cern.ch>
Date: Wed, 30 Nov 2022 13:06:51 +0100
Subject: [PATCH] small changes in the GDML processor (to avoid crashes with
 elemenent fractions) and in the GeoModelXML (to add a set element as used in
 the muons)

---
 GeoModelCore/GeoModelKernel/src/GeoMaterial.cxx                 | 2 +-
 GeoModelTools/GDMLtoGM/src/GDMLController.cxx                   | 1 +
 .../GeoModelXML/GeoModelXml/src/AssemblyrefProcessor.cxx        | 2 +-
 3 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/GeoModelCore/GeoModelKernel/src/GeoMaterial.cxx b/GeoModelCore/GeoModelKernel/src/GeoMaterial.cxx
index c4e3bcc47..1727e5e44 100755
--- a/GeoModelCore/GeoModelKernel/src/GeoMaterial.cxx
+++ b/GeoModelCore/GeoModelKernel/src/GeoMaterial.cxx
@@ -294,7 +294,7 @@ void GeoMaterial::lock ()
 
   if (getNumElements () == 0)
     {
-      throw std::out_of_range ("Attempt to lock a material with no elements");
+      throw std::out_of_range ("Attempt to lock a material with no elements "+getName());
       return;
     }
 
diff --git a/GeoModelTools/GDMLtoGM/src/GDMLController.cxx b/GeoModelTools/GDMLtoGM/src/GDMLController.cxx
index 914cb4ab8..04418055c 100644
--- a/GeoModelTools/GDMLtoGM/src/GDMLController.cxx
+++ b/GeoModelTools/GDMLtoGM/src/GDMLController.cxx
@@ -263,6 +263,7 @@ void GDMLController::registerHandlers()
 	new MEEHandler("MEE",this);
 	new atomHandler("atom",this);
 	new fractionHandler("fraction",this);
+	new fractionHandler("composite",this);
 	new isotopeHandler("isotope",this);
 	new elementHandler("element",this);
 	new materialHandler("material",this);
diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/src/AssemblyrefProcessor.cxx b/GeoModelTools/GeoModelXML/GeoModelXml/src/AssemblyrefProcessor.cxx
index fa940e063..a0e63cf7f 100644
--- a/GeoModelTools/GeoModelXML/GeoModelXml/src/AssemblyrefProcessor.cxx
+++ b/GeoModelTools/GeoModelXML/GeoModelXml/src/AssemblyrefProcessor.cxx
@@ -35,7 +35,7 @@ char *toRelease;
     toRelease = XMLString::transcode(elem->getNodeName());
     string nodeName(toRelease);
     XMLString::release(&toRelease);
-    if (nodeName != string("assembly")) {
+    if (nodeName != string("assembly") && nodeName != string("set")) {
         msglog << MSG::FATAL << "Error in xml/gmx file: assemblyref " << XMLString::transcode(idref) << " referenced a " << 
                               nodeName << " instead of an assembly.\n";
 	std::abort();
-- 
GitLab