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