From d17a39fd82a62ff7cd976aad5dbfc589021f1eb6 Mon Sep 17 00:00:00 2001 From: Markus Frank <Markus.Frank@cern.ch> Date: Fri, 1 Jun 2018 19:54:30 +0200 Subject: [PATCH] Add basic shape tests. Fix bug in TruncatedTube. --- DDCore/include/DD4hep/Shapes.h | 4 +- DDCore/src/Shapes.cpp | 28 +-- DDCore/src/plugins/ShapePlugins.cpp | 27 ++- examples/ClientTests/CMakeLists.txt | 2 +- .../compact/Check_Shape_ConeSegment.xml | 2 +- .../compact/Check_Shape_ExtrudedPolygon.xml | 27 +++ .../compact/Check_Shape_TruncatedTube.xml | 23 +++ .../ClientTests/ref/Ref_ExtrudedPolygon.txt | 35 ++++ .../ClientTests/ref/Ref_TruncatedTube.txt | 174 ++++++++++++++++++ 9 files changed, 303 insertions(+), 19 deletions(-) create mode 100644 examples/ClientTests/compact/Check_Shape_ExtrudedPolygon.xml create mode 100644 examples/ClientTests/compact/Check_Shape_TruncatedTube.xml create mode 100644 examples/ClientTests/ref/Ref_ExtrudedPolygon.txt create mode 100644 examples/ClientTests/ref/Ref_TruncatedTube.txt diff --git a/DDCore/include/DD4hep/Shapes.h b/DDCore/include/DD4hep/Shapes.h index da6805231..bbe3252f6 100644 --- a/DDCore/include/DD4hep/Shapes.h +++ b/DDCore/include/DD4hep/Shapes.h @@ -387,7 +387,7 @@ namespace dd4hep { class TruncatedTube: public Solid_type<TGeoCompositeShape> { protected: /// Internal helper method to support object construction - void make(double zHalf, double rIn, double rOut, double startPhi, double deltaPhi, + void make(double zhalf, double rmin, double rmax, double startPhi, double deltaPhi, double cutAtStart, double cutAtDelta, bool cutInside); public: @@ -400,7 +400,7 @@ namespace dd4hep { /// Constructor to assign an object template <typename Q> TruncatedTube(const Handle<Q>& e) : Solid_type<Object>(e) { } /// Constructor to create a truncated tube object with attribute initialization - TruncatedTube(double zHalf, double rIn, double rOut, double startPhi, double deltaPhi, + TruncatedTube(double zhalf, double rmin, double rmax, double startPhi, double deltaPhi, double cutAtStart, double cutAtDelta, bool cutInside); /// Assignment operator TruncatedTube& operator=(const TruncatedTube& copy) = default; diff --git a/DDCore/src/Shapes.cpp b/DDCore/src/Shapes.cpp index 4fe67d385..b2f67d2a8 100644 --- a/DDCore/src/Shapes.cpp +++ b/DDCore/src/Shapes.cpp @@ -374,17 +374,17 @@ void CutTube::make(double rmin, double rmax, double dz, double phi1, double phi2 } /// Constructor to create a truncated tube object with attribute initialization -TruncatedTube::TruncatedTube(double zHalf, double rIn, double rOut, double startPhi, double deltaPhi, +TruncatedTube::TruncatedTube(double zhalf, double rmin, double rmax, double startPhi, double deltaPhi, double cutAtStart, double cutAtDelta, bool cutInside) -{ make(zHalf, rIn, rOut, startPhi/units::deg, deltaPhi/units::deg, cutAtStart, cutAtDelta, cutInside); } +{ make(zhalf, rmin, rmax, startPhi/units::deg, deltaPhi/units::deg, cutAtStart, cutAtDelta, cutInside); } /// Internal helper method to support object construction -void TruncatedTube::make(double zHalf, double rIn, double rOut, double startPhi, double deltaPhi, +void TruncatedTube::make(double zhalf, double rmin, double rmax, double startPhi, double deltaPhi, double cutAtStart, double cutAtDelta, bool cutInside) { // check the parameters - if( rIn <= 0 || rOut <=0 || cutAtStart <=0 || cutAtDelta <= 0 ) + if( rmin <= 0 || rmax <= 0 || cutAtStart <= 0 || cutAtDelta <= 0 ) except("TruncatedTube","++ 0 <= rIn,cutAtStart,rOut,cutAtDelta,rOut violated!"); - else if( rIn >= rOut ) + else if( rmin >= rmax ) except("TruncatedTube","++ rIn<rOut violated!"); else if( startPhi != 0. ) except("TruncatedTube","++ startPhi != 0 not supported!"); @@ -392,10 +392,10 @@ void TruncatedTube::make(double zHalf, double rIn, double rOut, double startPhi, double r = cutAtStart; double R = cutAtDelta; // exaggerate dimensions - does not matter, it's subtracted! - double boxX = rOut; - double boxY = rOut; + double boxX = rmax; + double boxY = rmax; // width of the box > width of the tubs - double boxZ = 1.1 * zHalf; + double boxZ = 1.1 * zhalf; // angle of the box w.r.t. tubs double cath = r - R * std::cos( deltaPhi*units::deg ); double hypo = std::sqrt( r * r + R * R - 2. * r * R * cos( deltaPhi*units::deg )); @@ -410,12 +410,16 @@ void TruncatedTube::make(double zHalf, double rIn, double rOut, double startPhi, // center point of the box double xBox; if( !cutInside ) - xBox = r + boxX / std::sin( fabs( alpha )); + xBox = r + boxX / std::sin( std::fabs( alpha )); else - xBox = - ( boxX / std::sin( fabs( alpha )) - r ); - + xBox = - ( boxX / std::sin( std::fabs( alpha )) - r ); +#if 0 + cout << "Box: " << boxX << " " << boxZ << " " << boxY << endl; + cout << "Tubs: " << rmin << " " << rmax << " " << zhalf << " " << startPhi << " " << deltaPhi << endl; + cout << "Pos: " << xBox << " " << 0 << " " << 0 << endl; +#endif Box box(boxX, boxZ, boxY); - Tube tubs(rIn, rOut, zHalf, startPhi, deltaPhi); + Tube tubs(rmin, rmax, zhalf, startPhi*units::deg, (startPhi+deltaPhi)*units::deg); SubtractionSolid sub(tubs, box, Transform3D(rot,Position(xBox, 0., 0.))); _assign(sub.ptr(),"","trunctube",true); } diff --git a/DDCore/src/plugins/ShapePlugins.cpp b/DDCore/src/plugins/ShapePlugins.cpp index ce6dbe310..263b30fb9 100644 --- a/DDCore/src/plugins/ShapePlugins.cpp +++ b/DDCore/src/plugins/ShapePlugins.cpp @@ -98,6 +98,16 @@ static Handle<TObject> create_EllipticalTube(Detector&, xml_h element) { } DECLARE_XML_SHAPE(EllipticalTube__shape_constructor,create_EllipticalTube) +static Handle<TObject> create_TruncatedTube(Detector&, xml_h element) { + xml_dim_t e(element); + double sp = e.startphi(0.0), dp = e.deltaphi(2*M_PI); + return TruncatedTube(e.zhalf(), e.rmin(0.0), e.rmax(), sp, dp, + e.attr<double>(xml_tag_t("cutAtStart")), + e.attr<double>(xml_tag_t("cutAtDelta")), + e.attr<bool>(xml_tag_t("cutInside"))); +} +DECLARE_XML_SHAPE(TruncatedTube__shape_constructor,create_TruncatedTube) + static Handle<TObject> create_Cone(Detector&, xml_h element) { xml_dim_t e(element); double rmi1 = e.rmin1(0.0), rma1 = e.rmax1(); @@ -303,10 +313,21 @@ static Ref_t create_shape(Detector& description, xml_h e, Ref_t /* sens */) { xml_dim_t rot (x_check.child(_U(rotation), false)); Solid solid (shape.createShape()); Volume volume (name+_toString(count,"_vol_%d"),solid, description.air()); - Transform3D trafo (Rotation3D(RotationZYX(rot.z(),rot.y(),rot.x())), - Position(pos.x(),pos.y(),pos.z())); - pv = assembly.placeVolume(volume,trafo); + if ( pos.ptr() && rot.ptr() ) { + Transform3D trafo(Rotation3D(RotationZYX(rot.z(),rot.y(),rot.x())), + Position(pos.x(),pos.y(),pos.z())); + pv = assembly.placeVolume(volume,trafo); + } + else if ( pos.ptr() ) { + pv = assembly.placeVolume(volume,Position(pos.x(),pos.y(),pos.z())); + } + else if ( rot.ptr() ) { + pv = assembly.placeVolume(volume,Rotation3D(RotationZYX(rot.z(),rot.y(),rot.x()))); + } + else { + pv = assembly.placeVolume(volume); + } volume.setVisAttributes(description, x_check.visStr()); if ( x_check.hasAttr(_U(id)) ) { pv.addPhysVolID("check",x_check.id()); diff --git a/examples/ClientTests/CMakeLists.txt b/examples/ClientTests/CMakeLists.txt index 7fb089d5d..4ffa37778 100644 --- a/examples/ClientTests/CMakeLists.txt +++ b/examples/ClientTests/CMakeLists.txt @@ -132,7 +132,7 @@ dd4hep_add_test_reg( ClientTests_Save_ROOT_MiniTel_LONGTEST REGEX_PASS "\\+\\+\\+ Successfully saved geometry data to file.") # # Test basic shapes by comparing mesh vertices with reference file -foreach (test Box Cone ConeSegment Tube ElTube CutTube Hyperboloid Paraboloid Polycone PseudoTrap Sphere Torus Trap Trapezoid) +foreach (test Box Cone ConeSegment Tube ElTube CutTube Hyperboloid Paraboloid Polycone PseudoTrap Sphere Torus Trap Trapezoid TruncatedTube ExtrudedPolygon) dd4hep_add_test_reg( ClientTests_Check_Shape_${test} COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_ClientTests.sh" EXEC_ARGS geoDisplay file:${CMAKE_CURRENT_SOURCE_DIR}/compact/Check_Shape_${test}.xml -load -destroy diff --git a/examples/ClientTests/compact/Check_Shape_ConeSegment.xml b/examples/ClientTests/compact/Check_Shape_ConeSegment.xml index 7e2806de6..b7f3645f5 100644 --- a/examples/ClientTests/compact/Check_Shape_ConeSegment.xml +++ b/examples/ClientTests/compact/Check_Shape_ConeSegment.xml @@ -10,7 +10,7 @@ <position x="30*cm" y="30*cm" z="30*cm"/> <rotation x="0" y="0" z="0"/> </check> - <check> + <check vis="Shape2_vis"> <shape type="ConeSegment" rmin1="10*cm" rmax1="30*cm" rmin2="15*cm" rmax2="60*cm" dz="40*cm" phi1="pi/5.*rad" phi2="1./8.*pi*rad"/> <position x="30*cm" y="30*cm" z="-80*cm"/> <rotation x="0" y="0" z="0"/> diff --git a/examples/ClientTests/compact/Check_Shape_ExtrudedPolygon.xml b/examples/ClientTests/compact/Check_Shape_ExtrudedPolygon.xml new file mode 100644 index 000000000..af41c989d --- /dev/null +++ b/examples/ClientTests/compact/Check_Shape_ExtrudedPolygon.xml @@ -0,0 +1,27 @@ +<lccdd> + <includes> + <gdmlFile ref="CheckShape.xml"/> + </includes> + + <detectors> + <detector id="1" name="Shape_ExtrudedPolygon" type="DD4hep_TestShape_Creator"> + <check vis="Shape1_vis"> + <shape type="ExtrudedPolygon"> + <point x="-30*cm" y="-30*cm"/> + <point x="-30*cm" y=" 30*cm"/> + <point x=" 30*cm" y=" 30*cm"/> + <point x=" 30*cm" y="-30*cm"/> + <point x=" 15*cm" y="-30*cm"/> + <point x=" 15*cm" y=" 15*cm"/> + <point x="-15*cm" y=" 15*cm"/> + <point x="-15*cm" y="-30*cm"/> + <section z="-60*cm" x="0*cm" y="30*cm" scale="0.8"/> + <section z="-15*cm" x="0*cm" y="-30*cm" scale="1."/> + <section z="10*cm" x="0*cm" y="0*cm" scale="0.6"/> + <section z="60*cm" x="0*cm" y="30*cm" scale="1.2"/> + </shape> + </check> + <test type="DD4hep_Mesh_Verifier" ref="${DD4hepINSTALL}/examples/ClientTests/ref/Ref_ExtrudedPolygon.txt" create="CheckShape_create"/> + </detector> + </detectors> +</lccdd> diff --git a/examples/ClientTests/compact/Check_Shape_TruncatedTube.xml b/examples/ClientTests/compact/Check_Shape_TruncatedTube.xml new file mode 100644 index 000000000..2c1953799 --- /dev/null +++ b/examples/ClientTests/compact/Check_Shape_TruncatedTube.xml @@ -0,0 +1,23 @@ +<lccdd> + <includes> + <gdmlFile ref="CheckShape.xml"/> + </includes> + + <detectors> + <detector id="1" name="Shape_TruncatedTube" type="DD4hep_TestShape_Creator"> + <check vis="Shape1_vis"> + <shape type="TruncatedTube" zhalf="50*cm" rmin="20*cm" rmax="40*cm" + startphi="0*rad" deltaphi="pi/2.*rad" + cutAtStart="25*cm" cutAtDelta="35*cm" cutInside="1"/> + </check> + <check vis="Shape2_vis"> + <shape type="TruncatedTube" zhalf="50*cm" rmin="20*cm" rmax="40*cm" + startphi="0*rad" deltaphi="pi/2*rad" + cutAtStart="25*cm" cutAtDelta="35*cm" cutInside="0"/> + <position x="30*cm" y="30*cm" z="-90*cm"/> + <rotation x="0*cm" y="0*cm" z="0*cm"/> + </check> + <test type="DD4hep_Mesh_Verifier" ref="${DD4hepINSTALL}/examples/ClientTests/ref/Ref_TruncatedTube.txt" create="CheckShape_create"/> + </detector> + </detectors> +</lccdd> diff --git a/examples/ClientTests/ref/Ref_ExtrudedPolygon.txt b/examples/ClientTests/ref/Ref_ExtrudedPolygon.txt new file mode 100644 index 000000000..9ace1a9e6 --- /dev/null +++ b/examples/ClientTests/ref/Ref_ExtrudedPolygon.txt @@ -0,0 +1,35 @@ +ShapeCheck[0] TGeoXtru 32 Mesh-points: +TGeoXtru ExtrudedPolygon N(mesh)=32 N(vert)=32 N(seg)=56 N(pols)=26 +TGeoXtru 0 Local ( -24.00, 6.00, -60.00) Global ( -24.00, 6.00, -60.00) +TGeoXtru 1 Local ( -24.00, 54.00, -60.00) Global ( -24.00, 54.00, -60.00) +TGeoXtru 2 Local ( 24.00, 54.00, -60.00) Global ( 24.00, 54.00, -60.00) +TGeoXtru 3 Local ( 24.00, 6.00, -60.00) Global ( 24.00, 6.00, -60.00) +TGeoXtru 4 Local ( 12.00, 6.00, -60.00) Global ( 12.00, 6.00, -60.00) +TGeoXtru 5 Local ( 12.00, 42.00, -60.00) Global ( 12.00, 42.00, -60.00) +TGeoXtru 6 Local ( -12.00, 42.00, -60.00) Global ( -12.00, 42.00, -60.00) +TGeoXtru 7 Local ( -12.00, 6.00, -60.00) Global ( -12.00, 6.00, -60.00) +TGeoXtru 8 Local ( -30.00, -60.00, -15.00) Global ( -30.00, -60.00, -15.00) +TGeoXtru 9 Local ( -30.00, 0.00, -15.00) Global ( -30.00, 0.00, -15.00) +TGeoXtru 10 Local ( 30.00, 0.00, -15.00) Global ( 30.00, 0.00, -15.00) +TGeoXtru 11 Local ( 30.00, -60.00, -15.00) Global ( 30.00, -60.00, -15.00) +TGeoXtru 12 Local ( 15.00, -60.00, -15.00) Global ( 15.00, -60.00, -15.00) +TGeoXtru 13 Local ( 15.00, -15.00, -15.00) Global ( 15.00, -15.00, -15.00) +TGeoXtru 14 Local ( -15.00, -15.00, -15.00) Global ( -15.00, -15.00, -15.00) +TGeoXtru 15 Local ( -15.00, -60.00, -15.00) Global ( -15.00, -60.00, -15.00) +TGeoXtru 16 Local ( -18.00, -18.00, 10.00) Global ( -18.00, -18.00, 10.00) +TGeoXtru 17 Local ( -18.00, 18.00, 10.00) Global ( -18.00, 18.00, 10.00) +TGeoXtru 18 Local ( 18.00, 18.00, 10.00) Global ( 18.00, 18.00, 10.00) +TGeoXtru 19 Local ( 18.00, -18.00, 10.00) Global ( 18.00, -18.00, 10.00) +TGeoXtru 20 Local ( 9.00, -18.00, 10.00) Global ( 9.00, -18.00, 10.00) +TGeoXtru 21 Local ( 9.00, 9.00, 10.00) Global ( 9.00, 9.00, 10.00) +TGeoXtru 22 Local ( -9.00, 9.00, 10.00) Global ( -9.00, 9.00, 10.00) +TGeoXtru 23 Local ( -9.00, -18.00, 10.00) Global ( -9.00, -18.00, 10.00) +TGeoXtru 24 Local ( -36.00, -6.00, 60.00) Global ( -36.00, -6.00, 60.00) +TGeoXtru 25 Local ( -36.00, 66.00, 60.00) Global ( -36.00, 66.00, 60.00) +TGeoXtru 26 Local ( 36.00, 66.00, 60.00) Global ( 36.00, 66.00, 60.00) +TGeoXtru 27 Local ( 36.00, -6.00, 60.00) Global ( 36.00, -6.00, 60.00) +TGeoXtru 28 Local ( 18.00, -6.00, 60.00) Global ( 18.00, -6.00, 60.00) +TGeoXtru 29 Local ( 18.00, 48.00, 60.00) Global ( 18.00, 48.00, 60.00) +TGeoXtru 30 Local ( -18.00, 48.00, 60.00) Global ( -18.00, 48.00, 60.00) +TGeoXtru 31 Local ( -18.00, -6.00, 60.00) Global ( -18.00, -6.00, 60.00) +TGeoXtru Bounding box: dx= 36.00 dy= 63.00 dz= 60.00 Origin: x= 0.00 y= 3.00 z= 0.00 diff --git a/examples/ClientTests/ref/Ref_TruncatedTube.txt b/examples/ClientTests/ref/Ref_TruncatedTube.txt new file mode 100644 index 000000000..3a10e9de0 --- /dev/null +++ b/examples/ClientTests/ref/Ref_TruncatedTube.txt @@ -0,0 +1,174 @@ +ShapeCheck[0] TGeoCompositeShape 84 Mesh-points: +TGeoCompositeShape TruncatedTube N(mesh)=84 N(vert)=84 N(seg)=0 N(pols)=0 +TGeoCompositeShape 0 Local ( 20.00, 0.00, -50.00) Global ( 20.00, 0.00, -50.00) +TGeoCompositeShape 1 Local ( 19.94, 1.57, -50.00) Global ( 19.94, 1.57, -50.00) +TGeoCompositeShape 2 Local ( 19.75, 3.13, -50.00) Global ( 19.75, 3.13, -50.00) +TGeoCompositeShape 3 Local ( 19.45, 4.67, -50.00) Global ( 19.45, 4.67, -50.00) +TGeoCompositeShape 4 Local ( 19.02, 6.18, -50.00) Global ( 19.02, 6.18, -50.00) +TGeoCompositeShape 5 Local ( 18.48, 7.65, -50.00) Global ( 18.48, 7.65, -50.00) +TGeoCompositeShape 6 Local ( 17.82, 9.08, -50.00) Global ( 17.82, 9.08, -50.00) +TGeoCompositeShape 7 Local ( 17.05, 10.45, -50.00) Global ( 17.05, 10.45, -50.00) +TGeoCompositeShape 8 Local ( 16.18, 11.76, -50.00) Global ( 16.18, 11.76, -50.00) +TGeoCompositeShape 9 Local ( 15.21, 12.99, -50.00) Global ( 15.21, 12.99, -50.00) +TGeoCompositeShape 10 Local ( 14.14, 14.14, -50.00) Global ( 14.14, 14.14, -50.00) +TGeoCompositeShape 11 Local ( 12.99, 15.21, -50.00) Global ( 12.99, 15.21, -50.00) +TGeoCompositeShape 12 Local ( 11.76, 16.18, -50.00) Global ( 11.76, 16.18, -50.00) +TGeoCompositeShape 13 Local ( 10.45, 17.05, -50.00) Global ( 10.45, 17.05, -50.00) +TGeoCompositeShape 14 Local ( 9.08, 17.82, -50.00) Global ( 9.08, 17.82, -50.00) +TGeoCompositeShape 15 Local ( 7.65, 18.48, -50.00) Global ( 7.65, 18.48, -50.00) +TGeoCompositeShape 16 Local ( 6.18, 19.02, -50.00) Global ( 6.18, 19.02, -50.00) +TGeoCompositeShape 17 Local ( 4.67, 19.45, -50.00) Global ( 4.67, 19.45, -50.00) +TGeoCompositeShape 18 Local ( 3.13, 19.75, -50.00) Global ( 3.13, 19.75, -50.00) +TGeoCompositeShape 19 Local ( 1.57, 19.94, -50.00) Global ( 1.57, 19.94, -50.00) +TGeoCompositeShape 20 Local ( 0.00, 20.00, -50.00) Global ( 0.00, 20.00, -50.00) +TGeoCompositeShape 21 Local ( 40.00, 0.00, -50.00) Global ( 40.00, 0.00, -50.00) +TGeoCompositeShape 22 Local ( 39.88, 3.14, -50.00) Global ( 39.88, 3.14, -50.00) +TGeoCompositeShape 23 Local ( 39.51, 6.26, -50.00) Global ( 39.51, 6.26, -50.00) +TGeoCompositeShape 24 Local ( 38.89, 9.34, -50.00) Global ( 38.89, 9.34, -50.00) +TGeoCompositeShape 25 Local ( 38.04, 12.36, -50.00) Global ( 38.04, 12.36, -50.00) +TGeoCompositeShape 26 Local ( 36.96, 15.31, -50.00) Global ( 36.96, 15.31, -50.00) +TGeoCompositeShape 27 Local ( 35.64, 18.16, -50.00) Global ( 35.64, 18.16, -50.00) +TGeoCompositeShape 28 Local ( 34.11, 20.90, -50.00) Global ( 34.11, 20.90, -50.00) +TGeoCompositeShape 29 Local ( 32.36, 23.51, -50.00) Global ( 32.36, 23.51, -50.00) +TGeoCompositeShape 30 Local ( 30.42, 25.98, -50.00) Global ( 30.42, 25.98, -50.00) +TGeoCompositeShape 31 Local ( 28.28, 28.28, -50.00) Global ( 28.28, 28.28, -50.00) +TGeoCompositeShape 32 Local ( 25.98, 30.42, -50.00) Global ( 25.98, 30.42, -50.00) +TGeoCompositeShape 33 Local ( 23.51, 32.36, -50.00) Global ( 23.51, 32.36, -50.00) +TGeoCompositeShape 34 Local ( 20.90, 34.11, -50.00) Global ( 20.90, 34.11, -50.00) +TGeoCompositeShape 35 Local ( 18.16, 35.64, -50.00) Global ( 18.16, 35.64, -50.00) +TGeoCompositeShape 36 Local ( 15.31, 36.96, -50.00) Global ( 15.31, 36.96, -50.00) +TGeoCompositeShape 37 Local ( 12.36, 38.04, -50.00) Global ( 12.36, 38.04, -50.00) +TGeoCompositeShape 38 Local ( 9.34, 38.89, -50.00) Global ( 9.34, 38.89, -50.00) +TGeoCompositeShape 39 Local ( 6.26, 39.51, -50.00) Global ( 6.26, 39.51, -50.00) +TGeoCompositeShape 40 Local ( 3.14, 39.88, -50.00) Global ( 3.14, 39.88, -50.00) +TGeoCompositeShape 41 Local ( 0.00, 40.00, -50.00) Global ( 0.00, 40.00, -50.00) +TGeoCompositeShape 42 Local ( 20.00, 0.00, 50.00) Global ( 20.00, 0.00, 50.00) +TGeoCompositeShape 43 Local ( 19.94, 1.57, 50.00) Global ( 19.94, 1.57, 50.00) +TGeoCompositeShape 44 Local ( 19.75, 3.13, 50.00) Global ( 19.75, 3.13, 50.00) +TGeoCompositeShape 45 Local ( 19.45, 4.67, 50.00) Global ( 19.45, 4.67, 50.00) +TGeoCompositeShape 46 Local ( 19.02, 6.18, 50.00) Global ( 19.02, 6.18, 50.00) +TGeoCompositeShape 47 Local ( 18.48, 7.65, 50.00) Global ( 18.48, 7.65, 50.00) +TGeoCompositeShape 48 Local ( 17.82, 9.08, 50.00) Global ( 17.82, 9.08, 50.00) +TGeoCompositeShape 49 Local ( 17.05, 10.45, 50.00) Global ( 17.05, 10.45, 50.00) +TGeoCompositeShape 50 Local ( 16.18, 11.76, 50.00) Global ( 16.18, 11.76, 50.00) +TGeoCompositeShape 51 Local ( 15.21, 12.99, 50.00) Global ( 15.21, 12.99, 50.00) +TGeoCompositeShape 52 Local ( 14.14, 14.14, 50.00) Global ( 14.14, 14.14, 50.00) +TGeoCompositeShape 53 Local ( 12.99, 15.21, 50.00) Global ( 12.99, 15.21, 50.00) +TGeoCompositeShape 54 Local ( 11.76, 16.18, 50.00) Global ( 11.76, 16.18, 50.00) +TGeoCompositeShape 55 Local ( 10.45, 17.05, 50.00) Global ( 10.45, 17.05, 50.00) +TGeoCompositeShape 56 Local ( 9.08, 17.82, 50.00) Global ( 9.08, 17.82, 50.00) +TGeoCompositeShape 57 Local ( 7.65, 18.48, 50.00) Global ( 7.65, 18.48, 50.00) +TGeoCompositeShape 58 Local ( 6.18, 19.02, 50.00) Global ( 6.18, 19.02, 50.00) +TGeoCompositeShape 59 Local ( 4.67, 19.45, 50.00) Global ( 4.67, 19.45, 50.00) +TGeoCompositeShape 60 Local ( 3.13, 19.75, 50.00) Global ( 3.13, 19.75, 50.00) +TGeoCompositeShape 61 Local ( 1.57, 19.94, 50.00) Global ( 1.57, 19.94, 50.00) +TGeoCompositeShape 62 Local ( 0.00, 20.00, 50.00) Global ( 0.00, 20.00, 50.00) +TGeoCompositeShape 63 Local ( 40.00, 0.00, 50.00) Global ( 40.00, 0.00, 50.00) +TGeoCompositeShape 64 Local ( 39.88, 3.14, 50.00) Global ( 39.88, 3.14, 50.00) +TGeoCompositeShape 65 Local ( 39.51, 6.26, 50.00) Global ( 39.51, 6.26, 50.00) +TGeoCompositeShape 66 Local ( 38.89, 9.34, 50.00) Global ( 38.89, 9.34, 50.00) +TGeoCompositeShape 67 Local ( 38.04, 12.36, 50.00) Global ( 38.04, 12.36, 50.00) +TGeoCompositeShape 68 Local ( 36.96, 15.31, 50.00) Global ( 36.96, 15.31, 50.00) +TGeoCompositeShape 69 Local ( 35.64, 18.16, 50.00) Global ( 35.64, 18.16, 50.00) +TGeoCompositeShape 70 Local ( 34.11, 20.90, 50.00) Global ( 34.11, 20.90, 50.00) +TGeoCompositeShape 71 Local ( 32.36, 23.51, 50.00) Global ( 32.36, 23.51, 50.00) +TGeoCompositeShape 72 Local ( 30.42, 25.98, 50.00) Global ( 30.42, 25.98, 50.00) +TGeoCompositeShape 73 Local ( 28.28, 28.28, 50.00) Global ( 28.28, 28.28, 50.00) +TGeoCompositeShape 74 Local ( 25.98, 30.42, 50.00) Global ( 25.98, 30.42, 50.00) +TGeoCompositeShape 75 Local ( 23.51, 32.36, 50.00) Global ( 23.51, 32.36, 50.00) +TGeoCompositeShape 76 Local ( 20.90, 34.11, 50.00) Global ( 20.90, 34.11, 50.00) +TGeoCompositeShape 77 Local ( 18.16, 35.64, 50.00) Global ( 18.16, 35.64, 50.00) +TGeoCompositeShape 78 Local ( 15.31, 36.96, 50.00) Global ( 15.31, 36.96, 50.00) +TGeoCompositeShape 79 Local ( 12.36, 38.04, 50.00) Global ( 12.36, 38.04, 50.00) +TGeoCompositeShape 80 Local ( 9.34, 38.89, 50.00) Global ( 9.34, 38.89, 50.00) +TGeoCompositeShape 81 Local ( 6.26, 39.51, 50.00) Global ( 6.26, 39.51, 50.00) +TGeoCompositeShape 82 Local ( 3.14, 39.88, 50.00) Global ( 3.14, 39.88, 50.00) +TGeoCompositeShape 83 Local ( 0.00, 40.00, 50.00) Global ( 0.00, 40.00, 50.00) +TGeoCompositeShape Bounding box: dx= 20.00 dy= 20.00 dz= 50.00 Origin: x= 20.00 y= 20.00 z= 0.00 +ShapeCheck[1] TGeoCompositeShape 84 Mesh-points: +TGeoCompositeShape TruncatedTube N(mesh)=84 N(vert)=84 N(seg)=0 N(pols)=0 +TGeoCompositeShape 0 Local ( 20.00, 0.00, -50.00) Global ( 50.00, 30.00, -140.00) +TGeoCompositeShape 1 Local ( 19.94, 1.57, -50.00) Global ( 49.94, 31.57, -140.00) +TGeoCompositeShape 2 Local ( 19.75, 3.13, -50.00) Global ( 49.75, 33.13, -140.00) +TGeoCompositeShape 3 Local ( 19.45, 4.67, -50.00) Global ( 49.45, 34.67, -140.00) +TGeoCompositeShape 4 Local ( 19.02, 6.18, -50.00) Global ( 49.02, 36.18, -140.00) +TGeoCompositeShape 5 Local ( 18.48, 7.65, -50.00) Global ( 48.48, 37.65, -140.00) +TGeoCompositeShape 6 Local ( 17.82, 9.08, -50.00) Global ( 47.82, 39.08, -140.00) +TGeoCompositeShape 7 Local ( 17.05, 10.45, -50.00) Global ( 47.05, 40.45, -140.00) +TGeoCompositeShape 8 Local ( 16.18, 11.76, -50.00) Global ( 46.18, 41.76, -140.00) +TGeoCompositeShape 9 Local ( 15.21, 12.99, -50.00) Global ( 45.21, 42.99, -140.00) +TGeoCompositeShape 10 Local ( 14.14, 14.14, -50.00) Global ( 44.14, 44.14, -140.00) +TGeoCompositeShape 11 Local ( 12.99, 15.21, -50.00) Global ( 42.99, 45.21, -140.00) +TGeoCompositeShape 12 Local ( 11.76, 16.18, -50.00) Global ( 41.76, 46.18, -140.00) +TGeoCompositeShape 13 Local ( 10.45, 17.05, -50.00) Global ( 40.45, 47.05, -140.00) +TGeoCompositeShape 14 Local ( 9.08, 17.82, -50.00) Global ( 39.08, 47.82, -140.00) +TGeoCompositeShape 15 Local ( 7.65, 18.48, -50.00) Global ( 37.65, 48.48, -140.00) +TGeoCompositeShape 16 Local ( 6.18, 19.02, -50.00) Global ( 36.18, 49.02, -140.00) +TGeoCompositeShape 17 Local ( 4.67, 19.45, -50.00) Global ( 34.67, 49.45, -140.00) +TGeoCompositeShape 18 Local ( 3.13, 19.75, -50.00) Global ( 33.13, 49.75, -140.00) +TGeoCompositeShape 19 Local ( 1.57, 19.94, -50.00) Global ( 31.57, 49.94, -140.00) +TGeoCompositeShape 20 Local ( 0.00, 20.00, -50.00) Global ( 30.00, 50.00, -140.00) +TGeoCompositeShape 21 Local ( 40.00, 0.00, -50.00) Global ( 70.00, 30.00, -140.00) +TGeoCompositeShape 22 Local ( 39.88, 3.14, -50.00) Global ( 69.88, 33.14, -140.00) +TGeoCompositeShape 23 Local ( 39.51, 6.26, -50.00) Global ( 69.51, 36.26, -140.00) +TGeoCompositeShape 24 Local ( 38.89, 9.34, -50.00) Global ( 68.89, 39.34, -140.00) +TGeoCompositeShape 25 Local ( 38.04, 12.36, -50.00) Global ( 68.04, 42.36, -140.00) +TGeoCompositeShape 26 Local ( 36.96, 15.31, -50.00) Global ( 66.96, 45.31, -140.00) +TGeoCompositeShape 27 Local ( 35.64, 18.16, -50.00) Global ( 65.64, 48.16, -140.00) +TGeoCompositeShape 28 Local ( 34.11, 20.90, -50.00) Global ( 64.11, 50.90, -140.00) +TGeoCompositeShape 29 Local ( 32.36, 23.51, -50.00) Global ( 62.36, 53.51, -140.00) +TGeoCompositeShape 30 Local ( 30.42, 25.98, -50.00) Global ( 60.42, 55.98, -140.00) +TGeoCompositeShape 31 Local ( 28.28, 28.28, -50.00) Global ( 58.28, 58.28, -140.00) +TGeoCompositeShape 32 Local ( 25.98, 30.42, -50.00) Global ( 55.98, 60.42, -140.00) +TGeoCompositeShape 33 Local ( 23.51, 32.36, -50.00) Global ( 53.51, 62.36, -140.00) +TGeoCompositeShape 34 Local ( 20.90, 34.11, -50.00) Global ( 50.90, 64.11, -140.00) +TGeoCompositeShape 35 Local ( 18.16, 35.64, -50.00) Global ( 48.16, 65.64, -140.00) +TGeoCompositeShape 36 Local ( 15.31, 36.96, -50.00) Global ( 45.31, 66.96, -140.00) +TGeoCompositeShape 37 Local ( 12.36, 38.04, -50.00) Global ( 42.36, 68.04, -140.00) +TGeoCompositeShape 38 Local ( 9.34, 38.89, -50.00) Global ( 39.34, 68.89, -140.00) +TGeoCompositeShape 39 Local ( 6.26, 39.51, -50.00) Global ( 36.26, 69.51, -140.00) +TGeoCompositeShape 40 Local ( 3.14, 39.88, -50.00) Global ( 33.14, 69.88, -140.00) +TGeoCompositeShape 41 Local ( 0.00, 40.00, -50.00) Global ( 30.00, 70.00, -140.00) +TGeoCompositeShape 42 Local ( 20.00, 0.00, 50.00) Global ( 50.00, 30.00, -40.00) +TGeoCompositeShape 43 Local ( 19.94, 1.57, 50.00) Global ( 49.94, 31.57, -40.00) +TGeoCompositeShape 44 Local ( 19.75, 3.13, 50.00) Global ( 49.75, 33.13, -40.00) +TGeoCompositeShape 45 Local ( 19.45, 4.67, 50.00) Global ( 49.45, 34.67, -40.00) +TGeoCompositeShape 46 Local ( 19.02, 6.18, 50.00) Global ( 49.02, 36.18, -40.00) +TGeoCompositeShape 47 Local ( 18.48, 7.65, 50.00) Global ( 48.48, 37.65, -40.00) +TGeoCompositeShape 48 Local ( 17.82, 9.08, 50.00) Global ( 47.82, 39.08, -40.00) +TGeoCompositeShape 49 Local ( 17.05, 10.45, 50.00) Global ( 47.05, 40.45, -40.00) +TGeoCompositeShape 50 Local ( 16.18, 11.76, 50.00) Global ( 46.18, 41.76, -40.00) +TGeoCompositeShape 51 Local ( 15.21, 12.99, 50.00) Global ( 45.21, 42.99, -40.00) +TGeoCompositeShape 52 Local ( 14.14, 14.14, 50.00) Global ( 44.14, 44.14, -40.00) +TGeoCompositeShape 53 Local ( 12.99, 15.21, 50.00) Global ( 42.99, 45.21, -40.00) +TGeoCompositeShape 54 Local ( 11.76, 16.18, 50.00) Global ( 41.76, 46.18, -40.00) +TGeoCompositeShape 55 Local ( 10.45, 17.05, 50.00) Global ( 40.45, 47.05, -40.00) +TGeoCompositeShape 56 Local ( 9.08, 17.82, 50.00) Global ( 39.08, 47.82, -40.00) +TGeoCompositeShape 57 Local ( 7.65, 18.48, 50.00) Global ( 37.65, 48.48, -40.00) +TGeoCompositeShape 58 Local ( 6.18, 19.02, 50.00) Global ( 36.18, 49.02, -40.00) +TGeoCompositeShape 59 Local ( 4.67, 19.45, 50.00) Global ( 34.67, 49.45, -40.00) +TGeoCompositeShape 60 Local ( 3.13, 19.75, 50.00) Global ( 33.13, 49.75, -40.00) +TGeoCompositeShape 61 Local ( 1.57, 19.94, 50.00) Global ( 31.57, 49.94, -40.00) +TGeoCompositeShape 62 Local ( 0.00, 20.00, 50.00) Global ( 30.00, 50.00, -40.00) +TGeoCompositeShape 63 Local ( 40.00, 0.00, 50.00) Global ( 70.00, 30.00, -40.00) +TGeoCompositeShape 64 Local ( 39.88, 3.14, 50.00) Global ( 69.88, 33.14, -40.00) +TGeoCompositeShape 65 Local ( 39.51, 6.26, 50.00) Global ( 69.51, 36.26, -40.00) +TGeoCompositeShape 66 Local ( 38.89, 9.34, 50.00) Global ( 68.89, 39.34, -40.00) +TGeoCompositeShape 67 Local ( 38.04, 12.36, 50.00) Global ( 68.04, 42.36, -40.00) +TGeoCompositeShape 68 Local ( 36.96, 15.31, 50.00) Global ( 66.96, 45.31, -40.00) +TGeoCompositeShape 69 Local ( 35.64, 18.16, 50.00) Global ( 65.64, 48.16, -40.00) +TGeoCompositeShape 70 Local ( 34.11, 20.90, 50.00) Global ( 64.11, 50.90, -40.00) +TGeoCompositeShape 71 Local ( 32.36, 23.51, 50.00) Global ( 62.36, 53.51, -40.00) +TGeoCompositeShape 72 Local ( 30.42, 25.98, 50.00) Global ( 60.42, 55.98, -40.00) +TGeoCompositeShape 73 Local ( 28.28, 28.28, 50.00) Global ( 58.28, 58.28, -40.00) +TGeoCompositeShape 74 Local ( 25.98, 30.42, 50.00) Global ( 55.98, 60.42, -40.00) +TGeoCompositeShape 75 Local ( 23.51, 32.36, 50.00) Global ( 53.51, 62.36, -40.00) +TGeoCompositeShape 76 Local ( 20.90, 34.11, 50.00) Global ( 50.90, 64.11, -40.00) +TGeoCompositeShape 77 Local ( 18.16, 35.64, 50.00) Global ( 48.16, 65.64, -40.00) +TGeoCompositeShape 78 Local ( 15.31, 36.96, 50.00) Global ( 45.31, 66.96, -40.00) +TGeoCompositeShape 79 Local ( 12.36, 38.04, 50.00) Global ( 42.36, 68.04, -40.00) +TGeoCompositeShape 80 Local ( 9.34, 38.89, 50.00) Global ( 39.34, 68.89, -40.00) +TGeoCompositeShape 81 Local ( 6.26, 39.51, 50.00) Global ( 36.26, 69.51, -40.00) +TGeoCompositeShape 82 Local ( 3.14, 39.88, 50.00) Global ( 33.14, 69.88, -40.00) +TGeoCompositeShape 83 Local ( 0.00, 40.00, 50.00) Global ( 30.00, 70.00, -40.00) +TGeoCompositeShape Bounding box: dx= 20.00 dy= 20.00 dz= 50.00 Origin: x= 20.00 y= 20.00 z= 0.00 -- GitLab