From 10458d31f574b2e1ff46f66a7135ba789ba08a5d Mon Sep 17 00:00:00 2001
From: Markus Frank <markus.frank@cern.ch>
Date: Wed, 5 Nov 2014 10:49:55 +0000
Subject: [PATCH] Remove debugging items from CLICSiD compact xml. First
 implementation of Multipole magnetic field description. Add missing units in
 DDG4 LCIO conversion.

---
 DDCore/include/DD4hep/FieldTypes.h            |   80 +-
 DDCore/include/XML/UnicodeValues.h            |   12 +-
 DDCore/include/XML/XMLDimension.h             |  124 +-
 DDCore/include/XML/XMLElements.h              |   10 +
 DDCore/src/FieldTypes.cpp                     |   42 +
 DDCore/src/XML/XMLDimension.cpp               |  117 +-
 DDCore/src/plugins/Compact2Objects.cpp        |   50 +-
 DDCore/src/plugins/ShapePlugins.cpp           |  113 ++
 DDG4/lcio/LCIOConversions.cpp                 |   20 +-
 examples/CLICSiD/compact/compact.xml          |    9 -
 examples/ClientTests/compact/MagnetFields.xml | 1567 +++++++++++++++++
 11 files changed, 2056 insertions(+), 88 deletions(-)
 create mode 100644 DDCore/src/plugins/ShapePlugins.cpp
 create mode 100644 examples/ClientTests/compact/MagnetFields.xml

diff --git a/DDCore/include/DD4hep/FieldTypes.h b/DDCore/include/DD4hep/FieldTypes.h
index d9611cd08..4a9ba7e5d 100644
--- a/DDCore/include/DD4hep/FieldTypes.h
+++ b/DDCore/include/DD4hep/FieldTypes.h
@@ -12,6 +12,7 @@
 
 // Framework include files
 #include "DD4hep/Fields.h"
+#include "DD4hep/Shapes.h"
 #include <vector>
 
 
@@ -68,7 +69,7 @@ namespace DD4hep {
 
     /// Implementation object of a dipole magnetic field.
     /** 
-     *  Generic solonoid magnetic field
+     *  Generic dipole magnetic field
      *
      *  \author  M.Frank
      *  \version 1.0
@@ -88,6 +89,83 @@ namespace DD4hep {
       virtual void fieldComponents(const double* pos, double* field);
     };
 
+    /// Implementation object of a dipole magnetic field.
+    /** 
+     *  Generic multipole magnetic field using the 
+     *  Multipole approach. The dipole is assumed to be horizontal
+     *  as it is used for bending beams in large colliders
+     *  ie. the dipole field lines are vertical.
+     *
+     *  The different momenta are given by:
+     *
+     *  \f{eqnarray*}{
+     *  B_y + i*B_x         &=& C_n * (x + iy)^{n-1}                        \\
+     *  B_sum = B_y + i B_x &=& Sum_{n=1..4} (b_n + ia_n) (x + iy)^{n-1}    \\
+     *  \f}
+     *  With C_n being the complex multipole coefficients and 
+     *  b_n the "normal multipole coefficients" and a_n the "skew multipole coefficients".
+     *
+     *  The maximal momentum used is the octopole momentum.
+     *
+     *  The lower momenta are:
+     *
+     *  \li Dipole (n=1):
+     *  \f{eqnarray*}{
+     *  B_y &=& b_1                                       \\
+     *  B_x &=& a_1                                       \\
+     *  B_z &=& constant                                  \\
+     *  \f}
+     *
+     *  \li Quadrupole (n=2):
+     *  
+     *  \f{eqnarray*}{
+     *  B_y &=& b_2 x - a_2 y                             \\
+     *  B_x &=& b_2 y + a_2 x                             \\
+     *  \f}
+     *  
+     *  \li Sextupole (n=3):
+     *  
+     *  \f{eqnarray*}{
+     *  B_y + i B_x &=& (b_3 +ia_3) (x^2 + 2ixy - y^2)    \\
+     *  B_y         &=& b_3 x^2 - b_3 y^2 - 2 a_3 xy      \\
+     *  B_x         &=& a_3 x^2 - a_3 y^2 + 2 b_3 xy      \\
+     *  \f}
+     *  
+     *  \li Octopole (n=4):
+     *  
+     *  \f{eqnarray*}{
+     *  B_y + i B_x &=& (b_4 +ia_4) (x^3 + 3ix^2y - 3xy^2 -iy^3)  \\
+     *  B_y &=& b_4 x^3 - 3 b_4 x y^2 - 3 a_4 x^2 y + a_4 y^3     \\
+     *  B_x &=& 3 b_4 x^2 y + b_4 y^3 + a_4 x^3 - 3 a_4 x y^2     \\
+     *  \f}
+     *
+     *  The defined field components only apply within the shape 'volume'.
+     *  If 'volume' is an invalid shape (ie. not defined), then the field
+     *  components are valied throughout the 'universe'.
+     *
+     *  \see http://cas.web.cern.ch/cas/Belgium-2009/Lectures/PDFs/Wolski-1.pdf
+     *  \see http://cas.web.cern.ch/cas/Bulgaria-2010/Talks-web/Brandt-1-web.pdf
+     *  \see https://en.wikipedia.org/wiki/Multipole_magnet
+     *
+     *  \author  M.Frank
+     *  \version 1.0
+     *  \ingroup DD4HEP_GEOMETRY
+     */
+    class MultipoleField: public CartesianField::Object {
+    public:
+      typedef std::vector<double> Coefficents;
+      Coefficents coefficents;
+      Coefficents skews;
+      Solid       volume;
+      Transform3D transform;
+      double      B_z;
+    public:
+      /// Initializing constructor
+      MultipoleField();
+      /// Call to access the field components at a given location
+      virtual void fieldComponents(const double* pos, double* field);
+    };
+
   } /* End namespace Geometry           */
 } /* End namespace DD4hep             */
 #endif    /* DD4HEP_GEOMETRY_FIELDTYPES_H     */
diff --git a/DDCore/include/XML/UnicodeValues.h b/DDCore/include/XML/UnicodeValues.h
index cbbfde10c..372159bae 100644
--- a/DDCore/include/XML/UnicodeValues.h
+++ b/DDCore/include/XML/UnicodeValues.h
@@ -56,6 +56,8 @@ namespace DD4hep {
     UNICODE (check);
     UNICODE (checksum);
     UNICODE (cm);
+    UNICODE (coefficient);
+    UNICODE (coefficients);
     UNICODE (color);
     UNICODE (combine_hits);
     UNICODE (combineHits);
@@ -326,17 +328,19 @@ namespace DD4hep {
     UNICODE (sensor);
     UNICODE (sequence);
     UNICODE (setup);
-    UNICODE (size);
-    UNICODE(signed);
-    UNICODE (solidref);
-    UNICODE (sphere);
+    UNICODE (shape);
     UNICODE (show_daughters);
     UNICODE (showDaughters);
+    UNICODE (size);
+    UNICODE(signed);
+    UNICODE (skew);
     UNICODE (slice);
     UNICODE (slices);
     UNICODE (solid);
     UNICODE (solids);
+    UNICODE (solidref);
     UNICODE (spacer);
+    UNICODE (sphere);
     UNICODE (status);
     UNICODE (start);
     UNICODE (start_x);
diff --git a/DDCore/include/XML/XMLDimension.h b/DDCore/include/XML/XMLDimension.h
index cd2da45e2..3e93304eb 100644
--- a/DDCore/include/XML/XMLDimension.h
+++ b/DDCore/include/XML/XMLDimension.h
@@ -69,23 +69,49 @@ namespace DD4hep {
 
       /// Access rotation constants: angle
       double angle() const;
-      /// Access rotation constants: angle
+      /// Access rotation constants: alpha
       double alpha() const;
+      /// Access rotation constants: alpha
+      double alpha(double default_value) const;
+      /// Access rotation constants: alpha1
+      double alpha1() const;
+      /// Access rotation constants: alpha1
+      double alpha1(double default_value) const;
+      /// Access rotation constants: alpha2
+      double alpha2() const;
+      /// Access rotation constants: alpha2
+      double alpha2(double default_value) const;
       /// Access rotation constants: angle
       double beta() const;
       /// Access rotation constants: angle
+      double beta(double default_value) const;
+      /// Access rotation constants: angle
       double gamma() const;
       /// Access rotation constants: angle
+      double gamma(double default_value) const;
+      /// Access rotation constants: angle
       double delta() const;
       /// Access rotation constants: angle
+      double delta(double default_value) const;
+      /// Access rotation constants: angle
       double epsilon() const;
+      /// Access rotation constants: angle
+      double epsilon(double default_value) const;
       /// Access rotation constants: theta
       double theta() const;
+      /// Access rotation constants: theta
+      double theta(double default_value) const;
+      /// Access rotation constants: deltatheta
+      double deltatheta() const;
+      /// Access rotation constants: deltatheta
+      double deltatheta(double default_value) const;
       /// Access rotation constants: thetaBins
       int thetaBins() const;
 
       /// Access rotation constants: phi
       double phi() const;
+      /// Access rotation constants: phi
+      double phi(double default_value) const;
       /// Access rotation constants: phiBins
       int phiBins() const;
       /// Access rotation constants: phi0
@@ -98,11 +124,15 @@ namespace DD4hep {
       double phi1(double default_value) const;
       /// Access rotation constants: psi
       double psi() const;
+      /// Access rotation constants: psi
+      double psi(double default_value) const;
 
       /// Access Tube parameters: zhalf
       double zhalf() const;
       /// Access Tube parameters: deltaphi
       double deltaphi() const;
+      /// Access Tube parameters: deltaphi
+      double deltaphi(double default_value) const;
 
       /// Access parameters: b
       double b() const;
@@ -119,26 +149,44 @@ namespace DD4hep {
       double r(double default_value) const;
       /// Access parameters: R
       double R() const;
+      /// Access parameters: R
+      double R(double default_value) const;
       /// Access parameters: dr
       double dr() const;
-      /// Access parameters: r0
-      double r0() const;
       /// Access parameters: dr, if not present returns default
       double dr(double default_value) const;
+      /// Access parameters: r0
+      double r0() const;
+      /// Access parameters: r0
+      double r0(double default_value) const;
       /// Access min/max parameters: rmin
       double rmin() const;
+      /// Access min/max parameters: rmin
+      double rmin(double default_val) const;
       /// Access min/max parameters: rmax
       double rmax() const;
+      /// Access min/max parameters: rmax
+      double rmax(double default_val) const;
       /// Access min/max parameters: rmin1
       double rmin1() const;
+      /// Access min/max parameters: rmin1
+      double rmin1(double default_val) const;
       /// Access min/max parameters: rmax1
       double rmax1() const;
+      /// Access min/max parameters: rmax1
+      double rmax1(double default_val) const;
       /// Access min/max parameters: rmin2
       double rmin2() const;
+      /// Access min/max parameters: rmin2
+      double rmin2(double default_val) const;
       /// Access min/max parameters: rmax2
       double rmax2() const;
+      /// Access min/max parameters: rmax2
+      double rmax2(double default_val) const;
       /// Access parameters: radius
       double radius() const;
+      /// Access parameters: radius
+      double radius(double default_val) const;
       /// Access attribute values: outer_radius
       double outer_radius() const;
       /// Access attribute values: outer_r
@@ -154,12 +202,28 @@ namespace DD4hep {
       double x(double default_val) const;
       /// Access parameters: X
       double X() const;
+      /// Access parameters: X
+      double X(double default_val) const;
       /// Access parameters: x0
       double x0() const;
+      /// Access parameters: x0
+      double x0(double default_val) const;
       /// Access parameters: x1
       double x1() const;
+      /// Access parameters: x1
+      double x1(double default_val) const;
       /// Access parameters: x2
       double x2() const;
+      /// Access parameters: x2
+      double x2(double default_val) const;
+      /// Access parameters: x3
+      double x3() const;
+      /// Access parameters: x3
+      double x3(double default_val) const;
+      /// Access parameters: x4
+      double x4() const;
+      /// Access parameters: x4
+      double x4(double default_val) const;
       /// Access parameters: dx
       double dx() const;
       /// Access parameters: dx, if not present returns default
@@ -167,11 +231,19 @@ namespace DD4hep {
       /// Access min/max parameters: xmax
       double xmin() const;
       /// Access min/max parameters: xmax
+      double xmin(double default_value) const;
+      /// Access min/max parameters: xmax
       double xmax() const;
+      /// Access min/max parameters: xmax
+      double xmax(double default_value) const;
       /// Access min/max parameters: x_offset
       double x_offset() const;
+      /// Access min/max parameters: x_offset
+      double x_offset(double default_value) const;
       /// Access min/max parameters: dim_x
       double dim_x() const;
+      /// Access min/max parameters: dim_x
+      double dim_x(double default_value) const;
 
       /// Access parameters: y
       double y() const;
@@ -179,12 +251,20 @@ namespace DD4hep {
       double y(double default_val) const;
       /// Access parameters: Y
       double Y() const;
+      /// Access parameters: Y
+      double Y(double default_val) const;
       /// Access parameters: y0
       double y0() const;
+      /// Access parameters: y0
+      double y0(double default_value) const;
       /// Access parameters: y1
       double y1() const;
+      /// Access parameters: y1
+      double y1(double default_value) const;
       /// Access parameters: y2
       double y2() const;
+      /// Access parameters: y2
+      double y2(double default_value) const;
       /// Access parameters: dy
       double dy() const;
       /// Access parameters: dz, if not present returns default
@@ -192,11 +272,19 @@ namespace DD4hep {
       /// Access min/max parameters: ymax
       double ymin() const;
       /// Access min/max parameters: ymax
+      double ymin(double default_value) const;
+      /// Access min/max parameters: ymax
       double ymax() const;
+      /// Access min/max parameters: ymax
+      double ymax(double default_value) const;
       /// Access min/max parameters: y_offset
       double y_offset() const;
+      /// Access min/max parameters: y_offset
+      double y_offset(double default_value) const;
       /// Access min/max parameters: dim_y
       double dim_y() const;
+      /// Access min/max parameters: dim_y
+      double dim_y(double default_value) const;
 
       /// Access parameters: z
       double z() const;
@@ -204,12 +292,20 @@ namespace DD4hep {
       double z(double default_val) const;
       /// Access parameters: Z
       double Z() const;
+      /// Access parameters: Z
+      double Z(double default_val) const;
       /// Access parameters: z0
       double z0() const;
+      /// Access parameters: z0
+      double z0(double default_val) const;
       /// Access parameters: z1
       double z1() const;
+      /// Access parameters: z1
+      double z1(double default_val) const;
       /// Access parameters: z2
       double z2() const;
+      /// Access parameters: z2
+      double z2(double default_val) const;
       /// Access parameters: dz
       double dz() const;
       /// Access parameters: dz, if not present returns default
@@ -217,15 +313,23 @@ namespace DD4hep {
       /// Access min/max parameters: zmax
       double zmin() const;
       /// Access min/max parameters: zmax
+      double zmin(double default_value) const;
+      /// Access min/max parameters: zmax
       double zmax() const;
+      /// Access min/max parameters: zmax
+      double zmax(double default_value) const;
       /// Access attribute values: outer_z
       double outer_z() const;
       /// Access attribute values: inner_z
       double inner_z() const;
       /// Access min/max parameters: z_offset
       double z_offset() const;
+      /// Access min/max parameters: z_offset
+      double z_offset(double default_value) const;
       /// Access min/max parameters: dim_z
       double dim_z() const;
+      /// Access min/max parameters: dim_z
+      double dim_z(double default_value) const;
 
       /// Access attribute values: length
       double length() const;
@@ -255,6 +359,16 @@ namespace DD4hep {
       /// Access attribute values: repeat
       int repeat() const;
 
+      /// Access attribute values: coefficient
+      double coefficient() const;
+      /// Access attribute values: coefficient
+      double coefficient(double default_value) const;
+
+      /// Access attribute values: skew
+      double skew() const;
+      /// Access attribute values: skew
+      double skew(double default_value) const;
+
       /// Access attribute values: outgoing_r
       double outgoing_r() const;
       /// Access attribute values: incoming_r
@@ -311,8 +425,12 @@ namespace DD4hep {
 
       /// Access attribute values: start
       double start() const;
+      /// Access attribute values: start
+      double start(double default_value) const;
       /// Access attribute values: end
       double end() const;
+      /// Access attribute values: end
+      double end(double default_value) const;
       /// Access attribute values: inner_field
       double inner_field() const;
       /// Access attribute values: outer_field
diff --git a/DDCore/include/XML/XMLElements.h b/DDCore/include/XML/XMLElements.h
index a59bbacd7..d922a7584 100644
--- a/DDCore/include/XML/XMLElements.h
+++ b/DDCore/include/XML/XMLElements.h
@@ -668,6 +668,16 @@ namespace DD4hep {
       bool operator!() const {
         return 0 == m_element.ptr();
       }
+      /// Assignment operator
+      Element& operator=(const Element& c)  {
+	m_element = c.m_element;
+	return *this;
+      }
+      /// Assignment operator
+      Element& operator=(Handle_t handle)  {
+	m_element = handle;
+	return *this;
+      }
       /// Automatic conversion to DOM element handle
       operator Handle_t() const {
         return m_element;
diff --git a/DDCore/src/FieldTypes.cpp b/DDCore/src/FieldTypes.cpp
index 8413b0789..9e4e16e80 100644
--- a/DDCore/src/FieldTypes.cpp
+++ b/DDCore/src/FieldTypes.cpp
@@ -21,6 +21,7 @@ using namespace DD4hep::Geometry;
 DD4HEP_INSTANTIATE_HANDLE(ConstantField);
 DD4HEP_INSTANTIATE_HANDLE(SolenoidField);
 DD4HEP_INSTANTIATE_HANDLE(DipoleField);
+DD4HEP_INSTANTIATE_HANDLE(MultipoleField);
 
 /// Call to access the field components at a given location
 void ConstantField::fieldComponents(const double* /* pos */, double* field) {
@@ -75,3 +76,44 @@ void DipoleField::fieldComponents(const double* pos, double* field) {
     field[0] += bx;
   }
 }
+
+/// Initializing constructor
+MultipoleField::MultipoleField() : coefficents(), skews(), volume(), transform(), B_z(0.0)  {
+  type = CartesianField::MAGNETIC;
+}
+
+/// Call to access the field components at a given location
+void MultipoleField::fieldComponents(const double* pos, double* field) {
+  Transform3D::Point p = transform * Transform3D::Point(pos[0],pos[1],pos[2]);
+  //const Transform3D::Point::CoordinateType& c = p.Coordinates();
+  double x=p.X(), y=p.Y(), z=p.Z();
+  double coord[3] = {x,y,z};
+  if ( 0 == volume.ptr() || volume->Contains(coord) )  {
+    double bx = 0.0;
+    double by = 0.0;
+    double xy = x*y;
+    double x2 = x*x;
+    double y2 = y*y;
+    switch(coefficents.size())  {
+    case 4:      // Ocupole momentum
+      by +=  coefficents[3] * (x2*x - 3.0*x*y2) + skews[3]*(y2*y - 3.0*x*y2);
+      bx +=  coefficents[3] * (3.0*x2*y - y2*y) + skews[3]*(x2*x - 3.0*x*y2);
+    case 3:      // Sextupole momentum:
+      by += -coefficents[2] * (x2 - y2) + skews[2] * 2.0 * xy;
+      bx +=  coefficents[2] * 2.0 * xy + skews[2] * (x2 - y2);
+    case 2:      // Quadrupole momentum:
+      bx += coefficents[1] * x - skews[1]*y;
+      by += coefficents[1] * y + skews[1]*x;
+    case 1:      // Dipole momentum:
+      bx += skews[0];
+      by += coefficents[0];
+    case 0:      // Nothing, but still valid
+      break;
+    default:     // Error condition
+      throw runtime_error("Invalid multipole field definition!");
+    }
+    field[0] += bx;
+    field[1] += by;
+    field[2] += B_z;
+  }
+}
diff --git a/DDCore/src/XML/XMLDimension.cpp b/DDCore/src/XML/XMLDimension.cpp
index b3964c29d..3d48cae9e 100644
--- a/DDCore/src/XML/XMLDimension.cpp
+++ b/DDCore/src/XML/XMLDimension.cpp
@@ -18,7 +18,10 @@ using namespace DD4hep::XML;
     const XmlChar* val = m_element.attr_value_nothrow(Unicode_##name);	\
     return val ? dressing(val) : default_val; }
 
-#define XML_ATTR_ACCESSOR_DOUBLE(name)	 XML_ATTR_ACCESSOR_DEFAULT(name,double,_toDouble)
+#define XML_ATTR_ACCESSOR_DOUBLE(name) \
+  XML_ATTR_ACCESSOR(double,name)       \
+  XML_ATTR_ACCESSOR_DEFAULT(name,double,_toDouble)
+
 #define XML_ATTR_ACCESSOR_INT(name)	 XML_ATTR_ACCESSOR_DEFAULT(name,int,_toInt)
 #define XML_ATTR_ACCESSOR_BOOL(name)	 XML_ATTR_ACCESSOR_DEFAULT(name,bool,_toBool)
 
@@ -30,44 +33,41 @@ XML_ATTR_ACCESSOR(int, id)
 XML_ATTR_ACCESSOR_INT(id)
 XML_ATTR_ACCESSOR(bool, combineHits)
 
-XML_ATTR_ACCESSOR(double, x)
 XML_ATTR_ACCESSOR_DOUBLE(x)
-XML_ATTR_ACCESSOR(double, X)
-XML_ATTR_ACCESSOR(double, dx)
+XML_ATTR_ACCESSOR_DOUBLE(X)
 XML_ATTR_ACCESSOR_DOUBLE(dx)
-XML_ATTR_ACCESSOR(double, x0)
-XML_ATTR_ACCESSOR(double, x1)
-XML_ATTR_ACCESSOR(double, x2)
-XML_ATTR_ACCESSOR(double, xmin)
-XML_ATTR_ACCESSOR(double, xmax)
-XML_ATTR_ACCESSOR(double, x_offset)
-XML_ATTR_ACCESSOR(double, dim_x)
-
-XML_ATTR_ACCESSOR(double, y)
+
+XML_ATTR_ACCESSOR_DOUBLE(x0)
+XML_ATTR_ACCESSOR_DOUBLE(x1)
+XML_ATTR_ACCESSOR_DOUBLE(x2)
+XML_ATTR_ACCESSOR_DOUBLE(x3)
+XML_ATTR_ACCESSOR_DOUBLE(x4)
+XML_ATTR_ACCESSOR_DOUBLE(xmin)
+XML_ATTR_ACCESSOR_DOUBLE(xmax)
+XML_ATTR_ACCESSOR_DOUBLE(x_offset)
+XML_ATTR_ACCESSOR_DOUBLE(dim_x)
+
 XML_ATTR_ACCESSOR_DOUBLE(y)
-XML_ATTR_ACCESSOR(double, Y)
-XML_ATTR_ACCESSOR(double, dy)
+XML_ATTR_ACCESSOR_DOUBLE(Y)
 XML_ATTR_ACCESSOR_DOUBLE(dy)
-XML_ATTR_ACCESSOR(double, y0)
-XML_ATTR_ACCESSOR(double, y1)
-XML_ATTR_ACCESSOR(double, y2)
-XML_ATTR_ACCESSOR(double, ymin)
-XML_ATTR_ACCESSOR(double, ymax)
-XML_ATTR_ACCESSOR(double, y_offset)
-XML_ATTR_ACCESSOR(double, dim_y)
-
-XML_ATTR_ACCESSOR(double, z)
+XML_ATTR_ACCESSOR_DOUBLE(y0)
+XML_ATTR_ACCESSOR_DOUBLE(y1)
+XML_ATTR_ACCESSOR_DOUBLE(y2)
+XML_ATTR_ACCESSOR_DOUBLE(ymin)
+XML_ATTR_ACCESSOR_DOUBLE(ymax)
+XML_ATTR_ACCESSOR_DOUBLE(y_offset)
+XML_ATTR_ACCESSOR_DOUBLE(dim_y)
+
 XML_ATTR_ACCESSOR_DOUBLE(z)
-XML_ATTR_ACCESSOR(double, Z)
-XML_ATTR_ACCESSOR(double, dz)
+XML_ATTR_ACCESSOR_DOUBLE(Z)
 XML_ATTR_ACCESSOR_DOUBLE(dz)
-XML_ATTR_ACCESSOR(double, z0)
-XML_ATTR_ACCESSOR(double, z1)
-XML_ATTR_ACCESSOR(double, z2)
-XML_ATTR_ACCESSOR(double, zmin)
-XML_ATTR_ACCESSOR(double, zmax)
-XML_ATTR_ACCESSOR(double, z_offset)
-XML_ATTR_ACCESSOR(double, dim_z)
+XML_ATTR_ACCESSOR_DOUBLE(z0)
+XML_ATTR_ACCESSOR_DOUBLE(z1)
+XML_ATTR_ACCESSOR_DOUBLE(z2)
+XML_ATTR_ACCESSOR_DOUBLE(zmin)
+XML_ATTR_ACCESSOR_DOUBLE(zmax)
+XML_ATTR_ACCESSOR_DOUBLE(z_offset)
+XML_ATTR_ACCESSOR_DOUBLE(dim_z)
 XML_ATTR_ACCESSOR(double, outer_z)
 XML_ATTR_ACCESSOR(double, inner_z)
 
@@ -75,44 +75,44 @@ XML_ATTR_ACCESSOR(double, b)
 XML_ATTR_ACCESSOR(double, g)
 XML_ATTR_ACCESSOR(double, B)
 XML_ATTR_ACCESSOR(double, G)
-XML_ATTR_ACCESSOR(double, r)
+
 XML_ATTR_ACCESSOR_DOUBLE(r)
-XML_ATTR_ACCESSOR(double, R)
-XML_ATTR_ACCESSOR(double, dr)
-XML_ATTR_ACCESSOR(double, rmin)
-XML_ATTR_ACCESSOR(double, rmax)
-XML_ATTR_ACCESSOR(double, rmin1)
-XML_ATTR_ACCESSOR(double, rmax1)
-XML_ATTR_ACCESSOR(double, rmin2)
-XML_ATTR_ACCESSOR(double, rmax2)
-XML_ATTR_ACCESSOR(double, radius)
+XML_ATTR_ACCESSOR_DOUBLE(R)
+XML_ATTR_ACCESSOR_DOUBLE(dr)
+
+XML_ATTR_ACCESSOR_DOUBLE(rmin)
+XML_ATTR_ACCESSOR_DOUBLE(rmax)
+XML_ATTR_ACCESSOR_DOUBLE(rmin1)
+XML_ATTR_ACCESSOR_DOUBLE(rmax1)
+XML_ATTR_ACCESSOR_DOUBLE(rmin2)
+XML_ATTR_ACCESSOR_DOUBLE(radius)
 XML_ATTR_ACCESSOR(double, outer_r)
 XML_ATTR_ACCESSOR(double, outer_radius)
 XML_ATTR_ACCESSOR(double, inner_r)
 XML_ATTR_ACCESSOR(double, inner_radius)
 
 XML_ATTR_ACCESSOR(double, angle)
-XML_ATTR_ACCESSOR(double, alpha)
-XML_ATTR_ACCESSOR(double, beta)
-XML_ATTR_ACCESSOR(double, gamma)
-XML_ATTR_ACCESSOR(double, delta)
-XML_ATTR_ACCESSOR(double, epsilon)
-XML_ATTR_ACCESSOR(double, theta)
+XML_ATTR_ACCESSOR_DOUBLE(alpha)
+XML_ATTR_ACCESSOR_DOUBLE(alpha1)
+XML_ATTR_ACCESSOR_DOUBLE(alpha2)
+XML_ATTR_ACCESSOR_DOUBLE(beta)
+XML_ATTR_ACCESSOR_DOUBLE(gamma)
+XML_ATTR_ACCESSOR_DOUBLE(delta)
+XML_ATTR_ACCESSOR_DOUBLE(epsilon)
+XML_ATTR_ACCESSOR_DOUBLE(theta)
+XML_ATTR_ACCESSOR_DOUBLE(deltatheta)
 XML_ATTR_ACCESSOR(int, thetaBins)
-XML_ATTR_ACCESSOR(double, psi)
-XML_ATTR_ACCESSOR(double, phi)
+XML_ATTR_ACCESSOR_DOUBLE(psi)
+XML_ATTR_ACCESSOR_DOUBLE(phi)
 XML_ATTR_ACCESSOR(int, phiBins)
-XML_ATTR_ACCESSOR(double, phi0)
 XML_ATTR_ACCESSOR_DOUBLE(phi0)
-XML_ATTR_ACCESSOR(double, phi1)
 XML_ATTR_ACCESSOR_DOUBLE(phi1)
-XML_ATTR_ACCESSOR(double, deltaphi)
+XML_ATTR_ACCESSOR_DOUBLE(deltaphi)
 
 XML_ATTR_ACCESSOR(double, length)
 XML_ATTR_ACCESSOR(double, width)
 XML_ATTR_ACCESSOR(double, height)
 XML_ATTR_ACCESSOR(double, depth)
-XML_ATTR_ACCESSOR(double, offset)
 XML_ATTR_ACCESSOR_DOUBLE(offset)
 XML_ATTR_ACCESSOR(double, crossing_angle)
 XML_ATTR_ACCESSOR(double, incoming_r)
@@ -120,6 +120,9 @@ XML_ATTR_ACCESSOR(double, outgoing_r)
 XML_ATTR_ACCESSOR(double, phi_size_max)
 XML_ATTR_ACCESSOR(double, r_size)
 
+XML_ATTR_ACCESSOR_DOUBLE(skew)
+XML_ATTR_ACCESSOR_DOUBLE(coefficient)
+
 XML_ATTR_ACCESSOR(double, gap)
 XML_ATTR_ACCESSOR(double, z_length)
 XML_ATTR_ACCESSOR(double, zhalf)
@@ -128,8 +131,8 @@ XML_ATTR_ACCESSOR(int, nphi)
 XML_ATTR_ACCESSOR(double, rc)
 XML_ATTR_ACCESSOR(int, nz)
 XML_ATTR_ACCESSOR(double, zstart)
-XML_ATTR_ACCESSOR(double, start)
-XML_ATTR_ACCESSOR(double, end)
+XML_ATTR_ACCESSOR_DOUBLE(start)
+XML_ATTR_ACCESSOR_DOUBLE(end)
 XML_ATTR_ACCESSOR(double, thickness)
 XML_ATTR_ACCESSOR(int, numsides)
 XML_ATTR_ACCESSOR(int, number)
diff --git a/DDCore/src/plugins/Compact2Objects.cpp b/DDCore/src/plugins/Compact2Objects.cpp
index d64a7fd9b..5e5f5af93 100644
--- a/DDCore/src/plugins/Compact2Objects.cpp
+++ b/DDCore/src/plugins/Compact2Objects.cpp
@@ -139,9 +139,9 @@ static Ref_t create_DipoleField(lcdd_t& /* lcdd */, xml_h e) {
   xml_comp_t c(e);
   CartesianField obj;
   DipoleField* ptr = new DipoleField();
-  double val;
   double lunit = c.hasAttr(_U(lunit)) ? c.attr<double>(_U(lunit)) : 1.0;
   double funit = c.hasAttr(_U(funit)) ? c.attr<double>(_U(funit)) : 1.0;
+  double val, mult = funit;
 
   if (c.hasAttr(_U(zmin)))
     ptr->zmin = _multiply<double>(c.attr < string > (_U(zmin)), lunit);
@@ -149,9 +149,8 @@ static Ref_t create_DipoleField(lcdd_t& /* lcdd */, xml_h e) {
     ptr->zmax = _multiply<double>(c.attr < string > (_U(zmax)), lunit);
   if (c.hasAttr(_U(rmax)))
     ptr->rmax = _multiply<double>(c.attr < string > (_U(rmax)), lunit);
-  for (xml_coll_t coll(c, _U(dipole_coeff)); coll; ++coll) {
-    val = funit / pow(lunit, (int) ptr->coefficents.size());
-    val = _multiply<double>(coll.text(), val);
+  for (xml_coll_t coll(c, _U(dipole_coeff)); coll; ++coll, mult /= lunit) {
+    val = _multiply<double>(coll.text(), mult);
     ptr->coefficents.push_back(val);
   }
   obj.assign(ptr, c.nameStr(), c.typeStr());
@@ -159,6 +158,49 @@ static Ref_t create_DipoleField(lcdd_t& /* lcdd */, xml_h e) {
 }
 DECLARE_XMLELEMENT(DipoleMagnet,create_DipoleField)
 
+static Ref_t create_MultipoleField(lcdd_t& lcdd, xml_h e) {
+  xml_dim_t c(e), child;
+  CartesianField obj;
+  MultipoleField* ptr = new MultipoleField();
+  double lunit = c.hasAttr(_U(lunit)) ? c.attr<double>(_U(lunit)) : 1.0;
+  double funit = c.hasAttr(_U(funit)) ? c.attr<double>(_U(funit)) : 1.0;
+  double val, mult = funit, bz = 0.0;
+  RotationZYX rot;
+  Position pos;
+
+  if (c.hasAttr(_U(Z))) bz = c.Z() * funit;
+  if ((child = c.child(_U(position), false))) {   // Position is not mandatory!
+    pos.SetXYZ(child.x(), child.y(), child.z());
+  }
+  if ((child = c.child(_U(rotation), false))) {   // Rotation is not mandatory
+    rot.SetComponents(child.z(), child.y(), child.x());
+  }
+  if ((child = c.child(_U(shape), false))) {      // Shape is not mandatory
+    string type = child.typeStr();
+    string fac  = type + "__shape_constructor";
+    xml_h  solid_elt = child;
+    Solid solid = Ref_t(PluginService::Create<NamedObject*>(fac, &lcdd, &solid_elt));
+    if ( !solid.isValid() )  {
+      PluginDebug dbg;
+      PluginService::Create<NamedObject*>(type, &lcdd, &solid_elt);
+      throw_print("Failed to create solid of type " + type + ". " + dbg.missingFactory(type));
+    }
+    ptr->volume = solid;
+  }
+  ptr->B_z = bz;
+  ptr->transform = Transform3D(rot,pos).Inverse();
+  for (xml_coll_t coll(c, _U(coefficient)); coll; ++coll, mult /= lunit) {
+    xml_dim_t coeff = coll;
+    val = coeff.coefficient(0.0) * mult;
+    ptr->coefficents.push_back(val);
+    val = coeff.skew(0.0) * mult;
+    ptr->skews.push_back(val);
+  }
+  obj.assign(ptr, c.nameStr(), c.typeStr());
+  return obj;
+}
+DECLARE_XMLELEMENT(MultipoleMagnet,create_MultipoleField)
+
 static long create_Compact(lcdd_t& lcdd, xml_h element) {
   Converter < Compact > converter(lcdd);
   converter(element);
diff --git a/DDCore/src/plugins/ShapePlugins.cpp b/DDCore/src/plugins/ShapePlugins.cpp
new file mode 100644
index 000000000..d726089f1
--- /dev/null
+++ b/DDCore/src/plugins/ShapePlugins.cpp
@@ -0,0 +1,113 @@
+// $Id: StandardPlugins.cpp 1224 2014-06-19 19:26:59Z markus.frank@cern.ch $
+//====================================================================
+//  AIDA Detector description implementation for LCD
+//--------------------------------------------------------------------
+//
+//  Standard plugins necessary for nearly everything.
+//
+//  Author     : M.Frank
+//
+//====================================================================
+
+// Framework include files
+#include "DD4hep/DetFactoryHelper.h"
+
+using namespace std;
+using namespace DD4hep;
+using namespace DD4hep::Geometry;
+
+static Ref_t create_Box(lcdd_t&, xml_h e)   {
+  xml_dim_t dim(e);
+  return Box(dim.dx(),dim.dy(),dim.dz());
+}
+DECLARE_XMLELEMENT(Box__shape_constructor,create_Box)
+
+static Ref_t create_Polycone(lcdd_t&, xml_h element)   {
+  xml_dim_t e(element);
+  int num = 0;
+  vector<double> rmin,rmax,z;
+  double start = e.start(0e0), deltaphi = e.deltaphi(2*M_PI);
+  for(xml_coll_t c(e,_U(zplane)); c; ++c, ++num)  {
+    xml_comp_t plane(c);
+    rmin.push_back(plane.rmin());
+    rmax.push_back(plane.rmax());
+    z.push_back(plane.z());
+  }
+  if ( num < 2 )  {
+    throw runtime_error("PolyCone Shape> Not enough Z planes. minimum is 2!");
+  }
+  return Polycone(start,deltaphi,rmin,rmax,z);
+}
+DECLARE_XMLELEMENT(Polycone__shape_constructor,create_Polycone)
+
+static Ref_t create_ConeSegment(lcdd_t&, xml_h element)   {
+  xml_dim_t e(element);
+  return ConeSegment(e.rmin(0.0),e.rmax(),e.z(0.0),e.start(0.0),e.deltaphi(2*M_PI));
+}
+DECLARE_XMLELEMENT(ConeSegment__shape_constructor,create_ConeSegment)
+
+static Ref_t create_Tube(lcdd_t&, xml_h element)   {
+  xml_dim_t e(element);
+  return Tube(e.rmin(0.0),e.rmax(),e.z(0.0),e.start(0.0),e.deltaphi(2*M_PI));
+}
+DECLARE_XMLELEMENT(Tube__shape_constructor,create_Tube)
+
+static Ref_t create_Cone(lcdd_t&, xml_h element)   {
+  xml_dim_t e(element);
+  double rmi1 = e.rmin1(0.0), rma1 = e.rmax1();
+  return Cone(e.z(0.0),rmi1,rma1,e.rmin2(rmi1),e.rmax2(rma1));
+}
+DECLARE_XMLELEMENT(Cone__shape_constructor,create_Cone)
+
+static Ref_t create_Trap(lcdd_t&, xml_h element)   {
+  xml_dim_t e(element);
+  if ( e.hasAttr(_U(dz)) ) 
+    return Trap(e.dz(),e.dy(),e.dx(),_toDouble(_Unicode(pLTX)));
+  return Trap(e.z(0.0),e.theta(),e.phi(0),e.y1(),e.x1(),e.x2(),e.alpha(),e.y2(),e.x3(),e.x4(),e.alpha2());
+}
+DECLARE_XMLELEMENT(Trap__shape_constructor,create_Trap)
+
+static Ref_t create_Trapezoid(lcdd_t&, xml_h element)   {
+  xml_dim_t e(element);
+  return Trapezoid(e.x1(),e.x2(),e.y1(),e.y2(),e.z(0.0));
+}
+DECLARE_XMLELEMENT(Trapezoid__shape_constructor,create_Trapezoid)
+
+static Ref_t create_Torus(lcdd_t&, xml_h element)   {
+  xml_dim_t e(element);
+  return Torus(e.r(),e.rmin(),e.rmax(),e.phi(M_PI),e.deltaphi(2.*M_PI));
+}
+DECLARE_XMLELEMENT(Torus__shape_constructor,create_Torus)
+
+static Ref_t create_Sphere(lcdd_t&, xml_h element)   {
+  xml_dim_t e(element);
+  return Sphere(e.rmin(),e.rmax(),e.deltatheta(M_PI),e.phi(0e0),e.deltaphi(2.*M_PI));
+}
+DECLARE_XMLELEMENT(Sphere__shape_constructor,create_Sphere)
+
+static Ref_t create_Paraboloid(lcdd_t&, xml_h element)   {
+  xml_dim_t e(element);
+  return Paraboloid(e.rmin(0.0),e.rmax(),e.dz());
+}
+DECLARE_XMLELEMENT(Paraboloid__shape_constructor,create_Paraboloid)
+
+static Ref_t create_PolyhedraRegular(lcdd_t&, xml_h element)   {
+  xml_dim_t e(element);
+  return PolyhedraRegular(e.numsides(),e.rmin(),e.rmax(),e.dz());
+}
+DECLARE_XMLELEMENT(PolyhedraRegular__shape_constructor,create_PolyhedraRegular)
+
+static Ref_t create_EightPointSolid(lcdd_t&, xml_h element)   {
+  xml_dim_t e(element);
+  double v[8][2];
+  int num = 0;
+  memset(&v[0][0],0,sizeof(v));
+  for(xml_coll_t c(e,_Unicode(vertex)); c && num<8; ++c, ++num)  {
+    xml_comp_t vtx(c);
+    v[num][0] = vtx.x();
+    v[num][1] = vtx.y();
+  }
+  return EightPointSolid(e.dz(),&v[0][0]);
+}
+DECLARE_XMLELEMENT(EightPointSolid__shape_constructor,create_EightPointSolid)
+
diff --git a/DDG4/lcio/LCIOConversions.cpp b/DDG4/lcio/LCIOConversions.cpp
index d9dfba47b..d9e7a3cf0 100644
--- a/DDG4/lcio/LCIOConversions.cpp
+++ b/DDG4/lcio/LCIOConversions.cpp
@@ -119,16 +119,16 @@ namespace DD4hep {
 	const Geant4Tracker::Hit::Contribution& t = hit->truth;
 	int trackID = pm->particleID(t.trackID);
 	EVENT::MCParticle* lc_mcp = (EVENT::MCParticle*)lc_part->getElementAt(trackID);
-	double pos[3] = {hit->position.x(), hit->position.y(), hit->position.z()};
-	lcio::SimTrackerHitImpl* lc_hit = new lcio::SimTrackerHitImpl;  
-	lc_hit->setCellID0((hit->cellID >>    0       ) & 0xFFFFFFFF); 
+	double pos[3] = {hit->position.x()/mm, hit->position.y()/mm, hit->position.z()/mm};
+	lcio::SimTrackerHitImpl* lc_hit = new lcio::SimTrackerHitImpl;
+	lc_hit->setCellID0((hit->cellID >>    0       ) & 0xFFFFFFFF);
 	lc_hit->setCellID1((hit->cellID >> sizeof(int)) & 0xFFFFFFFF);
 	lc_hit->setEDep(hit->energyDeposit/GeV);
-	lc_hit->setPathLength(hit->length);
-	lc_hit->setTime(hit->truth.time);
+	lc_hit->setPathLength(hit->length/mm);
+	lc_hit->setTime(hit->truth.time/ns);
 	lc_hit->setMCParticle(lc_mcp);
 	lc_hit->setPosition(pos);
-	lc_hit->setMomentum(hit->momentum.x(),hit->momentum.y(),hit->momentum.z());
+	lc_hit->setMomentum(hit->momentum.x()/GeV,hit->momentum.y()/GeV,hit->momentum.z()/GeV);
 	lc_coll->addElement(lc_hit);
       }
       return lc_coll;
@@ -171,7 +171,7 @@ namespace DD4hep {
       }
       for(size_t i=0; i<nhits; ++i)   {
 	const Geant4Calorimeter::Hit* hit = coll->hit(i);
-	float pos[3] = {float(hit->position.x()), float(hit->position.y()), float(hit->position.z())};
+	float pos[3] = {float(hit->position.x()/mm), float(hit->position.y()/mm), float(hit->position.z()/mm)};
 	lcio::SimCalorimeterHitImpl*  lc_hit = new lcio::SimCalorimeterHitImpl;
 	lc_hit->setCellID0((hit->cellID >>    0       ) & 0xFFFFFFFF); 
 	lc_hit->setCellID1((hit->cellID >> sizeof(int)) & 0xFFFFFFFF); // ???? 
@@ -182,12 +182,12 @@ namespace DD4hep {
 	for(Contributions::const_iterator j=hit->truth.begin(); j!=hit->truth.end(); ++j)   {
 	  const Geant4HitData::Contribution& c = *j;
 	  int trackID = pm->particleID(c.trackID);
-	  float pos[] = {c.x, c.y, c.z};
+	  float pos[] = {float(c.x/mm), float(c.y/mm), float(c.z/mm)};
 	  EVENT::MCParticle* lc_mcp = (EVENT::MCParticle*)lc_parts->getElementAt(trackID);
 	  if ( hit_creation_mode == Geant4Sensitive::DETAILED_MODE )
-	    lc_hit->addMCParticleContribution(lc_mcp, c.deposit/GeV, c.time, lc_mcp->getPDG(), pos);
+	    lc_hit->addMCParticleContribution(lc_mcp, c.deposit/GeV, c.time/ns, lc_mcp->getPDG(), pos);
 	  else
-	    lc_hit->addMCParticleContribution(lc_mcp, c.deposit/GeV, c.time);
+	    lc_hit->addMCParticleContribution(lc_mcp, c.deposit/GeV, c.time/ns);
 	}
       }
       return lc_coll;
diff --git a/examples/CLICSiD/compact/compact.xml b/examples/CLICSiD/compact/compact.xml
index 5856ed685..58749eb4a 100644
--- a/examples/CLICSiD/compact/compact.xml
+++ b/examples/CLICSiD/compact/compact.xml
@@ -1546,14 +1546,5 @@
           zmax="SolenoidCoilOuterZ"
           outer_radius="SolenoidalFieldRadius">
         </field>
-
-        <field name="GlobalDipole" type="DipoleMagnet" 
-          rmax="50*cm"
-          zmin="0*cm"
-          zmax="50*cm">
-	  <dipole_coeff>1.0*tesla</dipole_coeff>
-	  <dipole_coeff>0.1*tesla/pow(cm,1)</dipole_coeff>
-	  <dipole_coeff>0.01*tesla/pow(cm,2)</dipole_coeff>
-        </field>
     </fields>
 </lccdd>
diff --git a/examples/ClientTests/compact/MagnetFields.xml b/examples/ClientTests/compact/MagnetFields.xml
new file mode 100644
index 000000000..9960e9d20
--- /dev/null
+++ b/examples/ClientTests/compact/MagnetFields.xml
@@ -0,0 +1,1567 @@
+<lccdd xmlns:compact="http://www.lcsim.org/schemas/compact/1.0" 
+    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
+    xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/compact/1.0/compact.xsd">
+
+    <info name="clic_sid_cdr"
+        title="CLIC Silicon Detector CDR"
+        author="Christian Grefe"
+        url="https://twiki.cern.ch/twiki/bin/view/CLIC/ClicSidCdr"
+        status="development"
+        version="$Id: compact.xml 1368 2014-11-03 20:15:27Z markus.frank@cern.ch $">
+        <comment>The compact format for the CLIC Silicon Detector used for the conceptual design report</comment>        
+    </info>
+
+    <includes>
+        <gdmlFile  ref="elements.xml"/>
+        <gdmlFile  ref="materials.xml"/>
+        <pyBuilder ref="../drivers"/>
+    </includes>
+    
+    <define>
+        <constant name="world_side" value="30000*mm"/>
+        <constant name="world_x" value="world_side"/>
+        <constant name="world_y" value="world_side"/>
+        <constant name="world_z" value="world_side"/>
+        
+        <constant name="CrossingAngle" value="0.020*rad"/>
+        
+        <constant name="CaloSides" value="12"/>
+        <constant name="MuonSides" value="8"/>
+        
+        <constant name="EcalBarrel_rmin" value="126.50*cm + world_side - world_side"/>
+        <constant name="EcalBarrel_rmin" value="126.50*cm"/>
+        <constant name="EcalBarrel_zmax" value="176.50*cm"/>
+        <constant name="EcalEndcap_rmin" value="21.0*cm"/>
+	<!-- Correction from going from inner circle to outer circle -->
+        <constant name="EcalEndcap_rmax" value="(EcalBarrel_rmin - 1.5*cm) / (cos(pi/CaloSides))"/> 
+        <constant name="EcalEndcap_zmin" value="165.70*cm"/>
+        
+        <constant name="HcalBarrel_rmin" value="141.90*cm"/>
+        <constant name="HcalBarrel_layers" value="(int) 75"/>
+        <constant name="HcalBarrel_layer_thickness" value="1.0*cm + 0.65*cm"/>
+        <constant name="HcalEndcap_zmin" value="EcalBarrel_zmax + 4.0*cm"/> <!-- Gap for cables -->
+        <constant name="HcalEndcap_rmin" value="50.0*cm"/>
+	<!-- Correction from going from inner circle to outer circle -->
+        <constant name="HcalEndcap_rmax" value="(HcalBarrel_rmin + HcalBarrel_layers * HcalBarrel_layer_thickness) / (cos(pi/CaloSides))"/>
+        <constant name="HcalEndcap_layers" value="60"/>
+        <constant name="HcalEndcap_layer_thickness" value="2.0*cm + 0.65*cm"/>
+        <constant name="HcalEndcap_zmax" value="HcalEndcap_zmin + HcalEndcap_layers * HcalEndcap_layer_thickness"/>
+        
+        <constant name="tracking_region_radius" value="EcalBarrel_rmin - 1.0*mm"/>
+        <constant name="tracking_region_zmax" value="EcalEndcap_zmin - 1.0*mm"/>
+        <constant name="VXD_CF_sensor" value="0.026*cm"/>
+        <constant name="VXD_CF_support" value="0.05*cm"/>
+        
+        <constant name="SolenoidBarrelInnerRadius" value="HcalEndcap_rmax + 2.0*cm"/>
+        <constant name="SolenoidCoilOuterZ" value="HcalEndcap_zmax"/> <!-- Aligned with HCAL endcap -->
+        <constant name="SolenoidBarrelInnerCryostatThickness" value="3.0*cm"/>
+        <constant name="SolenoidBarrelInnerAirgapThickness" value="11.0*cm"/>
+        <constant name="SolenoidBarrelAlConductorThickness" value="38.4*cm"/>
+        <constant name="SolenoidBarrelQuenchbackThickness" value="5.0*cm"/>
+        <constant name="SolenoidBarrelOuterAirgapThickness" value="18.7*cm"/>
+        <constant name="SolenoidBarrelOuterCryostatThickness" value="4.0*cm"/>
+        <constant name="SolenoidEndcapCryostatThickness" value="6.0*cm"/>
+        <constant name="SolenoidEndcapAirgapThickness" value="12.0*cm"/>
+        <constant name="SolenoidBarrelOuterZ" value="SolenoidCoilOuterZ+SolenoidEndcapAirgapThickness"/>
+        <constant name="SolenoidBarrelConductorInnerRadius" value="SolenoidBarrelInnerRadius + SolenoidBarrelInnerCryostatThickness + SolenoidBarrelInnerAirgapThickness"/>
+        <constant name="SolenoidBarrelOuterCryostatInnerRadius" value="SolenoidBarrelConductorInnerRadius + SolenoidBarrelAlConductorThickness + SolenoidBarrelQuenchbackThickness"/>
+        <constant name="SolenoidBarrelOuterRadius" value="SolenoidBarrelOuterCryostatInnerRadius + SolenoidBarrelOuterAirgapThickness + SolenoidBarrelOuterCryostatThickness"/>
+        <constant name="SolenoidalFieldRadius" value="(SolenoidBarrelConductorInnerRadius + SolenoidBarrelAlConductorThickness / 2.0)"/>
+        
+        <constant name="MuonBarrel_rmin" value="SolenoidBarrelOuterRadius + 1.0*cm"/>
+        <constant name="MuonBarrel_zmax" value="SolenoidBarrelOuterZ + SolenoidEndcapCryostatThickness"/>
+        <constant name="MuonBarrel_layers" value="15"/>
+        <constant name="MuonBarrel_layer_thickness" value="10.0*cm + 4.0*cm"/>
+        <constant name="MuonEndcap_zmin" value="MuonBarrel_zmax + 10.0*cm"/> <!-- Space for cables etc. -->
+        <constant name="MuonEndcap_rmin" value="69.0*cm"/> <!-- Space for QD0 and anti-solenoid-->
+	<!-- Correction from going from inner circle to outer circle -->
+        <constant name="MuonEndcap_rmax" value="(MuonBarrel_rmin + 57.0*cm + MuonBarrel_layers * MuonBarrel_layer_thickness) / (cos(pi/MuonSides))"/> 
+        <constant name="MuonEndcap_layers" value="18"/>
+        <constant name="MuonEndcap_layer_thickness" value="10.0*cm + 4.0*cm"/>
+        <constant name="MuonEndcap_zmax" value="MuonEndcap_zmin + MuonEndcap_layers * MuonEndcap_layer_thickness"/>
+        
+        <constant name="LumiCal_rmin" value="6.4*cm"/>
+        <constant name="LumiCal_rmax" value="EcalEndcap_rmin + 3.0*cm"/>
+        <constant name="LumiCal_zmin" value="HcalEndcap_zmin"/>
+        <constant name="LumiCal_thickness" value="20*0.371*cm + 15*0.643*cm"/>
+        <constant name="LumiCal_zmax" value="LumiCal_zmin + LumiCal_thickness"/>
+        <constant name="LumiCalElectronics_rmax" value="LumiCal_rmax+5.0*cm"/>
+        
+        <constant name="SupportTube_thickness" value="1.0*cm"/>
+        <constant name="ForwardVacuumValve_thickness" value="36.0*cm"/>
+        <constant name="ForwardShielding_thickness" value="5.0*cm"/>
+        <constant name="ForwardMask_thickness" value="10.0*cm"/>
+        <constant name="ForwardMask_zmin" value="LumiCal_zmax + ForwardShielding_thickness + ForwardVacuumValve_thickness"/>
+        <constant name="BeamCal_rmax" value="13.0*cm"/>
+        <constant name="BeamCal_zmin" value="ForwardMask_zmin + ForwardMask_thickness"/>
+        
+        <constant name="VertexSupport_r1" value="16.87*cm"/>
+        <constant name="VertexSupport_r2" value="18.42*cm"/>
+        <constant name="VertexSupport_zmax" value="89.48*cm"/>
+        
+        <constant name="VertexBarrel_zmax" value="10.0*cm"/>
+        <constant name="VertexBarrel_r1" value="2.7*cm"/>
+        <constant name="VertexBarrel_r2" value="3.8*cm"/>
+        <constant name="VertexBarrel_r3" value="5.1*cm"/>
+        <constant name="VertexBarrel_r4" value="6.4*cm"/>
+        <constant name="VertexBarrel_r5" value="7.7*cm"/>
+        
+        <constant name="CentralBeamPipe_zmax" value="23.0*cm"/>
+        <constant name="CentralBeamPipe_rmax" value="VertexBarrel_r1 - 0.2*cm"/>
+        <constant name="CentralBeamPipe_thickness" value="CentralBeamPipe_rmax * 0.02"/> <!-- 1% of the diameter -->
+        <constant name="CentralBeamPipe_rmin" value="CentralBeamPipe_rmax - CentralBeamPipe_thickness"/>
+        <constant name="BeamPipe_thickness" value="0.4*cm"/>
+        <constant name="BeamPipe_endThickness" value="0.1*cm"/>
+        <constant name="BeamPipe_zmax" value="LumiCal_zmin - 0.5*cm"/>
+        <constant name="BeamPipe_rmax" value="19.0*cm"/>
+        <constant name="BeamPipe_rmin" value="BeamPipe_rmax - BeamPipe_thickness"/>
+        <constant name="bp_cone_slope" value="(BeamPipe_rmax-CentralBeamPipe_rmax)/(tracking_region_zmax-CentralBeamPipe_zmax)"/>
+        <constant name="BeamPipe_zmin" value="CentralBeamPipe_zmax + (BeamPipe_thickness - CentralBeamPipe_thickness)/bp_cone_slope"/>
+        <constant name="BeamPipeLiner_thickness" value="0.0*cm"/>
+        
+        <constant name="VertexEndcap_rmax" value="11.5*cm"/>
+        <constant name="VertexEndcap_z1" value="12.0*cm"/>
+        <constant name="VertexEndcap_z2" value="16.0*cm"/>
+        <constant name="VertexEndcap_z3" value="20.0*cm"/>
+        <constant name="VertexEndcap_z4" value="24.0*cm"/>
+        <constant name="VertexEndcap_offset" value="0.2*cm"/>
+        <constant name="VertexEndcapModules" value="16"/>
+        <constant name="VertexEndcap_rmin1" value="CentralBeamPipe_rmax + VertexEndcap_offset"/>
+        <constant name="VertexEndcap_rmin2" value="CentralBeamPipe_rmax + VertexEndcap_offset"/>
+        <constant name="VertexEndcap_rmin3" value="CentralBeamPipe_rmax + VertexEndcap_offset"/>
+        <constant name="VertexEndcap_rmin4" value="(VertexEndcap_z4 - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax + VertexEndcap_offset"/>
+        
+        <constant name="ForwardTracker_rmax" value="16.87*cm"/>
+        <constant name="ForwardTracker_z1" value="28.0*cm"/>
+        <constant name="ForwardTracker_z2" value="50.0*cm"/>
+        <constant name="ForwardTracker_z3" value="83.0*cm"/>
+        <constant name="ForwardTracker_offset" value="0.2*cm"/>
+        <constant name="ForwardTrackerModules" value="16"/>
+        <constant name="ForwardTracker_rmin1" value="(ForwardTracker_z1 - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax + ForwardTracker_offset"/>
+        <constant name="ForwardTracker_rmin2" value="(ForwardTracker_z2 - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax + ForwardTracker_offset"/>
+        <constant name="ForwardTracker_rmin3" value="(ForwardTracker_z3 - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax + ForwardTracker_offset"/>
+        
+        <constant name="VertexService_zmin" value="ForwardTracker_z1 + 1.0*cm"/>
+        <constant name="VertexService_zmax" value="VertexService_zmin + 2.0*cm"/>
+        <constant name="VertexServiceThickness" value="0.3*cm"/>
+        <constant name="VertexCableThickness" value="0.005*cm"/>
+        
+        <constant name="IncomingBP_radius" value="0.25*cm"/>
+        <constant name="IncomingBP_thickness" value="0.05*cm"/>
+        <constant name="OutgoingBP_radius" value="tan(CrossingAngle/2/rad)*BeamCal_zmin"/>
+        <constant name="OutgoingBP_thickness" value="0.1*cm"/>
+        
+    </define>
+    <materials>
+        <material name="TungstenDens23">
+            <D value="17.7" unit="g/cm3"/>
+            <fraction n="0.925" ref="W"/>
+            <fraction n="0.066" ref="Ni"/>
+            <fraction n="0.009" ref="Fe"/>
+        </material>
+        <material name="TungstenDens24">
+            <D value="17.8" unit="g/cm3"/>
+            <fraction n="0.93" ref="W"/>
+            <fraction n="0.061" ref="Ni"/>
+            <fraction n="0.009" ref="Fe"/>
+        </material>
+        <material name="TungstenDens25">
+            <D value="18.2" unit="g/cm3"/>
+            <fraction n="0.950" ref="W"/>
+            <fraction n="0.044" ref="Ni"/>
+            <fraction n="0.006" ref="Fe"/>
+        </material>
+        <material name="CarbonFiber_25percent">
+            <D type="density" value="0.375" unit="g/cm3"/>
+            <fraction n="1.0" ref="CarbonFiber"/>
+        </material>
+        <material name="CarbonFiber_15percent">
+            <D type="density" value="0.225" unit="g/cm3"/>
+            <fraction n="1.0" ref="CarbonFiber"/>
+        </material>
+        <material name="Rohacell31_50percent">
+            <D type="density" value="0.016" unit="g/cm3"/>
+            <fraction n="1.0" ref="Rohacell31"/>
+        </material>
+        <material name="Rohacell31_15percent">
+            <D type="density" value="0.0048" unit="g/cm3"/>
+            <fraction n="1.0" ref="Rohacell31"/>
+        </material>
+        <material name="BoratedPolyethylene5">
+            <D value="0.93" unit="g/cm3"/>
+            <fraction n="0.612" ref="C"/>
+            <fraction n="0.222" ref="O"/>
+            <fraction n="0.116" ref="H"/>
+            <fraction n="0.050" ref="B"/>
+        </material>
+        <material name="SiliconCarbide">
+            <D value="3.1" unit="g/cm3"/>
+            <composite n="1" ref="Si"/>
+            <composite n="1" ref="C"/>
+        </material> 
+        <material name="SiliconCarbide_6percent">
+            <D value="0.186" unit="g/cm3"/>
+            <fraction n="1.0" ref="SiliconCarbide"/>
+        </material>
+        <material name="Graphite">
+        	<D value="1.7" unit="g/cm3"/>
+        	<composite n="1" ref="C"/>
+        </material>      
+    </materials>
+    <limits>
+        <limitset name="cal_limits">
+            <limit name="step_length_max" particles="*" value="5.0" unit="mm" />
+        </limitset>
+    </limits>
+
+    <display>
+        <vis name="InvisibleNoDaughters"      showDaughters="false" visible="false"/>
+        <vis name="InvisibleWithDaughters"    showDaughters="true" visible="false"/>
+        <vis name="SiVertexBarrelModuleVis" alpha="1.0" r="1" g="1" b="0.6" drawingStyle="wireframe" showDaughters="true" visible="true"/>
+        <vis name="SiVertexSensitiveVis" alpha="1.0" r="1" g="0.2" b="0.2" drawingStyle="solid" showDaughters="true" visible="true"/>
+        <vis name="SiVertexPassiveVis"   alpha="1.0" r="0" g="0.2" b="1" drawingStyle="solid" showDaughters="true" visible="true"/>
+        <vis name="SiVertexBarrelLayerVis" alpha="1.0" r="1" g="1" b="0.6" showDaughters="true" visible="false"/>
+        
+        <vis name="SiVertexEndcapLayerVis" alpha="1.0" r="1" g="0.75" b="0" showDaughters="false" visible="true"/>
+
+        <vis name="SiTrackerBarrelModuleVis" alpha="1.0" r="0" g="1" b="0.6" drawingStyle="wireframe" showDaughters="false" visible="true"/>
+        <vis name="SiTrackerBarrelLayerVis" alpha="1.0" r="1" g="1" b="0.6" showDaughters="true" visible="true"/>
+        
+        <vis name="SiTrackerEndcapModuleVis" alpha="0.1" r="0.8" g="1.0" b="0.1" drawingStyle="wireframe" showDaughters="false" visible="true"/>        
+            
+        <vis name="SiTrackerForwardVis" alpha="1.0" r="0.8" g="0.1" b="0.1" showDaughters="false" visible="true"/>
+            
+        <vis name="EcalBarrelVis" alpha="1.0" r="0" g="0" b="0.3" showDaughters="true" visible="true"/>
+        <vis name="EcalBarrelStaveVis" alpha="1.0" r="1" g="0.9" b="0.5" showDaughters="false" visible="true"/>
+
+        <vis name="EcalEndcapVis"       alpha="1" r="0.77" g="0.74" b="0.86" showDaughters="false" visible="true"/>
+
+        <vis name="HcalBarrelVis"          alpha="1" r="1"    g="1"    b="0.1" showDaughters="true" visible="true"/>
+        <vis name="HcalBarrelStavesVis"    alpha="1" r="1"    g="0"    b="0.3" showDaughters="true" visible="true"/>
+        <vis name="HcalBarrelLayerVis"     alpha="1" r="1"    g="0"    b="0.5" showDaughters="true" visible="true"/>
+        <vis name="HcalBarrelSensorVis"    alpha="1" r="1"    g="1"    b="0.7" showDaughters="true" visible="true"/>
+
+        <vis name="HcalEndcapVis"          alpha="1" r="1"    g="1"    b="0.1" showDaughters="false" visible="true"/>
+        <vis name="HcalEndcapLayerVis"     alpha="1" r="1"    g="0"    b="0.5" showDaughters="false" visible="true"/>
+        
+        <vis name="SolenoidBarrelLayerVis" alpha="1" r="0"    g="0.3"  b="0.3" showDaughters="false" visible="true"/>
+        <vis name="SolenoidCoilEndsVis"    alpha="1" r="0"    g="0.9"  b="0.9" showDaughters="false" visible="true"/>
+        <vis name="AntiSolenoidVis"        alpha="1" r="0.3"  g="1"    b="1"   showDaughters="false" visible="true"/>
+
+        <vis name="MuonBarrelVis"          alpha="1" r="1"    g="0.4"  b="0.62" showDaughters="true" visible="true"/>
+        <vis name="MuonBarrelStavesVis"    alpha="1" r="0"    g="0.7"  b="0.3" showDaughters="true" visible="true"/>
+        <vis name="MuonBarrelLayerVis"     alpha="1" r="0"    g="1"    b="0.3" showDaughters="true" visible="true"/>
+        <vis name="MuonBarrelSensorVis"    alpha="1" r="0.54" g="0.4"  b="0.41" visible="true"/>
+        <vis name="MuonBarrelAbsorberVis"  alpha="1" r="0.28" g="0.4"  b="0.62" visible="true"/>        
+
+        <vis name="MuonEndcapVis"          alpha="1" r="1"    g="0.4"  b="0.62" showDaughters="true" visible="true"/>
+        <vis name="MuonEndcapLayerVis"     alpha="1" r="0"    g="1"    b="0.3"  showDaughters="true" visible="true"/>
+        <vis name="MuonEndcapSensorVis"    alpha="1" r="0.54" g="0.4"  b="0.41" visible="true"/>
+        <vis name="MuonEndcapAbsorberVis"  alpha="1" r="0.28" g="0.4"  b="0.62" visible="true"/>        
+                       
+        
+        <vis name="BeamPipeVis" r="0.0" g="0.99" b="0.0" showDaughters="false" visible="true"/>
+        <vis name="CableVis" showDaughters="false" visible="true"/>
+        
+        <vis name="SupportTubeVis" r="0.1" g="0.1" b="0.99" showDaughters="false" visible="true"/>
+        <vis name="TungstenShieldingVis" r="0.99" g="0.1" b="0.2" showDaughters="false" visible="true"/>
+        
+        <vis name="SupportVis" r="0.8" g="0.8" b="0" showDaughters="false" visible="true"/>
+        <vis name="LumiCalVis" showDaughters="false" visible="true"/>
+        <vis name="GreenVis" r="0.0" g="1.0" b="0.0" showDaughters="true" visible="true"/>
+        <vis name="RedVis" r="1.0" g="0.0" b="0.0" showDaughters="true" visible="true"/>
+        <vis name="BlueVis" r="0.0" g="0.0" b="1.0" showDaughters="true" visible="true"/>
+    </display>
+
+
+
+    <detectors>
+
+        <comment>Trackers</comment> 
+	<include ref="VertexBarrel.xml"/>
+
+        <comment>Vertex Detector Endcaps</comment>
+        <detector id="2" name="SiVertexEndcap" type="SiTrackerEndcap2" readout="SiVertexEndcapHits" reflect="true">    
+            <module name="SiVertexEndcapModule1">
+                <trd x1="VertexEndcap_rmin1 * tan(pi/(VertexEndcapModules-0.1))" x2="VertexEndcap_rmax * sin(pi/(VertexEndcapModules-0.1*cm))" z="(VertexEndcap_rmax - VertexEndcap_rmin1) / 2" />
+                <module_component thickness="0.005*cm" material="Silicon" sensitive="true"  vis="SiVertexSensitiveVis"/>
+                <module_component thickness="0.013*cm"   material="Carbon" vis="SiVertexPassiveVis" />
+            </module>
+            <module name="SiVertexEndcapModule2">
+                <trd x1="VertexEndcap_rmin2 * tan(pi/(VertexEndcapModules-0.1))" x2="VertexEndcap_rmax * sin(pi/(VertexEndcapModules-0.1*cm))" z="(VertexEndcap_rmax - VertexEndcap_rmin2) / 2" />
+                <module_component thickness="0.005*cm" material="Silicon" sensitive="true"  vis="SiVertexSensitiveVis"/>
+                <module_component thickness="0.013*cm"   material="Carbon" vis="SiVertexPassiveVis" />
+            </module>
+            <module name="SiVertexEndcapModule3">
+                <trd x1="VertexEndcap_rmin3 * tan(pi/(VertexEndcapModules-0.1))" x2="VertexEndcap_rmax * sin(pi/(VertexEndcapModules-0.1*cm))" z="(VertexEndcap_rmax - VertexEndcap_rmin3) / 2" />
+                <module_component thickness="0.005*cm" material="Silicon" sensitive="true"  vis="SiVertexSensitiveVis"/>
+                <module_component thickness="0.013*cm"   material="Carbon" vis="SiVertexPassiveVis" />
+            </module>
+            <module name="SiVertexEndcapModule4">
+                <trd x1="VertexEndcap_rmin4 * tan(pi/(VertexEndcapModules-0.1))" x2="VertexEndcap_rmax * sin(pi/(VertexEndcapModules-0.1*cm))" z="(VertexEndcap_rmax - VertexEndcap_rmin4) / 2" />
+                <module_component thickness="0.005*cm" material="Silicon" sensitive="true"  vis="SiVertexSensitiveVis"/>
+                <module_component thickness="0.013*cm"   material="Carbon"  vis="SiVertexPassiveVis"/>
+            </module>
+            <layer id="1"  vis="SiVertexEndcapLayerVis">
+                <ring r="(VertexEndcap_rmax + VertexEndcap_rmin1) / 2" zstart="VertexEndcap_z1" nmodules="(int) VertexEndcapModules" dz="0.011*cm" module="SiVertexEndcapModule1"/>
+            </layer>
+            <layer id="2"  vis="SiVertexEndcapLayerVis">
+                <ring r="(VertexEndcap_rmax + VertexEndcap_rmin2) / 2" zstart="VertexEndcap_z2" nmodules="(int) VertexEndcapModules" dz="0.011*cm" module="SiVertexEndcapModule2"/>
+            </layer>
+            <layer id="3"  vis="SiVertexEndcapLayerVis">
+                <ring r="(VertexEndcap_rmax + VertexEndcap_rmin3) / 2" zstart="VertexEndcap_z3" nmodules="(int) VertexEndcapModules" dz="0.011*cm" module="SiVertexEndcapModule3"/>
+            </layer>
+            <layer id="4"  vis="SiVertexEndcapLayerVis">
+                <ring r="(VertexEndcap_rmax + VertexEndcap_rmin4) / 2" zstart="VertexEndcap_z4" nmodules="(int) VertexEndcapModules" dz="0.011*cm" module="SiVertexEndcapModule4"/>
+            </layer>
+        </detector> 
+
+        <detector id="3" name="SiTrackerBarrel" type="SiTrackerBarrel" readout="SiTrackerBarrelHits">
+            <comment>Outer Tracker Barrel</comment>
+            <module name="SiTrackerModule_Layer1" vis="SiTrackerBarrelModuleVis">                
+                <module_envelope width="97.79*mm" length="97.79*mm" thickness="0.3*cm"/>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.02*cm" material="PEEK" sensitive="false">
+                    <position z="-0.14*cm" />
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.016*cm" material="CarbonFiber_50D" sensitive="false">
+                    <position z="-0.122*cm" />
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.18*cm" material="Rohacell31_50D" sensitive="false">
+                    <position z="-0.024*cm" />
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.0175*cm" material="Epoxy" sensitive="false">
+                    <position z="0.07475*cm" />
+                </module_component>
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.016*cm" material="CarbonFiber_50D" sensitive="false">
+                    <position z="0.0915*cm" />
+                </module_component>                
+                <module_component width="92.031*mm" length="92.031*mm" thickness="0.03*cm" material="Silicon" sensitive="true">
+                    <position z="0.1145*cm"/>
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.00048*cm" material="Silicon" sensitive="false">
+                    <position z="0.12974*cm"/>
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.0038*cm" material="Kapton" sensitive="false">
+                    <position z="0.1375*cm"/>
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.00038*cm" material="Copper" sensitive="false">
+                    <position z="0.146*cm"/>
+                </module_component>                
+            </module>
+            <module name="SiTrackerModule_Layer2" vis="SiTrackerBarrelModuleVis">                
+                <module_envelope width="97.79*mm" length="97.79*mm" thickness="0.3*cm"/>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.02*cm" material="PEEK" sensitive="false">
+                    <position z="-0.14*cm" />
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.016*cm" material="CarbonFiber_50D" sensitive="false">
+                    <position z="-0.122*cm" />
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.18*cm" material="Rohacell31_50D" sensitive="false">
+                    <position z="-0.024*cm" />
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.0175*cm" material="Epoxy" sensitive="false">
+                    <position z="0.07475*cm" />
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.016*cm" material="CarbonFiber_50D" sensitive="false">
+                    <position z="0.0915*cm" />
+                </module_component>                
+                <module_component width="92.031*mm" length="92.031*mm" thickness="0.03*cm" material="Silicon" sensitive="true">
+                    <position z="0.1145*cm"/>
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.00048*cm" material="Silicon" sensitive="false">
+                    <position z="0.12974*cm"/>
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.0051*cm" material="Kapton" sensitive="false">
+                    <position z="0.1375*cm"/>
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.00052*cm" material="Copper" sensitive="false">
+                    <position z="0.146*cm"/>
+                </module_component>                
+            </module>
+            <module name="SiTrackerModule_Layer3" vis="SiTrackerBarrelModuleVis">                
+                <module_envelope width="97.79*mm" length="97.79*mm" thickness="0.3*cm"/>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.02*cm" material="PEEK" sensitive="false">
+                    <position z="-0.14*cm" />
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.016*cm" material="CarbonFiber_50D" sensitive="false">
+                    <position z="-0.122*cm" />
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.18*cm" material="Rohacell31_50D" sensitive="false">
+                    <position z="-0.024*cm" />
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.0175*cm" material="Epoxy" sensitive="false">
+                    <position z="0.07475*cm" />
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.016*cm" material="CarbonFiber_50D" sensitive="false">
+                    <position z="0.0915*cm" />
+                </module_component>                
+                <module_component width="92.031*mm" length="92.031*mm" thickness="0.03*cm" material="Silicon" sensitive="true">
+                    <position z="0.1145*cm"/>
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.00048*cm" material="Silicon" sensitive="false">
+                    <position z="0.12974*cm"/>
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.0064*cm" material="Kapton" sensitive="false">
+                    <position z="0.1375*cm"/>
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.00065*cm" material="Copper" sensitive="false">
+                    <position z="0.146*cm"/>
+                </module_component>                
+            </module>
+            <module name="SiTrackerModule_Layer4" vis="SiTrackerBarrelModuleVis">                
+                <module_envelope width="97.79*mm" length="97.79*mm" thickness="0.3*cm"/>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.02*cm" material="PEEK" sensitive="false">
+                    <position z="-0.14*cm" />
+                </module_component>               
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.016*cm" material="CarbonFiber_50D" sensitive="false">
+                    <position z="-0.122*cm" />
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.18*cm" material="Rohacell31_50D" sensitive="false">
+                    <position z="-0.024*cm" />
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.0175*cm" material="Epoxy" sensitive="false">
+                    <position z="0.07475*cm" />
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.016*cm" material="CarbonFiber_50D" sensitive="false">
+                    <position z="0.0915*cm" />
+                </module_component>                
+                <module_component width="92.031*mm" length="92.031*mm" thickness="0.03*cm" material="Silicon" sensitive="true">
+                    <position z="0.1145*cm"/>
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.00048*cm" material="Silicon" sensitive="false">
+                    <position z="0.12974*cm"/>
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.0078*cm" material="Kapton" sensitive="false">
+                    <position z="0.1375*cm"/>
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.00079*cm" material="Copper" sensitive="false">
+                    <position z="0.146*cm"/>
+                </module_component>                
+            </module>
+            <module name="SiTrackerModule_Layer5" vis="SiTrackerBarrelModuleVis">                
+                <module_envelope width="97.79*mm" length="97.79*mm" thickness="0.3*cm"/>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.02*cm" material="PEEK" sensitive="false">
+                    <position z="-0.14*cm" />
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.016*cm" material="CarbonFiber_50D" sensitive="false">
+                    <position z="-0.122*cm" />
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.18*cm" material="Rohacell31_50D" sensitive="false">
+                    <position z="-0.024*cm" />
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.0175*cm" material="Epoxy" sensitive="false">
+                    <position z="0.07475*cm" />
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.016*cm" material="CarbonFiber_50D" sensitive="false">
+                    <position z="0.0915*cm" />
+                </module_component>                
+                <module_component width="92.031*mm" length="92.031*mm" thickness="0.03*cm" material="Silicon" sensitive="true">
+                    <position z="0.1145*cm"/>
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.00048*cm" material="Silicon" sensitive="false">
+                    <position z="0.12974*cm"/>
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.0091*cm" material="Kapton" sensitive="false">
+                    <position z="0.1375*cm"/>
+                </module_component>                
+                <module_component width="97.79*mm" length="97.79*mm" thickness="0.00093*cm" material="Copper" sensitive="false">
+                    <position z="0.146*cm"/>
+                </module_component>                
+            </module>
+            <layer module="SiTrackerModule_Layer1" id="1" vis="SiTrackerBarrelLayerVis">
+                <barrel_envelope inner_r="215.075*mm" outer_r="245.0*mm" z_length="578 * 2*mm"/>
+                <rphi_layout phi_tilt="0.17506*rad" nphi="20" phi0="0." rc="(216.355 + 5.0)*mm" dr="0.0"/>
+                <z_layout dr="4.0*mm" z0="512.128*mm" nz="13"/>
+            </layer>                
+            <layer module="SiTrackerModule_Layer2" id="2" vis="SiTrackerBarrelLayerVis">
+                <barrel_envelope inner_r="465.075*mm" outer_r="501.0*mm" z_length="749.8 * 2*mm"/>
+                <rphi_layout phi_tilt="0.12217*rad" nphi="38" phi0="0.087*rad" rc="(466.355 + 5.0)*mm" dr="0.0"/>
+                <z_layout dr="4.0*mm" z0="690.605*mm" nz="17"/>
+            </layer>
+            <layer module="SiTrackerModule_Layer3" id="3" vis="SiTrackerBarrelLayerVis">
+                <barrel_envelope inner_r="715.075*mm" outer_r="756.0*mm" z_length="1013.9 * 2*mm"/>
+                <rphi_layout phi_tilt="0.11493*rad" nphi="58" phi0="0.058*rad" rc="(716.355 + 5.0)*mm" dr="0.0"/>
+                <z_layout dr="4.0*mm" z0="954.625*mm" nz="23"/>
+            </layer>            
+            <layer module="SiTrackerModule_Layer4" id="4" vis="SiTrackerBarrelLayerVis">
+                <barrel_envelope inner_r="965.075*mm" outer_r="1012.0*mm" z_length="1272.3 * 2*mm"/>
+                <rphi_layout phi_tilt="0.11502*rad" nphi="80" phi0="0.0436*rad" rc="(966.355 + 5.0)*mm" dr="0.0"/>
+                <z_layout dr="4.0*mm" z0="1213.073*mm" nz="29"/>
+            </layer>                        
+            <layer module="SiTrackerModule_Layer5" id="5" vis="SiTrackerBarrelLayerVis">
+                <barrel_envelope inner_r="1215.075*mm" outer_r="1263.0*mm" z_length="1535.7 * 2*mm"/>
+                <rphi_layout phi_tilt="0.11467*rad" nphi="102" phi0="0.01745*rad" rc="(1216.355 + 5.0)*mm" dr="0.0"/>
+                <z_layout dr="4.0*mm" z0="1476.497*mm" nz="35"/>
+            </layer>
+        </detector>
+
+        <detector id="4" name="SiTrackerEndcap" type="SiTrackerEndcap2" readout="SiTrackerEndcapHits" reflect="true">
+            <comment>Outer Tracker Endcaps</comment>
+            <module name="Module1" vis="SiTrackerEndcapModuleVis">
+                <trd x1="36.112*mm" x2="46.635*mm" z="100.114/2*mm" />
+                <module_component thickness="0.00052*cm"   material="Copper" />
+                <module_component thickness="0.0051*cm"   material="Kapton" />
+                <module_component thickness="0.00048*cm" material="Silicon" />
+                <module_component thickness="0.03*cm"   material="Silicon" sensitive="true" />
+                <module_component thickness="0.016*cm" material="CarbonFiber_50D" />
+                <module_component thickness="0.18*cm" material="Rohacell31_50D" />
+                <module_component thickness="0.016*cm" material="CarbonFiber_50D" />
+                <module_component thickness="0.0175*cm" material="Epoxy" />
+                <module_component thickness="0.03*cm"   material="Silicon" sensitive="true" />
+                <module_component thickness="0.00048*cm" material="Silicon" />
+                <module_component thickness="0.0051*cm"   material="Kapton" />
+                <module_component thickness="0.00052*cm"   material="Copper" />
+            </module> 
+            <module name="Module2" vis="SiTrackerEndcapModuleVis">
+                <trd x1="45.245*mm" x2="54.680*mm" z="89.773/2*mm" />
+                <module_component thickness="0.00079*cm"   material="Copper" />
+                <module_component thickness="0.0078*cm"   material="Kapton" />
+                <module_component thickness="0.00048*cm" material="Silicon" />
+                <module_component thickness="0.03*cm"   material="Silicon" sensitive="true" />
+                <module_component thickness="0.016*cm" material="CarbonFiber_50D" />
+                <module_component thickness="0.18*cm" material="Rohacell31_50D" />
+                <module_component thickness="0.016*cm" material="CarbonFiber_50D" />
+                <module_component thickness="0.0175*cm" material="Epoxy" />
+                <module_component thickness="0.03*cm"   material="Silicon" sensitive="true" />
+                <module_component thickness="0.00048*cm" material="Silicon" />
+                <module_component thickness="0.0078*cm"   material="Kapton" />
+                <module_component thickness="0.00079*cm"   material="Copper" />
+            </module>
+            <layer id="1">
+                <ring r="256.716*mm" zstart="(787.105+1.75)*mm" nmodules="24" dz="1.75*mm" module="Module1"/>
+                <ring r="353.991*mm" zstart="(778.776+1.75)*mm" nmodules="32" dz="1.75*mm" module="Module1"/>
+                <ring r="449.180*mm" zstart="(770.544+1.75)*mm" nmodules="40" dz="1.75*mm" module="Module1"/>
+            </layer>
+            <layer id="2">
+                <ring r="256.716*mm" zstart="(1073.293+1.75)*mm" nmodules="24" dz="1.75*mm" module="Module1"/>
+                <ring r="353.991*mm" zstart="(1064.966+1.75)*mm" nmodules="32" dz="1.75*mm" module="Module1"/>
+                <ring r="449.180*mm" zstart="(1056.734+1.75)*mm" nmodules="40" dz="1.75*mm" module="Module1"/>
+                <ring r="538.520*mm" zstart="(1048.466+1.75)*mm" nmodules="40" dz="1.75*mm" module="Module2"/>
+                <ring r="625.654*mm" zstart="(1041.067+1.75)*mm" nmodules="48" dz="1.75*mm" module="Module2"/>
+                <ring r="703.666*mm" zstart="(1033.725+1.75)*mm" nmodules="54" dz="1.75*mm" module="Module2" phi0="pi/54"/>
+            </layer>
+            <layer id="3">
+                <ring r="256.716*mm" zstart="(1353.786+1.75)*mm" nmodules="24" dz="1.75*mm" module="Module1"/>
+                <ring r="353.991*mm" zstart="(1345.457+1.75)*mm" nmodules="32" dz="1.75*mm" module="Module1"/>
+                <ring r="449.180*mm" zstart="(1337.225+1.75)*mm" nmodules="40" dz="1.75*mm" module="Module1"/>
+                <ring r="538.520*mm" zstart="(1328.957+1.75)*mm" nmodules="40" dz="1.75*mm" module="Module2"/>
+                <ring r="625.654*mm" zstart="(1321.558+1.75)*mm" nmodules="48" dz="1.75*mm" module="Module2"/>
+                <ring r="703.666*mm" zstart="(1314.217+1.75)*mm" nmodules="54" dz="1.75*mm" module="Module2" phi0="pi/54"/>
+                <ring r="793.448*mm" zstart="(1306.828+1.75)*mm" nmodules="58" dz="1.75*mm" module="Module2" phi0="pi/58"/>
+                <ring r="874.239*mm" zstart="(1299.486+1.75)*mm" nmodules="64" dz="1.75*mm" module="Module2"/>
+                <ring r="958.364*mm" zstart="(1292.189+1.75)*mm" nmodules="68" dz="1.75*mm" module="Module2"/>
+            </layer>
+            <layer id="4">
+                <ring r="256.716*mm" zstart="(1639.164+1.75)*mm" nmodules="24" dz="1.75*mm" module="Module1"/>
+                <ring r="353.991*mm" zstart="(1630.835+1.75)*mm" nmodules="32" dz="1.75*mm" module="Module1"/>
+                <ring r="449.180*mm" zstart="(1622.603+1.75)*mm" nmodules="40" dz="1.75*mm" module="Module1"/>
+                <ring r="538.520*mm" zstart="(1614.335+1.75)*mm" nmodules="40" dz="1.75*mm" module="Module2"/>
+                <ring r="625.654*mm" zstart="(1606.936+1.75)*mm" nmodules="48" dz="1.75*mm" module="Module2"/>
+                <ring r="703.666*mm" zstart="(1599.595+1.75)*mm" nmodules="54" dz="1.75*mm" module="Module2" phi0="pi/54"/>
+                <ring r="793.448*mm" zstart="(1592.206+1.75)*mm" nmodules="58" dz="1.75*mm" module="Module2" phi0="pi/58"/>
+                <ring r="874.239*mm" zstart="(1584.864+1.75)*mm" nmodules="64" dz="1.75*mm" module="Module2"/>
+                <ring r="958.364*mm" zstart="(1577.567+1.75)*mm" nmodules="68" dz="1.75*mm" module="Module2"/>
+                <ring r="1040.970*mm" zstart="(1570.222+1.75)*mm" nmodules="72" dz="1.75*mm" module="Module2"/>
+                <ring r="1124.167*mm" zstart="(1562.916+1.75)*mm" nmodules="78" dz="1.75*mm" module="Module2" phi0="pi/78"/>
+                <ring r="1206.937*mm" zstart="(1555.647+1.75)*mm" nmodules="84" dz="1.75*mm" module="Module2"/>
+            </layer>
+        </detector>
+        
+        <detector id="5" name="SiTrackerForward" type="SiTrackerEndcap2" readout="SiTrackerForwardHits" reflect="true">    
+            <comment>Forward Tracker inside Vertex Support Barrel</comment>
+            <module name="SiTrackerForwardModule1">
+                <trd x1="ForwardTracker_rmin1 * tan(pi/(ForwardTrackerModules-0.1))" x2="ForwardTracker_rmax * sin(pi/(ForwardTrackerModules-0.1))" z="(ForwardTracker_rmax - ForwardTracker_rmin1) / 2" />
+                <module_component thickness="0.005*cm" material="Silicon" sensitive="true" />
+                <module_component thickness="0.013*cm"   material="Carbon" />
+            </module>
+            <module name="SiTrackerForwardModule2">
+                <trd x1="ForwardTracker_rmin2 * tan(pi/(ForwardTrackerModules-0.1))" x2="ForwardTracker_rmax * sin(pi/(ForwardTrackerModules-0.1))" z="(ForwardTracker_rmax - ForwardTracker_rmin2) / 2" />
+                <module_component thickness="0.005*cm" material="Silicon" sensitive="true" />
+                <module_component thickness="0.013*cm"   material="Carbon" />
+            </module>
+            <module name="SiTrackerForwardModule3">
+                <trd x1="ForwardTracker_rmin3 * tan(pi/(ForwardTrackerModules-0.1))" x2="ForwardTracker_rmax * sin(pi/(ForwardTrackerModules-0.1))" z="(ForwardTracker_rmax - ForwardTracker_rmin3) / 2" />
+                <module_component thickness="0.005*cm" material="Silicon" sensitive="true" />
+                <module_component thickness="0.013*cm"   material="Carbon" />
+            </module>
+            <layer id="1">
+                <ring r="(ForwardTracker_rmax + ForwardTracker_rmin1) / 2" zstart="ForwardTracker_z1" nmodules="(int) ForwardTrackerModules" dz="0.011*mm" module="SiTrackerForwardModule1"/>
+            </layer>
+            <layer id="2">
+                <ring r="(ForwardTracker_rmax + ForwardTracker_rmin2) / 2" zstart="ForwardTracker_z2" nmodules="(int) ForwardTrackerModules" dz="0.011*mm" module="SiTrackerForwardModule2"/>
+            </layer>
+            <layer id="3">
+                <ring r="(ForwardTracker_rmax + ForwardTracker_rmin3) / 2" zstart="ForwardTracker_z3" nmodules="(int) ForwardTrackerModules" dz="0.011*mm" module="SiTrackerForwardModule3"/>
+            </layer>
+        </detector>
+
+        <comment>Calorimeters</comment>
+        <detector id="6" name="EcalBarrel" type="EcalBarrel" readout="EcalBarrelHits" vis="EcalBarrelVis" calorimeterType="EM_BARREL">
+            <comment>EM Calorimeter Barrel</comment>
+            <dimensions numsides="(int) CaloSides" rmin="EcalBarrel_rmin" z="EcalBarrel_zmax*2" />
+            <staves vis="EcalBarrelStaveVis"/>
+            <layer repeat="1">
+                <slice material = "Silicon" thickness = "0.032*cm" sensitive = "yes" limits="cal_limits" />
+                <slice material = "Copper"  thickness = "0.005*cm" />
+                <slice material = "Kapton"  thickness = "0.030*cm" />
+                <slice material = "Air"     thickness = "0.033*cm" />
+            </layer>      
+            <layer repeat="20">
+                <slice material = "TungstenDens24" thickness = "0.25*cm" />
+                <slice material = "Air"     thickness = "0.025*cm" />
+                <slice material = "Silicon" thickness = "0.032*cm" sensitive = "yes" limits="cal_limits" />
+                <slice material = "Copper"  thickness = "0.005*cm" />
+                <slice material = "Kapton"  thickness = "0.030*cm" />
+                <slice material = "Air"     thickness = "0.033*cm" />
+            </layer>
+            <layer repeat="10">
+                <slice material = "TungstenDens24" thickness = "0.5*cm" />
+                <slice material = "Air"     thickness = "0.025*cm" />
+                <slice material = "Silicon" thickness = "0.032*cm" sensitive = "yes" limits="cal_limits" />
+                <slice material = "Copper"  thickness = "0.005*cm" />
+                <slice material = "Kapton"  thickness = "0.030*cm" />
+                <slice material = "Air"     thickness = "0.033*cm" />
+            </layer>
+        </detector>
+
+        <detector id="7" name="EcalEndcap" type="PolyhedraEndcapCalorimeter2" reflect="true" readout="EcalEndcapHits" vis="EcalEndcapVis" calorimeterType="EM_ENDCAP">
+            <comment>EM Calorimeter Endcaps</comment>
+            <dimensions numsides="(int) CaloSides" zmin="EcalEndcap_zmin" rmin="EcalEndcap_rmin" rmax="EcalEndcap_rmax" />
+            <layer repeat="1">
+                <slice material = "Silicon" thickness = "0.032*cm" sensitive = "yes" limits="cal_limits" />
+                <slice material = "Copper"  thickness = "0.005*cm" />
+                <slice material = "Kapton"  thickness = "0.030*cm" />
+                <slice material = "Air"     thickness = "0.033*cm" />
+            </layer>       
+            <layer repeat="20">
+                <slice material = "TungstenDens24" thickness = "0.25*cm" />
+                <slice material = "Air"     thickness = "0.025*cm" />
+                <slice material = "Silicon" thickness = "0.032*cm" sensitive = "yes" limits="cal_limits" />
+                <slice material = "Copper"  thickness = "0.005*cm" />
+                <slice material = "Kapton"  thickness = "0.030*cm" />
+                <slice material = "Air"     thickness = "0.033*cm" />
+            </layer>
+            <layer repeat="10">
+                <slice material = "TungstenDens24" thickness = "0.5*cm" />
+                <slice material = "Air"     thickness = "0.025*cm" />
+                <slice material = "Silicon" thickness = "0.032*cm" sensitive = "yes" limits="cal_limits" />
+                <slice material = "Copper"  thickness = "0.005*cm" />
+                <slice material = "Kapton"  thickness = "0.030*cm" />
+                <slice material = "Air"     thickness = "0.033*cm" />
+            </layer>
+        </detector>
+
+        <detector id="8" name="HcalBarrel" type="PolyhedraBarrelCalorimeter2" readout="HcalBarrelHits" vis="HcalBarrelVis" calorimeterType="HAD_BARREL" gap="0.*cm" material="Steel235">
+            <comment>Hadron Calorimeter Barrel</comment>
+            <dimensions numsides="(int) CaloSides" rmin="HcalBarrel_rmin" z="EcalBarrel_zmax*2"/>
+            <staves vis="HcalBarrelStavesVis"/>
+            <layer repeat="(int) HcalBarrel_layers">
+                <slice material = "TungstenDens24" thickness = "1.00*cm" />
+                <slice material = "Polystyrene" thickness = "0.50*cm" sensitive = "yes" limits="cal_limits" vis="HcalBarrelSensorVis"/>       
+                <slice material = "Air" thickness = "0.15*cm" />
+            </layer>
+        </detector>
+
+
+        <detector id="9" name="HcalEndcap" type="PolyhedraEndcapCalorimeter2" readout="HcalEndcapHits" vis="HcalEndcapVis" calorimeterType="HAD_ENDCAP">
+            <comment>Hadron Calorimeter Endcaps</comment>
+            <dimensions numsides="(int) CaloSides" zmin="HcalEndcap_zmin" rmin="HcalEndcap_rmin" rmax="HcalEndcap_rmax" />
+            <layer repeat="(int) HcalEndcap_layers">
+                <slice material = "Steel235" thickness = "2.0*cm" />
+                <slice material = "Polystyrene" thickness = "0.50*cm" sensitive = "yes" limits="cal_limits" />        
+                <slice material = "Air" thickness = "0.15*cm" />
+            </layer>
+        </detector>
+
+        <detector id="10" name="HcalPlug" type="PolyhedraEndcapCalorimeter2" readout="HcalPlugHits" vis="MuonEndcapVis">
+            <comment>Hadron Calorimeter Plug</comment>
+            <dimensions numsides="(int) CaloSides" zmin="SolenoidCoilOuterZ" rmin="MuonEndcap_rmin" rmax="HcalEndcap_rmax" />
+            <layer repeat="1" vis="MuonEndcapLayerVis">
+                <slice material="Iron" thickness="15.0*cm"  vis="MuonEndcapAbsorberVis"/>
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="RPCGasDefault" thickness="0.2*cm" sensitive="yes"  vis="MuonEndcapSensorVis"/>
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="RPCGasDefault" thickness="0.2*cm" sensitive="yes"  vis="MuonEndcapSensorVis"/>
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Air" thickness="1.0*cm" />
+                <slice material="Iron" thickness="9.0*cm"  vis="MuonEndcapAbsorberVis"/>
+            </layer>
+        </detector>
+
+
+        <detector id="11" name="MuonBarrel" type="PolyhedraBarrelCalorimeter2" readout="MuonBarrelHits" vis="MuonBarrelVis" calorimeterType="MUON_BARREL" gap="0.*cm" material="Steel235">
+            <comment>Muon Calorimeter Barrel</comment>
+            <dimensions numsides="(int) MuonSides" rmin="MuonBarrel_rmin" z="MuonBarrel_zmax * 2"/>
+            <staves vis="MuonBarrelStavesVis"/>
+
+            <layer repeat="1" vis="MuonBarrelLayerVis">
+            	<slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="RPCGasDefault" thickness="0.2*cm" sensitive="yes" vis="MuonBarrelSensorVis"/>
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="RPCGasDefault" thickness="0.2*cm" sensitive="yes" vis="MuonBarrelSensorVis"/>
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Air" thickness="1.0*cm" />
+                <slice material="Iron" thickness="5.0*cm" vis="MuonBarrelAbsorberVis"/>
+           </layer>
+           <layer repeat="1" vis="MuonBarrelLayerVis">
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="RPCGasDefault" thickness="0.2*cm" sensitive="yes" vis="MuonBarrelSensorVis"/>
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="RPCGasDefault" thickness="0.2*cm" sensitive="yes" vis="MuonBarrelSensorVis"/>
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Air" thickness="1.0*cm" />
+                <slice material="Iron" thickness="20.0*cm" vis="MuonBarrelAbsorberVis"/>
+            </layer>
+            <layer repeat="(int) MuonBarrel_layers" vis="MuonBarrelLayerVis">
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="RPCGasDefault" thickness="0.2*cm" sensitive="yes" vis="MuonBarrelSensorVis"/>
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="RPCGasDefault" thickness="0.2*cm" sensitive="yes" vis="MuonBarrelSensorVis"/>
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Air" thickness="1.0*cm" />
+                <slice material="Iron" thickness="10.0*cm" vis="MuonBarrelAbsorberVis"/>
+            </layer>
+
+            <layer repeat="1" vis="MuonBarrelLayerVis">
+            	<slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="RPCGasDefault" thickness="0.2*cm" sensitive="yes" vis="MuonBarrelSensorVis"/>
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="RPCGasDefault" thickness="0.2*cm" sensitive="yes" vis="MuonBarrelSensorVis"/>
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Air" thickness="1.0*cm" />
+            	<slice material="Iron" thickness="20.0*cm" vis="MuonBarrelAbsorberVis"/>
+            </layer>
+        </detector>
+
+        <detector id="12" name="MuonEndcap" type="PolyhedraEndcapCalorimeter2" readout="MuonEndcapHits" reflect="true" vis="MuonEndcapVis" calorimeterType="MUON_ENDCAP">
+            <comment>Muon Calorimeter Endcaps</comment>
+            <dimensions numsides="(int) MuonSides" zmin="MuonEndcap_zmin" rmin="MuonEndcap_rmin" rmax="MuonEndcap_rmax" />
+            <layer repeat="(int) MuonEndcap_layers" vis="MuonEndcapLayerVis">
+                <slice material="Iron" thickness="10.0*cm"  vis="MuonEndcapAbsorberVis"/>
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="RPCGasDefault" thickness="0.2*cm" sensitive="yes"  vis="MuonEndcapSensorVis"/>
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="RPCGasDefault" thickness="0.2*cm" sensitive="yes"  vis="MuonEndcapSensorVis"/>
+                <slice material="PyrexGlass" thickness="0.2*cm" />
+                <slice material="Air" thickness="0.35*cm" />
+                <slice material="Aluminum" thickness="0.1*cm" />
+                <slice material="Air" thickness="1.0*cm" />
+            </layer>
+        </detector>
+
+        <detector id="13" name="LumiCal" reflect="true" type="CylindricalEndcapCalorimeter" readout="LumiCalHits" vis="LumiCalVis" calorimeterType="LUMI">
+            <comment>Luminosity Calorimeter</comment>
+            <dimensions inner_r = "LumiCal_rmin" inner_z = "LumiCal_zmin" outer_r = "LumiCal_rmax" />
+            <layer repeat="20" >
+                <slice material = "TungstenDens24" thickness = "0.271*cm" />
+                <slice material = "Silicon" thickness = "0.032*cm" sensitive = "yes" />
+                <slice material = "Copper"  thickness = "0.005*cm" />
+                <slice material = "Kapton"  thickness = "0.030*cm" />
+                <slice material = "Air"     thickness = "0.033*cm" />
+            </layer>
+            <layer repeat="15" >
+                <slice material = "TungstenDens24" thickness = "0.543*cm" />
+                <slice material = "Silicon" thickness = "0.032*cm" sensitive = "yes" />
+                <slice material = "Copper"  thickness = "0.005*cm" />
+                <slice material = "Kapton"  thickness = "0.030*cm" />
+                <slice material = "Air"     thickness = "0.033*cm" />
+            </layer>
+        </detector>
+
+        <detector name="LumiReadout_Forward" type="PolyconeSupport" vis="LumiCalVis">
+        	<comment>Readout for Luminosity Calorimeter</comment>
+        	<material name="G10"/>
+        	<zplane rmin="LumiCal_rmax" rmax="LumiCalElectronics_rmax" z="LumiCal_zmin"/>
+        	<zplane rmin="LumiCal_rmax" rmax="LumiCalElectronics_rmax" z="LumiCal_zmin+LumiCal_thickness"/>
+        </detector>
+        
+      	<detector name="LumiReadout_Backward" type="PolyconeSupport" vis="LumiCalVis">
+        	<comment>Readout for Luminosity Calorimeter</comment>
+        	<material name="G10"/>
+        	<zplane rmin="LumiCal_rmax" rmax="LumiCalElectronics_rmax" z="-LumiCal_zmin"/>
+        	<zplane rmin="LumiCal_rmax" rmax="LumiCalElectronics_rmax" z="-(LumiCal_zmin+LumiCal_thickness)"/>
+        </detector>
+        
+        <detector id="14" name="BeamCal" reflect="true" type="ForwardDetector" readout="BeamCalHits" vis="LumiCalVis" calorimeterType="BEAM">
+            <comment>Beam Calorimeter</comment>
+            <dimensions outer_r="BeamCal_rmax" inner_r="0.0*cm" inner_z="BeamCal_zmin" />
+            <beampipe crossing_angle="CrossingAngle" outgoing_r="OutgoingBP_radius + 0.05*cm" incoming_r="IncomingBP_radius + 0.05*cm" />
+            <layer repeat="50">
+                <slice material="TungstenDens24" thickness="0.271*cm" />
+                <slice material="Silicon" thickness="0.032*cm" sensitive="yes" />
+                <slice material="Copper" thickness="0.005*cm" />
+                <slice material="Kapton" thickness="0.030*cm" />
+                <slice material="Air" thickness="0.033*cm" />
+            </layer>
+        </detector>
+
+        <comment>Dead material and supports</comment>
+        <comment>Beampipe</comment> 
+        <detector name="Beampipe" type="PolyconeSupport" insideTrackingVolume="true" vis="BeamPipeVis">
+            <comment>Central Be Beampipe</comment>
+            <material name="Beryllium"/>
+            <zplane rmin="CentralBeamPipe_rmin" rmax="CentralBeamPipe_rmax" z="-CentralBeamPipe_zmax"/>
+            <zplane rmin="CentralBeamPipe_rmin" rmax="CentralBeamPipe_rmax" z="CentralBeamPipe_zmax" />
+        </detector>
+        <detector name="SteelConeZbackward" type="PolyconeSupport" insideTrackingVolume="true" vis="BeamPipeVis">
+      		<material name="Iron"/>            
+      		<zplane rmin="BeamPipe_rmax - BeamPipe_thickness"
+            		rmax="BeamPipe_rmax"
+            		z="-tracking_region_zmax" /> 
+      		<zplane rmin="CentralBeamPipe_rmin"
+            		rmax="(BeamPipe_zmin - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax"
+            		z="-BeamPipe_zmin" />
+           	<zplane rmin="CentralBeamPipe_rmin"
+           			rmax="CentralBeamPipe_rmax"
+           			z="-CentralBeamPipe_zmax"/>
+    	</detector>
+    	<detector name="SteelConeZbackward2" type="PolyconeSupport" insideTrackingVolume="false" vis="BeamPipeVis">
+      		<material name="Iron"/>            
+            <zplane rmin="BeamPipe_rmax - BeamPipe_thickness"
+            		rmax="BeamPipe_rmax"
+            		z="-(tracking_region_zmax + 0.01*cm)" /> 
+            <zplane rmin="BeamPipe_rmax - BeamPipe_thickness"
+            		rmax="BeamPipe_rmax"
+            		z="- BeamPipe_zmax" />
+            <zplane rmin="LumiCal_rmin - 2*BeamPipe_endThickness"
+            		rmax="BeamPipe_rmax"
+            		z="- (LumiCal_zmin - 2*BeamPipe_endThickness)" />
+            <zplane rmin="LumiCal_rmin - 2*BeamPipe_endThickness"
+            		rmax="LumiCal_rmin - BeamPipe_endThickness"
+            		z="- (LumiCal_zmin - BeamPipe_endThickness)" />
+			<zplane rmin="LumiCal_rmin - 2*BeamPipe_endThickness"
+            		rmax="LumiCal_rmin - BeamPipe_endThickness"
+            		z="- (ForwardMask_zmin - BeamPipe_endThickness)" />
+    	</detector>
+		<detector name="SteelConeZforward" type="PolyconeSupport" insideTrackingVolume="true" vis="BeamPipeVis">
+      		<material name="Iron"/>
+      		<zplane rmin="CentralBeamPipe_rmin"
+           			rmax="CentralBeamPipe_rmax"
+           			z="CentralBeamPipe_zmax"/>            
+      		<zplane rmin="CentralBeamPipe_rmin"
+            		rmax="(BeamPipe_zmin - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax"
+            		z="BeamPipe_zmin" /> 
+      		<zplane rmin="BeamPipe_rmax - BeamPipe_thickness"
+            		rmax="BeamPipe_rmax"
+            		z="tracking_region_zmax" />
+    	</detector>
+    	<detector name="SteelConeZforward2" type="PolyconeSupport" insideTrackingVolume="false" vis="BeamPipeVis">
+      		<material name="Iron"/>            
+            <zplane rmin="BeamPipe_rmax - BeamPipe_thickness"
+            		rmax="BeamPipe_rmax"
+            		z="tracking_region_zmax + 0.01*cm" /> 
+            <zplane rmin="BeamPipe_rmax - BeamPipe_thickness"
+            		rmax="BeamPipe_rmax"
+            		z="BeamPipe_zmax" />
+            <zplane rmin="LumiCal_rmin - 2*BeamPipe_endThickness"
+            		rmax="BeamPipe_rmax"
+            		z="LumiCal_zmin - 2*BeamPipe_endThickness" />
+            <zplane rmin="LumiCal_rmin - 2*BeamPipe_endThickness"
+            		rmax="LumiCal_rmin - BeamPipe_endThickness"
+            		z="LumiCal_zmin - BeamPipe_endThickness" />
+			<zplane rmin="LumiCal_rmin - 2*BeamPipe_endThickness"
+            		rmax="LumiCal_rmin - BeamPipe_endThickness"
+            		z="ForwardMask_zmin - BeamPipe_endThickness" />
+    	</detector>
+
+        <detector name="NorthIncomingBeampipe" type="TubeSegment" vis="BeamPipeVis">
+            <material name="Iron" />
+            <tubs rmin="IncomingBP_radius - IncomingBP_thickness" rmax="IncomingBP_radius" zhalf="(MuonEndcap_zmax - ForwardMask_zmin)/2.0" />
+            <position x="-((ForwardMask_zmin + MuonEndcap_zmax)/2.0*tan(CrossingAngle/rad)/2.0)" y="0" z="(ForwardMask_zmin + MuonEndcap_zmax)/2.0" />
+            <rotation x="0.0" y="CrossingAngle/2.0/rad" z="0.0" />
+        </detector>
+
+
+        <detector name="SouthIncomingBeampipe" type="TubeSegment" vis="BeamPipeVis">
+            <material name="Iron" />
+            <tubs rmin="IncomingBP_radius - IncomingBP_thickness" rmax="IncomingBP_radius" zhalf="(MuonEndcap_zmax - ForwardMask_zmin)/2.0" />
+            <position x="-((ForwardMask_zmin + MuonEndcap_zmax)/2.0*tan(CrossingAngle/rad)/2.0)" y="0" z="- (ForwardMask_zmin + MuonEndcap_zmax)/2.0" />
+            <rotation x="0.0" y="-CrossingAngle/2.0/rad" z="0.0" />
+        </detector>
+
+        <detector name="NorthOutgoingBeampipe" type="TubeSegment" vis="BeamPipeVis">
+            <material name="Iron" />
+            <tubs rmin="OutgoingBP_radius - OutgoingBP_thickness" rmax="OutgoingBP_radius" zhalf="(MuonEndcap_zmax - ForwardMask_zmin)/2.0" />
+            <position x="((ForwardMask_zmin + MuonEndcap_zmax)/2.0*tan(CrossingAngle/rad)/2.0)" y="0" z="(ForwardMask_zmin + MuonEndcap_zmax)/2.0" />
+            <rotation x="0.0" y="-CrossingAngle/2.0/rad" z="0.0" />
+        </detector>
+
+        <detector name="SouthOutgoingBeampipe" type="TubeSegment" vis="BeamPipeVis">
+            <material name="Iron" />
+            <tubs rmin="OutgoingBP_radius - OutgoingBP_thickness" rmax="OutgoingBP_radius" zhalf="(MuonEndcap_zmax - ForwardMask_zmin)/2.0" />
+            <position x="((ForwardMask_zmin + MuonEndcap_zmax)/2.0*tan(CrossingAngle/rad)/2.0)" y="0" z="- (ForwardMask_zmin + MuonEndcap_zmax)/2.0" />
+            <rotation x="0.0" y="CrossingAngle/2.0/rad" z="0.0" />
+        </detector>
+
+        <!-- Beam pipe liner is not needed, use thicker conical steel pipe instead
+        <detector name="BeamPipeLiner" type="PolyconeSupport" insideTrackingVolume="true" vis="InvisibleNoDaughters">
+            <comment>BeamPipe Liner to shield bremsstrahlung photons</comment>
+            <material name="Titanium"/>
+            <zplane rmin="(tracking_region_zmax - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax - BeamPipe_thickness - BeamPipeLiner_thickness" rmax="(tracking_region_zmax - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax - BeamPipe_thickness" z="-tracking_region_zmax" />
+            <zplane rmin="CentralBeamPipe_rmax - BeamPipe_thickness - BeamPipeLiner_thickness" rmax="CentralBeamPipe_rmax - BeamPipe_thickness"  z="-(CentralBeamPipe_zmax + 0.01*cm)"/>
+            <zplane rmin="CentralBeamPipe_rmin - BeamPipeLiner_thickness" rmax="CentralBeamPipe_rmin" z="-CentralBeamPipe_zmax"  />
+            <zplane rmin="CentralBeamPipe_rmin - BeamPipeLiner_thickness" rmax="CentralBeamPipe_rmin" z="CentralBeamPipe_zmax" />
+            <zplane rmin="CentralBeamPipe_rmax - BeamPipe_thickness - BeamPipeLiner_thickness" rmax="CentralBeamPipe_rmax - BeamPipe_thickness" z="CentralBeamPipe_zmax + 0.01*cm" />
+            <zplane rmin="(tracking_region_zmax - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax - BeamPipe_thickness - BeamPipeLiner_thickness" rmax="(tracking_region_zmax - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax - BeamPipe_thickness" z="tracking_region_zmax" />
+        </detector>
+        -->
+
+        <detector name="BeamPipeVacuum" type="PolyconeSupport" insideTrackingVolume="true" vis="InvisibleNoDaughters">
+            <comment>Vacuum inside beampipe</comment>
+            <material name="Vacuum"/>
+            <zplane rmin="0.*cm"
+            		rmax="BeamPipe_rmax - BeamPipe_thickness - BeamPipeLiner_thickness"
+            		z="-tracking_region_zmax" />
+            <zplane rmin="0.*cm"
+            		rmax="CentralBeamPipe_rmin - BeamPipeLiner_thickness"
+            		z="-BeamPipe_zmin"  />
+            <zplane rmin="0.*cm"
+            		rmax="CentralBeamPipe_rmin - BeamPipeLiner_thickness"
+            		z="BeamPipe_zmin" />
+            <zplane rmin="0.*cm"
+            		rmax="BeamPipe_rmax - BeamPipe_thickness - BeamPipeLiner_thickness"
+            		z="tracking_region_zmax" />
+        </detector>
+        <detector name="ForwardVacuum" type="PolyconeSupport" insideTrackingVolume="false" vis="InvisibleNoDaughters">
+            <material name="Vacuum"/>
+            <zplane rmin="0.*cm"
+            		rmax="BeamPipe_rmax - BeamPipe_thickness"
+            		z="tracking_region_zmax + 0.01*cm" /> 
+            <zplane rmin="0.*cm"
+            		rmax="BeamPipe_rmax - BeamPipe_thickness"
+            		z="BeamPipe_zmax" />
+            <zplane rmin="0.*cm"
+            		rmax="LumiCal_rmin - 2*BeamPipe_endThickness"
+            		z="LumiCal_zmin - 2*BeamPipe_endThickness" />
+            <zplane rmin="0.*cm"
+            		rmax="LumiCal_rmin - 2*BeamPipe_endThickness"
+            		z="LumiCal_zmin - BeamPipe_endThickness" />
+	    <zplane rmin="0.*cm"
+            		rmax="LumiCal_rmin - 2*BeamPipe_endThickness"
+            		z="ForwardMask_zmin - BeamPipe_endThickness" />
+        </detector> 
+        <detector name="BackwardVacuum" type="PolyconeSupport" insideTrackingVolume="false" vis="InvisibleNoDaughters">
+            <material name="Vacuum"/>
+            <zplane rmin="0.*cm"
+            		rmax="BeamPipe_rmax - BeamPipe_thickness"
+            		z="- (tracking_region_zmax + 0.01*cm)" /> 
+            <zplane rmin="0.*cm"
+            		rmax="BeamPipe_rmax - BeamPipe_thickness"
+            		z="- BeamPipe_zmax" />
+            <zplane rmin="0.*cm"
+            		rmax="LumiCal_rmin - 2*BeamPipe_endThickness"
+            		z="- (LumiCal_zmin - 2*BeamPipe_endThickness)" />
+            <zplane rmin="0.*cm"
+            		rmax="LumiCal_rmin - 2*BeamPipe_endThickness"
+            		z="- (LumiCal_zmin - BeamPipe_endThickness)" />
+			<zplane rmin="0.*cm"
+            		rmax="LumiCal_rmin - 2*BeamPipe_endThickness"
+            		z="- (ForwardMask_zmin - BeamPipe_endThickness)" />
+        </detector>
+        <comment>Vertex Detector Supports and Readout</comment>
+        <detector name="VertexBarrelSupports" type="MultiLayerTracker" vis="SupportVis" reflect="true">
+            <comment>Double-walled Carbon Fiber support tube</comment>
+            <layer id="6" inner_r = "16.87*cm" outer_z = "89.48*cm">
+                <slice material = "CarbonFiber" thickness ="VXD_CF_support"/>
+            </layer>
+            <layer id="7" inner_r = "18.42*cm" outer_z = "89.48*cm">
+                <slice material = "CarbonFiber" thickness ="VXD_CF_support"/>
+            </layer>
+        </detector>
+        <detector name="VertexEndSupports" type="DiskTracker" reflect="true" vis="SupportVis">    
+            <layer id="7" inner_r = "(86.88*cm - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax + VertexEndcap_offset" inner_z = "86.88*cm" outer_r = "16.87*cm">
+                <slice material = "CarbonFiber" thickness = "VXD_CF_support" />
+            </layer>
+            <layer id="8" inner_r = "(89.43*cm - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax + VertexEndcap_offset" inner_z = "89.43*cm" outer_r = "16.87*cm">
+                <slice material = "CarbonFiber" thickness = "VXD_CF_support" />
+            </layer>
+        </detector>
+        <detector name="VertexReadout" type="DiskTracker" reflect="true" vis="CableVis">
+            <comment>Readout and Cabling</comment>
+            <layer id="1" inner_r = "VertexBarrel_r1" outer_r="VertexBarrel_r1 + 0.02*cm"  inner_z= "VertexBarrel_zmax + 0.1*cm" vis="GreenVis">
+                <slice material = "G10" thickness ="0.5*cm"/>
+            </layer>
+            <layer id="2" inner_r = "VertexBarrel_r2" outer_r="VertexBarrel_r2 + 0.02*cm" inner_z="VertexBarrel_zmax + 0.1*cm" vis = "BlueVis">
+                <slice material = "G10" thickness ="0.5*cm"/>
+            </layer>
+            <layer id="3" inner_r = "VertexBarrel_r3" outer_r="VertexBarrel_r3 + 0.02*cm"  inner_z="VertexBarrel_zmax + 0.1*cm" vis="RedVis">
+                <slice material = "G10" thickness ="0.5*cm"/>
+            </layer>
+            <layer id="4" inner_r = "VertexBarrel_r4" outer_r = "VertexBarrel_r4 + 0.02*cm"  inner_z= "VertexBarrel_zmax + 0.1*cm">
+                <slice material = "G10" thickness ="0.5*cm"/>
+            </layer>
+            <layer id="5" inner_r = "VertexBarrel_r5" outer_r = "VertexBarrel_r5 + 0.02*cm"  inner_z= "VertexBarrel_zmax + 0.1*cm">
+                <slice material = "G10" thickness ="0.5*cm"/>
+            </layer>
+            <layer id="6" inner_r = "VertexBarrel_r1 - 0.1*cm" outer_r = "VertexBarrel_r2"  inner_z= "VertexBarrel_zmax + 0.6*cm">
+                <slice material = "Copper" thickness ="0.0057*cm"/>
+            </layer>
+            <layer id="7" inner_r = "VertexBarrel_r2 - 0.01*cm" outer_r = "VertexBarrel_r3"  inner_z= "VertexBarrel_zmax + 0.6*cm">
+                <slice material = "Copper" thickness ="0.0031*cm"/>
+            </layer>
+            <layer id="8" inner_r = "VertexBarrel_r3 - 0.01*cm" outer_r = "VertexBarrel_r4"  inner_z= "VertexBarrel_zmax + 0.6*cm">
+                <slice material = "Copper" thickness ="0.0016*cm"/>
+            </layer>
+            <layer id="9" inner_r = "VertexBarrel_r4 - 0.01*cm" outer_r = "VertexBarrel_r5"  inner_z= "VertexBarrel_zmax + 0.6*cm">
+                <slice material = "Copper" thickness ="0.0007*cm"/>
+            </layer>
+            <layer id="10" inner_r = "VertexEndcap_rmin1 - 0.1*cm"  outer_r = "VertexEndcap_rmin1 - 0.01*cm" inner_z = "VertexEndcap_z1 - 0.1*cm">
+                <slice material = "G10" thickness = "0.02*cm" />
+            </layer>
+            <layer id="11" inner_r = "VertexEndcap_rmin2 - 0.1*cm"  outer_r = "VertexEndcap_rmin2 - 0.01*cm" inner_z = "VertexEndcap_z2 - 0.1*cm">
+                <slice material = "G10" thickness = "0.02*cm" />
+            </layer>
+            <layer id="12" inner_r = "VertexEndcap_rmin3 - 0.1*cm"  outer_r = "VertexEndcap_rmin3 - 0.01*cm" inner_z = "VertexEndcap_z3 - 0.1*cm">
+                <slice material = "G10" thickness = "0.02*cm" />
+            </layer>
+            <layer id="13" inner_r = "VertexEndcap_rmin4 - 0.1*cm"  outer_r = "VertexEndcap_rmin4 - 0.01*cm" inner_z = "VertexEndcap_z4 - 0.1*cm">
+                <slice material = "G10" thickness = "0.02*cm" />
+            </layer>
+            <layer id="14" inner_r = "VertexEndcap_rmax + 0.01*cm"  outer_r = "VertexEndcap_rmax + 0.5*cm" inner_z = "VertexEndcap_z1 - 0.1*cm">
+                <slice material = "G10" thickness = "0.02*cm" />
+            </layer>
+            <layer id="15" inner_r = "VertexEndcap_rmax + 0.01*cm"  outer_r = "VertexEndcap_rmax + 0.5*cm" inner_z = "VertexEndcap_z2 - 0.1*cm">
+                <slice material = "G10" thickness = "0.02*cm" />
+            </layer>
+            <layer id="16" inner_r = "VertexEndcap_rmax + 0.01*cm"  outer_r = "VertexEndcap_rmax + 0.5*cm" inner_z = "VertexEndcap_z3 - 0.1*cm">
+                <slice material = "G10" thickness = "0.02*cm" />
+            </layer>
+            <layer id="17" inner_r = "VertexEndcap_rmax + 0.01*cm"  outer_r = "VertexEndcap_rmax + 0.5*cm" inner_z = "VertexEndcap_z4 - 0.1*cm">
+                <slice material = "G10" thickness = "0.02*cm" />
+            </layer>
+        </detector>
+        <detector name="VXDcableZforwardBarrel" type="PolyconeSupport" insideTrackingVolume="true" vis="CableVis">
+        	<material name="Copper"/>
+        	<zplane rmin = "(CentralBeamPipe_rmax)"
+        			rmax = "(CentralBeamPipe_rmax + VertexCableThickness)"
+        			z="VertexBarrel_zmax + 0.61*cm"/>
+        	<zplane rmin = "(CentralBeamPipe_rmax)"
+        			rmax = "(CentralBeamPipe_rmax + VertexCableThickness)"
+        			z="CentralBeamPipe_zmax"/>
+        </detector>
+        <detector name="VXDcableZbackwardBarrel" type="PolyconeSupport" insideTrackingVolume="true" vis="CableVis">
+        	<material name="Copper"/>
+        	<zplane rmin = "(CentralBeamPipe_rmax)"
+        			rmax = "(CentralBeamPipe_rmax + VertexCableThickness)"
+        			z="-(VertexBarrel_zmax + 0.61*cm)"/>
+        	<zplane rmin = "(CentralBeamPipe_rmax)"
+        			rmax = "(CentralBeamPipe_rmax + VertexCableThickness)"
+        			z="-CentralBeamPipe_zmax"/>
+        </detector> 
+        <detector name="VXDcableZbackwardOuter" type="PolyconeSupport" insideTrackingVolume="true" vis="CableVis">
+            <material name="Copper"/>
+            <zplane rmin = "((tracking_region_zmax - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax)" 
+            		rmax = "((tracking_region_zmax - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax + 0.004*cm)" 
+            		z="-tracking_region_zmax" />
+            <zplane rmin="(VertexService_zmax + 0.01*cm - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax"
+            		rmax="(VertexService_zmax + 0.01*cm - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax + 0.01*cm"
+            		z="-(VertexService_zmax + 0.01*cm)"/>
+        </detector>
+        <detector name="VXDcableZbackwardInner" type="PolyconeSupport" insideTrackingVolume="true" vis="CableVis">
+            <material name="Copper"/>
+            <zplane rmin="CentralBeamPipe_rmax"
+            		rmax="CentralBeamPipe_rmax + VertexCableThickness"
+            		z="-(CentralBeamPipe_zmax)"/>
+            <zplane rmin="(VertexService_zmin - 0.01*cm - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax"
+            		rmax="(VertexService_zmin - 0.01*cm - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax + VertexCableThickness"
+            		z="-(VertexService_zmin - 0.01*cm)"/>
+        </detector>
+        <detector name="VXDcableZforwardOuter" type="PolyconeSupport" insideTrackingVolume="true" vis="CableVis">
+            <material name="Copper"/>
+            <zplane rmin = "((tracking_region_zmax - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax)" 
+            		rmax = "((tracking_region_zmax - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax + 0.004*cm)" 
+            		z="tracking_region_zmax" />
+            <zplane rmin="(VertexService_zmax + 0.01*cm - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax"
+            		rmax="(VertexService_zmax + 0.01*cm - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax + 0.01*cm"
+            		z="VertexService_zmax + 0.01*cm"/>
+        </detector>
+        <detector name="VXDcableZforwardInner" type="PolyconeSupport" insideTrackingVolume="true" vis="CableVis">
+            <material name="Copper"/>
+            <zplane rmin="(VertexService_zmin - 0.01*cm - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax"
+            		rmax="(VertexService_zmin - 0.01*cm - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax + VertexCableThickness"
+            		z="VertexService_zmin - 0.01*cm"/>
+            <zplane rmin="CentralBeamPipe_rmax"
+            		rmax="CentralBeamPipe_rmax + VertexCableThickness"
+            		z="CentralBeamPipe_zmax"/>
+        </detector>
+        <detector name="VXDserviceZbackward" type="PolyconeSupport" insideTrackingVolume="true" vis="CableVis">
+            <material name="G10"/>
+            <zplane rmin = "(VertexService_zmax - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax"
+            		rmax="(VertexService_zmax - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax + VertexServiceThickness"
+            		z="-VertexService_zmax"/>
+            <zplane rmin = "(VertexService_zmin - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax"
+            		rmax="(VertexService_zmin - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax + VertexServiceThickness"
+            		z="-VertexService_zmin"/>
+        </detector>
+        <detector name="VXDserviceZforward" type="PolyconeSupport" insideTrackingVolume="true" vis="CableVis">
+            <material name="G10"/>
+           	<zplane rmin = "(VertexService_zmin - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax"
+           			rmax="(VertexService_zmin - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax + VertexServiceThickness"
+           			z="VertexService_zmin"/>
+            <zplane rmin = "(VertexService_zmax - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax"
+            		rmax="(VertexService_zmax - CentralBeamPipe_zmax)*bp_cone_slope + CentralBeamPipe_rmax + VertexServiceThickness"
+            		z="VertexService_zmax"/>
+        </detector>
+
+        <comment>Outer Tracker Supports and Readout</comment>
+        <detector name="TrackerBarrelSupports" type="MultiLayerTracker" reflect="true">
+            <comment>Barrels</comment>
+            <layer id="1" inner_r="206.0*mm" outer_z="577.328*mm">
+                <slice material="CarbonFiber" thickness="0.05*cm" />
+                <slice material="Rohacell31_15percent" thickness="0.8075*cm" />
+                <slice material="CarbonFiber" thickness="0.05*cm" />
+            </layer>
+            <layer id="2" inner_r="456.0*mm" outer_z="749.781*mm">
+                <slice material="CarbonFiber" thickness="0.05*cm" />
+                <slice material="Rohacell31_15percent" thickness="0.8075*cm" />
+                <slice material="CarbonFiber" thickness="0.05*cm" />
+            </layer>
+            <layer id="3" inner_r="706.0*mm" outer_z="1013.802*mm">
+                <slice material= "CarbonFiber" thickness = "0.05*cm" />
+                <slice material= "Rohacell31_15percent" thickness="0.8075*cm" />
+                <slice material= "CarbonFiber" thickness="0.05*cm" />
+            </layer>
+            <layer id="4" inner_r="956.0*mm" outer_z="1272.251*mm">
+                <slice material="CarbonFiber" thickness="0.05*cm" />
+                <slice material="Rohacell31_15percent" thickness="0.8075*cm" />
+                <slice material="CarbonFiber" thickness="0.05*cm" />
+            </layer>
+            <layer id="5" inner_r="1206.0*mm" outer_z="1535.676*mm">
+                <slice material="CarbonFiber" thickness="0.05*cm" />
+                <slice material="Rohacell31_15percent" thickness="0.8075*cm" />
+                <slice material="CarbonFiber" thickness="0.05*cm" />
+            </layer>
+        </detector>
+
+        <comment>Dished endcap disks</comment>
+        <detector name="SiTrackerEndcapSupport1" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="CarbonFiber"/>
+            <zplane rmin="510.448*mm" rmax="510.448*mm" z="(750.417-0.001)*mm" />
+            <zplane rmin="504.711*mm" rmax="510.448*mm" z="(750.919-0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="211.970*mm" z="(777.034-0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="(777.535-0.001)*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport2" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="Rohacell31"/>
+            <zplane rmin="510.448*mm" rmax="510.448*mm" z="750.919*mm" />
+            <zplane rmin="438.449*mm" rmax="510.448*mm" z="757.218*mm" />
+            <zplane rmin="206.234*mm" rmax="278.187*mm" z="777.535*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="783.834*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport3" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="CarbonFiber"/>
+            <zplane rmin="510.448*mm" rmax="510.448*mm" z="(757.218+0.001)*mm" />
+            <zplane rmin="504.711*mm" rmax="510.448*mm" z="(757.720+0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="211.970*mm" z="(783.834+0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="(784.336+0.001)*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport4" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="CarbonFiber"/>
+            <zplane rmin="763.796*mm" rmax="763.796*mm" z="(1014.437-0.001)*mm" />
+            <zplane rmin="758.059*mm" rmax="763.796*mm" z="(1014.939-0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="211.970*mm" z="(1063.219-0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="(1063.721-0.001)*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport5" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="Rohacell31"/>
+            <zplane rmin="763.796*mm" rmax="763.796*mm" z="1014.939*mm" />
+            <zplane rmin="691.797*mm" rmax="763.796*mm" z="1021.238*mm" />
+            <zplane rmin="206.234*mm" rmax="278.187*mm" z="1063.721*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="1070.020*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport6" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="CarbonFiber"/>
+            <zplane rmin="763.796*mm" rmax="763.796*mm" z="(1021.238+0.001)*mm" />
+            <zplane rmin="758.059*mm" rmax="763.796*mm" z="(1021.740+0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="211.970*mm" z="(1070.020+0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="(1070.522+0.001)*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport7" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="CarbonFiber"/>
+            <zplane rmin="1015.748*mm" rmax="1015.748*mm" z="(1272.885-0.001)*mm" />
+            <zplane rmin="1010.011*mm" rmax="1015.748*mm" z="(1273.387-0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="211.970*mm" z="(1343.711-0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="(1344.213-0.001)*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport8" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="Rohacell31"/>
+            <zplane rmin="1015.748*mm" rmax="1015.748*mm" z="1273.387*mm" />
+            <zplane rmin="943.753*mm" rmax="1015.748*mm" z="1279.686*mm" />
+            <zplane rmin="206.234*mm" rmax="278.187*mm" z="1344.213*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="1350.512*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport9" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="CarbonFiber"/>
+            <zplane rmin="1015.748*mm" rmax="1015.748*mm" z="(1279.686+0.001)*mm" />
+            <zplane rmin="1010.011*mm" rmax="1015.748*mm" z="(1280.188+0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="211.970*mm" z="(1350.512+0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="(1351.014+0.001)*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport10" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="CarbonFiber"/>
+            <zplane rmin="1263.808*mm" rmax="1263.808*mm" z="(1536.560-0.001)*mm" />
+            <zplane rmin="1258.071*mm" rmax="1263.808*mm" z="(1537.062-0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="211.970*mm" z="(1629.089-0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="(1629.591-0.001)*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport11" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="Rohacell31"/>
+            <zplane rmin="1263.808*mm" rmax="1263.808*mm" z="1537.062*mm" />
+            <zplane rmin="1191.810*mm" rmax="1263.808*mm" z="1543.361*mm" />
+            <zplane rmin="206.234*mm" rmax="278.187*mm" z="1629.591*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="1635.890*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport12" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="CarbonFiber"/>
+            <zplane rmin="1263.808*mm" rmax="1263.808*mm" z="(1543.361+0.001)*mm" />
+            <zplane rmin="1258.071*mm" rmax="1263.808*mm" z="(1543.863+0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="211.970*mm" z="(1635.890+0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="(1636.392+0.001)*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport1Reflect" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="CarbonFiber"/>
+            <zplane rmin="510.448*mm" rmax="510.448*mm" z="(-750.417+0.001)*mm" />
+            <zplane rmin="504.711*mm" rmax="510.448*mm" z="(-750.919+0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="211.970*mm" z="(-777.034+0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="(-777.535+0.001)*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport2Reflect" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="Rohacell31"/>
+            <zplane rmin="510.448*mm" rmax="510.448*mm" z="-750.919*mm" />
+            <zplane rmin="438.449*mm" rmax="510.448*mm" z="-757.218*mm" />
+            <zplane rmin="206.234*mm" rmax="278.187*mm" z="-777.535*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="-783.834*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport3Reflect" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="CarbonFiber"/>
+            <zplane rmin="510.448*mm" rmax="510.448*mm" z="(-757.218-0.001)*mm" />
+            <zplane rmin="504.711*mm" rmax="510.448*mm" z="(-757.720-0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="211.970*mm" z="(-783.834-0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="(-784.336-0.001)*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport4Reflect" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="CarbonFiber"/>
+            <zplane rmin="763.796*mm" rmax="763.796*mm" z="(-1014.437+0.001)*mm" />
+            <zplane rmin="758.059*mm" rmax="763.796*mm" z="(-1014.939+0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="211.970*mm" z="(-1063.219+0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="(-1063.721+0.001)*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport5Reflect" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="Rohacell31"/>
+            <zplane rmin="763.796*mm" rmax="763.796*mm" z="-1014.939*mm" />
+            <zplane rmin="691.797*mm" rmax="763.796*mm" z="-1021.238*mm" />
+            <zplane rmin="206.234*mm" rmax="278.187*mm" z="-1063.721*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="-1070.020*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport6Reflect" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="CarbonFiber"/>
+            <zplane rmin="763.796*mm" rmax="763.796*mm" z="(-1021.238-0.001)*mm" />
+            <zplane rmin="758.059*mm" rmax="763.796*mm" z="(-1021.740-0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="211.970*mm" z="(-1070.020-0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="(-1070.522-0.001)*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport7Reflect" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="CarbonFiber"/>
+            <zplane rmin="1015.748*mm" rmax="1015.748*mm" z="(-1272.885+0.001)*mm" />
+            <zplane rmin="1010.011*mm" rmax="1015.748*mm" z="(-1273.387+0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="211.970*mm" z="(-1343.711+0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="(-1344.213+0.001)*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport8Reflect" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="Rohacell31"/>
+            <zplane rmin="1015.748*mm" rmax="1015.748*mm" z="-1273.387*mm" />
+            <zplane rmin="943.753*mm" rmax="1015.748*mm" z="-1279.686*mm" />
+            <zplane rmin="206.234*mm" rmax="278.187*mm" z="-1344.213*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="-1350.512*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport9Reflect" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="CarbonFiber"/>
+            <zplane rmin="1015.748*mm" rmax="1015.748*mm" z="(-1279.686-0.001)*mm" />
+            <zplane rmin="1010.011*mm" rmax="1015.748*mm" z="(-1280.188-0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="211.970*mm" z="(-1350.512-0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="(-1351.014-0.001)*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport10Reflect" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="CarbonFiber"/>
+            <zplane rmin="1263.808*mm" rmax="1263.808*mm" z="(-1536.560+0.001)*mm" />
+            <zplane rmin="1258.071*mm" rmax="1263.808*mm" z="(-1537.062+0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="211.970*mm" z="(-1629.089+0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="(-1629.591+0.001)*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport11Reflect" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="Rohacell31"/>
+            <zplane rmin="1263.808*mm" rmax="1263.808*mm" z="-1537.062*mm" />
+            <zplane rmin="1191.810*mm" rmax="1263.808*mm" z="-1543.361*mm" />
+            <zplane rmin="206.234*mm" rmax="278.187*mm" z="-1629.591*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="-1635.890*mm" />
+        </detector>
+        <detector name="SiTrackerEndcapSupport12Reflect" type="PolyconeSupport" insideTrackingVolume="true" vis="SupportVis">
+            <material name="CarbonFiber"/>
+            <zplane rmin="1263.808*mm" rmax="1263.808*mm" z="(-1543.361-0.001)*mm" />
+            <zplane rmin="1258.071*mm" rmax="1263.808*mm" z="(-1543.863-0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="211.970*mm" z="(-1635.890-0.001)*mm" />
+            <zplane rmin="206.234*mm" rmax="206.234*mm" z="(-1636.392-0.001)*mm" />
+        </detector>        
+        <detector name="TrackerReadout" type="DiskTracker" reflect="true" vis="GreenVis">
+            <comment>Readouts</comment>
+            <layer id="1" inner_r="25.7*cm" inner_z="590.402*mm" outer_r="45.6*cm">
+                <slice material="G10" thickness="0.057*cm" />
+                <slice material="Copper" thickness="0.0038*cm" />
+            </layer>
+            <layer id="2" inner_r="51.0*cm" inner_z="762.854*mm" outer_r="70.6*cm">
+                <slice material = "G10" thickness="0.102*cm" />
+                <slice material = "Copper" thickness="0.0068*cm" />
+            </layer>
+            <layer id="3" inner_r="76.3*cm" inner_z="1026.874*mm" outer_r="95.6*cm">
+                <slice material="G10" thickness="0.108*cm" />
+                <slice material="Copper" thickness="0.0072*cm" />
+            </layer>
+            <layer id="4" inner_r="101.3*cm" inner_z="1285.322*mm" outer_r="120.6*cm">
+                <slice material="G10" thickness="0.186*cm" />
+                <slice material="Copper" thickness="0.0124*cm" />
+            </layer>
+            <layer id="5" inner_r= "101.3*cm" inner_z="1610.0*mm" outer_r="120.6*cm">
+                <slice material="G10" thickness="0.246*cm" />
+                <slice material="Copper" thickness="0.0164*cm" />
+            </layer>
+        </detector>
+        <comment>Masks and Shielding</comment>
+        <detector name="LumiShielding_Forward" type="PolyconeSupport" insideTrackingVolume="false" vis="TungstenShieldingVis">
+        	<material name="TungstenDens24" />
+        	<zplane rmin="LumiCal_rmin" rmax="LumiCalElectronics_rmax" z="LumiCal_zmax"/>
+        	<zplane rmin="LumiCal_rmin" rmax="LumiCalElectronics_rmax" z="LumiCal_zmax+ForwardShielding_thickness"/>
+        </detector>
+        <detector name="LumiShielding_Backward" type="PolyconeSupport" insideTrackingVolume="false" vis="TungstenShieldingVis">
+        	<material name="TungstenDens24" />
+        	<zplane rmin="LumiCal_rmin" rmax="LumiCalElectronics_rmax" z="-LumiCal_zmax"/>
+        	<zplane rmin="LumiCal_rmin" rmax="LumiCalElectronics_rmax" z="-(LumiCal_zmax+ForwardShielding_thickness)"/>
+        </detector>
+        <detector name="ECalShielding_Forward" type="PolyconeSupport" insideTrackingVolume="false" vis="TungstenShieldingVis">
+        	<material name="TungstenDens24" />
+        	<zplane rmin="LumiCalElectronics_rmax" rmax="HcalEndcap_rmin-SupportTube_thickness-1.0*cm" z="HcalEndcap_zmin"/>
+        	<zplane rmin="LumiCalElectronics_rmax" rmax="HcalEndcap_rmin-SupportTube_thickness-1.0*cm" z="HcalEndcap_zmin+ForwardShielding_thickness"/>
+        </detector>
+        <detector name="ECalShielding_Backward" type="PolyconeSupport" insideTrackingVolume="false" vis="TungstenShieldingVis">
+        	<material name="TungstenDens24" />
+        	<zplane rmin="LumiCalElectronics_rmax" rmax="HcalEndcap_rmin-SupportTube_thickness-1.0*cm" z="-HcalEndcap_zmin"/>
+        	<zplane rmin="LumiCalElectronics_rmax" rmax="HcalEndcap_rmin-SupportTube_thickness-1.0*cm" z="-(HcalEndcap_zmin+ForwardShielding_thickness)"/>
+        </detector>
+        <detector name="ShieldingTube_Forward" type="PolyconeSupport" insideTrackingVolume="false" vis="TungstenShieldingVis">
+        	<material name="TungstenDens24" />
+        	<zplane rmin="HcalEndcap_rmin - SupportTube_thickness - ForwardShielding_thickness - 1.0*cm"
+        			rmax="HcalEndcap_rmin - SupportTube_thickness - 1.0*cm"
+        			z="HcalEndcap_zmin + ForwardShielding_thickness"/>
+        	<zplane rmin="HcalEndcap_rmin - SupportTube_thickness - ForwardShielding_thickness - 1.0*cm"
+        			rmax="HcalEndcap_rmin - SupportTube_thickness - 1.0*cm"
+        			z="HcalEndcap_zmax"/>
+		</detector>
+		<detector name="ShieldingTube_Backward" type="PolyconeSupport" insideTrackingVolume="false" vis="TungstenShieldingVis">
+        	<material name="TungstenDens24" />
+        	<zplane rmin="HcalEndcap_rmin - SupportTube_thickness - ForwardShielding_thickness - 1.0*cm"
+        			rmax="HcalEndcap_rmin - SupportTube_thickness - 1.0*cm"
+        			z="-(HcalEndcap_zmin + ForwardShielding_thickness)"/>
+        	<zplane rmin="HcalEndcap_rmin - SupportTube_thickness - ForwardShielding_thickness - 1.0*cm"
+        			rmax="HcalEndcap_rmin - SupportTube_thickness - 1.0*cm"
+        			z="-HcalEndcap_zmax"/>
+		</detector>
+		<detector name="SupportTube_Forward" type="PolyconeSupport" insideTrackingVolume="false" vis="SupportTubeVis">
+        	<material name="Steel235" />
+        	<zplane rmin="HcalEndcap_rmin - 2*SupportTube_thickness"
+        			rmax="HcalEndcap_rmin - SupportTube_thickness"
+        			z="HcalEndcap_zmin"/>
+        	<zplane rmin="HcalEndcap_rmin - 2*SupportTube_thickness"
+        			rmax="HcalEndcap_rmin - SupportTube_thickness"
+        			z="MuonEndcap_zmax"/>
+		</detector>
+		<detector name="SupportTube_Backward" type="PolyconeSupport" insideTrackingVolume="false" vis="SupportTubeVis">
+        	<material name="Steel235" />
+        	<zplane rmin="HcalEndcap_rmin - 2*SupportTube_thickness"
+        			rmax="HcalEndcap_rmin - SupportTube_thickness"
+        			z="-HcalEndcap_zmin"/>
+        	<zplane rmin="HcalEndcap_rmin - 2*SupportTube_thickness"
+        			rmax="HcalEndcap_rmin - SupportTube_thickness"
+        			z="-MuonEndcap_zmax"/>
+		</detector>
+		<detector name="AntiSolenoid_Forward" type="PolyconeSupport" insideTrackingVolume="false" vis="AntiSolenoidVis">
+			<material name="Steel235" />
+        	<zplane rmin="HcalEndcap_rmin + 1.0*cm"
+        			rmax="MuonEndcap_rmin - 1.0*cm"
+        			z="HcalEndcap_zmax + 1.0*cm"/>
+        	<zplane rmin="HcalEndcap_rmin + 1.0*cm"
+        			rmax="MuonEndcap_rmin - 1.0*cm"
+        			z="MuonEndcap_zmax"/>
+        </detector>
+        <detector name="AntiSolenoid_Backward" type="PolyconeSupport" insideTrackingVolume="false" vis="AntiSolenoidVis">
+			<material name="Steel235" />
+        	<zplane rmin="HcalEndcap_rmin + 1.0*cm"
+        			rmax="MuonEndcap_rmin - 1.0*cm"
+        			z="-(HcalEndcap_zmax + 1.0*cm)"/>
+        	<zplane rmin="HcalEndcap_rmin + 1.0*cm"
+        			rmax="MuonEndcap_rmin - 1.0*cm"
+        			z="-MuonEndcap_zmax"/>
+        </detector>
+
+        <detector name="ForwardLowZ" type="ForwardDetector" vis="TungstenShieldingVis" reflect="true">
+            <dimensions outer_r="BeamCal_rmax" inner_r="0.0*cm" inner_z="ForwardMask_zmin" />
+            <beampipe crossing_angle="CrossingAngle" outgoing_r="OutgoingBP_radius + 0.05*cm" incoming_r="IncomingBP_radius + 0.05*cm" />
+            <layer repeat="1">
+                <slice material = "Graphite" thickness = "ForwardMask_thickness" sensitive = "no" />
+            </layer>
+        </detector>
+  
+        <comment>Solenoid</comment>
+        <detector name="SolenoidCoilBarrel" type="MultiLayerTracker" insideTrackingVolume="false" reflect="true">
+            <layer id="1" inner_r="SolenoidBarrelInnerRadius" outer_z="SolenoidBarrelOuterZ" vis="SolenoidBarrelLayerVis">
+                <slice material="Steel235" thickness="SolenoidBarrelInnerCryostatThickness" />
+                <slice material="Vacuum"   thickness="SolenoidBarrelInnerAirgapThickness" />
+            </layer>
+            <layer id="2" inner_r="SolenoidBarrelConductorInnerRadius" outer_z="SolenoidCoilOuterZ" vis="SolenoidBarrelLayerVis">
+                <slice material="Aluminum" thickness="SolenoidBarrelAlConductorThickness" />
+                <slice material="Aluminum" thickness="SolenoidBarrelQuenchbackThickness" />
+            </layer>
+            <layer id="3" inner_r="SolenoidBarrelOuterCryostatInnerRadius" outer_z="SolenoidBarrelOuterZ" vis="SolenoidBarrelLayerVis">
+                <slice material="Vacuum"   thickness="SolenoidBarrelOuterAirgapThickness" />
+                <slice material="Steel235" thickness="SolenoidBarrelOuterCryostatThickness" />
+            </layer>
+        </detector>
+
+        <detector name="SolenoidCoilEnds" type="DiskTracker" reflect="true" insideTrackingVolume="false">
+            <layer id="1" inner_r="SolenoidBarrelInnerRadius" inner_z="SolenoidBarrelOuterZ" outer_r="SolenoidBarrelOuterRadius" vis="SolenoidCoilEndsVis">
+                <slice material="Steel235" thickness="SolenoidEndcapCryostatThickness" />
+            </layer>
+        </detector>
+
+    </detectors>
+
+    <readouts>
+        <readout name="SiTrackerEndcapHits">
+            <id>system:8,barrel:3,layer:4,module:14,sensor:2,side:32:-2,strip:20</id>
+        </readout>        
+        <readout name="SiTrackerBarrelHits">
+            <id>system:8,barrel:3,layer:4,module:14,sensor:2,side:32:-2,strip:20</id>
+        </readout>
+        <readout name="SiVertexBarrelHits">
+            <id>system:8,barrel:3,layer:4,module:14,sensor:2,side:32:-2,strip:24</id>
+        </readout>
+        <readout name="SiVertexEndcapHits">
+            <id>system:8,barrel:3,layer:4,wedge:6,module:6,sensor:1,side:32:-2,strip:26</id>
+        </readout>
+        <readout name="EcalBarrelHits">
+            <segmentation type="CartesianGridXY" grid_size_x="3.5" grid_size_y="3.5" />
+            <id>system:8,barrel:3,module:4,layer:6,slice:5,x:32:-16,y:-16</id>
+        </readout>        
+        <readout name="EcalEndcapHits">
+            <segmentation type="CartesianGridXY" grid_size_x="3.5" grid_size_y="3.5" />
+            <id>system:8,barrel:3,module:4,layer:6,slice:5,x:32:-16,y:-16</id>
+        </readout>
+        <readout name="HcalBarrelHits">
+            <segmentation type="CartesianGridXY" grid_size_x="3.0*cm" grid_size_y="3.0*cm" />
+            <id>system:8,barrel:3,module:6,layer:8,slice:5,x:32:-16,y:-16</id>
+        </readout>
+        <readout name="HcalEndcapHits">
+            <segmentation type="CartesianGridXY" grid_size_x="3.0*cm" grid_size_y="3.0*cm" />
+            <id>system:8,barrel:3,module:4,layer:8,slice:5,x:32:-16,y:-16</id>
+        </readout>
+        <readout name="HcalPlugHits">
+            <segmentation type="CartesianGridXY" grid_size_x="3.0*cm" grid_size_y="3.0*cm" />
+            <id>system:8,barrel:3,module:4,layer:8,slice:5,x:32:-16,y:-16</id>
+        </readout>
+        <readout name="MuonBarrelHits">
+            <segmentation type="CartesianGridXY" grid_size_x="3.0*cm" grid_size_y="3.0*cm" />
+            <id>system:8,barrel:3,module:4,layer:8,slice:5,x:32:-16,y:-16</id>
+        </readout>
+        <readout name="MuonEndcapHits">
+            <segmentation type="CartesianGridXY" grid_size_x="3.0*cm" grid_size_y="3.0*cm" />
+            <id>system:8,barrel:3,module:4,layer:8,slice:5,x:32:-16,y:-16</id>
+        </readout>
+        <readout name="SiTrackerForwardHits">
+            <id>system:8,barrel:3,layer:4,wedge:6,module:6,sensor:1,side:32:-2,strip:28</id>
+        </readout>
+        <readout name="LumiCalHits">
+            <segmentation type="CartesianGridXY" grid_size_x="0.35*cm" grid_size_y="0.35*cm" />
+            <id>system:8,barrel:3,layer:8,slice:8,x:32:-16,y:-16</id>
+        </readout>
+        <readout name="BeamCalHits">
+            <segmentation type="CartesianGridXY" grid_size_x="0.35*cm" grid_size_y="0.35*cm" />
+            <id>system:8,layer:8,barrel:3,layer:8,slice:5,x:32:-16,y:-16</id>
+        </readout>
+    </readouts>
+
+    <fields>
+        <field name="GlobalSolenoid" type="solenoid" 
+          inner_field="5.0*tesla"
+          outer_field="-1.5*tesla" 
+          zmax="SolenoidCoilOuterZ"
+          outer_radius="SolenoidalFieldRadius">
+        </field>
+        <field name="GlobalDipole" type="DipoleMagnet" 
+          rmax="50*cm"
+          zmin="0*cm"
+          zmax="50*cm">
+	  <dipole_coeff>1.0*tesla</dipole_coeff>
+	  <dipole_coeff>0.1*tesla/pow(cm,1)</dipole_coeff>
+	  <dipole_coeff>0.01*tesla/pow(cm,2)</dipole_coeff>
+        </field>
+        <field name="GlobalMultipole" type="MultipoleMagnet" Z="50*cm">
+	  <position x="30*cm" y="20*cm" z="40*cm"/>
+	  <rotation x="1" y="0" z="0"/>
+	  <coefficient coefficient="1.0*tesla" skew="0.1*tesla"/>
+	  <coefficient coefficient="2.0*tesla/cm" skew="0.2*tesla/cm"/>
+	  <coefficient coefficient="3.0*tesla/cm" skew="0.3*tesla/cm/cm"/>
+	  <coefficient coefficient="4.0*tesla/cm" skew="0.4*tesla/cm/cm/cm"/>
+	  <shape type="Box" dx="5*cm" dy="10*cm" dz="20*cm"/>
+        </field>
+    </fields>
+</lccdd>
-- 
GitLab