From a674bdf89b74305ab4e45ce49f1376bbb1deb104 Mon Sep 17 00:00:00 2001 From: Johannes Josef Junggeburth <johannes.josef.junggeburth@cern.ch> Date: Thu, 16 Jan 2025 08:23:21 +0100 Subject: [PATCH] Add function to print the volume --- .../GeoModelHelpers/printVolume.h | 11 ++++ .../GeoModelHelpers/src/printVolume.cxx | 55 +++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 GeoModelCore/GeoModelHelpers/GeoModelHelpers/printVolume.h create mode 100644 GeoModelCore/GeoModelHelpers/src/printVolume.cxx diff --git a/GeoModelCore/GeoModelHelpers/GeoModelHelpers/printVolume.h b/GeoModelCore/GeoModelHelpers/GeoModelHelpers/printVolume.h new file mode 100644 index 000000000..bb3f7e806 --- /dev/null +++ b/GeoModelCore/GeoModelHelpers/GeoModelHelpers/printVolume.h @@ -0,0 +1,11 @@ +/* + Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration +*/ +#ifndef GEOMODELUTILS_PRINTVOLUME_H +#define GEOMODELUTILS_PRINTVOLUME_H +#include "GeoModelKernel/GeoVPhysVol.h" + +/** @brief creates a string to print the volume */ +std::string printVolume(const PVConstLink& volume); + +#endif \ No newline at end of file diff --git a/GeoModelCore/GeoModelHelpers/src/printVolume.cxx b/GeoModelCore/GeoModelHelpers/src/printVolume.cxx new file mode 100644 index 000000000..6a837c1d3 --- /dev/null +++ b/GeoModelCore/GeoModelHelpers/src/printVolume.cxx @@ -0,0 +1,55 @@ +/* + Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration +*/ +#include "GeoModelKernel/GeoFullPhysVol.h" + +#include "GeoModelHelpers/printVolume.h" +#include "GeoModelHelpers/GeoShapeUtils.h" +#include "GeoModelHelpers/getChildNodesWithTrf.h" +#include "GeoModelHelpers/StringUtils.h" +#include "GeoModelHelpers/TransformToStringConverter.h" +#include <sstream> + +constexpr unsigned indentStep =2; + +std::string printVolume(const PVConstLink& volume, const unsigned childIndent); + +std::string printVolume(const PVConstLink& volume) { + return printVolume(volume, indentStep); +} + + +std::string printVolume(const PVConstLink& volume, const unsigned childIndent) { + std::stringstream outStr{}; + + if (volume->isShared()) { + outStr<<"shared volume ("<<(volume->refCount()-1)<<") -- "; + } else { + const GeoVPhysVol* pv = volume; + if(typeid(*pv) == typeid(GeoFullPhysVol)) { + outStr<<"fullPhysVol -- "; + outStr<<"abs. position: "<<GeoTrf::toString(static_cast<const GeoFullPhysVol&>(*volume).getAbsoluteTransform(),true)<<", "; + } + outStr<<"rel. position: "<<GeoTrf::toString(volume->getX(), true)<<", "; + } + outStr<<"logical volume: "<<volume->getLogVol()->getName()<<", "; + outStr<<"material: "<<volume->getLogVol()->getMaterial()->getName()<<", "; + outStr<<"shape: "<<printGeoShape(volume->getLogVol()->getShape()); + if (!volume->getNChildVols()) { + return outStr.str(); + } + outStr<<", # children: "<<volume->getNChildVols()<<std::endl; + std::vector<GeoChildNodeWithTrf> children = getChildrenWithRef(volume, false); + for (unsigned int ch = 0 ; ch < children.size(); ++ch) { + const GeoChildNodeWithTrf& child{children[ch]}; + outStr<<GeoStrUtils::whiteSpaces(childIndent, " ")<<(ch+1)<<"): "; + if (child.nodeName != child.volume->getLogVol()->getName()){ + outStr<<"<"<<child.nodeName<<"> "; + } + if (child.volume->isShared()) { + outStr<<"rel. position: "<<GeoTrf::toString(child.transform, true)<<", "; + } + outStr<<printVolume(children[ch].volume, childIndent + indentStep)<<std::endl; + } + return outStr.str(); +} \ No newline at end of file -- GitLab