From a2f55c3921b4a1ebba12d28b896cba35ae70091a Mon Sep 17 00:00:00 2001 From: Antonio Iuliano Date: Wed, 1 Jul 2026 16:31:25 +0200 Subject: [PATCH 1/2] fix: use different names for material and elements to correctly import them in ROOT --- CHANGELOG.md | 1 + src/SHiPMaterials.cpp | 164 +++++++++++++++++++++--------------------- 2 files changed, 83 insertions(+), 82 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c17b18c..ab0b558 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file. ### Bug fixes +- *(Materials)* Use different names between material and elements to correctly import them in ROOT - *(build)* Include GNUInstallDirs before add_subdirectory(subsystems) - *(timing)* Install GMX data file and resolve path at runtime diff --git a/src/SHiPMaterials.cpp b/src/SHiPMaterials.cpp index a491390..bbe4b7c 100644 --- a/src/SHiPMaterials.cpp +++ b/src/SHiPMaterials.cpp @@ -36,49 +36,49 @@ GeoMaterial* SHiPMaterials::requireMaterial(const std::string& name) const { void SHiPMaterials::createElements() { // Create all elements needed for SHiP - m_elements["Hydrogen"] = new GeoElement( - "Hydrogen", "H", 1, 1.008 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); - m_elements["Helium"] = new GeoElement( - "Helium", "He", 2, 4.003 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); - m_elements["Carbon"] = new GeoElement( - "Carbon", "C", 6, 12.011 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); - m_elements["Nitrogen"] = new GeoElement( - "Nitrogen", "N", 7, 14.007 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); - m_elements["Oxygen"] = new GeoElement( - "Oxygen", "O", 8, 15.999 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); - m_elements["Silicon"] = new GeoElement( - "Silicon", "Si", 14, 28.085 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); - m_elements["Argon"] = new GeoElement( - "Argon", "Ar", 18, 39.948 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); - m_elements["Calcium"] = new GeoElement( - "Calcium", "Ca", 20, 40.078 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); - m_elements["Titanium"] = new GeoElement( - "Titanium", "Ti", 22, 47.867 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); - m_elements["Chromium"] = new GeoElement( - "Chromium", "Cr", 24, 51.996 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); - m_elements["Manganese"] = new GeoElement( - "Manganese", "Mn", 25, 54.938 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); - m_elements["Iron"] = new GeoElement( - "Iron", "Fe", 26, 55.845 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); - m_elements["Nickel"] = new GeoElement( - "Nickel", "Ni", 28, 58.693 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); - m_elements["Copper"] = new GeoElement( - "Copper", "Cu", 29, 63.546 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); - m_elements["Niobium"] = new GeoElement( - "Niobium", "Nb", 41, 92.906 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); - m_elements["Molybdenum"] = new GeoElement( - "Molybdenum", "Mo", 42, 95.95 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); - m_elements["Tantalum"] = new GeoElement( - "Tantalum", "Ta", 73, 180.948 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); - m_elements["Tungsten"] = new GeoElement( - "Tungsten", "W", 74, 183.84 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Hydrogen_E"] = new GeoElement( + "Hydrogen_E", "H", 1, 1.008 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Helium_E"] = new GeoElement( + "Helium_E", "He", 2, 4.003 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Carbon_E"] = new GeoElement( + "Carbon_E", "C", 6, 12.011 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Nitrogen_E"] = new GeoElement( + "Nitrogen_E", "N", 7, 14.007 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Oxygen_E"] = new GeoElement( + "Oxygen_E", "O", 8, 15.999 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Silicon_E"] = new GeoElement( + "Silicon_E", "Si", 14, 28.085 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Argon_E"] = new GeoElement( + "Argon_E", "Ar", 18, 39.948 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Calcium_E"] = new GeoElement( + "Calcium_E", "Ca", 20, 40.078 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Titanium_E"] = new GeoElement( + "Titanium_E", "Ti", 22, 47.867 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Chromium_E"] = new GeoElement( + "Chromium_E", "Cr", 24, 51.996 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Manganese_E"] = new GeoElement( + "Manganese_E", "Mn", 25, 54.938 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Iron_E"] = new GeoElement( + "Iron_E", "Fe", 26, 55.845 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Nickel_E"] = new GeoElement( + "Nickel_E", "Ni", 28, 58.693 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Copper_E"] = new GeoElement( + "Copper_E", "Cu", 29, 63.546 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Niobium_E"] = new GeoElement( + "Niobium_E", "Nb", 41, 92.906 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Molybdenum_E"] = new GeoElement( + "Molybdenum_E", "Mo", 42, 95.95 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Tantalum_E"] = new GeoElement( + "Tantalum_E", "Ta", 73, 180.948 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Tungsten_E"] = new GeoElement( + "Tungsten_E", "W", 74, 183.84 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); // Aluminium - m_elements["Aluminium"] = new GeoElement( - "Aluminium", "Al", 13.0, 26.982 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); + m_elements["Aluminium_E"] = new GeoElement( + "Aluminium_E", "Al", 13.0, 26.982 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); // Lead - m_elements["Lead"] = new GeoElement("Lead", "Pb", 82.0, + m_elements["Lead_E"] = new GeoElement("Lead_E", "Pb", 82.0, 207.2 * GeoModelKernelUnits::g / GeoModelKernelUnits::mole); } @@ -86,100 +86,100 @@ void SHiPMaterials::createMaterials() { // Air (density 1.29e-3 g/cm³): N 75.5%, O 23.1%, Ar 1.4% GeoMaterial* air = new GeoMaterial("Air", 1.29e-3 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - air->add(m_elements["Nitrogen"], 0.755); - air->add(m_elements["Oxygen"], 0.231); - air->add(m_elements["Argon"], 0.014); + air->add(m_elements["Nitrogen_E"], 0.755); + air->add(m_elements["Oxygen_E"], 0.231); + air->add(m_elements["Argon_E"], 0.014); air->lock(); m_materials["Air"] = air; // Concrete (density 2.3 g/cm³): O 52%, Si 33%, Ca 15% GeoMaterial* concrete = new GeoMaterial("Concrete", 2.3 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - concrete->add(m_elements["Oxygen"], 0.52); - concrete->add(m_elements["Silicon"], 0.33); - concrete->add(m_elements["Calcium"], 0.15); + concrete->add(m_elements["Oxygen_E"], 0.52); + concrete->add(m_elements["Silicon_E"], 0.33); + concrete->add(m_elements["Calcium_E"], 0.15); concrete->lock(); m_materials["Concrete"] = concrete; // Vacuum (density 1.205e-6 g/cm³): N 75.5%, O 23.1%, Ar 1.4% GeoMaterial* vacuum = new GeoMaterial("Vacuum", 1.205e-6 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - vacuum->add(m_elements["Nitrogen"], 0.755); - vacuum->add(m_elements["Oxygen"], 0.231); - vacuum->add(m_elements["Argon"], 0.014); + vacuum->add(m_elements["Nitrogen_E"], 0.755); + vacuum->add(m_elements["Oxygen_E"], 0.231); + vacuum->add(m_elements["Argon_E"], 0.014); vacuum->lock(); m_materials["Vacuum"] = vacuum; // PressurisedHe90 (density 0.00212 g/cm³): pure He GeoMaterial* pressurisedHe90 = new GeoMaterial( "PressurisedHe90", 0.00212 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - pressurisedHe90->add(m_elements["Helium"], 1.0); + pressurisedHe90->add(m_elements["Helium_E"], 1.0); pressurisedHe90->lock(); m_materials["PressurisedHe90"] = pressurisedHe90; // Tungsten (density 19.3 g/cm³): pure W GeoMaterial* tungsten = new GeoMaterial("Tungsten", 19.3 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - tungsten->add(m_elements["Tungsten"], 1.0); + tungsten->add(m_elements["Tungsten_E"], 1.0); tungsten->lock(); m_materials["Tungsten"] = tungsten; // Silicon (density 2.33 g/cm³): pure Si (neutrino-target tracking planes) GeoMaterial* silicon = new GeoMaterial("Silicon", 2.33 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - silicon->add(m_elements["Silicon"], 1.0); + silicon->add(m_elements["Silicon_E"], 1.0); silicon->lock(); m_materials["Silicon"] = silicon; // Tantalum (density 16.65 g/cm³): pure Ta GeoMaterial* tantalum = new GeoMaterial("Tantalum", 16.65 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - tantalum->add(m_elements["Tantalum"], 1.0); + tantalum->add(m_elements["Tantalum_E"], 1.0); tantalum->lock(); m_materials["Tantalum"] = tantalum; // Inconel718 (density 8.19 g/cm³): Ni 55%, Cr 20%, Fe 16%, Nb 5%, Mo 3%, Ti 1% GeoMaterial* inconel718 = new GeoMaterial("Inconel718", 8.19 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - inconel718->add(m_elements["Nickel"], 0.55); - inconel718->add(m_elements["Chromium"], 0.20); - inconel718->add(m_elements["Iron"], 0.16); - inconel718->add(m_elements["Niobium"], 0.05); - inconel718->add(m_elements["Molybdenum"], 0.03); - inconel718->add(m_elements["Titanium"], 0.01); + inconel718->add(m_elements["Nickel_E"], 0.55); + inconel718->add(m_elements["Chromium_E"], 0.20); + inconel718->add(m_elements["Iron_E"], 0.16); + inconel718->add(m_elements["Niobium_E"], 0.05); + inconel718->add(m_elements["Molybdenum_E"], 0.03); + inconel718->add(m_elements["Titanium_E"], 0.01); inconel718->lock(); m_materials["Inconel718"] = inconel718; // Steel316L (density 7.99 g/cm³): Fe 65.3%, Cr 15.7%, Ni 12.5%, Mo 4.2%, Mn 1.9%, Si 0.4% GeoMaterial* steel316L = new GeoMaterial("Steel316L", 7.99 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - steel316L->add(m_elements["Iron"], 0.653); - steel316L->add(m_elements["Chromium"], 0.157); - steel316L->add(m_elements["Nickel"], 0.125); - steel316L->add(m_elements["Molybdenum"], 0.042); - steel316L->add(m_elements["Manganese"], 0.019); - steel316L->add(m_elements["Silicon"], 0.004); + steel316L->add(m_elements["Iron_E"], 0.653); + steel316L->add(m_elements["Chromium_E"], 0.157); + steel316L->add(m_elements["Nickel_E"], 0.125); + steel316L->add(m_elements["Molybdenum_E"], 0.042); + steel316L->add(m_elements["Manganese_E"], 0.019); + steel316L->add(m_elements["Silicon_E"], 0.004); steel316L->lock(); m_materials["Steel316L"] = steel316L; // Copper (density 8.96 g/cm³): pure Cu GeoMaterial* copper = new GeoMaterial("Copper", 8.96 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - copper->add(m_elements["Copper"], 1.0); + copper->add(m_elements["Copper_E"], 1.0); copper->lock(); m_materials["Copper"] = copper; // Iron (density 7.87 g/cm³): pure Fe GeoMaterial* iron = new GeoMaterial("Iron", 7.87 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - iron->add(m_elements["Iron"], 1.0); + iron->add(m_elements["Iron_E"], 1.0); iron->lock(); m_materials["Iron"] = iron; // Aluminium (density 2.70 g/cm³): pure Al GeoMaterial* aluminium = new GeoMaterial("Aluminium", 2.70 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - aluminium->add(m_elements["Aluminium"], 1.0); + aluminium->add(m_elements["Aluminium_E"], 1.0); aluminium->lock(); m_materials["Aluminium"] = aluminium; @@ -187,23 +187,23 @@ void SHiPMaterials::createMaterials() { // C 87.41%, H 12.59% by mass. Used in the Surround Background Tagger cells. GeoMaterial* lab = new GeoMaterial("LAB", 0.867 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - lab->add(m_elements["Carbon"], 0.8741); - lab->add(m_elements["Hydrogen"], 0.1259); + lab->add(m_elements["Carbon_E"], 0.8741); + lab->add(m_elements["Hydrogen_E"], 0.1259); lab->lock(); m_materials["LAB"] = lab; // Scintillator / polyvinyltoluene (density 1.023 g/cm³): C 91.5%, H 8.5% GeoMaterial* scintillator = new GeoMaterial("Scintillator", 1.023 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - scintillator->add(m_elements["Carbon"], 0.915); - scintillator->add(m_elements["Hydrogen"], 0.085); + scintillator->add(m_elements["Carbon_E"], 0.915); + scintillator->add(m_elements["Hydrogen_E"], 0.085); scintillator->lock(); m_materials["Scintillator"] = scintillator; // Lead (density 11.34 g/cm³): pure Pb GeoMaterial* lead = new GeoMaterial("Lead", 11.34 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - lead->add(m_elements["Lead"], 1.0); + lead->add(m_elements["Lead_E"], 1.0); lead->lock(); m_materials["Lead"] = lead; @@ -215,8 +215,8 @@ void SHiPMaterials::createMaterials() { const double mw = 9.0 * awC + 10.0 * awH; GeoMaterial* pvt = new GeoMaterial("PVT", 1.032 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - pvt->add(m_elements["Carbon"], 9.0 * awC / mw); - pvt->add(m_elements["Hydrogen"], 10.0 * awH / mw); + pvt->add(m_elements["Carbon_E"], 9.0 * awC / mw); + pvt->add(m_elements["Hydrogen_E"], 10.0 * awH / mw); pvt->lock(); m_materials["PVT"] = pvt; } @@ -229,8 +229,8 @@ void SHiPMaterials::createMaterials() { const double mw = 8.0 * awC + 8.0 * awH; GeoMaterial* polystyrene = new GeoMaterial( "Polystyrene", 1.05 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - polystyrene->add(m_elements["Carbon"], 8.0 * awC / mw); - polystyrene->add(m_elements["Hydrogen"], 8.0 * awH / mw); + polystyrene->add(m_elements["Carbon_E"], 8.0 * awC / mw); + polystyrene->add(m_elements["Hydrogen_E"], 8.0 * awH / mw); polystyrene->lock(); m_materials["Polystyrene"] = polystyrene; } @@ -244,9 +244,9 @@ void SHiPMaterials::createMaterials() { const double mw = 10.0 * awC + 8.0 * awH + 4.0 * awO; GeoMaterial* mylar = new GeoMaterial("Mylar", 1.39 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - mylar->add(m_elements["Carbon"], 10.0 * awC / mw); - mylar->add(m_elements["Hydrogen"], 8.0 * awH / mw); - mylar->add(m_elements["Oxygen"], 4.0 * awO / mw); + mylar->add(m_elements["Carbon_E"], 10.0 * awC / mw); + mylar->add(m_elements["Hydrogen_E"], 8.0 * awH / mw); + mylar->add(m_elements["Oxygen_E"], 4.0 * awO / mw); mylar->lock(); m_materials["Mylar"] = mylar; } @@ -260,9 +260,9 @@ void SHiPMaterials::createMaterials() { const double fracCO2 = 0.30; GeoMaterial* arco2 = new GeoMaterial( "ArCO2_70_30", 1.56e-3 * GeoModelKernelUnits::g / GeoModelKernelUnits::cm3); - arco2->add(m_elements["Argon"], fracAr); - arco2->add(m_elements["Carbon"], fracCO2 * 12.011 / mwCO2); - arco2->add(m_elements["Oxygen"], fracCO2 * 2.0 * 15.999 / mwCO2); + arco2->add(m_elements["Argon_E"], fracAr); + arco2->add(m_elements["Carbon_E"], fracCO2 * 12.011 / mwCO2); + arco2->add(m_elements["Oxygen_E"], fracCO2 * 2.0 * 15.999 / mwCO2); arco2->lock(); m_materials["ArCO2_70_30"] = arco2; } From 72751d73f67ef5ffb770e6b556e47b500096c2a7 Mon Sep 17 00:00:00 2001 From: Antonio Iuliano Date: Wed, 1 Jul 2026 16:51:08 +0200 Subject: [PATCH 2/2] fix: update element name in documentation string --- include/SHiPGeometry/SHiPMaterials.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/SHiPGeometry/SHiPMaterials.h b/include/SHiPGeometry/SHiPMaterials.h index ebb4dda..07b1059 100644 --- a/include/SHiPGeometry/SHiPMaterials.h +++ b/include/SHiPGeometry/SHiPMaterials.h @@ -28,7 +28,7 @@ class SHiPMaterials { /** * @brief Get an element by name - * @param name Element name (e.g., "Nitrogen", "Oxygen") + * @param name Element name (e.g., "Nitrogen_E", "Oxygen_E") * @return Pointer to GeoElement or nullptr if not found */ GeoElement* getElement(const std::string& name) const;