From bcfc99bb519632f0c2516f8fcfde0f34e6044c29 Mon Sep 17 00:00:00 2001 From: Dominik Werthmueller Date: Mon, 31 Aug 2026 17:33:15 +0200 Subject: [PATCH] ascii: added support for G4CutTubs --- .../ascii/src/G4tgbGeometryDumper.cc | 21 +++++++++++++++++++ source/persistency/ascii/src/G4tgbVolume.cc | 15 +++++++++++++ source/persistency/ascii/src/G4tgrSolid.cc | 4 ++++ 3 files changed, 40 insertions(+) diff --git a/source/persistency/ascii/src/G4tgbGeometryDumper.cc b/source/persistency/ascii/src/G4tgbGeometryDumper.cc index 1c8085f5971..7ec4a5619bd 100644 --- a/source/persistency/ascii/src/G4tgbGeometryDumper.cc +++ b/source/persistency/ascii/src/G4tgbGeometryDumper.cc @@ -33,6 +33,7 @@ #include "G4BooleanSolid.hh" #include "G4Box.hh" #include "G4Cons.hh" +#include "G4CutTubs.hh" #include "G4Element.hh" #include "G4Ellipsoid.hh" #include "G4EllipticalCone.hh" @@ -805,6 +806,26 @@ std::vector G4tgbGeometryDumper::GetSolidParams(const G4VSolid* so) params.push_back(tu->GetDeltaPhiAngle() / deg); } } + else if (solidType == "CUTTUBS") + { + const G4CutTubs* ctu = dynamic_cast(so); + if (ctu != nullptr) + { + G4ThreeVector lowNorm(ctu->GetLowNorm()); + G4ThreeVector highNorm(ctu->GetHighNorm()); + params.push_back(ctu->GetInnerRadius()); + params.push_back(ctu->GetOuterRadius()); + params.push_back(ctu->GetZHalfLength()); + params.push_back(ctu->GetStartPhiAngle() / deg); + params.push_back(ctu->GetDeltaPhiAngle() / deg); + params.push_back(lowNorm.x()); + params.push_back(lowNorm.y()); + params.push_back(lowNorm.z()); + params.push_back(highNorm.x()); + params.push_back(highNorm.y()); + params.push_back(highNorm.z()); + } + } else if (solidType == "TRAP") { const G4Trap* trp = dynamic_cast(so); diff --git a/source/persistency/ascii/src/G4tgbVolume.cc b/source/persistency/ascii/src/G4tgbVolume.cc index ae5d97c0741..2c416c6e506 100644 --- a/source/persistency/ascii/src/G4tgbVolume.cc +++ b/source/persistency/ascii/src/G4tgbVolume.cc @@ -33,6 +33,7 @@ #include "G4AssemblyVolume.hh" #include "G4Box.hh" #include "G4Cons.hh" +#include "G4CutTubs.hh" #include "G4Ellipsoid.hh" #include "G4EllipticalCone.hh" #include "G4EllipticalTube.hh" @@ -254,6 +255,20 @@ G4VSolid* G4tgbVolume::FindOrConstructG4Solid(const G4tgrSolid* sol) } solid = new G4Tubs(sname, solParam[0], solParam[1], solParam[2], solParam[3], phiDelta); } + else if (stype == "CUTTUBS") + { + CheckNoSolidParams(stype, 11, (G4int)solParam.size()); + G4double phiDelta = solParam[4]; + if (std::fabs(phiDelta - twopi) < angularTolerance) + { + phiDelta = twopi; + } + G4ThreeVector lowNorm(solParam[5], solParam[6], solParam[7]); + G4ThreeVector highNorm(solParam[8], solParam[9], solParam[10]); + solid = new G4CutTubs(sname, solParam[0], solParam[1], solParam[2], // rmin, rmax, dz + solParam[3], solParam[4], // sphi, dphi + lowNorm, highNorm); + } else if (stype == "TRAP") { if (solParam.size() == 11) diff --git a/source/persistency/ascii/src/G4tgrSolid.cc b/source/persistency/ascii/src/G4tgrSolid.cc index abd5b1a7226..3361877f6b7 100644 --- a/source/persistency/ascii/src/G4tgrSolid.cc +++ b/source/persistency/ascii/src/G4tgrSolid.cc @@ -95,6 +95,10 @@ void G4tgrSolid::FillSolidParams(const std::vector& wl) apar.insert(4); angleParams["TUBS"] = apar; apar.clear(); + apar.insert(3); + apar.insert(4); + angleParams["CUTTUBS"] = apar; + apar.clear(); apar.insert(5); apar.insert(6); angleParams["CONS"] = apar;