From ad0abf4cee6bd0604961e861338b9478c35fb865 Mon Sep 17 00:00:00 2001
From: Andrea Dell'Acqua <andrea.dellacqua@cern.ch>
Date: Mon, 9 Mar 2020 13:22:07 +0100
Subject: [PATCH] GMX/GMXPlugin first import

---
 CMakeLists.txt                                |   11 +
 GMXPlugin/CMakeLists.txt                      |   37 +
 GMXPlugin/build/CMakeCache.txt                |  395 +
 .../CMakeFiles/3.16.2/CMakeCXXCompiler.cmake  |   88 +
 .../3.16.2/CMakeDetermineCompilerABI_CXX.bin  |  Bin 0 -> 4288 bytes
 .../build/CMakeFiles/3.16.2/CMakeSystem.cmake |   15 +
 .../CompilerIdCXX/CMakeCXXCompilerId.cpp      |  660 ++
 .../CMakeFiles/3.16.2/CompilerIdCXX/a.out     |  Bin 0 -> 8600 bytes
 .../CMakeDirectoryInformation.cmake           |   16 +
 GMXPlugin/build/CMakeFiles/CMakeOutput.log    |  151 +
 .../CMakeFiles/GMXPlugin.dir/CXX.includecache |   26 +
 .../CMakeFiles/GMXPlugin.dir/DependInfo.cmake |   34 +
 .../build/CMakeFiles/GMXPlugin.dir/build.make |  107 +
 .../GMXPlugin.dir/cmake_clean.cmake           |   12 +
 .../CMakeFiles/GMXPlugin.dir/depend.internal  |    5 +
 .../CMakeFiles/GMXPlugin.dir/depend.make      |    5 +
 .../build/CMakeFiles/GMXPlugin.dir/flags.make |   10 +
 .../build/CMakeFiles/GMXPlugin.dir/link.txt   |    1 +
 .../CMakeFiles/GMXPlugin.dir/progress.make    |    3 +
 .../GMXPlugin.dir/src/GMXPlugin.cxx.o         |  Bin 0 -> 65264 bytes
 GMXPlugin/build/CMakeFiles/Makefile.cmake     |  116 +
 GMXPlugin/build/CMakeFiles/Makefile2          |  106 +
 GMXPlugin/build/CMakeFiles/Progress/1         |    1 +
 GMXPlugin/build/CMakeFiles/Progress/2         |    1 +
 GMXPlugin/build/CMakeFiles/Progress/count.txt |    1 +
 .../build/CMakeFiles/TargetDirectories.txt    |    7 +
 GMXPlugin/build/CMakeFiles/cmake.check_cache  |    1 +
 GMXPlugin/build/CMakeFiles/progress.marks     |    1 +
 GMXPlugin/build/Makefile                      |  228 +
 GMXPlugin/build/cmake_install.cmake           |   72 +
 GMXPlugin/data/HelloWorld.gmx                 |   22 +
 GMXPlugin/data/StripBlobRev_5433bf5.xml       | 7279 +++++++++++++++++
 GMXPlugin/data/geomodel.dtd                   |  245 +
 GMXPlugin/src/GMXPlugin.cxx                   |   74 +
 GeoModelXml/CMakeLists.txt                    |   56 +
 GeoModelXml/GeoModelXml/AddbranchProcessor.h  |   17 +
 GeoModelXml/GeoModelXml/AssemblyProcessor.h   |   30 +
 .../GeoModelXml/AssemblyrefProcessor.h        |   20 +
 GeoModelXml/GeoModelXml/Element2GeoItem.h     |   34 +
 .../GeoModelXml/Element2GeoItemRegistry.h     |   30 +
 GeoModelXml/GeoModelXml/ElementProcessor.h    |   25 +
 GeoModelXml/GeoModelXml/GeoNodeList.h         |    8 +
 GeoModelXml/GeoModelXml/Gmx2Geo.h             |   65 +
 GeoModelXml/GeoModelXml/GmxInterface.h        |   34 +
 GeoModelXml/GeoModelXml/GmxUtil.h             |  115 +
 GeoModelXml/GeoModelXml/IndexProcessor.h      |   17 +
 GeoModelXml/GeoModelXml/LogvolProcessor.h     |   32 +
 GeoModelXml/GeoModelXml/LogvolrefProcessor.h  |   20 +
 GeoModelXml/GeoModelXml/MakeElement.h         |   19 +
 GeoModelXml/GeoModelXml/MakeMaterial.h        |   19 +
 GeoModelXml/GeoModelXml/MakeRotation.h        |   23 +
 GeoModelXml/GeoModelXml/MakeTransformation.h  |   19 +
 .../GeoModelXml/MakeTransformationref.h       |   18 +
 GeoModelXml/GeoModelXml/MakeTranslation.h     |   24 +
 GeoModelXml/GeoModelXml/MulticopyProcessor.h  |   23 +
 GeoModelXml/GeoModelXml/PositionIndex.h       |   52 +
 GeoModelXml/GeoModelXml/ProcessorRegistry.h   |   30 +
 GeoModelXml/GeoModelXml/SensitiveId.h         |   18 +
 GeoModelXml/GeoModelXml/StrictErrorHandler.h  |   39 +
 GeoModelXml/GeoModelXml/TransformProcessor.h  |   19 +
 .../GeoModelXml/TransformrefProcessor.h       |   20 +
 GeoModelXml/GeoModelXml/createdomdocument.h   |   12 +
 GeoModelXml/GeoModelXml/shape/AddPlane.h      |   18 +
 GeoModelXml/GeoModelXml/shape/MakeBox.h       |   20 +
 GeoModelXml/GeoModelXml/shape/MakeCons.h      |   20 +
 .../GeoModelXml/shape/MakeGenericTrap.h       |   20 +
 .../GeoModelXml/shape/MakeIntersection.h      |   20 +
 GeoModelXml/GeoModelXml/shape/MakePara.h      |   20 +
 GeoModelXml/GeoModelXml/shape/MakePcon.h      |   20 +
 GeoModelXml/GeoModelXml/shape/MakePgon.h      |   20 +
 GeoModelXml/GeoModelXml/shape/MakeShaperef.h  |   20 +
 .../GeoModelXml/shape/MakeSubtraction.h       |   20 +
 GeoModelXml/GeoModelXml/shape/MakeTrap.h      |   20 +
 GeoModelXml/GeoModelXml/shape/MakeTrd.h       |   20 +
 GeoModelXml/GeoModelXml/shape/MakeTube.h      |   20 +
 GeoModelXml/GeoModelXml/shape/MakeTubs.h      |   20 +
 GeoModelXml/GeoModelXml/shape/MakeUnion.h     |   20 +
 GeoModelXml/GeoModelXml/translate.h           |   18 +
 GeoModelXml/data/geomodel.dtd                 |  245 +
 GeoModelXml/oldCMakeLists.txt                 |   31 +
 GeoModelXml/src/AddPlane.cxx                  |   21 +
 GeoModelXml/src/AddbranchProcessor.cxx        |   32 +
 GeoModelXml/src/AssemblyProcessor.cxx         |  115 +
 GeoModelXml/src/AssemblyrefProcessor.cxx      |   65 +
 GeoModelXml/src/Element2GeoItem.cxx           |   64 +
 GeoModelXml/src/Element2GeoItemRegistry.cxx   |   24 +
 GeoModelXml/src/ElementProcessor.cxx          |   53 +
 GeoModelXml/src/Gmx2Geo.cxx                   |  375 +
 GeoModelXml/src/GmxInterface.cxx              |  114 +
 GeoModelXml/src/GmxUtil.cxx                   |  209 +
 GeoModelXml/src/IndexProcessor.cxx            |   34 +
 GeoModelXml/src/LogvolProcessor.cxx           |  207 +
 GeoModelXml/src/LogvolrefProcessor.cxx        |   65 +
 GeoModelXml/src/MakeBox.cxx                   |   30 +
 GeoModelXml/src/MakeCons.cxx                  |   30 +
 GeoModelXml/src/MakeElement.cxx               |   51 +
 GeoModelXml/src/MakeGenericTrap.cxx           |   48 +
 GeoModelXml/src/MakeIntersection.cxx          |   83 +
 GeoModelXml/src/MakeMaterial.cxx              |  215 +
 GeoModelXml/src/MakePara.cxx                  |   30 +
 GeoModelXml/src/MakePcon.cxx                  |   50 +
 GeoModelXml/src/MakePgon.cxx                  |   50 +
 GeoModelXml/src/MakeRotation.cxx              |   34 +
 GeoModelXml/src/MakeShaperef.cxx              |   60 +
 GeoModelXml/src/MakeSubtraction.cxx           |   79 +
 GeoModelXml/src/MakeTransformation.cxx        |   59 +
 GeoModelXml/src/MakeTransformationref.cxx     |   59 +
 GeoModelXml/src/MakeTranslation.cxx           |   33 +
 GeoModelXml/src/MakeTrap.cxx                  |   30 +
 GeoModelXml/src/MakeTrd.cxx                   |   30 +
 GeoModelXml/src/MakeTube.cxx                  |   30 +
 GeoModelXml/src/MakeTubs.cxx                  |   30 +
 GeoModelXml/src/MakeUnion.cxx                 |   76 +
 GeoModelXml/src/MulticopyProcessor.cxx        |  269 +
 GeoModelXml/src/PositionIndex.cxx             |  132 +
 GeoModelXml/src/ProcessorRegistry.cxx         |   20 +
 GeoModelXml/src/StrictErrorHandler.cxx        |   66 +
 GeoModelXml/src/TransformProcessor.cxx        |   74 +
 GeoModelXml/src/TransformrefProcessor.cxx     |   61 +
 GeoModelXml/src/createdomdocument.cxx         |  119 +
 GeoModelXml/src/decompress.cxx                |   60 +
 README.md                                     |    3 +-
 cmake/GMXConfig.cmake                         |    3 +
 123 files changed, 14450 insertions(+), 2 deletions(-)
 create mode 100644 CMakeLists.txt
 create mode 100644 GMXPlugin/CMakeLists.txt
 create mode 100644 GMXPlugin/build/CMakeCache.txt
 create mode 100644 GMXPlugin/build/CMakeFiles/3.16.2/CMakeCXXCompiler.cmake
 create mode 100755 GMXPlugin/build/CMakeFiles/3.16.2/CMakeDetermineCompilerABI_CXX.bin
 create mode 100644 GMXPlugin/build/CMakeFiles/3.16.2/CMakeSystem.cmake
 create mode 100644 GMXPlugin/build/CMakeFiles/3.16.2/CompilerIdCXX/CMakeCXXCompilerId.cpp
 create mode 100755 GMXPlugin/build/CMakeFiles/3.16.2/CompilerIdCXX/a.out
 create mode 100644 GMXPlugin/build/CMakeFiles/CMakeDirectoryInformation.cmake
 create mode 100644 GMXPlugin/build/CMakeFiles/CMakeOutput.log
 create mode 100644 GMXPlugin/build/CMakeFiles/GMXPlugin.dir/CXX.includecache
 create mode 100644 GMXPlugin/build/CMakeFiles/GMXPlugin.dir/DependInfo.cmake
 create mode 100644 GMXPlugin/build/CMakeFiles/GMXPlugin.dir/build.make
 create mode 100644 GMXPlugin/build/CMakeFiles/GMXPlugin.dir/cmake_clean.cmake
 create mode 100644 GMXPlugin/build/CMakeFiles/GMXPlugin.dir/depend.internal
 create mode 100644 GMXPlugin/build/CMakeFiles/GMXPlugin.dir/depend.make
 create mode 100644 GMXPlugin/build/CMakeFiles/GMXPlugin.dir/flags.make
 create mode 100644 GMXPlugin/build/CMakeFiles/GMXPlugin.dir/link.txt
 create mode 100644 GMXPlugin/build/CMakeFiles/GMXPlugin.dir/progress.make
 create mode 100644 GMXPlugin/build/CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.o
 create mode 100644 GMXPlugin/build/CMakeFiles/Makefile.cmake
 create mode 100644 GMXPlugin/build/CMakeFiles/Makefile2
 create mode 100644 GMXPlugin/build/CMakeFiles/Progress/1
 create mode 100644 GMXPlugin/build/CMakeFiles/Progress/2
 create mode 100644 GMXPlugin/build/CMakeFiles/Progress/count.txt
 create mode 100644 GMXPlugin/build/CMakeFiles/TargetDirectories.txt
 create mode 100644 GMXPlugin/build/CMakeFiles/cmake.check_cache
 create mode 100644 GMXPlugin/build/CMakeFiles/progress.marks
 create mode 100644 GMXPlugin/build/Makefile
 create mode 100644 GMXPlugin/build/cmake_install.cmake
 create mode 100644 GMXPlugin/data/HelloWorld.gmx
 create mode 100644 GMXPlugin/data/StripBlobRev_5433bf5.xml
 create mode 100644 GMXPlugin/data/geomodel.dtd
 create mode 100644 GMXPlugin/src/GMXPlugin.cxx
 create mode 100644 GeoModelXml/CMakeLists.txt
 create mode 100644 GeoModelXml/GeoModelXml/AddbranchProcessor.h
 create mode 100644 GeoModelXml/GeoModelXml/AssemblyProcessor.h
 create mode 100644 GeoModelXml/GeoModelXml/AssemblyrefProcessor.h
 create mode 100644 GeoModelXml/GeoModelXml/Element2GeoItem.h
 create mode 100644 GeoModelXml/GeoModelXml/Element2GeoItemRegistry.h
 create mode 100644 GeoModelXml/GeoModelXml/ElementProcessor.h
 create mode 100644 GeoModelXml/GeoModelXml/GeoNodeList.h
 create mode 100644 GeoModelXml/GeoModelXml/Gmx2Geo.h
 create mode 100644 GeoModelXml/GeoModelXml/GmxInterface.h
 create mode 100644 GeoModelXml/GeoModelXml/GmxUtil.h
 create mode 100644 GeoModelXml/GeoModelXml/IndexProcessor.h
 create mode 100644 GeoModelXml/GeoModelXml/LogvolProcessor.h
 create mode 100644 GeoModelXml/GeoModelXml/LogvolrefProcessor.h
 create mode 100644 GeoModelXml/GeoModelXml/MakeElement.h
 create mode 100644 GeoModelXml/GeoModelXml/MakeMaterial.h
 create mode 100644 GeoModelXml/GeoModelXml/MakeRotation.h
 create mode 100644 GeoModelXml/GeoModelXml/MakeTransformation.h
 create mode 100644 GeoModelXml/GeoModelXml/MakeTransformationref.h
 create mode 100644 GeoModelXml/GeoModelXml/MakeTranslation.h
 create mode 100644 GeoModelXml/GeoModelXml/MulticopyProcessor.h
 create mode 100644 GeoModelXml/GeoModelXml/PositionIndex.h
 create mode 100644 GeoModelXml/GeoModelXml/ProcessorRegistry.h
 create mode 100644 GeoModelXml/GeoModelXml/SensitiveId.h
 create mode 100644 GeoModelXml/GeoModelXml/StrictErrorHandler.h
 create mode 100644 GeoModelXml/GeoModelXml/TransformProcessor.h
 create mode 100644 GeoModelXml/GeoModelXml/TransformrefProcessor.h
 create mode 100644 GeoModelXml/GeoModelXml/createdomdocument.h
 create mode 100644 GeoModelXml/GeoModelXml/shape/AddPlane.h
 create mode 100644 GeoModelXml/GeoModelXml/shape/MakeBox.h
 create mode 100644 GeoModelXml/GeoModelXml/shape/MakeCons.h
 create mode 100644 GeoModelXml/GeoModelXml/shape/MakeGenericTrap.h
 create mode 100644 GeoModelXml/GeoModelXml/shape/MakeIntersection.h
 create mode 100644 GeoModelXml/GeoModelXml/shape/MakePara.h
 create mode 100644 GeoModelXml/GeoModelXml/shape/MakePcon.h
 create mode 100644 GeoModelXml/GeoModelXml/shape/MakePgon.h
 create mode 100644 GeoModelXml/GeoModelXml/shape/MakeShaperef.h
 create mode 100644 GeoModelXml/GeoModelXml/shape/MakeSubtraction.h
 create mode 100644 GeoModelXml/GeoModelXml/shape/MakeTrap.h
 create mode 100644 GeoModelXml/GeoModelXml/shape/MakeTrd.h
 create mode 100644 GeoModelXml/GeoModelXml/shape/MakeTube.h
 create mode 100644 GeoModelXml/GeoModelXml/shape/MakeTubs.h
 create mode 100644 GeoModelXml/GeoModelXml/shape/MakeUnion.h
 create mode 100644 GeoModelXml/GeoModelXml/translate.h
 create mode 100644 GeoModelXml/data/geomodel.dtd
 create mode 100644 GeoModelXml/oldCMakeLists.txt
 create mode 100644 GeoModelXml/src/AddPlane.cxx
 create mode 100644 GeoModelXml/src/AddbranchProcessor.cxx
 create mode 100644 GeoModelXml/src/AssemblyProcessor.cxx
 create mode 100644 GeoModelXml/src/AssemblyrefProcessor.cxx
 create mode 100644 GeoModelXml/src/Element2GeoItem.cxx
 create mode 100644 GeoModelXml/src/Element2GeoItemRegistry.cxx
 create mode 100644 GeoModelXml/src/ElementProcessor.cxx
 create mode 100644 GeoModelXml/src/Gmx2Geo.cxx
 create mode 100644 GeoModelXml/src/GmxInterface.cxx
 create mode 100644 GeoModelXml/src/GmxUtil.cxx
 create mode 100644 GeoModelXml/src/IndexProcessor.cxx
 create mode 100644 GeoModelXml/src/LogvolProcessor.cxx
 create mode 100644 GeoModelXml/src/LogvolrefProcessor.cxx
 create mode 100644 GeoModelXml/src/MakeBox.cxx
 create mode 100644 GeoModelXml/src/MakeCons.cxx
 create mode 100644 GeoModelXml/src/MakeElement.cxx
 create mode 100644 GeoModelXml/src/MakeGenericTrap.cxx
 create mode 100644 GeoModelXml/src/MakeIntersection.cxx
 create mode 100644 GeoModelXml/src/MakeMaterial.cxx
 create mode 100644 GeoModelXml/src/MakePara.cxx
 create mode 100644 GeoModelXml/src/MakePcon.cxx
 create mode 100644 GeoModelXml/src/MakePgon.cxx
 create mode 100644 GeoModelXml/src/MakeRotation.cxx
 create mode 100644 GeoModelXml/src/MakeShaperef.cxx
 create mode 100644 GeoModelXml/src/MakeSubtraction.cxx
 create mode 100644 GeoModelXml/src/MakeTransformation.cxx
 create mode 100644 GeoModelXml/src/MakeTransformationref.cxx
 create mode 100644 GeoModelXml/src/MakeTranslation.cxx
 create mode 100644 GeoModelXml/src/MakeTrap.cxx
 create mode 100644 GeoModelXml/src/MakeTrd.cxx
 create mode 100644 GeoModelXml/src/MakeTube.cxx
 create mode 100644 GeoModelXml/src/MakeTubs.cxx
 create mode 100644 GeoModelXml/src/MakeUnion.cxx
 create mode 100644 GeoModelXml/src/MulticopyProcessor.cxx
 create mode 100644 GeoModelXml/src/PositionIndex.cxx
 create mode 100644 GeoModelXml/src/ProcessorRegistry.cxx
 create mode 100644 GeoModelXml/src/StrictErrorHandler.cxx
 create mode 100644 GeoModelXml/src/TransformProcessor.cxx
 create mode 100644 GeoModelXml/src/TransformrefProcessor.cxx
 create mode 100644 GeoModelXml/src/createdomdocument.cxx
 create mode 100644 GeoModelXml/src/decompress.cxx
 create mode 100644 cmake/GMXConfig.cmake

diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 000000000..920ee0ff0
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,11 @@
+# Set up the project.
+cmake_minimum_required( VERSION 3.1 )
+project( "GMX" VERSION 1.0.0 LANGUAGES CXX )
+
+add_subdirectory(GeoModelXml)
+add_subdirectory(GMXPlugin)
+
+install(EXPORT GeoModelXml-export FILE GMX-GeoModelXml.cmake DESTINATION lib/cmake/GMX)
+
+install(FILES cmake/GMXConfig.cmake DESTINATION lib/cmake/GMX)
+
diff --git a/GMXPlugin/CMakeLists.txt b/GMXPlugin/CMakeLists.txt
new file mode 100644
index 000000000..6ab503240
--- /dev/null
+++ b/GMXPlugin/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+cmake_minimum_required( VERSION 3.1 )
+project( "GMXPlugin" VERSION 1.0.0 LANGUAGES CXX )
+
+# Set default build options.
+set( CMAKE_BUILD_TYPE "Release" CACHE STRING "CMake build mode to use" )
+set( CMAKE_CXX_STANDARD 14 CACHE STRING "C++ standard used for the build" )
+set( CMAKE_CXX_EXTENSIONS FALSE CACHE BOOL "(Dis)allow using GNU extensions" )
+
+find_package( GeoModelCore REQUIRED )
+find_package( GeoModelTools REQUIRED )
+find_package( XercesC REQUIRED )
+find_package( ZLIB REQUIRED )
+
+# Find the header and source files.
+file( GLOB SOURCES src/*.cxx )
+
+# Set up the library.
+add_library( GMXPlugin SHARED ${SOURCES} )
+target_link_libraries( GMXPlugin PUBLIC GeoModelCore::GeoModelKernel XercesC::XercesC GeoModelXml )
+target_include_directories( GMXPlugin PUBLIC
+   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+   $<INSTALL_INTERFACE:include> )
+source_group( "src" FILES ${SOURCES} )
+set_target_properties( GMXPlugin PROPERTIES
+   VERSION ${PROJECT_VERSION}
+   SOVERSION ${PROJECT_VERSION_MAJOR} )
+
+# Install the library.
+install( TARGETS GMXPlugin
+   EXPORT ${PROJECT_NAME}-export
+   LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+   COMPONENT Runtime
+   )
+# set ( PLUGIN_NAME  "GMXPlugin.so" )
+   
+# ADD_CUSTOM_TARGET( GMX_plugin ALL COMMAND ${CMAKE_COMMAND} -E create_symlink ${GMXPlugin} ${PLUGIN_NAME} )
diff --git a/GMXPlugin/build/CMakeCache.txt b/GMXPlugin/build/CMakeCache.txt
new file mode 100644
index 000000000..6accf9577
--- /dev/null
+++ b/GMXPlugin/build/CMakeCache.txt
@@ -0,0 +1,395 @@
+# This is the CMakeCache file.
+# For build in directory: /Users/purpie/gmx/GMXPlugin/build
+# It was generated by CMake: /usr/local/Cellar/cmake/3.16.2/bin/cmake
+# You can edit this file to change values found and used by cmake.
+# If you do not want to change any of the values, simply exit the editor.
+# If you do want to change a value, simply edit, save, and exit the editor.
+# The syntax for the file is as follows:
+# KEY:TYPE=VALUE
+# KEY is the name of a variable in the cache.
+# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!.
+# VALUE is the current value for the KEY.
+
+########################
+# EXTERNAL cache entries
+########################
+
+//Path to a program.
+CMAKE_ADDR2LINE:FILEPATH=CMAKE_ADDR2LINE-NOTFOUND
+
+//Path to a program.
+CMAKE_AR:FILEPATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar
+
+//Choose the type of build, options are: None Debug Release RelWithDebInfo
+// MinSizeRel ...
+CMAKE_BUILD_TYPE:STRING=
+
+//Enable/Disable color output during build.
+CMAKE_COLOR_MAKEFILE:BOOL=ON
+
+//CXX compiler
+CMAKE_CXX_COMPILER:FILEPATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
+
+//(Dis)allow using GNU extensions
+CMAKE_CXX_EXTENSIONS:BOOL=FALSE
+
+//Flags used by the CXX compiler during all build types.
+CMAKE_CXX_FLAGS:STRING=
+
+//Flags used by the CXX compiler during DEBUG builds.
+CMAKE_CXX_FLAGS_DEBUG:STRING=-g
+
+//Flags used by the CXX compiler during MINSIZEREL builds.
+CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
+
+//Flags used by the CXX compiler during RELEASE builds.
+CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
+
+//Flags used by the CXX compiler during RELWITHDEBINFO builds.
+CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
+
+//C++ standard used for the build
+CMAKE_CXX_STANDARD:STRING=14
+
+//Path to a program.
+CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND
+
+//Executable file format
+CMAKE_EXECUTABLE_FORMAT:STRING=MACHO
+
+//Flags used by the linker during all build types.
+CMAKE_EXE_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during DEBUG builds.
+CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during MINSIZEREL builds.
+CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during RELEASE builds.
+CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during RELWITHDEBINFO builds.
+CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Enable/Disable output of compile commands during generation.
+CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF
+
+//Path to a program.
+CMAKE_INSTALL_NAME_TOOL:FILEPATH=/usr/bin/install_name_tool
+
+//Install path prefix, prepended onto install directories.
+CMAKE_INSTALL_PREFIX:PATH=/usr/local
+
+//Path to a program.
+CMAKE_LINKER:FILEPATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld
+
+//Path to a program.
+CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make
+
+//Flags used by the linker during the creation of modules during
+// all build types.
+CMAKE_MODULE_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during the creation of modules during
+// DEBUG builds.
+CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during the creation of modules during
+// MINSIZEREL builds.
+CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during the creation of modules during
+// RELEASE builds.
+CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during the creation of modules during
+// RELWITHDEBINFO builds.
+CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Path to a program.
+CMAKE_NM:FILEPATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm
+
+//Path to a program.
+CMAKE_OBJCOPY:FILEPATH=CMAKE_OBJCOPY-NOTFOUND
+
+//Path to a program.
+CMAKE_OBJDUMP:FILEPATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/objdump
+
+//Build architectures for OSX
+CMAKE_OSX_ARCHITECTURES:STRING=
+
+//Minimum OS X version to target for deployment (at runtime); newer
+// APIs weak linked. Set to empty string for default value.
+CMAKE_OSX_DEPLOYMENT_TARGET:STRING=
+
+//The product will be built against the headers and libraries located
+// inside the indicated SDK.
+CMAKE_OSX_SYSROOT:STRING=
+
+//Value Computed by CMake
+CMAKE_PROJECT_DESCRIPTION:STATIC=
+
+//Value Computed by CMake
+CMAKE_PROJECT_HOMEPAGE_URL:STATIC=
+
+//Value Computed by CMake
+CMAKE_PROJECT_NAME:STATIC=GMXPlugin
+
+//Value Computed by CMake
+CMAKE_PROJECT_VERSION:STATIC=1.0.0
+
+//Value Computed by CMake
+CMAKE_PROJECT_VERSION_MAJOR:STATIC=1
+
+//Value Computed by CMake
+CMAKE_PROJECT_VERSION_MINOR:STATIC=0
+
+//Value Computed by CMake
+CMAKE_PROJECT_VERSION_PATCH:STATIC=0
+
+//Value Computed by CMake
+CMAKE_PROJECT_VERSION_TWEAK:STATIC=
+
+//Path to a program.
+CMAKE_RANLIB:FILEPATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib
+
+//Path to a program.
+CMAKE_READELF:FILEPATH=CMAKE_READELF-NOTFOUND
+
+//Flags used by the linker during the creation of shared libraries
+// during all build types.
+CMAKE_SHARED_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during DEBUG builds.
+CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during MINSIZEREL builds.
+CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during RELEASE builds.
+CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during RELWITHDEBINFO builds.
+CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//If set, runtime paths are not added when installing shared libraries,
+// but are added when building.
+CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
+
+//If set, runtime paths are not added when using shared libraries.
+CMAKE_SKIP_RPATH:BOOL=NO
+
+//Flags used by the linker during the creation of static libraries
+// during all build types.
+CMAKE_STATIC_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during DEBUG builds.
+CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during MINSIZEREL builds.
+CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during RELEASE builds.
+CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during RELWITHDEBINFO builds.
+CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Path to a program.
+CMAKE_STRIP:FILEPATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip
+
+//If this value is on, makefiles will be generated without the
+// .SILENT directive, and all commands will be echoed to the console
+// during the make.  This is useful for debugging only. With Visual
+// Studio IDE projects all commands are done without /nologo.
+CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE
+
+//Value Computed by CMake
+GMXPlugin_BINARY_DIR:STATIC=/Users/purpie/gmx/GMXPlugin/build
+
+//Dependencies for the target
+GMXPlugin_LIB_DEPENDS:STATIC=general;GeoModelCore::GeoModelKernel;general;GeoModelXml;
+
+//Value Computed by CMake
+GMXPlugin_SOURCE_DIR:STATIC=/Users/purpie/gmx/GMXPlugin
+
+//The directory containing a CMake configuration file for GeoModelCore.
+GeoModelCore_DIR:PATH=/usr/local/lib/cmake/GeoModelCore
+
+//The directory containing a CMake configuration file for GeoModelTools.
+GeoModelTools_DIR:PATH=/usr/local/lib/cmake/GeoModelTools
+
+//Xerces-C++ include directory
+XercesC_INCLUDE_DIR:PATH=/usr/local/include
+
+//Xerces-C++ libraries (debug)
+XercesC_LIBRARY_DEBUG:FILEPATH=XercesC_LIBRARY_DEBUG-NOTFOUND
+
+//Xerces-C++ libraries (release)
+XercesC_LIBRARY_RELEASE:FILEPATH=/usr/local/lib/libxerces-c.dylib
+
+//Path to a file.
+ZLIB_INCLUDE_DIR:PATH=/usr/include
+
+//Path to a library.
+ZLIB_LIBRARY_DEBUG:FILEPATH=ZLIB_LIBRARY_DEBUG-NOTFOUND
+
+//Path to a library.
+ZLIB_LIBRARY_RELEASE:FILEPATH=/usr/lib/libz.dylib
+
+
+########################
+# INTERNAL cache entries
+########################
+
+//ADVANCED property for variable: CMAKE_ADDR2LINE
+CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_AR
+CMAKE_AR-ADVANCED:INTERNAL=1
+//This is the directory where this CMakeCache.txt was created
+CMAKE_CACHEFILE_DIR:INTERNAL=/Users/purpie/gmx/GMXPlugin/build
+//Major version of cmake used to create the current loaded cache
+CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3
+//Minor version of cmake used to create the current loaded cache
+CMAKE_CACHE_MINOR_VERSION:INTERNAL=16
+//Patch version of cmake used to create the current loaded cache
+CMAKE_CACHE_PATCH_VERSION:INTERNAL=2
+//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE
+CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1
+//Path to CMake executable.
+CMAKE_COMMAND:INTERNAL=/usr/local/Cellar/cmake/3.16.2/bin/cmake
+//Path to cpack program executable.
+CMAKE_CPACK_COMMAND:INTERNAL=/usr/local/Cellar/cmake/3.16.2/bin/cpack
+//Path to ctest program executable.
+CMAKE_CTEST_COMMAND:INTERNAL=/usr/local/Cellar/cmake/3.16.2/bin/ctest
+//ADVANCED property for variable: CMAKE_CXX_COMPILER
+CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS
+CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG
+CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL
+CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE
+CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO
+CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_DLLTOOL
+CMAKE_DLLTOOL-ADVANCED:INTERNAL=1
+//Path to cache edit program executable.
+CMAKE_EDIT_COMMAND:INTERNAL=/usr/local/Cellar/cmake/3.16.2/bin/ccmake
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS
+CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG
+CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL
+CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE
+CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS
+CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1
+//Name of external makefile project generator.
+CMAKE_EXTRA_GENERATOR:INTERNAL=
+//Name of generator.
+CMAKE_GENERATOR:INTERNAL=Unix Makefiles
+//Generator instance identifier.
+CMAKE_GENERATOR_INSTANCE:INTERNAL=
+//Name of generator platform.
+CMAKE_GENERATOR_PLATFORM:INTERNAL=
+//Name of generator toolset.
+CMAKE_GENERATOR_TOOLSET:INTERNAL=
+//Source directory with the top level CMakeLists.txt file for this
+// project
+CMAKE_HOME_DIRECTORY:INTERNAL=/Users/purpie/gmx/GMXPlugin
+//ADVANCED property for variable: CMAKE_INSTALL_NAME_TOOL
+CMAKE_INSTALL_NAME_TOOL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_LINKER
+CMAKE_LINKER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MAKE_PROGRAM
+CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS
+CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG
+CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL
+CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE
+CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_NM
+CMAKE_NM-ADVANCED:INTERNAL=1
+//number of local generators
+CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1
+//ADVANCED property for variable: CMAKE_OBJCOPY
+CMAKE_OBJCOPY-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_OBJDUMP
+CMAKE_OBJDUMP-ADVANCED:INTERNAL=1
+//Platform information initialized
+CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RANLIB
+CMAKE_RANLIB-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_READELF
+CMAKE_READELF-ADVANCED:INTERNAL=1
+//Path to CMake installation.
+CMAKE_ROOT:INTERNAL=/usr/local/Cellar/cmake/3.16.2/share/cmake
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS
+CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG
+CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL
+CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE
+CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH
+CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SKIP_RPATH
+CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS
+CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG
+CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL
+CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE
+CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STRIP
+CMAKE_STRIP-ADVANCED:INTERNAL=1
+//uname command
+CMAKE_UNAME:INTERNAL=/usr/bin/uname
+//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE
+CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1
+//Details about finding GeoModelCore
+FIND_PACKAGE_MESSAGE_DETAILS_GeoModelCore:INTERNAL=[/usr/local/lib/cmake/GeoModelCore][v3.1.1()]
+//Details about finding XercesC
+FIND_PACKAGE_MESSAGE_DETAILS_XercesC:INTERNAL=[/usr/local/lib/libxerces-c.dylib][/usr/local/include][3.2.2][v3.2.2()]
+//Details about finding ZLIB
+FIND_PACKAGE_MESSAGE_DETAILS_ZLIB:INTERNAL=[/usr/lib/libz.dylib][/usr/include][v1.2.11()]
+//ADVANCED property for variable: XercesC_INCLUDE_DIR
+XercesC_INCLUDE_DIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: XercesC_LIBRARY_DEBUG
+XercesC_LIBRARY_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: XercesC_LIBRARY_RELEASE
+XercesC_LIBRARY_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: ZLIB_INCLUDE_DIR
+ZLIB_INCLUDE_DIR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: ZLIB_LIBRARY_DEBUG
+ZLIB_LIBRARY_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: ZLIB_LIBRARY_RELEASE
+ZLIB_LIBRARY_RELEASE-ADVANCED:INTERNAL=1
+
diff --git a/GMXPlugin/build/CMakeFiles/3.16.2/CMakeCXXCompiler.cmake b/GMXPlugin/build/CMakeFiles/3.16.2/CMakeCXXCompiler.cmake
new file mode 100644
index 000000000..ed09a50d5
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/3.16.2/CMakeCXXCompiler.cmake
@@ -0,0 +1,88 @@
+set(CMAKE_CXX_COMPILER "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++")
+set(CMAKE_CXX_COMPILER_ARG1 "")
+set(CMAKE_CXX_COMPILER_ID "AppleClang")
+set(CMAKE_CXX_COMPILER_VERSION "11.0.0.11000033")
+set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "")
+set(CMAKE_CXX_COMPILER_WRAPPER "")
+set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "98")
+set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20")
+set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters")
+set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates")
+set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates")
+set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17")
+set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20")
+
+set(CMAKE_CXX_PLATFORM_ID "Darwin")
+set(CMAKE_CXX_SIMULATE_ID "")
+set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "")
+set(CMAKE_CXX_SIMULATE_VERSION "")
+
+
+
+set(CMAKE_AR "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar")
+set(CMAKE_CXX_COMPILER_AR "")
+set(CMAKE_RANLIB "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib")
+set(CMAKE_CXX_COMPILER_RANLIB "")
+set(CMAKE_LINKER "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld")
+set(CMAKE_MT "")
+set(CMAKE_COMPILER_IS_GNUCXX )
+set(CMAKE_CXX_COMPILER_LOADED 1)
+set(CMAKE_CXX_COMPILER_WORKS TRUE)
+set(CMAKE_CXX_ABI_COMPILED TRUE)
+set(CMAKE_COMPILER_IS_MINGW )
+set(CMAKE_COMPILER_IS_CYGWIN )
+if(CMAKE_COMPILER_IS_CYGWIN)
+  set(CYGWIN 1)
+  set(UNIX 1)
+endif()
+
+set(CMAKE_CXX_COMPILER_ENV_VAR "CXX")
+
+if(CMAKE_COMPILER_IS_MINGW)
+  set(MINGW 1)
+endif()
+set(CMAKE_CXX_COMPILER_ID_RUN 1)
+set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;CPP)
+set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC)
+
+foreach (lang C OBJC OBJCXX)
+  if (CMAKE_${lang}_COMPILER_ID_RUN)
+    foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS)
+      list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension})
+    endforeach()
+  endif()
+endforeach()
+
+set(CMAKE_CXX_LINKER_PREFERENCE 30)
+set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1)
+
+# Save compiler ABI information.
+set(CMAKE_CXX_SIZEOF_DATA_PTR "8")
+set(CMAKE_CXX_COMPILER_ABI "")
+set(CMAKE_CXX_LIBRARY_ARCHITECTURE "")
+
+if(CMAKE_CXX_SIZEOF_DATA_PTR)
+  set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}")
+endif()
+
+if(CMAKE_CXX_COMPILER_ABI)
+  set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}")
+endif()
+
+if(CMAKE_CXX_LIBRARY_ARCHITECTURE)
+  set(CMAKE_LIBRARY_ARCHITECTURE "")
+endif()
+
+set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "")
+if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX)
+  set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}")
+endif()
+
+
+
+
+
+set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1;/usr/local/include;/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/include;/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include;/usr/include")
+set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "c++")
+set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib;/usr/local/lib")
+set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "/Library/Frameworks;/System/Library/Frameworks")
diff --git a/GMXPlugin/build/CMakeFiles/3.16.2/CMakeDetermineCompilerABI_CXX.bin b/GMXPlugin/build/CMakeFiles/3.16.2/CMakeDetermineCompilerABI_CXX.bin
new file mode 100755
index 0000000000000000000000000000000000000000..d8e4387fe06af67c7ad87534cba181dfb15f1b8f
GIT binary patch
literal 4288
zcmeHKO>0v@6rGp0_*If3D3*#uL8%s#)cO(Bg^EvKu(rikkV+Vv<dr;V5=q|ER0tHr
zMG&D2e}MnMtt$~+bm<>(;X-#2T(~Gj#B(MS^IrYHwakT^d(X_BGk4C*=Dyqd{C$TI
z)_@ReF(E_(UIus~lE{P@g*$L5=PqBj7wucKT#cF)g}+7Q$)Zro1^doIv_zdBiLMEa
zhp<dXOUk75-KMVr!gjuUcmVmPbP4fbznow#45cjAs*OJ3cD@&yZ=XIy9N`O-A(t|!
zKJ=<3=~b6&3P<1jO7l@u8ZmYMllAqV&duDgujYE%L7#|jTCX>nh<j>Z<0JUK8J+(%
zfQNPL=>R+n%=b1C+4COw9Gup>gSGrV;rqD%FBV5p5<U!12aS4q#Ve#st1Bg7+8CUD
zj9<F&_3`ML{L6E#_hVBxADqHk60Yuy?-l~iy!$`d8#{p<E&sG}yq`S$KZK3<X5if8
zI|g^HgU0Ijf_{n<6RF7*n(_*&&upmP+WH82qV@Bu4d1P#uIMAE7UCG3{bca76Y;pl
z)Yq6%z$jo8FbWt2i~>dhqkvJsDDZzMaNB8r+OWUzG40l-(+<9D*c~FL7;HMvh7KZ4
zyuO$jXm#4H&QrUSf4d&G+|0Gv^9}EjTU(Z;`+ogyCY$GR&N@6x3rEf{oN-Pg(x2;j
zhdF1XVVoRMrvXS~NzB(VSt(1m=@tXum1TFS<krRE%92+VN4vw_heN7dh+c9MIF7yE
ze9W?h)g5No+kS<+z4UrTWSO!gCgor6l<H27f3o2R1zEr(jaH;woSr<(iCTuFP&_{X
D5PX)W

literal 0
HcmV?d00001

diff --git a/GMXPlugin/build/CMakeFiles/3.16.2/CMakeSystem.cmake b/GMXPlugin/build/CMakeFiles/3.16.2/CMakeSystem.cmake
new file mode 100644
index 000000000..732d9151c
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/3.16.2/CMakeSystem.cmake
@@ -0,0 +1,15 @@
+set(CMAKE_HOST_SYSTEM "Darwin-18.6.0")
+set(CMAKE_HOST_SYSTEM_NAME "Darwin")
+set(CMAKE_HOST_SYSTEM_VERSION "18.6.0")
+set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64")
+
+
+
+set(CMAKE_SYSTEM "Darwin-18.6.0")
+set(CMAKE_SYSTEM_NAME "Darwin")
+set(CMAKE_SYSTEM_VERSION "18.6.0")
+set(CMAKE_SYSTEM_PROCESSOR "x86_64")
+
+set(CMAKE_CROSSCOMPILING "FALSE")
+
+set(CMAKE_SYSTEM_LOADED 1)
diff --git a/GMXPlugin/build/CMakeFiles/3.16.2/CompilerIdCXX/CMakeCXXCompilerId.cpp b/GMXPlugin/build/CMakeFiles/3.16.2/CompilerIdCXX/CMakeCXXCompilerId.cpp
new file mode 100644
index 000000000..69cfdba6b
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/3.16.2/CompilerIdCXX/CMakeCXXCompilerId.cpp
@@ -0,0 +1,660 @@
+/* This source file must have a .cpp extension so that all C++ compilers
+   recognize the extension without flags.  Borland does not know .cxx for
+   example.  */
+#ifndef __cplusplus
+# error "A C compiler has been selected for C++."
+#endif
+
+
+/* Version number components: V=Version, R=Revision, P=Patch
+   Version date components:   YYYY=Year, MM=Month,   DD=Day  */
+
+#if defined(__COMO__)
+# define COMPILER_ID "Comeau"
+  /* __COMO_VERSION__ = VRR */
+# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100)
+# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100)
+
+#elif defined(__INTEL_COMPILER) || defined(__ICC)
+# define COMPILER_ID "Intel"
+# if defined(_MSC_VER)
+#  define SIMULATE_ID "MSVC"
+# endif
+# if defined(__GNUC__)
+#  define SIMULATE_ID "GNU"
+# endif
+  /* __INTEL_COMPILER = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
+# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
+# if defined(__INTEL_COMPILER_UPDATE)
+#  define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
+# else
+#  define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER   % 10)
+# endif
+# if defined(__INTEL_COMPILER_BUILD_DATE)
+  /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
+#  define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
+# endif
+# if defined(_MSC_VER)
+   /* _MSC_VER = VVRR */
+#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+# if defined(__GNUC__)
+#  define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
+# elif defined(__GNUG__)
+#  define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
+# endif
+# if defined(__GNUC_MINOR__)
+#  define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+#  define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+
+#elif defined(__PATHCC__)
+# define COMPILER_ID "PathScale"
+# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
+# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
+# if defined(__PATHCC_PATCHLEVEL__)
+#  define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
+# endif
+
+#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
+# define COMPILER_ID "Embarcadero"
+# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
+# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
+# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__     & 0xFFFF)
+
+#elif defined(__BORLANDC__)
+# define COMPILER_ID "Borland"
+  /* __BORLANDC__ = 0xVRR */
+# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
+# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
+
+#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
+# define COMPILER_ID "Watcom"
+   /* __WATCOMC__ = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+#  define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__WATCOMC__)
+# define COMPILER_ID "OpenWatcom"
+   /* __WATCOMC__ = VVRP + 1100 */
+# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+#  define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__SUNPRO_CC)
+# define COMPILER_ID "SunPro"
+# if __SUNPRO_CC >= 0x5100
+   /* __SUNPRO_CC = 0xVRRP */
+#  define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12)
+#  define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF)
+#  define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC    & 0xF)
+# else
+   /* __SUNPRO_CC = 0xVRP */
+#  define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8)
+#  define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF)
+#  define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC    & 0xF)
+# endif
+
+#elif defined(__HP_aCC)
+# define COMPILER_ID "HP"
+  /* __HP_aCC = VVRRPP */
+# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000)
+# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100)
+# define COMPILER_VERSION_PATCH DEC(__HP_aCC     % 100)
+
+#elif defined(__DECCXX)
+# define COMPILER_ID "Compaq"
+  /* __DECCXX_VER = VVRRTPPPP */
+# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000)
+# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000  % 100)
+# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER         % 10000)
+
+#elif defined(__IBMCPP__) && defined(__COMPILER_VER__)
+# define COMPILER_ID "zOS"
+  /* __IBMCPP__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__    % 10)
+
+#elif defined(__ibmxl__) && defined(__clang__)
+# define COMPILER_ID "XLClang"
+# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
+# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
+# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
+# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
+
+
+#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800
+# define COMPILER_ID "XL"
+  /* __IBMCPP__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__    % 10)
+
+#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800
+# define COMPILER_ID "VisualAge"
+  /* __IBMCPP__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__    % 10)
+
+#elif defined(__PGI)
+# define COMPILER_ID "PGI"
+# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
+# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
+# if defined(__PGIC_PATCHLEVEL__)
+#  define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
+# endif
+
+#elif defined(_CRAYC)
+# define COMPILER_ID "Cray"
+# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
+# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
+
+#elif defined(__TI_COMPILER_VERSION__)
+# define COMPILER_ID "TI"
+  /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
+# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
+# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000   % 1000)
+# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__        % 1000)
+
+#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)
+# define COMPILER_ID "Fujitsu"
+
+#elif defined(__ghs__)
+# define COMPILER_ID "GHS"
+/* __GHS_VERSION_NUMBER = VVVVRP */
+# ifdef __GHS_VERSION_NUMBER
+# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
+# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER      % 10)
+# endif
+
+#elif defined(__SCO_VERSION__)
+# define COMPILER_ID "SCO"
+
+#elif defined(__ARMCC_VERSION) && !defined(__clang__)
+# define COMPILER_ID "ARMCC"
+#if __ARMCC_VERSION >= 1000000
+  /* __ARMCC_VERSION = VRRPPPP */
+  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
+  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
+  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION     % 10000)
+#else
+  /* __ARMCC_VERSION = VRPPPP */
+  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
+  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
+  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION    % 10000)
+#endif
+
+
+#elif defined(__clang__) && defined(__apple_build_version__)
+# define COMPILER_ID "AppleClang"
+# if defined(_MSC_VER)
+#  define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+   /* _MSC_VER = VVRR */
+#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
+
+#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
+# define COMPILER_ID "ARMClang"
+  # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
+  # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
+  # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION     % 10000)
+# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
+
+#elif defined(__clang__)
+# define COMPILER_ID "Clang"
+# if defined(_MSC_VER)
+#  define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+   /* _MSC_VER = VVRR */
+#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+
+#elif defined(__GNUC__) || defined(__GNUG__)
+# define COMPILER_ID "GNU"
+# if defined(__GNUC__)
+#  define COMPILER_VERSION_MAJOR DEC(__GNUC__)
+# else
+#  define COMPILER_VERSION_MAJOR DEC(__GNUG__)
+# endif
+# if defined(__GNUC_MINOR__)
+#  define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+#  define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+
+#elif defined(_MSC_VER)
+# define COMPILER_ID "MSVC"
+  /* _MSC_VER = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
+# if defined(_MSC_FULL_VER)
+#  if _MSC_VER >= 1400
+    /* _MSC_FULL_VER = VVRRPPPPP */
+#   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
+#  else
+    /* _MSC_FULL_VER = VVRRPPPP */
+#   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
+#  endif
+# endif
+# if defined(_MSC_BUILD)
+#  define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
+# endif
+
+#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
+# define COMPILER_ID "ADSP"
+#if defined(__VISUALDSPVERSION__)
+  /* __VISUALDSPVERSION__ = 0xVVRRPP00 */
+# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24)
+# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF)
+# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8  & 0xFF)
+#endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# define COMPILER_ID "IAR"
+# if defined(__VER__) && defined(__ICCARM__)
+#  define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
+#  define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
+#  define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
+#  define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
+# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__))
+#  define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
+#  define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
+#  define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
+#  define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
+# endif
+
+
+/* These compilers are either not known or too old to define an
+  identification macro.  Try to identify the platform and guess that
+  it is the native compiler.  */
+#elif defined(__hpux) || defined(__hpua)
+# define COMPILER_ID "HP"
+
+#else /* unknown compiler */
+# define COMPILER_ID ""
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+   getting matched.  Store it in a pointer rather than an array
+   because some compilers will just produce instructions to fill the
+   array rather than assigning a pointer to a static array.  */
+char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
+#ifdef SIMULATE_ID
+char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
+#endif
+
+#ifdef __QNXNTO__
+char const* qnxnto = "INFO" ":" "qnxnto[]";
+#endif
+
+#if defined(__CRAYXE) || defined(__CRAYXC)
+char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
+#endif
+
+#define STRINGIFY_HELPER(X) #X
+#define STRINGIFY(X) STRINGIFY_HELPER(X)
+
+/* Identify known platforms by name.  */
+#if defined(__linux) || defined(__linux__) || defined(linux)
+# define PLATFORM_ID "Linux"
+
+#elif defined(__CYGWIN__)
+# define PLATFORM_ID "Cygwin"
+
+#elif defined(__MINGW32__)
+# define PLATFORM_ID "MinGW"
+
+#elif defined(__APPLE__)
+# define PLATFORM_ID "Darwin"
+
+#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+# define PLATFORM_ID "Windows"
+
+#elif defined(__FreeBSD__) || defined(__FreeBSD)
+# define PLATFORM_ID "FreeBSD"
+
+#elif defined(__NetBSD__) || defined(__NetBSD)
+# define PLATFORM_ID "NetBSD"
+
+#elif defined(__OpenBSD__) || defined(__OPENBSD)
+# define PLATFORM_ID "OpenBSD"
+
+#elif defined(__sun) || defined(sun)
+# define PLATFORM_ID "SunOS"
+
+#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
+# define PLATFORM_ID "AIX"
+
+#elif defined(__hpux) || defined(__hpux__)
+# define PLATFORM_ID "HP-UX"
+
+#elif defined(__HAIKU__)
+# define PLATFORM_ID "Haiku"
+
+#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
+# define PLATFORM_ID "BeOS"
+
+#elif defined(__QNX__) || defined(__QNXNTO__)
+# define PLATFORM_ID "QNX"
+
+#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
+# define PLATFORM_ID "Tru64"
+
+#elif defined(__riscos) || defined(__riscos__)
+# define PLATFORM_ID "RISCos"
+
+#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
+# define PLATFORM_ID "SINIX"
+
+#elif defined(__UNIX_SV__)
+# define PLATFORM_ID "UNIX_SV"
+
+#elif defined(__bsdos__)
+# define PLATFORM_ID "BSDOS"
+
+#elif defined(_MPRAS) || defined(MPRAS)
+# define PLATFORM_ID "MP-RAS"
+
+#elif defined(__osf) || defined(__osf__)
+# define PLATFORM_ID "OSF1"
+
+#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
+# define PLATFORM_ID "SCO_SV"
+
+#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
+# define PLATFORM_ID "ULTRIX"
+
+#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
+# define PLATFORM_ID "Xenix"
+
+#elif defined(__WATCOMC__)
+# if defined(__LINUX__)
+#  define PLATFORM_ID "Linux"
+
+# elif defined(__DOS__)
+#  define PLATFORM_ID "DOS"
+
+# elif defined(__OS2__)
+#  define PLATFORM_ID "OS2"
+
+# elif defined(__WINDOWS__)
+#  define PLATFORM_ID "Windows3x"
+
+# else /* unknown platform */
+#  define PLATFORM_ID
+# endif
+
+#elif defined(__INTEGRITY)
+# if defined(INT_178B)
+#  define PLATFORM_ID "Integrity178"
+
+# else /* regular Integrity */
+#  define PLATFORM_ID "Integrity"
+# endif
+
+#else /* unknown platform */
+# define PLATFORM_ID
+
+#endif
+
+/* For windows compilers MSVC and Intel we can determine
+   the architecture of the compiler being used.  This is because
+   the compilers do not have flags that can change the architecture,
+   but rather depend on which compiler is being used
+*/
+#if defined(_WIN32) && defined(_MSC_VER)
+# if defined(_M_IA64)
+#  define ARCHITECTURE_ID "IA64"
+
+# elif defined(_M_X64) || defined(_M_AMD64)
+#  define ARCHITECTURE_ID "x64"
+
+# elif defined(_M_IX86)
+#  define ARCHITECTURE_ID "X86"
+
+# elif defined(_M_ARM64)
+#  define ARCHITECTURE_ID "ARM64"
+
+# elif defined(_M_ARM)
+#  if _M_ARM == 4
+#   define ARCHITECTURE_ID "ARMV4I"
+#  elif _M_ARM == 5
+#   define ARCHITECTURE_ID "ARMV5I"
+#  else
+#   define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
+#  endif
+
+# elif defined(_M_MIPS)
+#  define ARCHITECTURE_ID "MIPS"
+
+# elif defined(_M_SH)
+#  define ARCHITECTURE_ID "SHx"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__WATCOMC__)
+# if defined(_M_I86)
+#  define ARCHITECTURE_ID "I86"
+
+# elif defined(_M_IX86)
+#  define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# if defined(__ICCARM__)
+#  define ARCHITECTURE_ID "ARM"
+
+# elif defined(__ICCRX__)
+#  define ARCHITECTURE_ID "RX"
+
+# elif defined(__ICCRH850__)
+#  define ARCHITECTURE_ID "RH850"
+
+# elif defined(__ICCRL78__)
+#  define ARCHITECTURE_ID "RL78"
+
+# elif defined(__ICCRISCV__)
+#  define ARCHITECTURE_ID "RISCV"
+
+# elif defined(__ICCAVR__)
+#  define ARCHITECTURE_ID "AVR"
+
+# elif defined(__ICC430__)
+#  define ARCHITECTURE_ID "MSP430"
+
+# elif defined(__ICCV850__)
+#  define ARCHITECTURE_ID "V850"
+
+# elif defined(__ICC8051__)
+#  define ARCHITECTURE_ID "8051"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__ghs__)
+# if defined(__PPC64__)
+#  define ARCHITECTURE_ID "PPC64"
+
+# elif defined(__ppc__)
+#  define ARCHITECTURE_ID "PPC"
+
+# elif defined(__ARM__)
+#  define ARCHITECTURE_ID "ARM"
+
+# elif defined(__x86_64__)
+#  define ARCHITECTURE_ID "x64"
+
+# elif defined(__i386__)
+#  define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+#else
+#  define ARCHITECTURE_ID
+#endif
+
+/* Convert integer to decimal digit literals.  */
+#define DEC(n)                   \
+  ('0' + (((n) / 10000000)%10)), \
+  ('0' + (((n) / 1000000)%10)),  \
+  ('0' + (((n) / 100000)%10)),   \
+  ('0' + (((n) / 10000)%10)),    \
+  ('0' + (((n) / 1000)%10)),     \
+  ('0' + (((n) / 100)%10)),      \
+  ('0' + (((n) / 10)%10)),       \
+  ('0' +  ((n) % 10))
+
+/* Convert integer to hex digit literals.  */
+#define HEX(n)             \
+  ('0' + ((n)>>28 & 0xF)), \
+  ('0' + ((n)>>24 & 0xF)), \
+  ('0' + ((n)>>20 & 0xF)), \
+  ('0' + ((n)>>16 & 0xF)), \
+  ('0' + ((n)>>12 & 0xF)), \
+  ('0' + ((n)>>8  & 0xF)), \
+  ('0' + ((n)>>4  & 0xF)), \
+  ('0' + ((n)     & 0xF))
+
+/* Construct a string literal encoding the version number components. */
+#ifdef COMPILER_VERSION_MAJOR
+char const info_version[] = {
+  'I', 'N', 'F', 'O', ':',
+  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
+  COMPILER_VERSION_MAJOR,
+# ifdef COMPILER_VERSION_MINOR
+  '.', COMPILER_VERSION_MINOR,
+#  ifdef COMPILER_VERSION_PATCH
+   '.', COMPILER_VERSION_PATCH,
+#   ifdef COMPILER_VERSION_TWEAK
+    '.', COMPILER_VERSION_TWEAK,
+#   endif
+#  endif
+# endif
+  ']','\0'};
+#endif
+
+/* Construct a string literal encoding the internal version number. */
+#ifdef COMPILER_VERSION_INTERNAL
+char const info_version_internal[] = {
+  'I', 'N', 'F', 'O', ':',
+  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
+  'i','n','t','e','r','n','a','l','[',
+  COMPILER_VERSION_INTERNAL,']','\0'};
+#endif
+
+/* Construct a string literal encoding the version number components. */
+#ifdef SIMULATE_VERSION_MAJOR
+char const info_simulate_version[] = {
+  'I', 'N', 'F', 'O', ':',
+  's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
+  SIMULATE_VERSION_MAJOR,
+# ifdef SIMULATE_VERSION_MINOR
+  '.', SIMULATE_VERSION_MINOR,
+#  ifdef SIMULATE_VERSION_PATCH
+   '.', SIMULATE_VERSION_PATCH,
+#   ifdef SIMULATE_VERSION_TWEAK
+    '.', SIMULATE_VERSION_TWEAK,
+#   endif
+#  endif
+# endif
+  ']','\0'};
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+   getting matched.  Store it in a pointer rather than an array
+   because some compilers will just produce instructions to fill the
+   array rather than assigning a pointer to a static array.  */
+char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
+char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
+
+
+
+
+#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L
+#  if defined(__INTEL_CXX11_MODE__)
+#    if defined(__cpp_aggregate_nsdmi)
+#      define CXX_STD 201402L
+#    else
+#      define CXX_STD 201103L
+#    endif
+#  else
+#    define CXX_STD 199711L
+#  endif
+#elif defined(_MSC_VER) && defined(_MSVC_LANG)
+#  define CXX_STD _MSVC_LANG
+#else
+#  define CXX_STD __cplusplus
+#endif
+
+const char* info_language_dialect_default = "INFO" ":" "dialect_default["
+#if CXX_STD > 201703L
+  "20"
+#elif CXX_STD >= 201703L
+  "17"
+#elif CXX_STD >= 201402L
+  "14"
+#elif CXX_STD >= 201103L
+  "11"
+#else
+  "98"
+#endif
+"]";
+
+/*--------------------------------------------------------------------------*/
+
+int main(int argc, char* argv[])
+{
+  int require = 0;
+  require += info_compiler[argc];
+  require += info_platform[argc];
+#ifdef COMPILER_VERSION_MAJOR
+  require += info_version[argc];
+#endif
+#ifdef COMPILER_VERSION_INTERNAL
+  require += info_version_internal[argc];
+#endif
+#ifdef SIMULATE_ID
+  require += info_simulate[argc];
+#endif
+#ifdef SIMULATE_VERSION_MAJOR
+  require += info_simulate_version[argc];
+#endif
+#if defined(__CRAYXE) || defined(__CRAYXC)
+  require += info_cray[argc];
+#endif
+  require += info_language_dialect_default[argc];
+  (void)argv;
+  return require;
+}
diff --git a/GMXPlugin/build/CMakeFiles/3.16.2/CompilerIdCXX/a.out b/GMXPlugin/build/CMakeFiles/3.16.2/CompilerIdCXX/a.out
new file mode 100755
index 0000000000000000000000000000000000000000..8e829dad8cfe0747f923c16e47a12e2bee7b8e5a
GIT binary patch
literal 8600
zcmeHN-%Aux6h7-}S&421p;R#T5LTkQTF@^j%dM3{r4*vYZsYE_4$S^=c1G<%kRV7T
zis(V;#rOIb3ZjP|d+I-^H-jEUB0ArlJMGTaQm?^1aJ=_B_uO;O{pJcY_w2`=uRnGZ
z#o|P(Eku-Hoopp~L<aYWdRQ~8LQIZaPv1@7nt(Mbu_*i_LY&9!D8y9y&Q#Pz&d0*_
zqHr7Apq!EvAv|l@Q-GVsc$=NP8MeF11vs25O|7)5hGZi|uIjmVsi2IF@eXta@ut-{
zaJ_)Ddf|BGQni*~W4wxrcR@`8j^tM#jQc|Pr6s$R7j|i`EOC^-*D4;K5d^p~r(h)b
zi|4SxD#Yl>)JWY3^Bs8(;qy=}pAUjcA2~m7dS-2Yvv@}6!f`OanbgkN&9U(t>Cv(9
zj2I1hF@|iYM9_pe!G4U-aS|Pas2yz+X*bxB$G}xL>oX(pPxSIRWxS7dk`)rJv5Wis
zzY<vw<NqRj43QFbunziFchIqC2lEe{JY&dVR^;)j|I_{FeU}!VE?s*0=3U{%5Zeq^
z<UpN!rJ^5jd7$Ma_thhU2ler`5C`YJUa&5B!5H@3y5|{(iPdu9d~&Bw4WtG*DSKAt
zdA80!w)2^fY1IGrgQ{m02d=0o>`io>75O|i0zOYD41Tp}1~dbj0nLDBKr^5j&<tn>
z{>H#`X6?&|^mn+et!!u3{BIx9TR@rhGne@dHj_(lcfGy1E55R|wz8F3ZyT0IAI79I
zvP<U4nTI?n;@R_?=X!c;=Ka|CwTbh&a<O7NmYW@^R2=K7W0ndtBu6Ta>CKhhVs_MY
z`NK?EO*c26RsFneI#$jTd27z}9WQ(C><khPBobXLT5i=Ym$FGIsnkHwNhWKZR0_7?
zVUEH1(h(J>zQy}I-uF*)3q8o+fDrWYozTHE6LL1JwGKe|ecP|TBd@4-T($7gq8ZQ(
zXa+O`ngPv#W<WEb8PE)91~dbj0nNbw&A|R+6jWMcg6r&YQJfdnvX%2aOUzql-g2q0
zXxb&}NBvn)3U>{0+C0h?#PE)U3gMjyIk*R*1zeZ-X2B8-S0S_*r&WXJb9FF|l53nc
zjDSBxg!rtTd}$HZ$+2EnEU0ke{^JlZ{~#d2Cg5I$QFH`OD%`E`gu?9#-vegH@OJ{J
zzcR!!QVgz)|IUG|z6-gzp!;j@0c^VAVE7k5LUM_+uc&(dteEA>K2t2j-J7W)$*{T+
FqMsQW6q*14

literal 0
HcmV?d00001

diff --git a/GMXPlugin/build/CMakeFiles/CMakeDirectoryInformation.cmake b/GMXPlugin/build/CMakeFiles/CMakeDirectoryInformation.cmake
new file mode 100644
index 000000000..41716e11f
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/CMakeDirectoryInformation.cmake
@@ -0,0 +1,16 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.16
+
+# Relative path conversion top directories.
+set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/Users/purpie/gmx/GMXPlugin")
+set(CMAKE_RELATIVE_PATH_TOP_BINARY "/Users/purpie/gmx/GMXPlugin/build")
+
+# Force unix paths in dependencies.
+set(CMAKE_FORCE_UNIX_PATHS 1)
+
+
+# The C and CXX include file regular expressions for this directory.
+set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
+set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
+set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
+set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})
diff --git a/GMXPlugin/build/CMakeFiles/CMakeOutput.log b/GMXPlugin/build/CMakeFiles/CMakeOutput.log
new file mode 100644
index 000000000..af7ab028a
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/CMakeOutput.log
@@ -0,0 +1,151 @@
+The system is: Darwin - 18.6.0 - x86_64
+Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded.
+Compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ 
+Build flags: 
+Id flags:  
+
+The output was:
+0
+
+
+Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out"
+
+The CXX compiler identification is AppleClang, found in "/Users/purpie/gmx/GMXPlugin/build/CMakeFiles/3.16.2/CompilerIdCXX/a.out"
+
+Determining if the CXX compiler works passed with the following output:
+Change Dir: /Users/purpie/gmx/GMXPlugin/build/CMakeFiles/CMakeTmp
+
+Run Build Command(s):/usr/bin/make cmTC_ed4c0/fast && /Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_ed4c0.dir/build.make CMakeFiles/cmTC_ed4c0.dir/build
+Building CXX object CMakeFiles/cmTC_ed4c0.dir/testCXXCompiler.cxx.o
+/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++     -o CMakeFiles/cmTC_ed4c0.dir/testCXXCompiler.cxx.o -c /Users/purpie/gmx/GMXPlugin/build/CMakeFiles/CMakeTmp/testCXXCompiler.cxx
+Linking CXX executable cmTC_ed4c0
+/usr/local/Cellar/cmake/3.16.2/bin/cmake -E cmake_link_script CMakeFiles/cmTC_ed4c0.dir/link.txt --verbose=1
+/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -Wl,-search_paths_first -Wl,-headerpad_max_install_names   CMakeFiles/cmTC_ed4c0.dir/testCXXCompiler.cxx.o  -o cmTC_ed4c0 
+
+
+
+Detecting CXX compiler ABI info compiled with the following output:
+Change Dir: /Users/purpie/gmx/GMXPlugin/build/CMakeFiles/CMakeTmp
+
+Run Build Command(s):/usr/bin/make cmTC_a0867/fast && /Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_a0867.dir/build.make CMakeFiles/cmTC_a0867.dir/build
+Building CXX object CMakeFiles/cmTC_a0867.dir/CMakeCXXCompilerABI.cpp.o
+/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -v -Wl,-v -o CMakeFiles/cmTC_a0867.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeCXXCompilerABI.cpp
+Apple clang version 11.0.0 (clang-1100.0.33.17)
+Target: x86_64-apple-darwin18.6.0
+Thread model: posix
+InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
+clang: warning: -Wl,-v: 'linker' input unused [-Wunused-command-line-argument]
+ "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.14.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name CMakeCXXCompilerABI.cpp -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -fno-strict-return -masm-verbose -munwind-tables -target-cpu penryn -dwarf-column-info -debugger-tuning=lldb -ggnu-pubnames -target-linker-version 530 -v -coverage-notes-file /Users/purpie/gmx/GMXPlugin/build/CMakeFiles/CMakeTmp/CMakeFiles/cmTC_a0867.dir/CMakeCXXCompilerABI.cpp.gcno -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0 -stdlib=libc++ -internal-isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1 -Wno-framework-include-private-from-public -Wno-atimport-in-framework-header -Wno-extra-semi-stmt -Wno-quoted-include-in-framework-header -fdeprecated-macro -fdebug-compilation-dir /Users/purpie/gmx/GMXPlugin/build/CMakeFiles/CMakeTmp -ferror-limit 19 -fmessage-length 0 -stack-protector 1 -mdarwin-stkchk-strong-link -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fobjc-runtime=macosx-10.14.0 -fcxx-exceptions -fexceptions -fmax-type-align=16 -fdiagnostics-show-option -o CMakeFiles/cmTC_a0867.dir/CMakeCXXCompilerABI.cpp.o -x c++ /usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeCXXCompilerABI.cpp
+clang -cc1 version 11.0.0 (clang-1100.0.33.17) default target x86_64-apple-darwin18.6.0
+ignoring nonexistent directory "/usr/include/c++/v1"
+#include "..." search starts here:
+#include <...> search starts here:
+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1
+ /usr/local/include
+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/include
+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
+ /usr/include
+ /System/Library/Frameworks (framework directory)
+ /Library/Frameworks (framework directory)
+End of search list.
+Linking CXX executable cmTC_a0867
+/usr/local/Cellar/cmake/3.16.2/bin/cmake -E cmake_link_script CMakeFiles/cmTC_a0867.dir/link.txt --verbose=1
+/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -Wl,-search_paths_first -Wl,-headerpad_max_install_names  -v -Wl,-v CMakeFiles/cmTC_a0867.dir/CMakeCXXCompilerABI.cpp.o  -o cmTC_a0867 
+Apple clang version 11.0.0 (clang-1100.0.33.17)
+Target: x86_64-apple-darwin18.6.0
+Thread model: posix
+InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
+ "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -arch x86_64 -macosx_version_min 10.14.0 -o cmTC_a0867 -search_paths_first -headerpad_max_install_names -v CMakeFiles/cmTC_a0867.dir/CMakeCXXCompilerABI.cpp.o -lc++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.osx.a
+@(#)PROGRAM:ld  PROJECT:ld64-530
+BUILD 18:57:17 Dec 13 2019
+configured to support archs: armv6 armv7 armv7s arm64 arm64e arm64_32 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em
+Library search paths:
+	/usr/lib
+	/usr/local/lib
+Framework search paths:
+	/Library/Frameworks/
+	/System/Library/Frameworks/
+
+
+
+Parsed CXX implicit include dir info from above output: rv=done
+  found start of include info
+  found start of implicit include info
+    add: [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1]
+    add: [/usr/local/include]
+    add: [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/include]
+    add: [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include]
+    add: [/usr/include]
+  end of search list found
+  collapse include dir [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1] ==> [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1]
+  collapse include dir [/usr/local/include] ==> [/usr/local/include]
+  collapse include dir [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/include] ==> [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/include]
+  collapse include dir [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include] ==> [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include]
+  collapse include dir [/usr/include] ==> [/usr/include]
+  implicit include dirs: [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1;/usr/local/include;/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/include;/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include;/usr/include]
+
+
+Parsed CXX implicit link information from above output:
+  link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)]
+  ignore line: [Change Dir: /Users/purpie/gmx/GMXPlugin/build/CMakeFiles/CMakeTmp]
+  ignore line: []
+  ignore line: [Run Build Command(s):/usr/bin/make cmTC_a0867/fast && /Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_a0867.dir/build.make CMakeFiles/cmTC_a0867.dir/build]
+  ignore line: [Building CXX object CMakeFiles/cmTC_a0867.dir/CMakeCXXCompilerABI.cpp.o]
+  ignore line: [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -v -Wl -v -o CMakeFiles/cmTC_a0867.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeCXXCompilerABI.cpp]
+  ignore line: [Apple clang version 11.0.0 (clang-1100.0.33.17)]
+  ignore line: [Target: x86_64-apple-darwin18.6.0]
+  ignore line: [Thread model: posix]
+  ignore line: [InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin]
+  ignore line: [clang: warning: -Wl -v: 'linker' input unused [-Wunused-command-line-argument]]
+  ignore line: [ "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.14.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name CMakeCXXCompilerABI.cpp -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -fno-strict-return -masm-verbose -munwind-tables -target-cpu penryn -dwarf-column-info -debugger-tuning=lldb -ggnu-pubnames -target-linker-version 530 -v -coverage-notes-file /Users/purpie/gmx/GMXPlugin/build/CMakeFiles/CMakeTmp/CMakeFiles/cmTC_a0867.dir/CMakeCXXCompilerABI.cpp.gcno -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0 -stdlib=libc++ -internal-isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1 -Wno-framework-include-private-from-public -Wno-atimport-in-framework-header -Wno-extra-semi-stmt -Wno-quoted-include-in-framework-header -fdeprecated-macro -fdebug-compilation-dir /Users/purpie/gmx/GMXPlugin/build/CMakeFiles/CMakeTmp -ferror-limit 19 -fmessage-length 0 -stack-protector 1 -mdarwin-stkchk-strong-link -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fobjc-runtime=macosx-10.14.0 -fcxx-exceptions -fexceptions -fmax-type-align=16 -fdiagnostics-show-option -o CMakeFiles/cmTC_a0867.dir/CMakeCXXCompilerABI.cpp.o -x c++ /usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeCXXCompilerABI.cpp]
+  ignore line: [clang -cc1 version 11.0.0 (clang-1100.0.33.17) default target x86_64-apple-darwin18.6.0]
+  ignore line: [ignoring nonexistent directory "/usr/include/c++/v1"]
+  ignore line: [#include "..." search starts here:]
+  ignore line: [#include <...> search starts here:]
+  ignore line: [ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1]
+  ignore line: [ /usr/local/include]
+  ignore line: [ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/include]
+  ignore line: [ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include]
+  ignore line: [ /usr/include]
+  ignore line: [ /System/Library/Frameworks (framework directory)]
+  ignore line: [ /Library/Frameworks (framework directory)]
+  ignore line: [End of search list.]
+  ignore line: [Linking CXX executable cmTC_a0867]
+  ignore line: [/usr/local/Cellar/cmake/3.16.2/bin/cmake -E cmake_link_script CMakeFiles/cmTC_a0867.dir/link.txt --verbose=1]
+  ignore line: [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -Wl -search_paths_first -Wl -headerpad_max_install_names  -v -Wl -v CMakeFiles/cmTC_a0867.dir/CMakeCXXCompilerABI.cpp.o  -o cmTC_a0867 ]
+  ignore line: [Apple clang version 11.0.0 (clang-1100.0.33.17)]
+  ignore line: [Target: x86_64-apple-darwin18.6.0]
+  ignore line: [Thread model: posix]
+  ignore line: [InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin]
+  link line: [ "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -arch x86_64 -macosx_version_min 10.14.0 -o cmTC_a0867 -search_paths_first -headerpad_max_install_names -v CMakeFiles/cmTC_a0867.dir/CMakeCXXCompilerABI.cpp.o -lc++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.osx.a]
+    arg [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld] ==> ignore
+    arg [-demangle] ==> ignore
+    arg [-lto_library] ==> ignore, skip following value
+    arg [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib] ==> skip value of -lto_library
+    arg [-dynamic] ==> ignore
+    arg [-arch] ==> ignore
+    arg [x86_64] ==> ignore
+    arg [-macosx_version_min] ==> ignore
+    arg [10.14.0] ==> ignore
+    arg [-o] ==> ignore
+    arg [cmTC_a0867] ==> ignore
+    arg [-search_paths_first] ==> ignore
+    arg [-headerpad_max_install_names] ==> ignore
+    arg [-v] ==> ignore
+    arg [CMakeFiles/cmTC_a0867.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore
+    arg [-lc++] ==> lib [c++]
+    arg [-lSystem] ==> lib [System]
+    arg [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.osx.a] ==> lib [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.osx.a]
+  Library search paths: [;/usr/lib;/usr/local/lib]
+  Framework search paths: [;/Library/Frameworks/;/System/Library/Frameworks/]
+  remove lib [System]
+  remove lib [/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.osx.a]
+  collapse library dir [/usr/lib] ==> [/usr/lib]
+  collapse library dir [/usr/local/lib] ==> [/usr/local/lib]
+  collapse framework dir [/Library/Frameworks/] ==> [/Library/Frameworks]
+  collapse framework dir [/System/Library/Frameworks/] ==> [/System/Library/Frameworks]
+  implicit libs: [c++]
+  implicit dirs: [/usr/lib;/usr/local/lib]
+  implicit fwks: [/Library/Frameworks;/System/Library/Frameworks]
+
+
diff --git a/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/CXX.includecache b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/CXX.includecache
new file mode 100644
index 000000000..ae09a8c6e
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/CXX.includecache
@@ -0,0 +1,26 @@
+#IncludeRegexLine: ^[ 	]*[#%][ 	]*(include|import)[ 	]*[<"]([^">]+)([">])
+
+#IncludeRegexScan: ^.*$
+
+#IncludeRegexComplain: ^$
+
+#IncludeRegexTransform: 
+
+/Users/purpie/gmx/GMXPlugin/src/GMXPlugin.cxx
+GeoModelKernel/GeoVGeometryPlugin.h
+/Users/purpie/gmx/GMXPlugin/src/GeoModelKernel/GeoVGeometryPlugin.h
+GeoModelKernel/GeoNameTag.h
+/Users/purpie/gmx/GMXPlugin/src/GeoModelKernel/GeoNameTag.h
+GeoModelKernel/Units.h
+/Users/purpie/gmx/GMXPlugin/src/GeoModelKernel/Units.h
+GeoModelXml/GmxInterface.h
+/Users/purpie/gmx/GMXPlugin/src/GeoModelXml/GmxInterface.h
+GeoModelXml/Gmx2Geo.h
+/Users/purpie/gmx/GMXPlugin/src/GeoModelXml/Gmx2Geo.h
+iostream
+-
+fstream
+-
+sstream
+-
+
diff --git a/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/DependInfo.cmake b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/DependInfo.cmake
new file mode 100644
index 000000000..a23bbe500
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/DependInfo.cmake
@@ -0,0 +1,34 @@
+# The set of languages for which implicit dependencies are needed:
+set(CMAKE_DEPENDS_LANGUAGES
+  "CXX"
+  )
+# The set of files for implicit dependencies of each language:
+set(CMAKE_DEPENDS_CHECK_CXX
+  "/Users/purpie/gmx/GMXPlugin/src/GMXPlugin.cxx" "/Users/purpie/gmx/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.o"
+  )
+set(CMAKE_CXX_COMPILER_ID "AppleClang")
+
+# Preprocessor definitions for this target.
+set(CMAKE_TARGET_DEFINITIONS_CXX
+  "GMXPlugin_EXPORTS"
+  )
+
+# The include file search paths:
+set(CMAKE_CXX_TARGET_INCLUDE_PATH
+  "../"
+  "/usr/local/include/eigen3"
+  )
+
+# Pairs of files generated by the same build rule.
+set(CMAKE_MULTIPLE_OUTPUT_PAIRS
+  "/Users/purpie/gmx/GMXPlugin/build/libGMXPlugin.1.dylib" "/Users/purpie/gmx/GMXPlugin/build/libGMXPlugin.1.0.0.dylib"
+  "/Users/purpie/gmx/GMXPlugin/build/libGMXPlugin.dylib" "/Users/purpie/gmx/GMXPlugin/build/libGMXPlugin.1.0.0.dylib"
+  )
+
+
+# Targets to which this target links.
+set(CMAKE_TARGET_LINKED_INFO_FILES
+  )
+
+# Fortran module output directory.
+set(CMAKE_Fortran_TARGET_MODULE_DIR "")
diff --git a/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/build.make b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/build.make
new file mode 100644
index 000000000..a6033a3e1
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/build.make
@@ -0,0 +1,107 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.16
+
+# Delete rule output on recipe failure.
+.DELETE_ON_ERROR:
+
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+
+# A target that is always out of date.
+cmake_force:
+
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /usr/local/Cellar/cmake/3.16.2/bin/cmake
+
+# The command to remove a file.
+RM = /usr/local/Cellar/cmake/3.16.2/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /Users/purpie/gmx/GMXPlugin
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /Users/purpie/gmx/GMXPlugin/build
+
+# Include any dependencies generated for this target.
+include CMakeFiles/GMXPlugin.dir/depend.make
+
+# Include the progress variables for this target.
+include CMakeFiles/GMXPlugin.dir/progress.make
+
+# Include the compile flags for this target's objects.
+include CMakeFiles/GMXPlugin.dir/flags.make
+
+CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.o: CMakeFiles/GMXPlugin.dir/flags.make
+CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.o: ../src/GMXPlugin.cxx
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/Users/purpie/gmx/GMXPlugin/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.o"
+	/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.o -c /Users/purpie/gmx/GMXPlugin/src/GMXPlugin.cxx
+
+CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.i: cmake_force
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.i"
+	/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/purpie/gmx/GMXPlugin/src/GMXPlugin.cxx > CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.i
+
+CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.s: cmake_force
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.s"
+	/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/purpie/gmx/GMXPlugin/src/GMXPlugin.cxx -o CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.s
+
+# Object files for target GMXPlugin
+GMXPlugin_OBJECTS = \
+"CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.o"
+
+# External object files for target GMXPlugin
+GMXPlugin_EXTERNAL_OBJECTS =
+
+libGMXPlugin.1.0.0.dylib: CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.o
+libGMXPlugin.1.0.0.dylib: CMakeFiles/GMXPlugin.dir/build.make
+libGMXPlugin.1.0.0.dylib: /usr/local/lib/libGeoModelKernel.3.1.1.dylib
+libGMXPlugin.1.0.0.dylib: /usr/local/lib/libGeoGenericFunctions.3.1.1.dylib
+libGMXPlugin.1.0.0.dylib: CMakeFiles/GMXPlugin.dir/link.txt
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/Users/purpie/gmx/GMXPlugin/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX shared library libGMXPlugin.dylib"
+	$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/GMXPlugin.dir/link.txt --verbose=$(VERBOSE)
+	$(CMAKE_COMMAND) -E cmake_symlink_library libGMXPlugin.1.0.0.dylib libGMXPlugin.1.dylib libGMXPlugin.dylib
+
+libGMXPlugin.1.dylib: libGMXPlugin.1.0.0.dylib
+	@$(CMAKE_COMMAND) -E touch_nocreate libGMXPlugin.1.dylib
+
+libGMXPlugin.dylib: libGMXPlugin.1.0.0.dylib
+	@$(CMAKE_COMMAND) -E touch_nocreate libGMXPlugin.dylib
+
+# Rule to build all files generated by this target.
+CMakeFiles/GMXPlugin.dir/build: libGMXPlugin.dylib
+
+.PHONY : CMakeFiles/GMXPlugin.dir/build
+
+CMakeFiles/GMXPlugin.dir/clean:
+	$(CMAKE_COMMAND) -P CMakeFiles/GMXPlugin.dir/cmake_clean.cmake
+.PHONY : CMakeFiles/GMXPlugin.dir/clean
+
+CMakeFiles/GMXPlugin.dir/depend:
+	cd /Users/purpie/gmx/GMXPlugin/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /Users/purpie/gmx/GMXPlugin /Users/purpie/gmx/GMXPlugin /Users/purpie/gmx/GMXPlugin/build /Users/purpie/gmx/GMXPlugin/build /Users/purpie/gmx/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/DependInfo.cmake --color=$(COLOR)
+.PHONY : CMakeFiles/GMXPlugin.dir/depend
+
diff --git a/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/cmake_clean.cmake b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/cmake_clean.cmake
new file mode 100644
index 000000000..6df091674
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/cmake_clean.cmake
@@ -0,0 +1,12 @@
+file(REMOVE_RECURSE
+  "CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.o"
+  "libGMXPlugin.1.0.0.dylib"
+  "libGMXPlugin.1.dylib"
+  "libGMXPlugin.dylib"
+  "libGMXPlugin.pdb"
+)
+
+# Per-language clean rules from dependency scanning.
+foreach(lang CXX)
+  include(CMakeFiles/GMXPlugin.dir/cmake_clean_${lang}.cmake OPTIONAL)
+endforeach()
diff --git a/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/depend.internal b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/depend.internal
new file mode 100644
index 000000000..31fbf0378
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/depend.internal
@@ -0,0 +1,5 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.16
+
+CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.o
+ /Users/purpie/gmx/GMXPlugin/src/GMXPlugin.cxx
diff --git a/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/depend.make b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/depend.make
new file mode 100644
index 000000000..a7997e102
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/depend.make
@@ -0,0 +1,5 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.16
+
+CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.o: ../src/GMXPlugin.cxx
+
diff --git a/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/flags.make b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/flags.make
new file mode 100644
index 000000000..3dbeb3623
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/flags.make
@@ -0,0 +1,10 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.16
+
+# compile CXX with /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
+CXX_FLAGS = -fPIC   -std=c++14
+
+CXX_DEFINES = -DGMXPlugin_EXPORTS
+
+CXX_INCLUDES = -I/Users/purpie/gmx/GMXPlugin -isystem /usr/local/include/eigen3 
+
diff --git a/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/link.txt b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/link.txt
new file mode 100644
index 000000000..39813f25f
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/link.txt
@@ -0,0 +1 @@
+/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  -dynamiclib -Wl,-headerpad_max_install_names -compatibility_version 1.0.0 -current_version 1.0.0 -o libGMXPlugin.1.0.0.dylib -install_name @rpath/libGMXPlugin.1.dylib CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.o  /usr/local/lib/libGeoModelKernel.3.1.1.dylib -lGeoModelXml /usr/local/lib/libGeoGenericFunctions.3.1.1.dylib 
diff --git a/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/progress.make b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/progress.make
new file mode 100644
index 000000000..abadeb0c3
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/progress.make
@@ -0,0 +1,3 @@
+CMAKE_PROGRESS_1 = 1
+CMAKE_PROGRESS_2 = 2
+
diff --git a/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.o b/GMXPlugin/build/CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.o
new file mode 100644
index 0000000000000000000000000000000000000000..181d4ec5bc9064199f8fda3b26e4a6e7a923f5d7
GIT binary patch
literal 65264
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
SsK?s8Wm8~-JDs!Gt^GeHU3o_U

literal 0
HcmV?d00001

diff --git a/GMXPlugin/build/CMakeFiles/Makefile.cmake b/GMXPlugin/build/CMakeFiles/Makefile.cmake
new file mode 100644
index 000000000..eaac96b78
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/Makefile.cmake
@@ -0,0 +1,116 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.16
+
+# The generator used is:
+set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles")
+
+# The top level Makefile was generated from the following files:
+set(CMAKE_MAKEFILE_DEPENDS
+  "CMakeCache.txt"
+  "../CMakeLists.txt"
+  "CMakeFiles/3.16.2/CMakeCXXCompiler.cmake"
+  "CMakeFiles/3.16.2/CMakeSystem.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeCXXCompiler.cmake.in"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeCXXCompilerABI.cpp"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeCXXInformation.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeCommonLanguageInclude.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeCompilerIdDetection.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeDetermineCXXCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeDetermineCompileFeatures.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeDetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeDetermineCompilerABI.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeDetermineCompilerId.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeDetermineSystem.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeFindBinUtils.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeGenericSystem.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeInitializeConfigs.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeLanguageInformation.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeParseImplicitIncludeInfo.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeParseImplicitLinkInfo.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeSystem.cmake.in"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeSystemSpecificInformation.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeTestCXXCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeTestCompilerCommon.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/CMakeUnixFindMake.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/ADSP-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/ARMCC-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/ARMClang-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/AppleClang-CXX.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/AppleClang-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/Borland-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/Clang-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/Clang-DetermineCompilerInternal.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/Clang.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/Comeau-CXX-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/Cray-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/Embarcadero-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/Fujitsu-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/GHS-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/GNU.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/HP-CXX-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/IAR-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/Intel-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/MSVC-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/NVIDIA-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/PGI-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/PathScale-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/SCO-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/TI-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/Watcom-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/XL-CXX-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/FindPackageHandleStandardArgs.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/FindPackageMessage.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/FindXercesC.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/FindZLIB.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Internal/CMakeCheckCompilerFlag.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Internal/FeatureTesting.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Platform/Apple-AppleClang-CXX.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Platform/Apple-Clang-CXX.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Platform/Apple-Clang.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Platform/Darwin-Determine-CXX.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Platform/Darwin-Initialize.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Platform/Darwin.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/Platform/UnixPaths.cmake"
+  "/usr/local/Cellar/cmake/3.16.2/share/cmake/Modules/SelectLibraryConfigurations.cmake"
+  "/usr/local/lib/cmake/GeoModelCore/GeoModelCoreConfig.cmake"
+  "/usr/local/lib/cmake/GeoModelCore/GeoModelCoreConfigVersion.cmake"
+  "/usr/local/lib/cmake/GeoModelCore/GeoModelCoreTargets-noconfig.cmake"
+  "/usr/local/lib/cmake/GeoModelCore/GeoModelCoreTargets.cmake"
+  "/usr/local/lib/cmake/GeoModelTools/GeoModelTools-ExpressionEvaluator-noconfig.cmake"
+  "/usr/local/lib/cmake/GeoModelTools/GeoModelTools-ExpressionEvaluator.cmake"
+  "/usr/local/lib/cmake/GeoModelTools/GeoModelTools-JSONParser-noconfig.cmake"
+  "/usr/local/lib/cmake/GeoModelTools/GeoModelTools-JSONParser.cmake"
+  "/usr/local/lib/cmake/GeoModelTools/GeoModelTools-XMLParser-noconfig.cmake"
+  "/usr/local/lib/cmake/GeoModelTools/GeoModelTools-XMLParser.cmake"
+  "/usr/local/lib/cmake/GeoModelTools/GeoModelToolsConfig.cmake"
+  )
+
+# The corresponding makefile is:
+set(CMAKE_MAKEFILE_OUTPUTS
+  "Makefile"
+  "CMakeFiles/cmake.check_cache"
+  )
+
+# Byproducts of CMake generate step:
+set(CMAKE_MAKEFILE_PRODUCTS
+  "CMakeFiles/3.16.2/CMakeSystem.cmake"
+  "CMakeFiles/3.16.2/CMakeCXXCompiler.cmake"
+  "CMakeFiles/3.16.2/CMakeCXXCompiler.cmake"
+  "CMakeFiles/CMakeDirectoryInformation.cmake"
+  )
+
+# Dependency information for all targets:
+set(CMAKE_DEPEND_INFO_FILES
+  "CMakeFiles/GMXPlugin.dir/DependInfo.cmake"
+  )
diff --git a/GMXPlugin/build/CMakeFiles/Makefile2 b/GMXPlugin/build/CMakeFiles/Makefile2
new file mode 100644
index 000000000..5213249ef
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/Makefile2
@@ -0,0 +1,106 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.16
+
+# Default target executed when no arguments are given to make.
+default_target: all
+
+.PHONY : default_target
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+
+# A target that is always out of date.
+cmake_force:
+
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /usr/local/Cellar/cmake/3.16.2/bin/cmake
+
+# The command to remove a file.
+RM = /usr/local/Cellar/cmake/3.16.2/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /Users/purpie/gmx/GMXPlugin
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /Users/purpie/gmx/GMXPlugin/build
+
+#=============================================================================
+# Directory level rules for the build root directory
+
+# The main recursive "all" target.
+all: CMakeFiles/GMXPlugin.dir/all
+
+.PHONY : all
+
+# The main recursive "preinstall" target.
+preinstall:
+
+.PHONY : preinstall
+
+# The main recursive "clean" target.
+clean: CMakeFiles/GMXPlugin.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target CMakeFiles/GMXPlugin.dir
+
+# All Build rule for target.
+CMakeFiles/GMXPlugin.dir/all:
+	$(MAKE) -f CMakeFiles/GMXPlugin.dir/build.make CMakeFiles/GMXPlugin.dir/depend
+	$(MAKE) -f CMakeFiles/GMXPlugin.dir/build.make CMakeFiles/GMXPlugin.dir/build
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/Users/purpie/gmx/GMXPlugin/build/CMakeFiles --progress-num=1,2 "Built target GMXPlugin"
+.PHONY : CMakeFiles/GMXPlugin.dir/all
+
+# Build rule for subdir invocation for target.
+CMakeFiles/GMXPlugin.dir/rule: cmake_check_build_system
+	$(CMAKE_COMMAND) -E cmake_progress_start /Users/purpie/gmx/GMXPlugin/build/CMakeFiles 2
+	$(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/GMXPlugin.dir/all
+	$(CMAKE_COMMAND) -E cmake_progress_start /Users/purpie/gmx/GMXPlugin/build/CMakeFiles 0
+.PHONY : CMakeFiles/GMXPlugin.dir/rule
+
+# Convenience name for target.
+GMXPlugin: CMakeFiles/GMXPlugin.dir/rule
+
+.PHONY : GMXPlugin
+
+# clean rule for target.
+CMakeFiles/GMXPlugin.dir/clean:
+	$(MAKE) -f CMakeFiles/GMXPlugin.dir/build.make CMakeFiles/GMXPlugin.dir/clean
+.PHONY : CMakeFiles/GMXPlugin.dir/clean
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+	$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/GMXPlugin/build/CMakeFiles/Progress/1 b/GMXPlugin/build/CMakeFiles/Progress/1
new file mode 100644
index 000000000..7b4d68d70
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/Progress/1
@@ -0,0 +1 @@
+empty
\ No newline at end of file
diff --git a/GMXPlugin/build/CMakeFiles/Progress/2 b/GMXPlugin/build/CMakeFiles/Progress/2
new file mode 100644
index 000000000..7b4d68d70
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/Progress/2
@@ -0,0 +1 @@
+empty
\ No newline at end of file
diff --git a/GMXPlugin/build/CMakeFiles/Progress/count.txt b/GMXPlugin/build/CMakeFiles/Progress/count.txt
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/Progress/count.txt
@@ -0,0 +1 @@
+2
diff --git a/GMXPlugin/build/CMakeFiles/TargetDirectories.txt b/GMXPlugin/build/CMakeFiles/TargetDirectories.txt
new file mode 100644
index 000000000..644988fdb
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/TargetDirectories.txt
@@ -0,0 +1,7 @@
+/Users/purpie/gmx/GMXPlugin/build/CMakeFiles/install/local.dir
+/Users/purpie/gmx/GMXPlugin/build/CMakeFiles/install/strip.dir
+/Users/purpie/gmx/GMXPlugin/build/CMakeFiles/install.dir
+/Users/purpie/gmx/GMXPlugin/build/CMakeFiles/list_install_components.dir
+/Users/purpie/gmx/GMXPlugin/build/CMakeFiles/rebuild_cache.dir
+/Users/purpie/gmx/GMXPlugin/build/CMakeFiles/edit_cache.dir
+/Users/purpie/gmx/GMXPlugin/build/CMakeFiles/GMXPlugin.dir
diff --git a/GMXPlugin/build/CMakeFiles/cmake.check_cache b/GMXPlugin/build/CMakeFiles/cmake.check_cache
new file mode 100644
index 000000000..3dccd7317
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/cmake.check_cache
@@ -0,0 +1 @@
+# This file is generated by cmake for dependency checking of the CMakeCache.txt file
diff --git a/GMXPlugin/build/CMakeFiles/progress.marks b/GMXPlugin/build/CMakeFiles/progress.marks
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/GMXPlugin/build/CMakeFiles/progress.marks
@@ -0,0 +1 @@
+2
diff --git a/GMXPlugin/build/Makefile b/GMXPlugin/build/Makefile
new file mode 100644
index 000000000..66c042524
--- /dev/null
+++ b/GMXPlugin/build/Makefile
@@ -0,0 +1,228 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.16
+
+# Default target executed when no arguments are given to make.
+default_target: all
+
+.PHONY : default_target
+
+# Allow only one "make -f Makefile2" at a time, but pass parallelism.
+.NOTPARALLEL:
+
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+
+# A target that is always out of date.
+cmake_force:
+
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /usr/local/Cellar/cmake/3.16.2/bin/cmake
+
+# The command to remove a file.
+RM = /usr/local/Cellar/cmake/3.16.2/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /Users/purpie/gmx/GMXPlugin
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /Users/purpie/gmx/GMXPlugin/build
+
+#=============================================================================
+# Targets provided globally by CMake.
+
+# Special rule for the target install/local
+install/local: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+	/usr/local/Cellar/cmake/3.16.2/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+.PHONY : install/local
+
+# Special rule for the target install/local
+install/local/fast: preinstall/fast
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+	/usr/local/Cellar/cmake/3.16.2/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+.PHONY : install/local/fast
+
+# Special rule for the target install/strip
+install/strip: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+	/usr/local/Cellar/cmake/3.16.2/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+.PHONY : install/strip
+
+# Special rule for the target install/strip
+install/strip/fast: preinstall/fast
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+	/usr/local/Cellar/cmake/3.16.2/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+.PHONY : install/strip/fast
+
+# Special rule for the target install
+install: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/usr/local/Cellar/cmake/3.16.2/bin/cmake -P cmake_install.cmake
+.PHONY : install
+
+# Special rule for the target install
+install/fast: preinstall/fast
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/usr/local/Cellar/cmake/3.16.2/bin/cmake -P cmake_install.cmake
+.PHONY : install/fast
+
+# Special rule for the target list_install_components
+list_install_components:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Runtime\""
+.PHONY : list_install_components
+
+# Special rule for the target list_install_components
+list_install_components/fast: list_install_components
+
+.PHONY : list_install_components/fast
+
+# Special rule for the target rebuild_cache
+rebuild_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
+	/usr/local/Cellar/cmake/3.16.2/bin/cmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+
+.PHONY : rebuild_cache/fast
+
+# Special rule for the target edit_cache
+edit_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
+	/usr/local/Cellar/cmake/3.16.2/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : edit_cache
+
+# Special rule for the target edit_cache
+edit_cache/fast: edit_cache
+
+.PHONY : edit_cache/fast
+
+# The main all target
+all: cmake_check_build_system
+	$(CMAKE_COMMAND) -E cmake_progress_start /Users/purpie/gmx/GMXPlugin/build/CMakeFiles /Users/purpie/gmx/GMXPlugin/build/CMakeFiles/progress.marks
+	$(MAKE) -f CMakeFiles/Makefile2 all
+	$(CMAKE_COMMAND) -E cmake_progress_start /Users/purpie/gmx/GMXPlugin/build/CMakeFiles 0
+.PHONY : all
+
+# The main clean target
+clean:
+	$(MAKE) -f CMakeFiles/Makefile2 clean
+.PHONY : clean
+
+# The main clean target
+clean/fast: clean
+
+.PHONY : clean/fast
+
+# Prepare targets for installation.
+preinstall: all
+	$(MAKE) -f CMakeFiles/Makefile2 preinstall
+.PHONY : preinstall
+
+# Prepare targets for installation.
+preinstall/fast:
+	$(MAKE) -f CMakeFiles/Makefile2 preinstall
+.PHONY : preinstall/fast
+
+# clear depends
+depend:
+	$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+.PHONY : depend
+
+#=============================================================================
+# Target rules for targets named GMXPlugin
+
+# Build rule for target.
+GMXPlugin: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 GMXPlugin
+.PHONY : GMXPlugin
+
+# fast build rule for target.
+GMXPlugin/fast:
+	$(MAKE) -f CMakeFiles/GMXPlugin.dir/build.make CMakeFiles/GMXPlugin.dir/build
+.PHONY : GMXPlugin/fast
+
+src/GMXPlugin.o: src/GMXPlugin.cxx.o
+
+.PHONY : src/GMXPlugin.o
+
+# target to build an object file
+src/GMXPlugin.cxx.o:
+	$(MAKE) -f CMakeFiles/GMXPlugin.dir/build.make CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.o
+.PHONY : src/GMXPlugin.cxx.o
+
+src/GMXPlugin.i: src/GMXPlugin.cxx.i
+
+.PHONY : src/GMXPlugin.i
+
+# target to preprocess a source file
+src/GMXPlugin.cxx.i:
+	$(MAKE) -f CMakeFiles/GMXPlugin.dir/build.make CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.i
+.PHONY : src/GMXPlugin.cxx.i
+
+src/GMXPlugin.s: src/GMXPlugin.cxx.s
+
+.PHONY : src/GMXPlugin.s
+
+# target to generate assembly for a file
+src/GMXPlugin.cxx.s:
+	$(MAKE) -f CMakeFiles/GMXPlugin.dir/build.make CMakeFiles/GMXPlugin.dir/src/GMXPlugin.cxx.s
+.PHONY : src/GMXPlugin.cxx.s
+
+# Help Target
+help:
+	@echo "The following are some of the valid targets for this Makefile:"
+	@echo "... all (the default if no target is provided)"
+	@echo "... clean"
+	@echo "... depend"
+	@echo "... install/local"
+	@echo "... install/strip"
+	@echo "... install"
+	@echo "... list_install_components"
+	@echo "... rebuild_cache"
+	@echo "... edit_cache"
+	@echo "... GMXPlugin"
+	@echo "... src/GMXPlugin.o"
+	@echo "... src/GMXPlugin.i"
+	@echo "... src/GMXPlugin.s"
+.PHONY : help
+
+
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+	$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/GMXPlugin/build/cmake_install.cmake b/GMXPlugin/build/cmake_install.cmake
new file mode 100644
index 000000000..7ad46e004
--- /dev/null
+++ b/GMXPlugin/build/cmake_install.cmake
@@ -0,0 +1,72 @@
+# Install script for directory: /Users/purpie/gmx/GMXPlugin
+
+# Set the install prefix
+if(NOT DEFINED CMAKE_INSTALL_PREFIX)
+  set(CMAKE_INSTALL_PREFIX "/usr/local")
+endif()
+string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Set the install configuration name.
+if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+  if(BUILD_TYPE)
+    string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
+           CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
+  else()
+    set(CMAKE_INSTALL_CONFIG_NAME "")
+  endif()
+  message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
+endif()
+
+# Set the component getting installed.
+if(NOT CMAKE_INSTALL_COMPONENT)
+  if(COMPONENT)
+    message(STATUS "Install component: \"${COMPONENT}\"")
+    set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
+  else()
+    set(CMAKE_INSTALL_COMPONENT)
+  endif()
+endif()
+
+# Is this installation the result of a crosscompile?
+if(NOT DEFINED CMAKE_CROSSCOMPILING)
+  set(CMAKE_CROSSCOMPILING "FALSE")
+endif()
+
+if("x${CMAKE_INSTALL_COMPONENT}x" STREQUAL "xRuntimex" OR NOT CMAKE_INSTALL_COMPONENT)
+  file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE SHARED_LIBRARY FILES
+    "/Users/purpie/gmx/GMXPlugin/build/libGMXPlugin.1.0.0.dylib"
+    "/Users/purpie/gmx/GMXPlugin/build/libGMXPlugin.1.dylib"
+    )
+  foreach(file
+      "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libGMXPlugin.1.0.0.dylib"
+      "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libGMXPlugin.1.dylib"
+      )
+    if(EXISTS "${file}" AND
+       NOT IS_SYMLINK "${file}")
+      if(CMAKE_INSTALL_DO_STRIP)
+        execute_process(COMMAND "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip" -x "${file}")
+      endif()
+    endif()
+  endforeach()
+endif()
+
+if("x${CMAKE_INSTALL_COMPONENT}x" STREQUAL "xRuntimex" OR NOT CMAKE_INSTALL_COMPONENT)
+  file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE SHARED_LIBRARY FILES "/Users/purpie/gmx/GMXPlugin/build/libGMXPlugin.dylib")
+  if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libGMXPlugin.dylib" AND
+     NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libGMXPlugin.dylib")
+    if(CMAKE_INSTALL_DO_STRIP)
+      execute_process(COMMAND "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip" -x "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libGMXPlugin.dylib")
+    endif()
+  endif()
+endif()
+
+if(CMAKE_INSTALL_COMPONENT)
+  set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt")
+else()
+  set(CMAKE_INSTALL_MANIFEST "install_manifest.txt")
+endif()
+
+string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT
+       "${CMAKE_INSTALL_MANIFEST_FILES}")
+file(WRITE "/Users/purpie/gmx/GMXPlugin/build/${CMAKE_INSTALL_MANIFEST}"
+     "${CMAKE_INSTALL_MANIFEST_CONTENT}")
diff --git a/GMXPlugin/data/HelloWorld.gmx b/GMXPlugin/data/HelloWorld.gmx
new file mode 100644
index 000000000..05f18b331
--- /dev/null
+++ b/GMXPlugin/data/HelloWorld.gmx
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE geomodel SYSTEM "geomodel.dtd" []>
+
+<geomodel name="Hello World" version="1.0"
+  xmlns="http://www.nikhef.nl/%7Er29/gmx">
+
+  <materials>
+    <element name="Carbon"      shortname="C"  Z="6"  A="12.011"/>
+    <material name="Diamond" density="3.515">
+      <elementref fraction="1.0" ref="Carbon"/>
+    </material>
+  </materials>
+
+  <shapes>
+    <tube name="ShapeOneMeterCylinder"    rmin="0.2"    rmax="0.5"      zhalflength="0.5"/> 
+  </shapes>
+
+  <addbranch>
+    <logvol name="DiamondCylinder" shape="ShapeOneMeterCylinder" material="Diamond"/>
+  </addbranch>
+
+</geomodel>
diff --git a/GMXPlugin/data/StripBlobRev_5433bf5.xml b/GMXPlugin/data/StripBlobRev_5433bf5.xml
new file mode 100644
index 000000000..21aade7c2
--- /dev/null
+++ b/GMXPlugin/data/StripBlobRev_5433bf5.xml
@@ -0,0 +1,7279 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- If you want to run totally locally, use:
+<!DOCTYPE geomodel SYSTEM "/user/r29/localdisk/athena/apr/InnerDetector/InDetDetDescr/GmxLayouts/data/ITk/Strip/LTF/geomodel.dtd" [
+-->
+<!DOCTYPE geomodel SYSTEM "geomodel.dtd" [
+<!ENTITY materials SYSTEM "Materials.gmx">
+<!ENTITY commondefines SYSTEM "CommonDefines.gmx">
+<!ENTITY itk SYSTEM "ITk.gmx">
+<!ENTITY sensordefines SYSTEM "SensorDefines.gmx">
+<!ENTITY sensors SYSTEM "Sensors.gmx">
+<!ENTITY chips SYSTEM "Chips.gmx">
+<!ENTITY dcdc SYSTEM "DCDC.gmx">
+<!ENTITY stave SYSTEM "Stave.gmx">
+<!ENTITY petalplank SYSTEM "PetalPlank.gmx">
+<!ENTITY barrelhybrids SYSTEM "BarrelHybrids.gmx">
+<!ENTITY barrel SYSTEM "Barrel.gmx">
+<!ENTITY barreldefines SYSTEM "BarrelDefines.gmx">
+<!ENTITY barrelsupports SYSTEM "BarrelSupports.gmx">
+<!ENTITY eos SYSTEM "EOS.gmx">
+<!ENTITY pp1 SYSTEM "PP1.gmx">
+<!ENTITY endcaps SYSTEM "Endcaps.gmx">
+<!ENTITY endcaphybrids SYSTEM "EndcapHybrids.gmx">
+<!ENTITY endcapdefines SYSTEM "EndcapDefines.gmx">
+<!ENTITY endcapsupports SYSTEM "EndcapSupports.gmx">
+<!ENTITY services SYSTEM "LTFStripServices.gmx">
+]>
+<geomodel xmlns="http://www.nikhef.nl/%7Er29/gmx" name="LTF Strip layout" version="1.1">
+
+<!-- 
+     Materials description file for use in gmx to build up GeoModel materials.
+     Please report errors, updates, improvements, requests for new materials to 
+     nigel.hessey@cern.ch
+
+     Densities are in g/cm3 or kg/l or ton/m3; they are converted internally into g/mm3. 
+     Fractions are by weight 
+-->
+
+  <materials> 
+
+    <!-- First 32 elements from Particle Physics Booklet 2002 or http://www.webelements.com/ -->
+    <element name="Hydrogen" shortname="H" Z="1" A="1.00794"/>
+    <element name="Deuterium" shortname="D" Z="1" A="2.0140"/>
+    <element name="Helium" shortname="He" Z="2" A="4.002602"/>
+    <element name="Lithium" shortname="Li" Z="3" A="6.941"/>
+    <element name="Berylium" shortname="Be" Z="4" A="9.012182"/>
+    <element name="Boron" shortname="B" Z="5" A="10.811"/>
+    <element name="Carbon" shortname="C" Z="6" A="12.011"/>
+    <element name="Nitrogen" shortname="N" Z="7" A="14.00674"/>
+    <element name="Oxygen" shortname="O" Z="8" A="15.9994"/>
+    <element name="Fluorine" shortname="F" Z="9" A="18.9984032"/>
+    <element name="Neon" shortname="Ne" Z="10" A="20.1797"/>
+    <element name="Sodium" shortname="Na" Z="11" A="22.98976928"/>
+    <element name="Magnesium" shortname="Mg" Z="12" A="24.3050"/>
+    <element name="Aluminium" shortname="Al" Z="13" A="26.981539"/>
+    <element name="Silicon" shortname="Si" Z="14" A="28.0855"/>
+    <element name="Phosphorous" shortname="P" Z="15" A="30.973762"/>
+    <element name="Sulphur" shortname="S" Z="16" A="32.065"/>
+    <element name="Chlorine" shortname="Cl" Z="17" A="35.453"/>
+    <element name="Argon" shortname="Ar" Z="18" A="39.948"/>
+    <element name="Potassium" shortname="K" Z="19" A="39.0983"/>
+    <element name="Calcium" shortname="Ca" Z="20" A="40.078"/>
+    <element name="Scandium" shortname="Sc" Z="21" A="44.955912"/>
+    <element name="Titanium" shortname="Ti" Z="22" A="47.867"/>
+    <element name="Vanadium" shortname="V" Z="23" A="50.9415"/>
+    <element name="Chromium" shortname="Cr" Z="24" A="51.9961"/>
+    <element name="Manganese" shortname="Mn" Z="25" A="54.938045"/>
+    <element name="Iron" shortname="Fe" Z="26" A="55.845"/>
+    <element name="Cobalt" shortname="Co" Z="27" A="58.93319"/>
+    <element name="Nickel" shortname="Ni" Z="28" A="58.6934"/>
+    <element name="Copper" shortname="Cu" Z="29" A="63.546"/>
+    <element name="Zinc" shortname="Zn" Z="30" A="65.38"/>
+    <element name="Gallium" shortname="Ga" Z="31" A="69.723"/>
+    <element name="Germanium" shortname="Ge" Z="32" A="72.61"/>
+
+    <!-- Other elements used in detectors -->
+
+    <element name="Niobium" shortname="Nb" Z="41" A="92.90638"/>
+    <element name="Molybdenum" shortname="Mo" Z="42" A="95.96"/>
+    <element name="Rhenium" shortname="Rh" Z="45" A="102.90550"/>
+    <element name="Silver" shortname="Ag" Z="47" A="107.8682"/>
+    <element name="Tin" shortname="Sn" Z="50" A="118.710"/>
+    <element name="Xenon" shortname="Xe" Z="54" A="131.29"/>
+    <element name="Cesium" shortname="Cs" Z="55" A="132.9054519"/>
+    <element name="Barium" shortname="Ba" Z="56" A="137.327"/>
+    <element name="Tungsten" shortname="W" Z="74" A="183.84"/>
+    <element name="Platinum" shortname="Pt" Z="78" A="195.08"/>
+    <element name="Gold" shortname="Au" Z="79" A="196.966569"/>
+    <element name="Lead" shortname="Pb" Z="82" A="207.2"/>
+    <element name="Uranium" shortname="U" Z="92" A="238.0289"/>
+
+    <!-- Fractions are by mass; density in g/cm3 -->
+
+    <!-- Pure Metals -->
+
+    <material name="BeMetal" density="1.848">
+      <elementref fraction="1.00000" ref="Berylium"/>
+    </material>
+    <material name="AlMetal" density="2.700">
+      <elementref fraction="1.00000" ref="Aluminium"/>
+    </material>
+    <material name="SiMetal" density="2.3290">
+      <elementref fraction="1.00000" ref="Silicon"/>
+    </material>
+    <material name="TiMetal" density="4.507">
+      <elementref fraction="1.00000" ref="Titanium"/>
+    </material>
+    <material name="VaMetal" density="6.110">
+      <elementref fraction="1.00000" ref="Vanadium"/>
+    </material>
+    <material name="FeMetal" density="7.874">
+      <elementref fraction="1.00000" ref="Iron"/>
+    </material>
+    <material name="NiMetal" density="8.900">
+      <elementref fraction="1.00000" ref="Nickel"/>
+    </material>
+    <material name="CuMetal" density="8.960">
+      <elementref fraction="1.00000" ref="Copper"/>
+    </material>
+    <material name="GeMetal" density="5.323">
+      <elementref fraction="1.00000" ref="Germanium"/>
+    </material>
+    <material name="SnMetal" density="7.310">
+      <elementref fraction="1.00000" ref="Tin"/>
+    </material>
+    <material name="AgMetal" density="10.490">
+      <elementref fraction="1.00000" ref="Silver"/>
+    </material>
+    <material name="AuMetal" density="19.300">
+      <elementref fraction="1.00000" ref="Gold"/>
+    </material>
+    <material name="WMetal" density="19.250">
+      <elementref fraction="1.00000" ref="Tungsten"/>
+    </material>
+    <material name="PtMetal" density="21.090">
+      <elementref fraction="1.00000" ref="Platinum"/>
+    </material>
+    <material name="PbMetal" density="11.340">
+      <elementref fraction="1.00000" ref="Lead"/>
+    </material>
+    <material name="UMetal" density="19.050">
+      <elementref fraction="1.00000" ref="Uranium"/>
+    </material>
+
+    <!-- Alloys -->
+
+    <material name="SS304" density="7.95">
+      <elementref fraction="0.6855" ref="Iron"/>
+      <elementref fraction="0.18" ref="Chromium"/>
+      <elementref fraction="0.08" ref="Nickel"/>
+      <elementref fraction="0.015" ref="Carbon"/>
+      <elementref fraction="0.02" ref="Manganese"/>
+      <elementref fraction="0.01" ref="Silicon"/>
+      <elementref fraction="0.002" ref="Phosphorous"/>
+      <elementref fraction="0.0015" ref="Sulphur"/>
+      <elementref fraction="0.006" ref="Molybdenum"/>
+    </material>
+    <material name="SS316" density="8.0"> <!-- E.g. Swagelok -->
+      <elementref fraction="0.65225" ref="Iron"/>
+      <elementref fraction="0.17" ref="Chromium"/>
+      <elementref fraction="0.12" ref="Nickel"/>
+      <elementref fraction="0.0008" ref="Carbon"/>
+      <elementref fraction="0.02" ref="Manganese"/>
+      <elementref fraction="0.0075" ref="Silicon"/>
+      <elementref fraction="0.00045" ref="Phosphorous"/>
+      <elementref fraction="0.003" ref="Sulphur"/>
+      <elementref fraction="0.001" ref="Nitrogen"/>
+      <elementref fraction="0.025" ref="Molybdenum"/>
+    </material>
+
+    <!-- Other pure solids -->
+
+    <material name="Graphite" density="2.267"> <!-- Wikipedia Carbon -->
+      <elementref fraction="1.0" ref="Carbon"/>
+    </material>
+    <material name="Diamond" density="3.515"> 
+      <elementref fraction="1.0" ref="Carbon"/>
+    </material>
+    <material name="CFoam" density="0.3"> 
+      <elementref fraction="1.0" ref="Carbon"/>
+    </material>
+<material name="k9Allcomp" density="0.23"> 
+      <elementref fraction="1.0" ref="Carbon"/>
+    </material>
+
+    <!-- Liquids -->
+    <chemical name="CO2">
+      <elemcontent ref="Carbon" quantity="1"/>
+      <elemcontent ref="Oxygen" quantity="2"/>
+    </chemical>
+    <material name="H_Liquid" density="0.0708"> 
+      <elementref fraction="1.0" ref="Hydrogen"/>
+    </material>
+    <material name="D_Liquid" density="0.169"> 
+      <elementref fraction="1.0" ref="Deuterium"/>
+    </material>
+    <material name="HeLiquid" density="0.1249">
+      <elementref fraction="1.0" ref="Helium"/>
+    </material>
+    <!-- CO2 density from http://encyclopedia.airliquide.com/Encyclopedia.asp?GasID=26 -20C and 20 bar -->
+    <material name="CO2Liquid" density="1.03"> 
+      <chemicalref fraction="1" ref="CO2"/>
+    </material>
+    <material name="CO2Mixed" density="0.41"> <!-- 40 % liquid by mass -->
+      <chemicalref fraction="1" ref="CO2"/>
+    </material>
+
+    <!-- Gases -->
+
+    <material name="N2atMinus20" density="1.307e-3"> <!-- g/cm3 N2 at -20 degC -->
+      <elementref fraction="1.00000" ref="Nitrogen"/>
+    </material>
+    <material name="N2" density="1.2504e-3 * 273.15/293.15 * 96265/100000"> 
+      <!-- Wiki for N2 at STP adjusted to 20 degC and CERN altitude --> 
+      <elementref fraction="1.00000" ref="Nitrogen"/>
+    </material>
+    <material name="Air" density="1.205e-3"> <!-- 78 % N2 + 21 % O2 + 1 % Ar by mass A = 2*14, 2*16, 40 -->
+      <elementref fraction="0.7541" ref="Nitrogen"/>
+      <elementref fraction="0.2321" ref="Oxygen"/>
+      <elementref fraction="0.0138" ref="Argon"/>
+    </material>
+
+    <!-- Adhesives -->
+
+    <material name="Bisphenol-A" density="1.2">
+      <elementref fraction="0.03" ref="Hydrogen"/>
+      <elementref fraction="0.75" ref="Carbon"/>
+      <elementref fraction="0.10" ref="Nitrogen"/>
+      <elementref fraction="0.12" ref="Oxygen"/>
+    </material>
+    <material name="CyanateEster" density="1.2">
+       <materialref fraction="1.0" ref="Bisphenol-A"/> <!-- It's a secret what they use --> 
+    </material>
+
+    <!-- Ref Product Information Sheet, Dow Corning, for SE4445 CV Gel, and SDS sheet (Canada) for fraction Alumina, 
+         given as 77-78 % for B, range 70 - 86 ^% for A, so we take midrange 78. Ignore 0.77 % carbon. Ignore 
+         Octamethylcyclotetrasiloxane 0.11 %  -->
+    <!-- Ref: Wikipedia Polydimethylsiloxane for formula -->
+    <chemical name="C2H6OSi"> <!-- AKA Polydimethylsiloxane -->
+      <elemcontent quantity="2" ref="Carbon"/>
+      <elemcontent quantity="6" ref="Hydrogen"/>
+      <elemcontent quantity="1" ref="Oxygen"/>
+      <elemcontent quantity="1" ref="Silicon"/>
+    </chemical>
+    <material name="SE4445" density="2.36">
+      <chemicalref fraction="0.78" ref="Al2O3"/>
+      <chemicalref fraction="0.22" ref="C2H6OSi"/>
+    </material>
+
+    <!-- Plastics -->
+
+    <material name="Nylon" density="1.14">
+      <elementref fraction="0.636853" ref="Carbon"/>
+      <elementref fraction="0.097980" ref="Hydrogen"/>
+      <elementref fraction="0.141388" ref="Nitrogen"/>
+      <elementref fraction="0.123779" ref="Oxygen"/>
+    </material>
+    <material name="Lexan" density="1.2">
+      <elementref fraction="0.755749" ref="Carbon"/>
+      <elementref fraction="0.055493" ref="Hydrogen"/>
+      <elementref fraction="0.188757" ref="Nitrogen"/>
+    </material>
+    <material name="Mylar" density="1.39">
+      <elementref fraction="0.625016" ref="Carbon"/>
+      <elementref fraction="0.041960" ref="Hydrogen"/>
+      <elementref fraction="0.333024" ref="Nitrogen"/>
+    </material>
+    <material name="Polyethylene" density="0.935">
+      <elementref fraction="0.856285" ref="Carbon"/>
+      <elementref fraction="0.143715" ref="Hydrogen"/>
+    </material>
+    <material name="Kapton" density="1.42"> <!-- Aka polyimide -->
+      <elementref fraction="0.691133" ref="Carbon"/>
+      <elementref fraction="0.026363" ref="Hydrogen"/>
+      <elementref fraction="0.209234" ref="Nitrogen"/>
+      <elementref fraction="0.073270" ref="Oxygen"/>
+    </material>
+    <material name="Plexiglas" density="1.18"> <!-- aka poly methyl-methacrylate, acrylate -->
+      <elementref fraction="0.599846" ref="Carbon"/>
+      <elementref fraction="0.080541" ref="Hydrogen"/>
+      <elementref fraction="0.319613" ref="Nitrogen"/>
+    </material>
+    <material name="PolystyreneScintillator" density="1.032">
+      <elementref fraction="0.922579" ref="Carbon"/>
+      <elementref fraction="0.077421" ref="Hydrogen"/>
+    </material>
+    <material name="Teflon" density="2.2">
+      <elementref fraction="0.240183" ref="Carbon"/>
+      <elementref fraction="0.759817" ref="Fluorine"/>
+    </material>
+    <material name="PolyvinyltolueneScintillator" density="1.032">
+      <elementref fraction="0.914710" ref="Carbon"/>
+      <elementref fraction="0.085290" ref="Hydrogen"/>
+    </material>
+    <material name="BoratedPolyethylene" density="1.112"> <!-- Ref. www.marshield.com/borated-polyethylene -->
+      <elementref fraction="0.050" ref="Boron"/>         <!-- 5 % by weight -->
+      <elementref fraction="0.111" ref="Oxygen"/>        <!-- (3 * Awt O) / (2 * Awt B) * 0.05 --> 
+      <materialref fraction="0.839" ref="Polyethylene"/>  <!-- The rest -->
+    </material>
+
+
+    <!-- From Stephen Haywood et al spreadsheet Materials.xls at 
+         http://hepwww.rl.ac.uk/atlas-sct/engineering/material_budget/ 
+         But: ignore the densities there, they are nonsense? -->
+    <chemical name="C18O3H20">
+      <elemcontent quantity="18" ref="Carbon"/>
+      <elemcontent quantity="20" ref="Hydrogen"/>
+      <elemcontent quantity="3" ref="Oxygen"/>
+    </chemical>
+    <material name="Epoxy" density="1.2"> <!-- Density for Araldite 2011 at 25 degC, from hazard sheet -->
+      <chemicalref fraction="1.0" ref="C18O3H20"/>
+    </material>
+
+    <chemical name="H2O">
+      <elemcontent quantity="1" ref="Oxygen"/>
+      <elemcontent quantity="2" ref="Hydrogen"/>
+    </chemical>
+    <material name="Water" density="1.0">
+      <chemicalref fraction="1.0" ref="H2O"/>
+    </material>
+
+    <chemical name="C19O3H12">
+      <elemcontent quantity="19" ref="Carbon"/>
+      <elemcontent quantity="12" ref="Hydrogen"/>
+      <elemcontent quantity="3" ref="Oxygen"/>
+    </chemical>
+    <material name="Peek" density="1.32"> <!-- Wikipedia -->
+      <chemicalref fraction="1.0" ref="C19O3H12"/>
+    </material>
+    <material name="Torlon" density="1.45"> <!-- Wikipedia -->
+      <chemicalref fraction="1.0" ref="C19O3H12"/>
+    </material>
+    <chemical name="C37O4H24N2">
+      <elemcontent quantity="37" ref="Carbon"/>
+      <elemcontent quantity="24" ref="Hydrogen"/>
+      <elemcontent quantity="4" ref="Oxygen"/>
+      <elemcontent quantity="2" ref="Nitrogen"/>
+    </chemical>
+    <material name="PEI" density="1.27"> <!-- aka Ultem, density taken from Quadrant -->
+      <chemicalref fraction="1.0" ref="C37O4H24N2"/>
+    </material>
+
+    <chemical name="BN">
+      <elemcontent quantity="1" ref="Boron"/>
+      <elemcontent quantity="1" ref="Nitrogen"/>
+    </chemical>
+    <material name="BoronNitride" density="2.28"> <!-- Density is amorphous form; see Wikipedia for others -->
+      <chemicalref fraction="1.0" ref="BN"/>
+    </material>
+
+    <chemical name="B2O3">
+      <elemcontent quantity="2" ref="Boron"/>
+      <elemcontent quantity="3" ref="Oxygen"/>
+    </chemical>
+    <material name="BoronOxide" density="2.46"> <!-- B2O3; other oxides exist. Amorphous/liquid form density -->
+      <chemicalref fraction="1.0" ref="B2O3"/>
+    </material>
+
+    <chemical name="Al2O3">
+      <elemcontent quantity="2" ref="Aluminium"/>
+      <elemcontent quantity="3" ref="Oxygen"/>
+    </chemical>
+    <material name="AluminiumOxide" density="4.00">
+      <chemicalref fraction="1.0" ref="Al2O3"/>
+    </material>
+
+    <chemical name="AlN">
+      <elemcontent quantity="1" ref="Aluminium"/>
+      <elemcontent quantity="1" ref="Nitrogen"/>
+    </chemical>
+    <material name="AluminiumNitride" density="3.26">
+      <chemicalref fraction="1.0" ref="AlN"/>
+    </material>
+
+    <material name="SolderSnPb" density="8.52"> <!-- http://www.efunda.com/materials/solders/tin_lead.cfm for density -->
+      <elementref fraction="0.6" ref="Tin"/>
+      <elementref fraction="0.4" ref="Lead"/>
+    </material>
+
+    <material name="SolderSnPbAg" density="8.41"> <!-- Alloy 104; http://alasir.com/reference/solder_alloys/ -->
+      <elementref fraction="0.625" ref="Tin"/>
+      <elementref fraction="0.361" ref="Lead"/>
+      <elementref fraction="0.014" ref="Silver"/>
+    </material>
+
+    <material name="BoronNitrideEpoxy" density="1.4"> <!-- 1/(0.7/ density epoxy + 0.3/ density BN) -->
+      <materialref fraction="0.70" ref="Epoxy"/>
+      <materialref fraction="0.30" ref="BoronNitride"/>
+    </material>
+    <material name="BoronNitrideEpoxyEC" density="1.49"> <!-- 1/(0.8/ density epoxy + 0.2/ density BN) -->
+      <materialref fraction="0.80" ref="Epoxy"/>
+      <materialref fraction="0.20" ref="BoronNitride"/>
+    </material>
+    <material name="SilverEpoxy" density="3.23"> <!-- From material densities --> 
+      <elementref fraction="0.71" ref="Silver"/>
+      <materialref fraction="0.29" ref="Epoxy"/>
+    </material>
+
+    <!-- Ref http://www.camglassblowing.co.uk/gproperties.htm -->
+    <material name="Glass" density="2.20"> <!-- AKA Silica and Quartz -->
+      <elementref fraction="0.5326" ref="Oxygen"/>
+      <elementref fraction="0.4674" ref="Silicon"/>
+    </material>
+    <!-- Ref http://www.camglassblowing.co.uk/gproperties.htm -->
+    <material name="BorosilicateGlass" density="2.23">
+      <elementref fraction="0.5422" ref="Oxygen"/>
+      <elementref fraction="0.3633" ref="Silicon"/>
+      <elementref fraction="0.0451" ref="Boron"/>
+      <elementref fraction="0.0295" ref="Sodium"/>
+      <elementref fraction="0.0199" ref="Aluminium"/>
+    </material>
+
+    <material name="FR4" density="1.85"> <!-- Wikipedia density -->
+      <materialref fraction="0.229" ref="Epoxy"/>
+      <materialref fraction="0.771" ref="Glass"/>
+    </material>
+
+    <!-- Others -->
+
+    <material name="K13D2U" density="1.820">
+      <materialref fraction="0.721" ref="Graphite"/>
+      <materialref fraction="0.279" ref="CyanateEster"/>
+    </material>
+
+<material name="K13C2U" density="1.6">
+      <materialref fraction="0.57" ref="Graphite"/>
+      <materialref fraction="0.43" ref="CyanateEster"/>
+    </material>
+
+    <material name="CFRP" density="1.7">
+      <materialref fraction="0.721" ref="Graphite"/>
+      <materialref fraction="0.279" ref="CyanateEster"/>
+    </material>
+
+    <material name="T300CF" density="1.52"> <!--density from Sergio-->
+      <materialref fraction="0.93" ref="Graphite"/><!--fraction from www.toraycfa.com/pdfs/T300DataSheet.pdf -->
+      <materialref fraction="0.07" ref="CyanateEster"/>
+    </material>
+
+    <material name="CCAW" density="3.322"> <!-- 10 % by volume Cu -->
+      <elementref fraction="0.7315" ref="Aluminium"/>
+      <elementref fraction="0.2685" ref="Copper"/>
+    </material>
+
+    <!-- Honeycombs -->
+    <material name="Honeycomb2pcf" density="0.032037">
+        <materialref fraction="1.0" ref="CFRP"/>
+    </material>
+    <material name="Honeycomb3pcf" density="0.048">
+        <materialref fraction="1.0" ref="CFRP"/>
+    </material>
+    <material name="Honeycomb5pcf" density="0.080092">
+        <materialref fraction="1.0" ref="CFRP"/>
+    </material>
+
+    <material name="Honeycomb10pcf" density="0.160185">
+        <materialref fraction="1.0" ref="CFRP"/>
+    </material>
+
+    <material name="Polymethacrylamide" density="1.11">
+        <elementref fraction=".5645" ref="Carbon"/>
+        <elementref fraction=".1645" ref="Nitrogen"/>
+        <elementref fraction=".1880" ref="Oxygen"/>
+        <elementref fraction=".0829" ref="Hydrogen"/>
+    </material>
+
+<!--
+    <material name="Polymethacrylimide" density="1.0"> 
+        <elementref fraction=".4805" ref="Carbon"/>
+        <elementref fraction=".0578" ref="Nitrogen"/>
+        <elementref fraction=".3531" ref="Oxygen"/>
+        <elementref fraction=".1084" ref="Hydrogen"/>
+    </material>
+-->
+    <!-- Found one picture with C29 N3 O16 H78 Density unknown -->
+    <chemical name="Polymethacrylimide">
+        <elemcontent ref="Carbon" quantity="29"/>
+        <elemcontent ref="Nitrogen" quantity="3"/>
+        <elemcontent ref="Oxygen" quantity="16"/>
+        <elemcontent ref="Hydrogen" quantity="78"/>
+    </chemical>
+
+    <material name="Rohacell110A" density="0.110">
+        <chemicalref fraction="1.0" ref="Polymethacrylimide"/>
+    </material>
+
+    <material name="Rohacell71A" density="0.075">
+        <chemicalref fraction="1.0" ref="Polymethacrylimide"/>
+    </material>
+
+    <material name="Rohacell51A" density="0.052">
+        <chemicalref fraction="1.0" ref="Polymethacrylimide"/>
+    </material>
+
+    <material name="Rohacell31A" density="0.032">
+        <chemicalref fraction="1.0" ref="Polymethacrylimide"/>
+    </material>
+
+<material name="TiMetal_heat" density="0.33333">
+      <elementref fraction="1.00000" ref="Titanium"/>
+    </material>
+<material name="PVC" density="1.38">
+        <elementref fraction="0.384" ref="Carbon"/>
+        <elementref fraction="0.048" ref="Hydrogen"/>
+	<elementref fraction="0.568" ref="Chlorine"/>	
+    </material>
+<material name="PE" density="0.935">
+        <elementref fraction="0.86" ref="Carbon"/>
+        <elementref fraction="0.14" ref="Hydrogen"/>
+	
+    </material>
+<material name="Poliax" density="1.42*1.19"> <!-- Aka polyimide -->
+      <elementref fraction="0.691133" ref="Carbon"/>
+      <elementref fraction="0.026363" ref="Hydrogen"/>
+      <elementref fraction="0.209234" ref="Nitrogen"/>
+      <elementref fraction="0.073270" ref="Oxygen"/>
+    </material>
+  </materials>
+
+
+<!-- Inner Tracker dimensions and things common to barrel and endcap. -->
+<defines>
+  <var name="PI" value="acos(-1.0)"/>
+  <var name="DEG" value="PI/180."/> <!-- Use as value="10*DEG" so it converts to radians for you -->
+  <var name="EPS" value="2.e-3"/>  <!-- 2 micron to subtract from touching volumes to avoid G4 errors -->
+
+  <vector name="CNL" value="0 0 0 0 0 0 0 0 0"/> <!-- Special for indexes; length >= no. levels -->
+
+  <!--
+      ITk (defined in C++ code) contains Strip (aka SCT) + Pixel + Beampipe
+      SCT contains PolymoderatorOC and StripB + StripB_ServicesGap + StripB_ServicesEC and StripEC + StripEC_Services + StripPP1
+      Numbers mostly from EDMS 1530699 v1.3   
+  -->
+  
+  <var name="ITkOuterRadius" value="1130."/> <!-- Cryo inner r is 1150. mm, ref. blue book ATLAS exp at LHC -->
+  <var name="ITkHalfLength" value="3404"/> <!-- ITk env. v 1.4 has 3505 but reduced to 3475 to make space for HGTD 
+                                                                 E-mail Simon Viel, 18/10/2016 -->
+
+  <!-- E-mail Sabine 2015-10-26 for next three numbers -->
+  <var name="StripOuterRadius" value="ITkOuterRadius"/> 
+  <var name="StripInnerRadius" value="346.701"/> <!-- Previously 361.751, now 346.701 -->
+  <var name="StripHalfLength" value="3326.-150"/>  
+
+  <var name="PolymoderatorOCOuterRadius" value="StripOuterRadius"/>
+  <var name="PolymoderatorOCInnerRadius" value="1045."/>
+ <!-- <var name="PolymoderatorOCLength"         value="2*3170.+0.1"/> -->
+ <!-- DeGeorge envelope drawing -->
+ <var name="PolymoderatorOCLength" value="2*3020.+0.1"/> <!-- DeGeorge envelope drawing -->	
+
+  <var name="StripB_OuterRadius" value="PolymoderatorOCInnerRadius"/>
+  <var name="StripB_InnerRadius" value="StripInnerRadius"/>
+  <var name="StripB_HalfLength" value="1455."/> <!-- 14 modules * 98 mm pitch + 4 mm spare + 75 mm for z-brace + 4mm spare -->
+
+  <var name="StripB_ServicesGapOuterRadius" value="1015."/>
+  <var name="StripB_ServicesGapInnerRadius" value="StripInnerRadius"/>
+  <var name="StripB_ServicesGapZ_Start" value="StripB_HalfLength"/>
+  <var name="StripB_ServicesGapZ_End" value="StripB_ServicesGapZ_Start + 25."/> <!-- Was 100, shrink by 75 to test -->
+  <var name="StripB_ServicesGapHalfLength" value="(StripB_ServicesGapZ_End - StripB_ServicesGapZ_Start) / 2."/> 
+
+  <var name="StripB_ServicesEC_OuterRadius" value="StripB_OuterRadius"/>
+  <var name="StripB_ServicesEC_InnerRadius" value="StripB_ServicesGapOuterRadius"/>
+  <var name="StripB_ServicesEC_Z_Start" value="StripB_ServicesGapZ_Start"/>
+  <var name="StripB_ServicesEC_Z_End" value="StripHalfLength"/>
+  <var name="StripB_ServicesEC_HalfLength" value="(StripB_ServicesEC_Z_End - StripB_ServicesEC_Z_Start) / 2."/> 
+
+  <var name="StripEC_OuterRadius" value="989."/> <!-- Was 985. Increased to accommodate M. Doets wheel design. --> 
+  <var name="StripEC_InnerRadius" value="StripInnerRadius"/>
+  <var name="StripEC_Z_Start" value="StripB_ServicesGapZ_End"/>   
+  <var name="StripEC_Z_End" value="3130.-150. - 1."/>   
+  <var name="StripEC_HalfLength" value="(StripEC_Z_End - StripEC_Z_Start) / 2."/>
+
+  <var name="StripEC_ServicesOuterRadius" value="1011"/> <!-- Env. def v1.4 -->
+  <var name="StripEC_ServicesInnerRadius" value="StripEC_OuterRadius"/>
+  <var name="StripEC_ServicesZ_Start" value="StripEC_Z_Start"/>
+  <var name="StripEC_ServicesZ_End" value="StripEC_Z_End - 2."/>
+  <var name="StripEC_ServicesHalfLength" value="(StripEC_ServicesZ_End - StripEC_ServicesZ_Start) / 2."/>
+
+  <var name="StripEC_PP1OuterRadius" value="StripB_ServicesEC_InnerRadius"/>
+  <var name="StripEC_PP1InnerRadius" value="StripInnerRadius"/>
+  <var name="StripEC_PP1Z_Start" value="StripEC_Z_End"/>
+  <var name="StripEC_PP1Z_End" value="StripHalfLength"/>
+  <var name="StripEC_PP1HalfLength" value="(StripEC_PP1Z_End - StripEC_PP1Z_Start) / 2."/>
+
+</defines>
+
+
+<transformation name="IdentityTransform">
+  <translation/>
+</transformation>
+
+<positionindex>
+  <addindex name="barrel_endcap"/>
+  <addindex name="layer_wheel"/>
+  <addindex name="phi_module"/>
+  <addindex name="eta_module"/>
+  <addindex name="side"/>
+</positionindex>
+
+<!-- Material mixture for sensor local supports. Used in SS, LS and petal cores, 
+     with density scaled to give required radiation length. -->
+<materials>
+  <material name="MatStaveSupport" density="1.0"> 
+    <elementref ref="Carbon" fraction="0.70"/>
+    <elementref ref="Aluminium" fraction="0.20"/>
+    <elementref ref="Hydrogen" fraction="0.06"/>
+    <elementref ref="Oxygen" fraction="0.03"/>
+    <elementref ref="Copper" fraction="0.01"/>
+  </material>
+</materials>
+
+
+<!-- Inner Tracker common items like polythene moderator, outer cyl support etc. -->
+
+<defines>
+
+  <!-- Ref EDMS 1516118, Viehhauser, p. 10; deGeorge envelope model for length -->
+  <var name="OC_Length" value="PolymoderatorOCLength - 1."/>
+  <var name="OC_SkinThickness" value="2.5"/>
+  <var name="OC_CoreThickness" value="30."/>
+  <var name="OC_OuterSkinOuterR" value="1101."/>
+  <var name="OC_OuterSkinInnerR" value="OC_OuterSkinOuterR - OC_SkinThickness"/>
+  <var name="OC_InnerSkinOuterR" value="OC_OuterSkinInnerR - OC_CoreThickness"/>
+  <var name="OC_InnerR" value="OC_InnerSkinOuterR - OC_SkinThickness"/>
+  <var name="PolyModOuterR" value="PolymoderatorOCOuterRadius"/>
+  <var name="PolyModThickness" value="25."/> <!-- ref LoI p. 101 -->
+  <var name="PolyModInnerR" value="PolymoderatorOCOuterRadius - PolyModThickness"/>
+
+  <var name="BulkheadRI" value="StripInnerRadius + 5"/>
+  <var name="BulkheadRO" value="StripEC_ServicesInnerRadius - 25."/>
+  <var name="BulkheadT" value="6"/> <!-- Guess, 3 May 2016: two facesheets of 3 mm CF -->
+  <var name="BulkheadTranslation" value="OC_Length/2 - BulkheadT/2 - 2"/>
+
+  <var name="EC_PolyModRI" value="StripInnerRadius"/>           <!-- To continue from Pixel polyM -->
+  <var name="EC_PolyModRO" value="PolymoderatorOCInnerRadius"/> <!-- Bit arbitrary. Space for type II limits it -->
+  <var name="EC_PolyModT" value="70."/>                        <!-- Ben Smart choice for pixel part -->
+
+  <!-- We put PP1's here because they are attached to the supports rather than barrel or endcap -->
+  <var name="B_PP1_Z_Start" value="OC_Length / 2 + 1."/>
+  <var name="B_PP1_Z_End" value="StripHalfLength - 1."/>
+  <var name="B_PP1_RI" value="StripB_ServicesEC_OuterRadius + 1."/>
+  <var name="B_PP1_RO" value="OC_OuterSkinOuterR - 1."/>
+  <var name="B_PP1_L" value="B_PP1_Z_End - B_PP1_Z_Start"/>
+<!--
+  <var name="EC_PP1_Z_Start"     value="3170 + 1."/>
+  <var name="EC_PP1_Z_End"       value="3270 - 1."/>
+-->
+  <var name="EC_PP1_Z_Start" value="3020 + 1."/>
+  <var name="EC_PP1_Z_End" value="3120 - 1."/>
+  <var name="EC_PP1_RI" value="750."/>
+  <var name="EC_PP1_RO" value="1000+EPS"/><!--BulkheadRO"/>-->
+  <var name="EC_PP1_L" value="EC_PP1_Z_End - EC_PP1_Z_Start"/>
+<!--
+  <var name="Pix_PP1_middle_Z_Start"     value="3175.8 + EPS"/>      
+  <var name="Pix_PP1_middle_Z_End"       value="3242.8"/>
+  <var name="Pix_PP1_middle_RI"          value="347."/>
+  <var name="Pix_PP1_middle_RO"          value="420."/>
+  <var name="Pix_PP1_middle_L"           value="Pix_PP1_middle_Z_End - Pix_PP1_middle_Z_Start"/>
+
+  <var name="Pix_PP1_outer_Z_Start"     value="3020 + EPS"/>          
+  <var name="Pix_PP1_outer_Z_End"       value="3175.8"/>
+  <var name="Pix_PP1_outer_RI"          value="347."/>
+  <var name="Pix_PP1_outer_RO"          value="700."/>
+  <var name="Pix_PP1_outer_L"           value="Pix_PP1_outer_Z_End - Pix_PP1_outer_Z_Start"/>
+
+  <var name="HeatExchanger_w"    value="50"/>
+  <var name="HeatExchanger_t"    value="HeatExchanger_w"/>
+  <var name="HeatExchanger_l"    value="120"/>
+<var name="HeatExchanger_z"    value="3070"/>
+     <var name="HeatExchanger_Ri"    value="400"/>
+-->
+</defines>
+
+<shapes>
+  <tube name="shPolyModOCEnvelope" rmin="PolymoderatorOCInnerRadius" rmax="PolymoderatorOCOuterRadius - 2*EPS" zhalflength="PolymoderatorOCLength/2"/>
+
+  <tube name="shOC_InnerFace" rmin="OC_InnerR" rmax="OC_InnerSkinOuterR" zhalflength="OC_Length/2"/> 
+  <tube name="shOC_Core" rmin="OC_InnerSkinOuterR + EPS" rmax="OC_OuterSkinInnerR - EPS" zhalflength="OC_Length/2"/> 
+  <tube name="shOC_OuterFace" rmin="OC_OuterSkinInnerR" rmax="OC_OuterSkinOuterR" zhalflength="OC_Length/2"/> 
+  <tube name="shBulkhead" rmin="BulkheadRI" rmax="BulkheadRO" zhalflength="BulkheadT/2"/>
+
+  <tube name="shPolyMod" rmin="PolyModInnerR" rmax="PolyModOuterR - 3*EPS" zhalflength="OC_Length/2"/>
+  <tube name="shEC_PolyMod" rmin="EC_PolyModRI + EPS" rmax="EC_PolyModRO - EPS" zhalflength="EC_PolyModT/2"/>
+
+  <tube name="shB_PP1" rmin="B_PP1_RI" rmax="B_PP1_RO" zhalflength="B_PP1_L/2"/>
+  <tube name="shEC_PP1" rmin="EC_PP1_RI" rmax="EC_PP1_RO" zhalflength="EC_PP1_L/2"/>
+
+  <!--<tube name="shPixPP1Envelope"      rmin="Pix_PP1_middle_RI"                rmax="B_PP1_RO"              zhalflength="Pix_PP1_middle_L/2"/>-->
+  <!--<tube name="shPix_PP1_middle"      rmin="Pix_PP1_middle_RI"                rmax="Pix_PP1_middle_RO"              zhalflength="Pix_PP1_middle_L/2"/>
+  <tube name="shPix_PP1_outer"       rmin="Pix_PP1_outer_RI"                rmax="Pix_PP1_outer_RO"                zhalflength="Pix_PP1_outer_L/2"/>
+  <box name="shHeatExTriplet" xhalflength="HeatExchanger_l/2"  yhalflength="3*HeatExchanger_w/2" zhalflength="HeatExchanger_t/2"/>
+<box name="shHeatExSingle" xhalflength="HeatExchanger_l/2"  yhalflength="HeatExchanger_w/2" zhalflength="HeatExchanger_t/2"/> 
+
+<union name="pixPP1union">
+    <shaperef ref="shPix_PP1_outer"/>
+    <transformation name="PlacePixPP1middle">
+      <translation z="Pix_PP1_outer_L+Pix_PP1_middle_L/2"/>
+    </transformation>
+    <shaperef ref="shPix_PP1_middle"/>
+  </union>-->
+</shapes>
+
+<logvol name="EC_PolyMod" shape="shEC_PolyMod" material="BoratedPolyethylene"/>
+
+<logvol name="PolyModOCEnvelope" shape="shPolyModOCEnvelope" material="N2">
+
+  <logvol name="OC_InnerFace" shape="shOC_InnerFace" material="CFRP"/>
+  <logvol name="OC_OuterFace" shape="shOC_OuterFace" material="CFRP"/>
+  <logvol name="OC_Core" shape="shOC_Core" material="Honeycomb10pcf"/>
+
+  <logvol name="PolyMod" shape="shPolyMod" material="BoratedPolyethylene"/>
+
+</logvol>
+
+<logvol name="Bulkhead" shape="shBulkhead" material="CFRP"/>
+
+
+
+
+<materials>
+  <material name="MatB_PP1" density="0.356"> <!-- Hand calc to give 20 kg; logbook UG20 May 13th 2016 -->
+    <materialref ref="MatStaveSupport" fraction="1.0"/>
+  </material>
+  <material name="MatEC_PP1" density="0.177"> <!-- Density from hand calc. to give 20 kg -->
+    <materialref ref="MatStaveSupport" fraction="1.0"/>
+  </material>
+</materials>
+
+<logvol name="B_PP1" shape="shB_PP1" material="MatB_PP1"/>
+<logvol name="EC_PP1" shape="shEC_PP1" material="MatEC_PP1"/>
+<logvol name="Pix_PP1_middle" shape="shPix_PP1_middle" material="Air"/>
+<logvol name="Pix_PP1_outer" shape="shPix_PP1_outer" material="Air"/>
+<!--<logvol name="pixPP1" shape="pixPP1union" material="Air"></logvol>
+<assembly name="PixPP1"> 
+  <logvolref ref="pixPP1"/>
+</assembly>
+-->
+
+
+
+
+<defines>
+  <!-- Endcap sensor dimensions from apr15/small.geom -->
+  <!-- Wafer cut dimensions AX AY BX BY CX CY DX DY -->
+  <matrix name="E_SensorVtx" coldim="8" value="     -56.6118 -39.6071  47.9166 -47.8979  47.7066  49.9845 -56.4013  37.5210     -47.8155 -49.8880  37.2181 -56.6409  37.0474  58.3384 -47.6446  48.1909     -37.2139 -58.2059  25.1307 -63.1617  25.0056  64.4064 -37.0887  56.9616     -60.6002 -33.1240  57.1708 -36.5666  57.0531  38.9200 -60.4823  30.7708     -57.0256 -38.9917  53.0158 -42.2263  52.9057  44.4253 -56.9153  36.7930     -52.8785 -44.4755  48.3267 -47.4636  48.2253  49.4860 -52.7770  42.4533   "/>
+  <!-- R_i, R, R_o (cut values) -->
+  <matrix name="E_SensorRadius" coldim="3" value="      384.050  438.614  488.873      489.373  534.639  574.644      575.144  609.405  637.659      638.159  697.899  755.951      756.451  812.471  866.512      867.012  918.749  968.235   "/>
+  <vector name="SensorRotation" value=" 0.0000000e+00 0.0000000e+00 0.0000000e+00 5.0397041e-02 5.0376915e-02 5.0381140e-02  "/>
+  <!-- End of definess from small.geom -->
+</defines>
+
+<defines>
+
+  <!-- Endcap -->
+
+  <var name="SensorThickness" value="0.320"/>
+
+  <vector name="N_InRing" value="32 32 32 64 64 64"/>
+
+  <var name="ScaleAngleBy" value="1.05"/>
+  <var name="SensorPhiWidth_0" value="2 * PI / N_InRing_0 * ScaleAngleBy"/>
+  <var name="SensorPhiWidth_1" value="2 * PI / N_InRing_1 * ScaleAngleBy"/>
+  <var name="SensorPhiWidth_2" value="2 * PI / N_InRing_2 * ScaleAngleBy"/>
+  <var name="SensorPhiWidth_3" value="2 * PI / N_InRing_3 * ScaleAngleBy"/>
+  <var name="SensorPhiWidth_4" value="2 * PI / N_InRing_4 * ScaleAngleBy"/>
+  <var name="SensorPhiWidth_5" value="2 * PI / N_InRing_5 * ScaleAngleBy"/>
+
+  <!-- We have to stretch the trapezoid corners so the intersection includes the curved part -->
+  <var name="ScaleTrapBy" value="1.05"/>
+
+  <var name="E_VtxStr0Bx" value="ScaleTrapBy * (E_SensorVtx_0_2 - E_SensorVtx_0_0) + E_SensorVtx_0_0"/>
+  <var name="E_VtxStr0By" value="ScaleTrapBy * (E_SensorVtx_0_3 - E_SensorVtx_0_1) + E_SensorVtx_0_1"/>
+  <var name="E_VtxStr0Cx" value="ScaleTrapBy * (E_SensorVtx_0_4 - E_SensorVtx_0_6) + E_SensorVtx_0_6"/>
+  <var name="E_VtxStr0Cy" value="ScaleTrapBy * (E_SensorVtx_0_5 - E_SensorVtx_0_7) + E_SensorVtx_0_7"/>
+
+  <var name="E_VtxStr1Bx" value="ScaleTrapBy * (E_SensorVtx_1_2 - E_SensorVtx_1_0) + E_SensorVtx_1_0"/>
+  <var name="E_VtxStr1By" value="ScaleTrapBy * (E_SensorVtx_1_3 - E_SensorVtx_1_1) + E_SensorVtx_1_1"/>
+  <var name="E_VtxStr1Cx" value="ScaleTrapBy * (E_SensorVtx_1_4 - E_SensorVtx_1_6) + E_SensorVtx_1_6"/>
+  <var name="E_VtxStr1Cy" value="ScaleTrapBy * (E_SensorVtx_1_5 - E_SensorVtx_1_7) + E_SensorVtx_1_7"/>
+
+  <var name="E_VtxStr2Bx" value="ScaleTrapBy * (E_SensorVtx_2_2 - E_SensorVtx_2_0) + E_SensorVtx_2_0"/>
+  <var name="E_VtxStr2By" value="ScaleTrapBy * (E_SensorVtx_2_3 - E_SensorVtx_2_1) + E_SensorVtx_2_1"/>
+  <var name="E_VtxStr2Cx" value="ScaleTrapBy * (E_SensorVtx_2_4 - E_SensorVtx_2_6) + E_SensorVtx_2_6"/>
+  <var name="E_VtxStr2Cy" value="ScaleTrapBy * (E_SensorVtx_2_5 - E_SensorVtx_2_7) + E_SensorVtx_2_7"/>
+
+  <var name="E_VtxStr3Bx" value="ScaleTrapBy * (E_SensorVtx_3_2 - E_SensorVtx_3_0) + E_SensorVtx_3_0"/>
+  <var name="E_VtxStr3By" value="ScaleTrapBy * (E_SensorVtx_3_3 - E_SensorVtx_3_1) + E_SensorVtx_3_1"/>
+  <var name="E_VtxStr3Cx" value="ScaleTrapBy * (E_SensorVtx_3_4 - E_SensorVtx_3_6) + E_SensorVtx_3_6"/>
+  <var name="E_VtxStr3Cy" value="ScaleTrapBy * (E_SensorVtx_3_5 - E_SensorVtx_3_7) + E_SensorVtx_3_7"/>
+
+  <var name="E_VtxStr4Bx" value="ScaleTrapBy * (E_SensorVtx_4_2 - E_SensorVtx_4_0) + E_SensorVtx_4_0"/>
+  <var name="E_VtxStr4By" value="ScaleTrapBy * (E_SensorVtx_4_3 - E_SensorVtx_4_1) + E_SensorVtx_4_1"/>
+  <var name="E_VtxStr4Cx" value="ScaleTrapBy * (E_SensorVtx_4_4 - E_SensorVtx_4_6) + E_SensorVtx_4_6"/>
+  <var name="E_VtxStr4Cy" value="ScaleTrapBy * (E_SensorVtx_4_5 - E_SensorVtx_4_7) + E_SensorVtx_4_7"/>
+
+  <var name="E_VtxStr5Bx" value="ScaleTrapBy * (E_SensorVtx_5_2 - E_SensorVtx_5_0) + E_SensorVtx_5_0"/>
+  <var name="E_VtxStr5By" value="ScaleTrapBy * (E_SensorVtx_5_3 - E_SensorVtx_5_1) + E_SensorVtx_5_1"/>
+  <var name="E_VtxStr5Cx" value="ScaleTrapBy * (E_SensorVtx_5_4 - E_SensorVtx_5_6) + E_SensorVtx_5_6"/>
+  <var name="E_VtxStr5Cy" value="ScaleTrapBy * (E_SensorVtx_5_5 - E_SensorVtx_5_7) + E_SensorVtx_5_7"/>
+
+  <!-- And we allow an increase in the tubs thickness just to improve VP1 shading/colouring -->
+  <!-- Which changes it, but never fixes it, so leave at 1 * -->
+  <var name="E_TubsThick" value="1 * SensorThickness"/>
+
+  <!-- Barrel: Updated to April 2019 tender document
+https://edms.cern.ch/document/2135101-->
+  <var name="B_SensorLength" value="97.621"/> <!-- Along strips direction, x, eta -->
+  <var name="B_SensorWidth" value="97.950"/> <!-- Across-strips direction, y, phi -->
+                                                 <!-- Historically it was square and the distinction didn't matter. -->
+
+</defines>
+
+<readoutgeometry>
+
+  <param name="thickness" value="0.320"/>
+  <param name="carrierType" value="electrons"/>
+  <param name="readoutSide" value="+"/>
+  <param name="fieldDirection" value="z"/>
+  <param name="stripDirection" value="x"/>
+
+  <sensorclass name="SiStripBox">
+    <param name="nStrips" value="1280"/>
+    <!-- Ref: New thin-guard design from Nobu -->
+    <param name="pitch" value="0.0755"/>
+    <!-- Start and end positions are Sensitive Size (= 96.734 mm) divided by 2 or 4 -->
+<!-- sensitive size = 97621-2*450 (edge distance) = 96721-->
+    <sensortype name="RG_ISB_SS">
+      <param name="nRows" value="4"/>
+      <param name="stripLength" value="24.18025"/>
+    </sensortype>
+    <sensortype name="RG_ISB_MS">
+      <param name="nRows" value="2"/>
+      <param name="stripLength" value="48.3605"/>
+    </sensortype>
+  </sensorclass>
+
+  <sensorclass name="StereoAnnulus">
+    <param name="stereoAngle" value=" 0.020"/>
+    <sensortype name="RG_ISE_0">
+      <param name="centreR" value="438.614"/>
+      <param name="nRows" value="4"/>
+      <param name="nStrips" value="1024 1024 1152 1152 "/>
+      <param name="phiPitch" value="1.930863e-04 1.930863e-04 1.716880e-04 1.716880e-04 "/>
+      <param name="startR" value="384.500 403.481 427.462 456.442 "/>
+      <param name="endR" value="403.481 427.462 456.442 488.423 "/>
+    </sensortype>
+    <sensortype name="RG_ISE_1">
+      <param name="centreR" value="534.639"/>
+      <param name="nRows" value="4"/>
+      <param name="nStrips" value="1280 1280 1408 1408 "/>
+      <param name="phiPitch" value="1.547122e-04 1.547122e-04 1.406774e-04 1.406774e-04 "/>
+      <param name="startR" value="489.823 507.916 535.009 559.101 "/>
+      <param name="endR" value="507.916 535.009 559.101 574.194 "/>
+    </sensortype>
+    <sensortype name="RG_ISE_2">
+      <param name="centreR" value="609.405"/>
+      <param name="nRows" value="2"/>
+      <param name="nStrips" value="1536 1536 "/>
+      <param name="phiPitch" value="1.290774e-04 1.290774e-04 "/>
+      <param name="startR" value="575.594 606.402 "/>
+      <param name="endR" value="606.402 637.209 "/>
+    </sensortype>
+    <sensortype name="RG_ISE_3">
+      <param name="centreR" value="697.899"/>
+      <param name="nRows" value="4"/>
+      <param name="nStrips" value="896 896 896 896 "/>
+      <param name="phiPitch" value="1.095053e-04 1.095053e-04 1.095053e-04 1.095053e-04 "/>
+      <param name="startR" value="638.609 664.832 697.055 729.278 "/>
+      <param name="endR" value="664.832 697.055 729.278 755.501 "/>
+    </sensortype>
+    <sensortype name="RG_ISE_4">
+      <param name="centreR" value="812.471"/>
+      <param name="nRows" value="2"/>
+      <param name="nStrips" value="1024 1024 "/>
+      <param name="phiPitch" value="9.617533e-05 9.617533e-05 "/>
+      <param name="startR" value="756.901 811.482 "/>
+      <param name="endR" value="811.482 866.062 "/>
+    </sensortype>
+    <sensortype name="RG_ISE_5">
+      <param name="centreR" value="918.749"/>
+      <param name="nRows" value="2"/>
+      <param name="nStrips" value="1152 1152 "/>
+      <param name="phiPitch" value="8.574294e-05 8.574294e-05 "/>
+      <param name="startR" value="867.462 907.623 "/>
+      <param name="endR" value="907.623 967.785 "/>
+    </sensortype>
+  </sensorclass>
+</readoutgeometry>
+
+
+<shapes>
+
+  <generictrap name="TrapSensor0" x0="E_SensorVtx_0_6" y0="E_SensorVtx_0_7" x1="E_VtxStr0Cx" y1="E_VtxStr0Cy" x2="E_VtxStr0Bx" y2="E_VtxStr0By" x3="E_SensorVtx_0_0" y3="E_SensorVtx_0_1" x4="E_SensorVtx_0_6" y4="E_SensorVtx_0_7" x5="E_VtxStr0Cx" y5="E_VtxStr0Cy" x6="E_VtxStr0Bx" y6="E_VtxStr0By" x7="E_SensorVtx_0_0" y7="E_SensorVtx_0_1" zhalflength="SensorThickness / 2."/>
+  
+  <generictrap name="TrapSensor1" x0="E_SensorVtx_1_6" y0="E_SensorVtx_1_7" x1="E_VtxStr1Cx" y1="E_VtxStr1Cy" x2="E_VtxStr1Bx" y2="E_VtxStr1By" x3="E_SensorVtx_1_0" y3="E_SensorVtx_1_1" x4="E_SensorVtx_1_6" y4="E_SensorVtx_1_7" x5="E_VtxStr1Cx" y5="E_VtxStr1Cy" x6="E_VtxStr1Bx" y6="E_VtxStr1By" x7="E_SensorVtx_1_0" y7="E_SensorVtx_1_1" zhalflength="SensorThickness / 2."/>
+
+  <generictrap name="TrapSensor2" x0="E_SensorVtx_2_6" y0="E_SensorVtx_2_7" x1="E_VtxStr2Cx" y1="E_VtxStr2Cy" x2="E_VtxStr2Bx" y2="E_VtxStr2By" x3="E_SensorVtx_2_0" y3="E_SensorVtx_2_1" x4="E_SensorVtx_2_6" y4="E_SensorVtx_2_7" x5="E_VtxStr2Cx" y5="E_VtxStr2Cy" x6="E_VtxStr2Bx" y6="E_VtxStr2By" x7="E_SensorVtx_2_0" y7="E_SensorVtx_2_1" zhalflength="SensorThickness / 2."/>
+
+  <generictrap name="TrapSensor3" x0="E_SensorVtx_3_6" y0="E_SensorVtx_3_7" x1="E_VtxStr3Cx" y1="E_VtxStr3Cy" x2="E_VtxStr3Bx" y2="E_VtxStr3By" x3="E_SensorVtx_3_0" y3="E_SensorVtx_3_1" x4="E_SensorVtx_3_6" y4="E_SensorVtx_3_7" x5="E_VtxStr3Cx" y5="E_VtxStr3Cy" x6="E_VtxStr3Bx" y6="E_VtxStr3By" x7="E_SensorVtx_3_0" y7="E_SensorVtx_3_1" zhalflength="SensorThickness / 2."/>
+  
+  <generictrap name="TrapSensor4" x0="E_SensorVtx_4_6" y0="E_SensorVtx_4_7" x1="E_VtxStr4Cx" y1="E_VtxStr4Cy" x2="E_VtxStr4Bx" y2="E_VtxStr4By" x3="E_SensorVtx_4_0" y3="E_SensorVtx_4_1" x4="E_SensorVtx_4_6" y4="E_SensorVtx_4_7" x5="E_VtxStr4Cx" y5="E_VtxStr4Cy" x6="E_VtxStr4Bx" y6="E_VtxStr4By" x7="E_SensorVtx_4_0" y7="E_SensorVtx_4_1" zhalflength="SensorThickness / 2."/>
+  
+  <generictrap name="TrapSensor5" x0="E_SensorVtx_5_6" y0="E_SensorVtx_5_7" x1="E_VtxStr5Cx" y1="E_VtxStr5Cy" x2="E_VtxStr5Bx" y2="E_VtxStr5By" x3="E_SensorVtx_5_0" y3="E_SensorVtx_5_1" x4="E_SensorVtx_5_6" y4="E_SensorVtx_5_7" x5="E_VtxStr5Cx" y5="E_VtxStr5Cy" x6="E_VtxStr5Bx" y6="E_VtxStr5By" x7="E_SensorVtx_5_0" y7="E_SensorVtx_5_1" zhalflength="SensorThickness / 2."/>
+  
+  <tubs name="TubeSensor0" rmin="E_SensorRadius_0_0" rmax="E_SensorRadius_0_2" zhalflength="E_TubsThick / 2." sphi="-SensorPhiWidth_0 / 2" dphi="SensorPhiWidth_0"/>
+  
+  <tubs name="TubeSensor1" rmin="E_SensorRadius_1_0" rmax="E_SensorRadius_1_2" zhalflength="E_TubsThick / 2." sphi="-SensorPhiWidth_1 / 2" dphi="SensorPhiWidth_1"/>
+  
+  <tubs name="TubeSensor2" rmin="E_SensorRadius_2_0" rmax="E_SensorRadius_2_2" zhalflength="E_TubsThick / 2." sphi="-SensorPhiWidth_2 / 2" dphi="SensorPhiWidth_2"/>
+  
+  <tubs name="TubeSensor3" rmin="E_SensorRadius_3_0" rmax="E_SensorRadius_3_2" zhalflength="E_TubsThick / 2." sphi="-SensorPhiWidth_3 / 2" dphi="SensorPhiWidth_3"/>
+  
+  <tubs name="TubeSensor4" rmin="E_SensorRadius_4_0" rmax="E_SensorRadius_4_2" zhalflength="E_TubsThick / 2." sphi="-SensorPhiWidth_4 / 2" dphi="SensorPhiWidth_4"/>
+  
+  <tubs name="TubeSensor5" rmin="E_SensorRadius_5_0" rmax="E_SensorRadius_5_2" zhalflength="E_TubsThick / 2." sphi="-SensorPhiWidth_5 / 2" dphi="SensorPhiWidth_5"/>
+
+  <intersection name="ShE_Sensor0">
+    <shaperef ref="TubeSensor0"/>
+    <transformation name="PlaceTrapInTubs0">
+      <translation x="E_SensorRadius_0_1"/>
+    </transformation>
+    <shaperef ref="TrapSensor0"/>
+  </intersection>
+
+  <intersection name="ShE_Sensor1">
+    <shaperef ref="TubeSensor1"/>
+    <transformation name="PlaceTrapInTubs1">
+      <translation x="E_SensorRadius_1_1"/>
+    </transformation>
+    <shaperef ref="TrapSensor1"/>
+  </intersection>
+
+  <intersection name="ShE_Sensor2">
+    <shaperef ref="TubeSensor2"/>
+    <transformation name="PlaceTrapInTubs2">
+      <translation x="E_SensorRadius_2_1"/>
+    </transformation>
+    <shaperef ref="TrapSensor2"/>
+  </intersection>
+
+  <intersection name="ShE_Sensor3">
+    <shaperef ref="TubeSensor3"/>
+    <transformation name="PlaceTrapInTubs3">
+      <translation x="E_SensorRadius_3_1"/>
+    </transformation>
+    <shaperef ref="TrapSensor3"/>
+  </intersection>
+
+  <intersection name="ShE_Sensor4">
+    <shaperef ref="TubeSensor4"/>
+    <transformation name="PlaceTrapInTubs4">
+      <translation x="E_SensorRadius_4_1"/>
+    </transformation>
+    <shaperef ref="TrapSensor4"/>
+  </intersection>
+
+  <intersection name="ShE_Sensor5">
+    <shaperef ref="TubeSensor5"/>
+    <transformation name="PlaceTrapInTubs5">
+      <translation x="E_SensorRadius_5_1"/>
+    </transformation>
+    <shaperef ref="TrapSensor5"/>
+  </intersection>
+
+  <box name="ShBarrelSensor" xhalflength="B_SensorLength / 2" yhalflength="B_SensorWidth / 2" zhalflength="SensorThickness / 2"/>
+
+</shapes>
+
+<!-- NB Sensor names use a convention; they are used in atlas_idet.py. Need to add ECSensor4 and 5 -->
+
+<logvol name="ECSensor0" shape="ShE_Sensor0" material="SiMetal" sensitive="RG_ISE_0" alignable="true">
+  <index ref="eta_module" value="0"/>
+</logvol>
+<logvol name="ECSensor1" shape="ShE_Sensor1" material="SiMetal" sensitive="RG_ISE_1" alignable="true">
+  <index ref="eta_module" value="1"/>
+</logvol>
+<logvol name="ECSensor2" shape="ShE_Sensor2" material="SiMetal" sensitive="RG_ISE_2" alignable="true">
+  <index ref="eta_module" value="2"/>
+</logvol>
+<logvol name="ECSensor3" shape="ShE_Sensor3" material="SiMetal" sensitive="RG_ISE_3" alignable="true">
+  <index ref="eta_module" value="3"/>
+</logvol>
+<logvol name="ECSensor4" shape="ShE_Sensor4" material="SiMetal" sensitive="RG_ISE_4" alignable="true">
+  <index ref="eta_module" value="4"/>
+</logvol>
+<logvol name="ECSensor5" shape="ShE_Sensor5" material="SiMetal" sensitive="RG_ISE_5" alignable="true">
+  <index ref="eta_module" value="5"/>
+</logvol>
+
+<logvol name="BRLSensorSS" shape="ShBarrelSensor" material="SiMetal" sensitive="RG_ISB_SS" alignable="true"/>
+<logvol name="BRLSensorMS" shape="ShBarrelSensor" material="SiMetal" sensitive="RG_ISB_MS" alignable="true"/>
+
+
+
+<defines>
+  <!-- ABC chip ref. np49-01-104.pdf -->
+  <var name="ChipT" value="0.31"/>
+
+  <!-- Ref Laura Gonella Intro Talk https://indico.cern.ch/event/676645 -->
+  <var name="ABC_W" value="7.0"/>
+  <var name="ABC_L" value="7.9"/>
+  <var name="ABC_T" value="ChipT"/>
+
+  <var name="HCC_W" value="5.2"/>
+  <var name="HCC_L" value="3.5"/>
+  <var name="HCC_T" value="ChipT"/>
+
+  <var name="AMAC_W" value="5.2"/>
+  <var name="AMAC_L" value="3.5"/>
+  <var name="AMAC_T" value="ChipT"/>
+  <!-- Laura G -->
+
+  <!-- Ref. Paulo Moreira GBT status talk, 20?? -->
+  <var name="GBT_W" value="5.5"/>
+  <var name="GBT_L" value="5.5"/>
+  <var name="GBT_T" value="ChipT"/>
+
+  <!-- Ref. Complete guess. Smaller than GBT. -->
+  <var name="GBT_SCA_W" value="2.5"/>
+  <var name="GBT_SCA_L" value="2.5"/>
+  <var name="GBT_SCA_T" value="ChipT"/>
+
+</defines>
+
+<shapes>
+  <box name="shABC_Chip" xhalflength="ABC_W/2" yhalflength="ABC_L/2" zhalflength="ABC_T/2 - EPS"/>
+  <box name="shHCC_Chip" xhalflength="HCC_W/2" yhalflength="HCC_L/2" zhalflength="HCC_T/2 - EPS"/>
+  <box name="shGBT_Chip" xhalflength="GBT_W/2" yhalflength="GBT_L/2" zhalflength="GBT_T/2 - EPS"/>
+  <box name="shGBT_SCA_Chip" xhalflength="GBT_SCA_W/2" yhalflength="GBT_SCA_L/2" zhalflength="GBT_SCA_T/2 - EPS"/>
+</shapes>
+
+<logvol name="ABC_Chip" shape="shABC_Chip" material="SiMetal"/>
+<logvol name="HCC_Chip" shape="shHCC_Chip" material="SiMetal"/>
+<logvol name="GBT_Chip" shape="shGBT_Chip" material="SiMetal"/>
+<logvol name="GBT_SCA_Chip" shape="shGBT_SCA_Chip" material="SiMetal"/>
+
+
+<defines>
+  <!-- Ref: NP49-01-104.pdf Ver. C 24 June 2014-->
+  <var name="DCDC_PCB_W" value="8.0"/>
+  <var name="DCDC_PCB_L" value="53.85"/>
+  <var name="DCDC_PCB_T" value="0.66"/>
+
+  <var name="E_DCDC_PCB_RadiusMinR0" value="425"/>
+  <var name="E_DCDC_PCB_RadiusMaxR0" value="435"/>
+  <var name="E_DCDC_PCB_LengthR0" value="49.0"/>
+  <var name="E_DCDC_PCB_RadiusMinR1" value="529.1"/>
+  <var name="E_DCDC_PCB_RadiusMaxR1" value="538.3"/>
+  <var name="E_DCDC_PCB_LengthR1" value="67.3"/>
+  <var name="E_DCDC_PCB_RadiusMinR2" value="625.9"/>
+  <var name="E_DCDC_PCB_RadiusMaxR2" value="634.5"/>
+  <var name="E_DCDC_PCB_LengthR2" value="67.3"/>
+  <var name="E_DCDC_PCB_RadiusMinR3" value="693"/>
+  <var name="E_DCDC_PCB_RadiusMaxR3" value="701.5"/>
+  <var name="E_DCDC_PCB_LengthR3" value="67.3"/>
+  <var name="E_DCDC_PCB_RadiusMinR4" value="841.8"/>
+  <var name="E_DCDC_PCB_RadiusMaxR4" value="850.5"/>
+  <var name="E_DCDC_PCB_LengthR4" value="67.0"/>
+  <var name="E_DCDC_PCB_RadiusMinR5" value="934.5"/>
+  <var name="E_DCDC_PCB_RadiusMaxR5" value="943.0"/>
+  <var name="E_DCDC_PCB_LengthR5" value="67.0"/>
+  <var name="E_DCDC_PCB_dPhiR0" value="E_DCDC_PCB_LengthR0/E_DCDC_PCB_RadiusMinR0"/>
+  <var name="E_DCDC_PCB_dPhiR1" value="E_DCDC_PCB_LengthR0/E_DCDC_PCB_RadiusMinR1"/>
+  <var name="E_DCDC_PCB_dPhiR2" value="E_DCDC_PCB_LengthR0/E_DCDC_PCB_RadiusMinR2"/>
+  <var name="E_DCDC_PCB_dPhiR3" value="E_DCDC_PCB_LengthR0/E_DCDC_PCB_RadiusMinR3"/>
+  <var name="E_DCDC_PCB_dPhiR4" value="E_DCDC_PCB_LengthR0/E_DCDC_PCB_RadiusMinR4"/>
+  <var name="E_DCDC_PCB_dPhiR5" value="E_DCDC_PCB_LengthR0/E_DCDC_PCB_RadiusMinR5"/>
+
+
+  <var name="DCDC_dist_from_PCBend" value="5.1"/>
+
+  <!-- modified to follow Tony Affolder values from his spreadsheet powering-X-calculator-01011v10.xls -->
+  <var name="DCDC_BoxW" value="8.5"/>
+  <var name="DCDC_BoxL" value="19.0"/>
+  <var name="DCDC_BoxT" value="4.5"/>
+
+ 
+
+  <var name="DCDC_EC_BoxW" value="DCDC_BoxL"/>
+  <var name="DCDC_EC_BoxL" value="DCDC_BoxW"/>
+  <var name="DCDC_EC_BoxT" value="DCDC_BoxT"/>
+
+  <var name="DCDC_R0_PCB_R" value="424.9"/>	
+  <var name="DCDC_R0_PCB_dphi" value="0"/>
+  <var name="DCDC_R0_Box_R" value="424.9"/>	
+  <var name="DCDC_R0_Box_dphi" value="0"/>
+
+  <var name="DCDC_R1_PCB_R" value="424.9"/>	
+  <var name="DCDC_R1_PCB_dphi" value="0"/>
+  <var name="DCDC_R1_Box_R" value="424.9"/>	
+  <var name="DCDC_R1_Box_dphi" value="0"/>
+
+  <var name="DCDC_R2_PCB_R" value="424.9"/>	
+  <var name="DCDC_R2_PCB_dphi" value="0"/>
+  <var name="DCDC_R2_Box_R" value="424.9"/>	
+  <var name="DCDC_R2_Box_dphi" value="0"/>
+
+  <var name="DCDC_R3_PCB_R" value="424.9"/>	
+  <var name="DCDC_R3_PCB_dphi" value="0"/>
+  <var name="DCDC_R3_Box_R" value="424.9"/>	
+  <var name="DCDC_R3_Box_dphi" value="0"/>
+
+  <var name="DCDC_R4_PCB_R" value="424.9"/>	
+  <var name="DCDC_R4_PCB_dphi" value="0"/>
+  <var name="DCDC_R4_Box_R" value="424.9"/>	
+  <var name="DCDC_R4_Box_dphi" value="0"/>
+
+  <var name="DCDC_R5_PCB_R" value="424.9"/>	
+  <var name="DCDC_R5_PCB_dphi" value="0"/>
+  <var name="DCDC_R5_Box_R" value="424.9"/>	
+  <var name="DCDC_R5_Box_dphi" value="0"/>
+   
+</defines>
+
+
+<materials>
+  <!-- GeoModelXml input created by ConsolidX version 1.1 for DCDC_CoilShield, version 1.0. --> 
+  
+  <material name="matDCDC_PCB" density="4.928691"> 
+    <elementref ref="Aluminium" fraction="0.000974"/>
+    <elementref ref="Barium" fraction="0.139637"/>
+    <elementref ref="Carbon" fraction="0.114105"/>
+    <elementref ref="Copper" fraction="0.259533"/>
+    <elementref ref="Gold" fraction="0.001686"/>
+    <elementref ref="Hydrogen" fraction="0.010639"/>
+    <elementref ref="Lead" fraction="0.015838"/>
+    <elementref ref="Nickel" fraction="0.026116"/>
+    <elementref ref="Oxygen" fraction="0.215126"/>
+    <elementref ref="Silicon" fraction="0.122968"/>
+    <elementref ref="Silver" fraction="0.000614"/>
+    <elementref ref="Tin" fraction="0.044091"/>
+    <elementref ref="Titanium" fraction="0.048672"/>
+  </material>
+
+
+
+  <!-- GeoModelXml input created by ConsolidX for DCDC_CoilShield, version 1.0. -->
+  <material name="matDCDC_Box" density="0.850484">      
+  <elementref ref="Aluminium" fraction="0.178664"/>   
+  <elementref ref="Carbon" fraction="0.254920"/>  
+  <elementref ref="Copper" fraction="0.523632"/>             
+  <elementref ref="Hydrogen" fraction="0.042785"/> 
+  </material>                                                                                                   
+</materials>
+
+<shapes>
+  <box name="shDCDC_PCB" xhalflength="DCDC_PCB_W/2" yhalflength="DCDC_PCB_L/2" zhalflength="DCDC_PCB_T/2 - EPS"/>
+  <box name="shDCDC_Box" xhalflength="DCDC_BoxW/2" yhalflength="DCDC_BoxL/2" zhalflength="DCDC_BoxT/2 - EPS"/>
+  <tubs name="shDCDC_EC_PCBR0" rmin="E_DCDC_PCB_RadiusMinR0" rmax="E_DCDC_PCB_RadiusMaxR0" zhalflength="DCDC_PCB_T / 2." sphi="-SensorPhiWidth_0 / 2" dphi="E_DCDC_PCB_dPhiR0"/>
+<tubs name="shDCDC_EC_PCBR1" rmin="E_DCDC_PCB_RadiusMinR1" rmax="E_DCDC_PCB_RadiusMaxR1" zhalflength="DCDC_PCB_T / 2." sphi="-SensorPhiWidth_1 / 2" dphi="E_DCDC_PCB_dPhiR1"/>
+
+<tubs name="shDCDC_EC_PCBR2" rmin="E_DCDC_PCB_RadiusMinR2" rmax="E_DCDC_PCB_RadiusMaxR2" zhalflength="DCDC_PCB_T / 2." sphi="-SensorPhiWidth_2 / 2" dphi="E_DCDC_PCB_dPhiR2"/>
+  <tubs name="shDCDC_EC_PCBR3" rmin="E_DCDC_PCB_RadiusMinR3" rmax="E_DCDC_PCB_RadiusMaxR3" zhalflength="DCDC_PCB_T / 2." sphi="-SensorPhiWidth_3 / 2" dphi="E_DCDC_PCB_dPhiR3"/>
+<tubs name="shDCDC_EC_PCBR4" rmin="E_DCDC_PCB_RadiusMinR4" rmax="E_DCDC_PCB_RadiusMaxR4" zhalflength="DCDC_PCB_T / 2." sphi="-SensorPhiWidth_4 / 2" dphi="E_DCDC_PCB_dPhiR4"/>
+<tubs name="shDCDC_EC_PCBR5" rmin="E_DCDC_PCB_RadiusMinR5" rmax="E_DCDC_PCB_RadiusMaxR5" zhalflength="DCDC_PCB_T / 2." sphi="-SensorPhiWidth_5 / 2" dphi="E_DCDC_PCB_dPhiR5"/>
+  <box name="shDCDC_EC_Box" xhalflength="DCDC_EC_BoxW/2" yhalflength="DCDC_EC_BoxL/2" zhalflength="DCDC_EC_BoxT/2 "/>
+</shapes>
+
+<logvol name="DCDC_PCB" shape="shDCDC_PCB" material="matDCDC_PCB"/>
+<logvol name="DCDC_Box" shape="shDCDC_Box" material="matDCDC_Box"/>
+<logvol name="DCDC_EC_PCBR0" shape="shDCDC_EC_PCBR0" material="matDCDC_PCB"/>
+<logvol name="DCDC_EC_PCBR1" shape="shDCDC_EC_PCBR1" material="matDCDC_PCB"/>
+<logvol name="DCDC_EC_PCBR2" shape="shDCDC_EC_PCBR2" material="matDCDC_PCB"/>
+<logvol name="DCDC_EC_PCBR3" shape="shDCDC_EC_PCBR3" material="matDCDC_PCB"/>
+<logvol name="DCDC_EC_PCBR4" shape="shDCDC_EC_PCBR4" material="matDCDC_PCB"/>
+<logvol name="DCDC_EC_PCBR5" shape="shDCDC_EC_PCBR5" material="matDCDC_PCB"/>
+<logvol name="DCDC_EC_Box" shape="shDCDC_EC_Box" material="matDCDC_Box"/>
+
+
+<defines>
+  <var name="StereoAngle" value="-26.0e-3"/>
+
+  <var name="B_N_SensorsPerFace" value="14"/>
+
+  <!-- Most dimensions from NP49-01-100.pdf, 27-AUG-2014 -->
+  <var name="B_SensorGap" value="98.0 - B_SensorLength"/> 
+
+  <var name="StaveCoreWidth" value="115."/>
+  <var name="StaveCoreExtraLength" value="3.0"/>
+  <var name="StaveCoreLength" value="B_N_SensorsPerFace * (B_SensorLength + B_SensorGap) + StaveCoreExtraLength"/>
+
+  <var name="CoreToSiDistAtEta0" value="0.0"/> <!-- Overhangs!! Or you need a very special shape at the end. -->
+  <var name="StaveFaceTranslation" value="-((B_N_SensorsPerFace - 1) / 2 * (B_SensorLength + B_SensorGap) +                                                    StaveCoreExtraLength / 2) + CoreToSiDistAtEta0"/> 
+
+  <!-- Stave core thickness built up in following order: -->
+  <var name="StaveHoneycombT" value="5.2 + 0.078"/> <!-- Small correction to make Si-Si mid dist. 6.42. 
+                                                                    NPH logbook UG20 29/4/2016 -->
+  <var name="StaveFacesheetT" value="0.15"/>
+  <var name="StaveBusGlueT" value="2 * 0.025 + 0.1"/>  <!-- Includes module-to-bus glue, 0.1 mm -->
+  <var name="StaveBusKaptonT" value="3 * 0.025"/>
+  <var name="StaveCoreT" value="StaveHoneycombT + 2 * (StaveFacesheetT + StaveBusGlueT + StaveBusKaptonT)"/> 
+  <var name="StaveBusCuT" value="0.018"/> 
+  <var name="StavePlankT" value="StaveCoreT + 4 * StaveBusCuT"/>
+
+  <var name="EOSCoreWidth" value="50."/> 
+  <var name="EOSCoreLength" value="100."/>
+  <var name="EOSCoreT" value="StaveCoreT"/>
+
+  <var name="StaveCloseoutFarEndL" value="StaveCoreWidth"/>
+  <var name="StaveCloseoutFarEndT" value="StaveHoneycombT"/>
+  <!-- Reference e-mail from Peter Sutcliffe to Nigel, 13 Jan 2016 -->
+  <var name="StaveCloseoutFarEndW" value="(1754. + 328.) / StaveCloseoutFarEndL / StaveCloseoutFarEndT"/>
+
+  <var name="StaveCloseoutEOS_EndL" value="StaveCoreWidth + EOSCoreWidth"/>
+  <var name="StaveCloseoutEOS_EndT" value="StaveHoneycombT"/>
+  <var name="StaveCloseoutEOS_EndW" value="10.0"/> <!-- Temp. Guessed! -->
+
+  <var name="StaveCloseoutLongL" value="StaveCoreLength - StaveCloseoutEOS_EndW - StaveCloseoutFarEndW"/>
+  <var name="StaveCloseoutLongT" value="2 * 0.05"/> <!-- We do the C as a | of double thickness -->
+  <var name="StaveCloseoutLongW" value="StaveHoneycombT"/>
+
+  <var name="StaveCloseoutLongEOS_L" value="StaveCoreLength - EOSCoreLength - StaveCloseoutFarEndW"/>
+
+  <!-- Center, Intermediate, End stavemounts: Masses are 19g, 13.1g, 10g from Stephanie Yang 15/05/2018 -->
+  <var name="StaveMountL" value="20.0"/>
+  <var name="StaveMountR" value="12.5"/> <!-- Must be small to miss support cylinder and next stave -->
+  <var name="NumStaveMounts" value="5"/>
+  <vector name="StaveMountThickness" value="35. 33. 35."/>
+  <vector name="StaveMountHeight" value="8. 8. 8."/>
+  <vector name="StaveMountLength" value="21. 28.13 21.5"/>
+  <var name="NumStaveMountsI" value="4"/><!-- Center and End have 1 each, Intermediate has 4 -->
+  <var name="StaveMountIGap" value="294."/><!-- Based on drawings, may not be accurate? -->
+
+  <!-- Stave Bus Copper dimensions Ref LB. UG20, 7/1/2016: -->
+  <var name="StaveTrackWidth" value="0.100"/>
+  <var name="StaveI2C_Width" value="0.200"/>
+
+  <var name="StaveGroundEOS_L" value="92."/>
+  <var name="StaveGroundEOS_W" value="12.5"/>
+  <var name="StaveGroundEOS_FromEnd" value="10.5"/>
+  <var name="StaveGroundEOS_FromTop" value="4.2"/>
+
+  <var name="StaveGroundPowerL_Corr" value="48."/>
+  <var name="StaveGroundPowerL" value="B_N_SensorsPerFace * (B_SensorLength + B_SensorGap) - StaveGroundPowerL_Corr"/>
+  <var name="StaveGroundPowerW" value="12.0 + StaveI2C_Width + B_N_SensorsPerFace * 71.3 / StaveGroundPowerL"/>
+  <var name="StaveGroundPowerFromEnd" value="StaveGroundEOS_FromEnd + StaveGroundEOS_W"/>
+  <var name="StaveGroundPowerFromTop" value="StaveGroundEOS_FromTop + StaveGroundEOS_L - StaveGroundPowerW"/>
+
+  <var name="StaveGroundSignalL" value="StaveGroundPowerL"/>
+  <var name="StaveGroundSignalW" value="11.5"/>
+  <var name="StaveGroundSignalFromEnd" value="StaveGroundEOS_FromEnd + StaveGroundEOS_W"/>
+  <var name="StaveGroundSignalFromTop" value="1.0"/>
+
+  <var name="StaveSignalEOS_L" value="95."/>
+  <var name="StaveSignalEOS_W" value="13.15"/>
+  <var name="StaveSignalEOS_FromEnd" value="9.0"/>
+  <var name="StaveSignalEOS_FromTop" value="1.4"/>
+
+  <var name="StaveSignalPowerL_Corr" value="48."/>
+  <var name="StaveSignalPowerL" value="B_N_SensorsPerFace * (B_SensorLength + B_SensorGap) - StaveSignalPowerL_Corr"/>
+  <var name="StaveSignalPowerW" value="13.15 + B_N_SensorsPerFace * 89.3 / StaveSignalPowerL"/>
+  <var name="StaveSignalPowerFromEnd" value="StaveSignalEOS_FromEnd + StaveSignalEOS_W"/>
+  <var name="StaveSignalPowerFromTop" value="StaveSignalEOS_FromTop + StaveSignalEOS_L - StaveSignalPowerW"/>
+
+  <var name="StaveSignalSignalL" value="StaveSignalPowerL"/>
+  <var name="StaveSignalSSSignalBigW" value="(3 + 2 * B_N_SensorsPerFace) * 2 * StaveTrackWidth"/>
+  <var name="StaveSignalSSSignalSmallW" value="(3 + 2) * 2 * StaveTrackWidth"/>
+  <var name="StaveSignalMSSignalBigW" value="(3 + B_N_SensorsPerFace) * 2 * StaveTrackWidth"/>
+  <var name="StaveSignalMSSignalSmallW" value="(3 + 1) * 2 * StaveTrackWidth"/>
+  <var name="StaveSignalSignalFromEnd" value="StaveSignalEOS_FromEnd + StaveSignalEOS_W"/>
+  <var name="StaveSignalSignalFromTop" value="StaveSignalEOS_FromTop"/>
+
+  <var name="StaveCFoamT" value="StaveHoneycombT"/>
+  <var name="StaveCFoamW" value="10.0"/>
+  <var name="StaveCoolingL" value="StaveCoreLength - StaveCloseoutEOS_EndW - StaveCloseoutFarEndW"/>
+  <var name="StaveCoolingOffset" value="25."/>
+  <var name="StaveCoolingPipeOD" value="2.275"/> 
+  <var name="StaveCoolingPipeID" value="1.975"/> <!-- 0.1 mm wall thickness on drawing, but not yet achieved so thicker -->
+
+  <var name="StaveEOS_CFoamL" value="60.0"/> <!-- Ref: np49-01-141.pdf 1/3/2016 -->
+  <var name="StaveEOS_CFoamW" value="73.5"/> <!-- Ref: np49-01-141.pdf 1/3/2016 -->
+
+  <vector name="N_StavesInCyl" value="28 40 56 72"/>
+  <vector name="CylRadius" value="399. 562. 762. 1000."/><!-- B0 405 to 399, E-mail Charles Evans 2018-08-10 -->
+  <vector name="TiltAngle" value="0.22689280 0.20943951 0.20943951 0.191986"/>
+    <!-- 13 12 12 11 degrees converted to radians, E-mail Ian Wilmut 2018-03-15 and Charles Evans (B0) 2018-08-10 -->
+  
+  <var name="CylEnvelopeThO" value="55."/> <!-- coreT/2 + EOS_T + rotation + spare ~ 3 + 5 + 24 + 10  currently 44-->
+
+
+  <var name="StaveGapZ0" value="0.1"/> <!-- each stave shifted this much at z = 0 -->
+
+  <var name="StaveSupportCylLength" value="2. * StaveCoreLength"/>
+  <var name="StaveHeightAboveCyl" value="21."/> <!-- Must not push top-hats inwards beyond inner radius of Strip env. UPDATE 05/02/2018: Parameter currently deprecated -->
+  <var name="StaveSupportCylThickness" value="0.6"/> <!-- Constant throughout the barrel layers -->
+  
+  <var name="StaveCylHatThickness" value="0.7"/>
+  <var name="StaveCylHatFootWidth" value="10."/>
+  <vector name="StaveCylHatWallHeight" value="14. 35. 35. 35."/> <!-- Top Hats not uniform between layers -->
+  <vector name="StaveCylHatTopWidth" value="8. 7. 7. 7."/>
+  <var name="NumberOfHatsPerCyl" value="9"/>
+  <vector name="StaveCylWallWidth" value="16. 16.5 16.5 16.5"/>
+  <var name="StaveCylHatGap" value="0.4"/><!-- Does this parameter exist? 21/02/2018: Currently does not-->
+
+  <vector name="BarrelRadius" value="347. 496. 685. 923."/> <!-- "347.6 502.4 702.9 923.9"/> From the INNER DIAMETER -->
+
+  <var name="InnerPolyModThickness" value="20."/>
+  <var name="InnerPolyModHalfLength" value="1150.0"/><!-- Was "StaveCoreLength - EOSCoreLength - 50.0" try 1150." -->
+
+  <var name="ZBraceLength" value="PolymoderatorOCInnerRadius - BarrelRadius_0 - 3."/> <!-- Drawing is 713.02 -->
+  <vector name="ZBraceWidth" value="33. 42."/> <!-- Total Width is 75, split into two pieces -->
+  <vector name="ZBraceThickness" value="8. 1."/>
+  <vector name="ZBraceTooth" value="18.98 128.5 145.5 98. 22.4"/>
+  <var name="ZBraceToothSpace" value="75."/>
+  <var name="NumberOfZBraces" value="4"/>
+
+  
+  <var name="FlangeFootLength" value="17.2"/>
+  <var name="FlangeThickness" value="2."/>
+  <vector name="FlangeHeight" value="20.4 35. 35. 35."/>
+  <var name="FlangeSubLength" value="20."/>
+  <var name="FlangeSlantLength" value="18."/>
+
+  <vector name="InterlinkSurfaceArea" value="5869.44 7844.48 7058.43 4477.66"/> 
+
+  <var name="InterlinkThickness" value="2."/>
+  <vector name="InterlinkFootHeight" value="11. 16. 16. 16."/>
+  <vector name="InterlinkFootWidth" value="49.94 54.8 58.46 56.08"/>
+  <vector name="InterlinkFootAngle" value="0.698132 0.837758 0.77230819 0.64786622"/>
+  <vector name="InterlinkBridgeLength" value="148.16 113.86 177.3 97.21"/>
+  <var name="InterlinkBridgeWidth" value="19."/>
+  <var name="InterlinkHatHeight" value="16."/> <!-- Barrel 4 interlink differs in hat parameters -->
+  <vector name="InterlinkHatWidth" value="54.27 78.59 57.32"/>
+  <vector name="InterlinkHatAngle" value="2.16421 2.09526777 2.197195 2.6267205"/>
+
+</defines>
+
+
+<!-- CNL_n meanings for barrel:
+
+    n    Meaning  Range
+===================================  
+    0    SCT         0
+    1    SCTBarrel   0
+    2    StripB      0
+    3    Cylinder    0 (! All cylinders are unique, never copied)
+    4    StavePair   0 - 72; depends on which barrel
+    5    Stave       0 - 1 
+    6    StaveFace   0 - 1 
+    7    Module      0 - 13
+    8    Sensor      0
+-->
+
+<shapes>
+  <tube name="shStripB_Cyl0" rmin="BarrelRadius_0 + EPS" rmax="BarrelRadius_0 + StaveSupportCylThickness - EPS" zhalflength="StaveSupportCylLength / 2.0"/>
+  <!-- For top-hats on inside of cylinder: -->
+  <tube name="shStaveCylHatFoot0" rmin="BarrelRadius_0 + StaveSupportCylThickness" rmax="BarrelRadius_0 + StaveSupportCylThickness + StaveCylHatThickness" zhalflength="StaveCylHatFootWidth / 2."/>
+  <cons name="shStaveCylHatWall0" rmin1="BarrelRadius_0 + StaveSupportCylThickness + StaveCylHatWallHeight_0" rmax1="BarrelRadius_0 + StaveSupportCylThickness + StaveCylHatThickness + StaveCylHatWallHeight_0" rmin2="BarrelRadius_0 + StaveSupportCylThickness" rmax2="BarrelRadius_0 + StaveSupportCylThickness + StaveCylHatThickness" sphi="0." dphi="2*PI" dz="StaveCylWallWidth_0 / 2."/>
+  <tube name="shStaveCylHatTop0" rmin="BarrelRadius_0 + StaveSupportCylThickness + StaveCylHatWallHeight_0" rmax="BarrelRadius_0 + StaveSupportCylThickness + StaveCylHatWallHeight_0 + StaveCylHatThickness" zhalflength="StaveCylHatTopWidth_0 / 2."/>
+
+  <tube name="shStripB_Cyl1" rmin="BarrelRadius_1" rmax="BarrelRadius_1 + StaveSupportCylThickness" zhalflength="StaveSupportCylLength / 2.0"/>
+  <tube name="shStaveCylHatFoot1" rmin="BarrelRadius_1 + StaveSupportCylThickness" rmax="BarrelRadius_1 + StaveSupportCylThickness + StaveCylHatThickness" zhalflength="StaveCylHatFootWidth / 2."/>
+  <cons name="shStaveCylHatWall1" rmin1="BarrelRadius_1 + StaveSupportCylThickness + StaveCylHatWallHeight_1" rmax1="BarrelRadius_1 + StaveSupportCylThickness + StaveCylHatThickness + StaveCylHatWallHeight_1" rmin2="BarrelRadius_1 + StaveSupportCylThickness" rmax2="BarrelRadius_1 + StaveSupportCylThickness + StaveCylHatThickness" sphi="0." dphi="2*PI" dz="StaveCylWallWidth_1 / 2."/>
+  <tube name="shStaveCylHatTop1" rmin="BarrelRadius_1 + StaveSupportCylThickness + StaveCylHatWallHeight_1" rmax="BarrelRadius_1 + StaveSupportCylThickness + StaveCylHatWallHeight_1 + StaveCylHatThickness" zhalflength="StaveCylHatTopWidth_1 / 2."/>
+
+  <tube name="shStripB_Cyl2" rmin="BarrelRadius_2" rmax="BarrelRadius_2 + StaveSupportCylThickness" zhalflength="StaveSupportCylLength / 2.0"/>
+  <tube name="shStaveCylHatFoot2" rmin="BarrelRadius_2 + StaveSupportCylThickness" rmax="BarrelRadius_2 + StaveSupportCylThickness + StaveCylHatThickness" zhalflength="StaveCylHatFootWidth / 2."/>
+  <cons name="shStaveCylHatWall2" rmin1="BarrelRadius_2 + StaveSupportCylThickness + StaveCylHatWallHeight_2" rmax1="BarrelRadius_2 + StaveSupportCylThickness + StaveCylHatThickness + StaveCylHatWallHeight_2" rmin2="BarrelRadius_2 + StaveSupportCylThickness" rmax2="BarrelRadius_2 + StaveSupportCylThickness + StaveCylHatThickness" sphi="0." dphi="2*PI" dz="StaveCylWallWidth_2 / 2."/>
+  <tube name="shStaveCylHatTop2" rmin="BarrelRadius_2 + StaveSupportCylThickness + StaveCylHatWallHeight_2" rmax="BarrelRadius_2 + StaveSupportCylThickness + StaveCylHatWallHeight_2 + StaveCylHatThickness" zhalflength="StaveCylHatTopWidth_2 / 2."/>
+
+  <tube name="shStripB_Cyl3" rmin="BarrelRadius_3" rmax="BarrelRadius_3 + StaveSupportCylThickness" zhalflength="StaveSupportCylLength / 2.0"/>
+  <tube name="shStaveCylHatFoot3" rmin="BarrelRadius_3 + StaveSupportCylThickness" rmax="BarrelRadius_3 + StaveSupportCylThickness + StaveCylHatThickness" zhalflength="StaveCylHatFootWidth / 2."/>
+  <cons name="shStaveCylHatWall3" rmin1="BarrelRadius_3 + StaveSupportCylThickness + StaveCylHatWallHeight_3" rmax1="BarrelRadius_3 + StaveSupportCylThickness + StaveCylHatThickness + StaveCylHatWallHeight_3" rmin2="BarrelRadius_3 + StaveSupportCylThickness" rmax2="BarrelRadius_3 + StaveSupportCylThickness + StaveCylHatThickness" sphi="0." dphi="2*PI" dz="StaveCylWallWidth_0 / 2."/>
+  <tube name="shStaveCylHatTop3" rmin="BarrelRadius_3 + StaveSupportCylThickness + StaveCylHatWallHeight_3" rmax="BarrelRadius_3 + StaveSupportCylThickness + StaveCylHatWallHeight_3 + StaveCylHatThickness" zhalflength="StaveCylHatTopWidth_3 / 2."/>
+
+  <tube name="shFlangeWall0" rmin="BarrelRadius_0 + StaveSupportCylThickness" rmax="BarrelRadius_0 + StaveSupportCylThickness + FlangeHeight_0" zhalflength="FlangeThickness"/>
+  <cons name="shFlangeWallSlant0" rmin1="BarrelRadius_0 + StaveSupportCylThickness + FlangeHeight_0 - FlangeThickness" rmax1="BarrelRadius_0 + StaveSupportCylThickness + FlangeHeight_0" rmin2="BarrelRadius_0 + StaveSupportCylThickness" rmax2="BarrelRadius_0 + StaveSupportCylThickness + FlangeThickness" sphi="0." dphi="2*PI" dz="FlangeSlantLength / 2."/>
+  <tube name="shFlangeFoot0" rmin="BarrelRadius_0 + StaveSupportCylThickness" rmax="BarrelRadius_0 + StaveSupportCylThickness + FlangeThickness" zhalflength="FlangeFootLength / 2. - FlangeThickness"/>
+  <tube name="shFlangeHat0" rmin="BarrelRadius_0 + StaveSupportCylThickness + FlangeHeight_0 - FlangeThickness" rmax="BarrelRadius_0 + StaveSupportCylThickness + FlangeHeight_0 - EPS" zhalflength="FlangeSubLength / 2. - FlangeThickness / 2."/>
+  <tube name="shFlangeFloor0" rmin="BarrelRadius_0 + StaveSupportCylThickness" rmax="BarrelRadius_0 + StaveSupportCylThickness + FlangeThickness" zhalflength="FlangeSubLength / 2."/>
+
+  <tube name="shFlangeWall1" rmin="BarrelRadius_1 + StaveSupportCylThickness" rmax="BarrelRadius_1 + StaveSupportCylThickness + FlangeHeight_1" zhalflength="FlangeThickness"/>
+  <cons name="shFlangeWallSlant1" rmin1="BarrelRadius_1 + StaveSupportCylThickness + FlangeHeight_1 - FlangeThickness" rmax1="BarrelRadius_1 + StaveSupportCylThickness + FlangeHeight_1" rmin2="BarrelRadius_1 + StaveSupportCylThickness" rmax2="BarrelRadius_1 + StaveSupportCylThickness + FlangeThickness" sphi="0." dphi="2*PI" dz="FlangeSlantLength / 2."/>
+  <tube name="shFlangeFoot1" rmin="BarrelRadius_1 + StaveSupportCylThickness" rmax="BarrelRadius_1 + StaveSupportCylThickness + FlangeThickness" zhalflength="FlangeFootLength / 2. - FlangeThickness"/>
+  <tube name="shFlangeHat1" rmin="BarrelRadius_1 + StaveSupportCylThickness + FlangeHeight_1 - FlangeThickness" rmax="BarrelRadius_1 + StaveSupportCylThickness + FlangeHeight_1" zhalflength="FlangeSubLength / 2. - FlangeThickness / 2."/>
+  <tube name="shFlangeFloor1" rmin="BarrelRadius_1 + StaveSupportCylThickness" rmax="BarrelRadius_1 + StaveSupportCylThickness + FlangeThickness" zhalflength="FlangeSubLength / 2."/>
+
+  <tube name="shFlangeWall2" rmin="BarrelRadius_2 + StaveSupportCylThickness" rmax="BarrelRadius_2 + StaveSupportCylThickness + FlangeHeight_2" zhalflength="FlangeThickness"/>
+  <cons name="shFlangeWallSlant2" rmin1="BarrelRadius_2 + StaveSupportCylThickness + FlangeHeight_2 - FlangeThickness" rmax1="BarrelRadius_2 + StaveSupportCylThickness + FlangeHeight_2" rmin2="BarrelRadius_2 + StaveSupportCylThickness" rmax2="BarrelRadius_2 + StaveSupportCylThickness + FlangeThickness" sphi="0." dphi="2*PI" dz="FlangeSlantLength / 2."/>
+  <tube name="shFlangeFoot2" rmin="BarrelRadius_2 + StaveSupportCylThickness" rmax="BarrelRadius_2 + StaveSupportCylThickness + FlangeThickness" zhalflength="FlangeFootLength / 2. - FlangeThickness"/>
+  <tube name="shFlangeHat2" rmin="BarrelRadius_2 + StaveSupportCylThickness + FlangeHeight_2 - FlangeThickness" rmax="BarrelRadius_2 + StaveSupportCylThickness + FlangeHeight_2" zhalflength="FlangeSubLength / 2. - FlangeThickness / 2."/>
+  <tube name="shFlangeFloor2" rmin="BarrelRadius_2 + StaveSupportCylThickness" rmax="BarrelRadius_2 + StaveSupportCylThickness + FlangeThickness" zhalflength="FlangeSubLength / 2."/>                                  
+
+  <tube name="shFlangeWall3" rmin="BarrelRadius_3 + StaveSupportCylThickness" rmax="BarrelRadius_3 + StaveSupportCylThickness + FlangeHeight_3" zhalflength="FlangeThickness"/>
+  <cons name="shFlangeWallSlant3" rmin1="BarrelRadius_3 + StaveSupportCylThickness + FlangeHeight_3 - FlangeThickness" rmax1="BarrelRadius_3 + StaveSupportCylThickness + FlangeHeight_3" rmin2="BarrelRadius_3 + StaveSupportCylThickness" rmax2="BarrelRadius_3 + StaveSupportCylThickness + FlangeThickness" sphi="0." dphi="2*PI" dz="FlangeSlantLength / 2."/>
+  <tube name="shFlangeFoot3" rmin="BarrelRadius_3 + StaveSupportCylThickness" rmax="BarrelRadius_3 + StaveSupportCylThickness + FlangeThickness" zhalflength="FlangeFootLength / 2. - FlangeThickness"/>
+  <tube name="shFlangeHat3" rmin="BarrelRadius_3 + StaveSupportCylThickness + FlangeHeight_3 - FlangeThickness" rmax="BarrelRadius_3 + StaveSupportCylThickness + FlangeHeight_3" zhalflength="FlangeSubLength / 2. - FlangeThickness / 2."/>
+  <tube name="shFlangeFloor3" rmin="BarrelRadius_3 + StaveSupportCylThickness" rmax="BarrelRadius_3 + StaveSupportCylThickness + FlangeThickness" zhalflength="FlangeSubLength / 2."/>
+
+  <!-- Capital i for Inner, capital o for outer -->
+  <box name="shZBraceSpineI" xhalflength="ZBraceThickness_0 / 2." yhalflength="ZBraceLength / 2." zhalflength="ZBraceWidth_0 / 2."/>
+                                  
+  <box name="shZBraceTeeth0I" xhalflength="ZBraceThickness_0 / 2." yhalflength="ZBraceTooth_0 / 2." zhalflength="ZBraceWidth_1 / 2."/> 
+                                  
+  <box name="shZBraceTeeth1I" xhalflength="ZBraceThickness_0 / 2." yhalflength="ZBraceTooth_1 / 2." zhalflength="ZBraceWidth_1 / 2."/>
+
+  <box name="shZBraceTeeth2I" xhalflength="ZBraceThickness_0 / 2." yhalflength="ZBraceTooth_2 / 2." zhalflength="ZBraceWidth_1 / 2."/>
+
+  <box name="shZBraceTeeth3I" xhalflength="ZBraceThickness_0 / 2." yhalflength="ZBraceTooth_3 / 2." zhalflength="ZBraceWidth_1 / 2."/>
+
+  <box name="shZBraceTeeth4I" xhalflength="ZBraceThickness_0 / 2." yhalflength="ZBraceTooth_4 / 2." zhalflength="ZBraceWidth_1 / 2."/>
+
+  <tube name="TestCircle" rmin="0." rmax="10." zhalflength="20."/>
+
+  <!-- Adding teeth one at a time-->
+  <union name="shZBrace1TeethI">
+    <shaperef ref="shZBraceSpineI"/>
+    <transformation name="PlaceZBraceTooth0dI">
+      <translation y="ZBraceLength / 2. - ZBraceTooth_0 / 2."/>
+      <translation z="-(ZBraceWidth_0 / 2. + ZBraceWidth_1 / 2.)"/>
+    </transformation>
+    <shaperef ref="shZBraceTeeth0I"/>
+  </union>
+
+  <union name="shZBrace2TeethI">
+    <shaperef ref="shZBrace1TeethI"/>
+    <transformation name="PlaceZBraceTooth1dI">
+      <translation y="ZBraceLength / 2. - ZBraceTooth_0 - ZBraceToothSpace - ZBraceTooth_1 / 2."/>
+      <translation z="-(ZBraceWidth_0 / 2. + ZBraceWidth_1 / 2.)"/>
+    </transformation>
+    <shaperef ref="shZBraceTeeth1I"/>
+  </union>
+
+  <union name="shZBrace3TeethI">
+    <shaperef ref="shZBrace2TeethI"/>
+    <transformation name="PlaceZBraceTooth2dI">
+      <translation y="ZBraceLength / 2. - ZBraceTooth_0  - ZBraceToothSpace - ZBraceTooth_1 - ZBraceToothSpace - ZBraceTooth_2 / 2."/>
+      <translation z="-(ZBraceWidth_0 / 2. + ZBraceWidth_1 / 2.)"/>
+    </transformation>
+    <shaperef ref="shZBraceTeeth2I"/>
+  </union>
+
+  <union name="shZBrace4TeethI">
+    <shaperef ref="shZBrace3TeethI"/>
+    <transformation name="PlaceZBraceTooth3dI">
+      <translation y="-(ZBraceLength / 2. - ZBraceTooth_4 - ZBraceToothSpace - ZBraceTooth_3 / 2.)"/>
+      <translation z="-(ZBraceWidth_0 / 2. + ZBraceWidth_1 / 2.)"/>
+    </transformation>
+    <shaperef ref="shZBraceTeeth3I"/>
+  </union>
+
+  <union name="shZBrace5TeethI">
+    <shaperef ref="shZBrace4TeethI"/>
+    <transformation name="PlaceZBraceTooth4dI">
+      <translation y="-(ZBraceLength / 2. - ZBraceTooth_4 / 2.)"/>
+      <translation z="-(ZBraceWidth_0 / 2. + ZBraceWidth_1 / 2.)"/>
+    </transformation>
+    <shaperef ref="shZBraceTeeth4I"/>
+  </union>
+
+
+
+  <box name="shZBraceSpineO" xhalflength="ZBraceThickness_1 / 2." yhalflength="ZBraceLength / 2." zhalflength="ZBraceWidth_0 / 2."/>
+                                  
+  <box name="shZBraceTeeth0O" xhalflength="ZBraceThickness_1 / 2." yhalflength="ZBraceTooth_0 / 2." zhalflength="ZBraceWidth_1 / 2."/> 
+                                  
+  <box name="shZBraceTeeth1O" xhalflength="ZBraceThickness_1 / 2." yhalflength="ZBraceTooth_1 / 2." zhalflength="ZBraceWidth_1 / 2."/>
+
+  <box name="shZBraceTeeth2O" xhalflength="ZBraceThickness_1 / 2." yhalflength="ZBraceTooth_2 / 2." zhalflength="ZBraceWidth_1 / 2."/>
+
+  <box name="shZBraceTeeth3O" xhalflength="ZBraceThickness_1 / 2." yhalflength="ZBraceTooth_3 / 2." zhalflength="ZBraceWidth_1 / 2."/>
+
+  <box name="shZBraceTeeth4O" xhalflength="ZBraceThickness_1 / 2." yhalflength="ZBraceTooth_4 / 2." zhalflength="ZBraceWidth_1 / 2."/>
+
+  <union name="shZBrace1TeethO">
+    <shaperef ref="shZBraceSpineO"/>
+    <transformation name="PlaceZBraceTooth0dO">
+      <translation y="ZBraceLength / 2. - ZBraceTooth_0 / 2."/>
+      <translation z="-(ZBraceWidth_0 / 2. + ZBraceWidth_1 / 2.)"/>
+    </transformation>
+    <shaperef ref="shZBraceTeeth0O"/>
+  </union>
+
+  <union name="shZBrace2TeethO">
+    <shaperef ref="shZBrace1TeethO"/>
+    <transformation name="PlaceZBraceTooth1dO">
+      <translation y="ZBraceLength / 2. - ZBraceTooth_0 - ZBraceToothSpace - ZBraceTooth_1 / 2."/>
+      <translation z="-(ZBraceWidth_0 / 2. + ZBraceWidth_1 / 2.)"/>
+    </transformation>
+    <shaperef ref="shZBraceTeeth1O"/>
+  </union>
+
+  <union name="shZBrace3TeethO">
+    <shaperef ref="shZBrace2TeethO"/>
+    <transformation name="PlaceZBraceTooth2dO">
+      <translation y="ZBraceLength / 2. - ZBraceTooth_0 - ZBraceToothSpace - ZBraceTooth_1 - ZBraceToothSpace - ZBraceTooth_2 / 2."/>
+      <translation z="-(ZBraceWidth_0 / 2. + ZBraceWidth_1 / 2.)"/>
+    </transformation>
+    <shaperef ref="shZBraceTeeth2O"/>
+  </union>
+
+  <union name="shZBrace4TeethO">
+    <shaperef ref="shZBrace3TeethO"/>
+    <transformation name="PlaceZBraceTooth3dO">
+      <translation y="-(ZBraceLength / 2. - ZBraceTooth_4 - ZBraceToothSpace - ZBraceTooth_3 / 2.)"/>
+      <translation z="-(ZBraceWidth_0 / 2. + ZBraceWidth_1 / 2.)"/>
+    </transformation>
+    <shaperef ref="shZBraceTeeth3O"/>
+  </union>
+
+  <union name="shZBrace5TeethO">
+    <shaperef ref="shZBrace4TeethO"/>
+    <transformation name="PlaceZBraceTooth4dO">
+      <translation y="-(ZBraceLength / 2. - ZBraceTooth_4 / 2.)"/>
+      <translation z="-(ZBraceWidth_0 / 2. + ZBraceWidth_1 / 2.)"/>
+    </transformation>
+    <shaperef ref="shZBraceTeeth4O"/>
+  </union>
+
+
+  <trap name="shInterlinkCuboid0" zhalflength="InterlinkThickness / 2." theta="0." phi="0." dydzn="(InterlinkSurfaceArea_0 / ( (BarrelRadius_1 - BarrelRadius_0 - FlangeHeight_0) / sin( InterlinkFootAngle_0) ) ) / 2." dxdyndzn="( (BarrelRadius_1 - BarrelRadius_0 - FlangeHeight_0 / 2.) / sin( InterlinkFootAngle_0) ) / 2." dxdypdzn="( (BarrelRadius_1 - BarrelRadius_0 - FlangeHeight_0 / 2.) / sin( InterlinkFootAngle_0) ) / 2." angleydzn="InterlinkFootAngle_0" dydzp="(InterlinkSurfaceArea_0 / ( (BarrelRadius_1 - BarrelRadius_0 - FlangeHeight_0 / 2.) / sin( InterlinkFootAngle_0) ) ) / 2." dxdyndzp="( (BarrelRadius_1 - BarrelRadius_0 - FlangeHeight_0 / 2.) / sin( InterlinkFootAngle_0) ) / 2." dxdypdzp="( (BarrelRadius_1 - BarrelRadius_0 - FlangeHeight_0 / 2.) / sin( InterlinkFootAngle_0) ) / 2." angleydzp="InterlinkFootAngle_0"/>
+
+  <trap name="shInterlinkCuboid1" zhalflength="InterlinkThickness / 2." theta="0." phi="0." dydzn="(InterlinkSurfaceArea_1 / ( (BarrelRadius_2 - BarrelRadius_1 - FlangeHeight_1 / 4.) / sin( InterlinkFootAngle_1) ) ) / 2." dxdyndzn="( (BarrelRadius_2 - BarrelRadius_1 - FlangeHeight_1 / 4.) / sin( InterlinkFootAngle_1) ) / 2." dxdypdzn="( (BarrelRadius_2 - BarrelRadius_1 - FlangeHeight_1 / 4.) / sin( InterlinkFootAngle_1) ) / 2." angleydzn="InterlinkFootAngle_1" dydzp="(InterlinkSurfaceArea_1 / ( (BarrelRadius_2 - BarrelRadius_1 - FlangeHeight_1 / 4.) / sin( InterlinkFootAngle_1) ) ) / 2." dxdyndzp="( (BarrelRadius_2 - BarrelRadius_1 - FlangeHeight_1 / 4.) / sin( InterlinkFootAngle_1) ) / 2." dxdypdzp="( (BarrelRadius_2 - BarrelRadius_1 - FlangeHeight_1 / 4.) / sin( InterlinkFootAngle_1) ) / 2." angleydzp="InterlinkFootAngle_1"/>
+
+  <trap name="shInterlinkCuboid2" zhalflength="InterlinkThickness / 2." theta="0." phi="0." dydzn="(InterlinkSurfaceArea_2 / ( (BarrelRadius_3 - BarrelRadius_2 - FlangeHeight_2 / 2.) / sin( InterlinkFootAngle_2) ) ) / 2." dxdyndzn="( (BarrelRadius_3 - BarrelRadius_2 - FlangeHeight_2 / 2.) / sin( InterlinkFootAngle_2) ) / 2." dxdypdzn="( (BarrelRadius_3 - BarrelRadius_2 - FlangeHeight_2 / 2.) / sin( InterlinkFootAngle_2) ) / 2." angleydzn="InterlinkFootAngle_2" dydzp="(InterlinkSurfaceArea_2 / ( (BarrelRadius_3 - BarrelRadius_2 - FlangeHeight_2 / 2.) / sin( InterlinkFootAngle_2) ) ) / 2." dxdyndzp="( (BarrelRadius_3 - BarrelRadius_2 - FlangeHeight_2 / 2.) / sin( InterlinkFootAngle_2) ) / 2." dxdypdzp="( (BarrelRadius_3 - BarrelRadius_2 - FlangeHeight_2 / 2.) / sin( InterlinkFootAngle_2) ) / 2." angleydzp="InterlinkFootAngle_2"/>
+
+  <trap name="shInterlinkCuboid3" zhalflength="InterlinkThickness / 2." theta="0." phi="0." dydzn="(InterlinkSurfaceArea_3 / ( (PolymoderatorOCInnerRadius - BarrelRadius_3 - 1.5 * FlangeHeight_3) / sin( InterlinkFootAngle_3) ) ) / 2." dxdyndzn="( (PolymoderatorOCInnerRadius - BarrelRadius_3 - 1.5 * FlangeHeight_3) / sin( InterlinkFootAngle_3) ) / 2." dxdypdzn="( (PolymoderatorOCInnerRadius - BarrelRadius_3 - 1.5 * FlangeHeight_3) / sin( InterlinkFootAngle_3) ) / 2." angleydzn="InterlinkFootAngle_3" dydzp="(InterlinkSurfaceArea_3 / ( (PolymoderatorOCInnerRadius - BarrelRadius_3 - 1.5 * FlangeHeight_3) / sin( InterlinkFootAngle_3) ) ) / 2." dxdyndzp="( (PolymoderatorOCInnerRadius - BarrelRadius_3 - 1.5 * FlangeHeight_3) / sin( InterlinkFootAngle_3) ) / 2." dxdypdzp="( (PolymoderatorOCInnerRadius - BarrelRadius_3 - 1.5 * FlangeHeight_3) / sin( InterlinkFootAngle_3) ) / 2." angleydzp="InterlinkFootAngle_3"/>
+
+
+</shapes>
+
+<logvol name="StaveCylHatFoot0" shape="shStaveCylHatFoot0" material="CFRP"/>
+<logvol name="StaveCylHatWall0" shape="shStaveCylHatWall0" material="CFRP"/>
+<logvol name="StaveCylHatTop0" shape="shStaveCylHatTop0" material="CFRP"/>
+
+<logvol name="StaveCylHatFoot1" shape="shStaveCylHatFoot1" material="CFRP"/>
+<logvol name="StaveCylHatWall1" shape="shStaveCylHatWall1" material="CFRP"/>
+<logvol name="StaveCylHatTop1" shape="shStaveCylHatTop1" material="CFRP"/>
+
+<logvol name="StaveCylHatFoot2" shape="shStaveCylHatFoot2" material="CFRP"/>
+<logvol name="StaveCylHatWall2" shape="shStaveCylHatWall2" material="CFRP"/>
+<logvol name="StaveCylHatTop2" shape="shStaveCylHatTop2" material="CFRP"/>
+
+<logvol name="StaveCylHatFoot3" shape="shStaveCylHatFoot3" material="CFRP"/>
+<logvol name="StaveCylHatWall3" shape="shStaveCylHatWall3" material="CFRP"/>
+<logvol name="StaveCylHatTop3" shape="shStaveCylHatTop3" material="CFRP"/>
+
+<logvol name="ZBraceI" shape="shZBrace5TeethI" material="Honeycomb2pcf"/><!-- Not totally accurate, density is about 0.038 not 0.032 -->
+<logvol name="ZBraceO" shape="shZBrace5TeethO" material="CFRP"/>
+
+<logvol name="FlangeFoot0" shape="shFlangeFoot0" material="CFRP"/>
+<logvol name="FlangeHat0" shape="shFlangeHat0" material="CFRP"/>
+<logvol name="FlangeFloor0" shape="shFlangeFloor0" material="CFRP"/>
+<logvol name="FlangeWall0" shape="shFlangeWall0" material="CFRP"/>
+<logvol name="FlangeWallSlant0" shape="shFlangeWallSlant0" material="CFRP"/>
+
+<logvol name="FlangeFoot1" shape="shFlangeFoot1" material="CFRP"/>
+<logvol name="FlangeHat1" shape="shFlangeHat1" material="CFRP"/>
+<logvol name="FlangeFloor1" shape="shFlangeFloor1" material="CFRP"/>
+<logvol name="FlangeWall1" shape="shFlangeWall1" material="CFRP"/>
+<logvol name="FlangeWallSlant1" shape="shFlangeWallSlant1" material="CFRP"/>
+
+<logvol name="FlangeFoot2" shape="shFlangeFoot2" material="CFRP"/>
+<logvol name="FlangeHat2" shape="shFlangeHat2" material="CFRP"/>
+<logvol name="FlangeFloor2" shape="shFlangeFloor2" material="CFRP"/>
+<logvol name="FlangeWall2" shape="shFlangeWall2" material="CFRP"/>
+<logvol name="FlangeWallSlant2" shape="shFlangeWallSlant2" material="CFRP"/>
+
+<logvol name="FlangeFoot3" shape="shFlangeFoot3" material="CFRP"/>
+<logvol name="FlangeHat3" shape="shFlangeHat3" material="CFRP"/>
+<logvol name="FlangeFloor3" shape="shFlangeFloor3" material="CFRP"/>
+<logvol name="FlangeWall3" shape="shFlangeWall3" material="CFRP"/>
+<logvol name="FlangeWallSlant3" shape="shFlangeWallSlant3" material="CFRP"/>
+
+<logvol name="Interlink0" shape="shInterlinkCuboid0" material="CFRP"/>
+<logvol name="Interlink1" shape="shInterlinkCuboid1" material="CFRP"/>
+<logvol name="Interlink2" shape="shInterlinkCuboid2" material="CFRP"/>
+<logvol name="Interlink3" shape="shInterlinkCuboid3" material="CFRP"/>
+ 
+
+
+<assembly name="Flange0">
+  <logvolref ref="FlangeWall0"/>
+
+  <transform name="PutFlangeFoot0">
+    <transformation name="PlaceFlangeFoot0">
+      <translation z="FlangeFootLength / 2."/>
+    </transformation>
+  <logvolref ref="FlangeFoot0"/>
+  </transform>
+
+  <transform name="PutFlangeHat0">
+    <transformation name="PlaceFlangeHat0">
+      <translation z="FlangeSubLength / 2. + FlangeThickness / 2."/>
+    </transformation>
+  <logvolref ref="FlangeHat0"/>
+  </transform>
+
+  <transform name="PutFlangeSlant0">
+    <transformation name="PlaceFlangeSlant0">
+      <translation z="FlangeSubLength + FlangeSlantLength / 2."/>
+    </transformation>
+  <logvolref ref="FlangeWallSlant0"/>
+  </transform>
+
+  <transform name="PutFlangeFloor0">
+    <transformation name="PlaceFlangeFloor0">
+      <translation z="FlangeSubLength + FlangeSlantLength + FlangeSubLength / 2."/>
+    </transformation>
+  <logvolref ref="FlangeFloor0"/>
+  </transform>
+</assembly>
+
+<assembly name="Flange1">
+  <logvolref ref="FlangeWall1"/>
+
+  <transform name="PutFlangeFoot1">
+    <transformation name="PlaceFlangeFoot1">
+      <translation z="FlangeFootLength / 2."/>
+    </transformation>
+  <logvolref ref="FlangeFoot1"/>
+  </transform>
+
+  <transform name="PutFlangeHat1">
+    <transformation name="PlaceFlangeHat1">
+      <translation z="FlangeSubLength / 2. + FlangeThickness / 2."/>
+    </transformation>
+  <logvolref ref="FlangeHat1"/>
+  </transform>
+
+  <transform name="PutFlangeSlant1">
+    <transformation name="PlaceFlangeSlant1">
+      <translation z="FlangeSubLength + FlangeSlantLength / 2."/>
+    </transformation>
+  <logvolref ref="FlangeWallSlant1"/>
+  </transform>
+
+  <transform name="PutFlangeFloor1">
+    <transformation name="PlaceFlangeFloor1">
+      <translation z="FlangeSubLength + FlangeSlantLength + FlangeSubLength / 2."/>
+    </transformation>
+  <logvolref ref="FlangeFloor1"/>
+  </transform>
+</assembly>
+
+<assembly name="Flange2">
+  <logvolref ref="FlangeWall2"/>
+
+  <transform name="PutFlangeFoot2">
+    <transformation name="PlaceFlangeFoot2">
+      <translation z="FlangeFootLength / 2."/>
+    </transformation>
+  <logvolref ref="FlangeFoot2"/>
+  </transform>
+
+  <transform name="PutFlangeHat2">
+    <transformation name="PlaceFlangeHat2">
+      <translation z="FlangeSubLength / 2. + FlangeThickness / 2."/>
+    </transformation>
+  <logvolref ref="FlangeHat2"/>
+  </transform>
+
+  <transform name="PutFlangeSlant2">
+    <transformation name="PlaceFlangeSlant2">
+      <translation z="FlangeSubLength + FlangeSlantLength / 2."/>
+    </transformation>
+  <logvolref ref="FlangeWallSlant2"/>
+  </transform>
+
+  <transform name="PutFlangeFloor2">
+    <transformation name="PlaceFlangeFloor2">
+      <translation z="FlangeSubLength + FlangeSlantLength + FlangeSubLength / 2."/>
+    </transformation>
+  <logvolref ref="FlangeFloor2"/>
+  </transform>
+</assembly>
+
+<assembly name="Flange3">
+  <logvolref ref="FlangeWall3"/>
+
+  <transform name="PutFlangeFoot3">
+    <transformation name="PlaceFlangeFoot3">
+      <translation z="FlangeFootLength / 2."/>
+    </transformation>
+  <logvolref ref="FlangeFoot3"/>
+  </transform>
+
+  <transform name="PutFlangeHat3">
+    <transformation name="PlaceFlangeHat3">
+      <translation z="FlangeSubLength / 2. + FlangeThickness / 2."/>
+    </transformation>
+  <logvolref ref="FlangeHat3"/>
+  </transform>
+
+  <transform name="PutFlangeSlant3">
+    <transformation name="PlaceFlangeSlant3">
+      <translation z="FlangeSubLength + FlangeSlantLength / 2."/>
+    </transformation>
+  <logvolref ref="FlangeWallSlant3"/>
+  </transform>
+
+  <transform name="PutFlangeFloor3">
+    <transformation name="PlaceFlangeFloor3">
+      <translation z="FlangeSubLength + FlangeSlantLength + FlangeSubLength / 2."/>
+    </transformation>
+  <logvolref ref="FlangeFloor3"/>
+  </transform>
+</assembly>
+
+<assembly name="ZBrace"> <!-- Single ZBrace panel, shifted upwards -->
+  <transform name="ShiftedZBrace">
+    <transformation name="ShiftZBraceUp">
+      <translation y="BarrelRadius_0 + ZBraceLength / 2."/>
+    </transformation>
+  <logvolref ref="ZBraceI"/>
+  </transform>
+
+  <transform name="ZBraceL">
+    <transformation name="PutZBraceL">
+      <translation x="ZBraceThickness_0 / 2. + ZBraceThickness_1 / 2."/>
+      <translation y="BarrelRadius_0 + ZBraceLength / 2."/>
+    </transformation>
+  <logvolref ref="ZBraceO"/>
+  </transform>
+
+  <transform name="ZBraceR">
+    <transformation name="PutZBraceR">
+      <translation x="-(ZBraceThickness_0 / 2. + ZBraceThickness_1 / 2.)"/>
+      <translation y="BarrelRadius_0 + ZBraceLength / 2."/>
+    </transformation>
+  <logvolref ref="ZBraceO"/>
+  </transform>
+</assembly>
+
+<assembly name="ZBraceCap"> <!-- Multicopied, to be placed -->
+  <multicopy name="PlaceZBraces" n="NumberOfZBraces">
+    <transformation name="RotateZBraces">
+	<rotation zcos="1." angle="2*PI / NumberOfZBraces"/>
+    </transformation>
+    <assemblyref ref="ZBrace"/>
+  </multicopy>
+</assembly>
+
+<assembly name="TempInterlink0">
+  <transform>
+    <transformation name="PlaceInterlinkTest0Pos">
+      <translation z="StaveSupportCylLength / 2. + InterlinkThickness / 2. + 1"/>
+      <translation x="BarrelRadius_0 + ( (BarrelRadius_1 - BarrelRadius_0) / 2. + FlangeHeight_0 / 4.)"/>
+      <rotation zcos="1." angle="InterlinkFootAngle_0"/>
+    </transformation>
+    <logvolref ref="Interlink0"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceInterlinkTest0Neg">
+      <translation z="-(StaveSupportCylLength / 2. + InterlinkThickness / 2. + 1)"/>
+      <translation x="BarrelRadius_0 + ( (BarrelRadius_1 - BarrelRadius_0) / 2. + FlangeHeight_0 / 4.)"/>
+      <rotation zcos="1." angle="InterlinkFootAngle_0"/>
+    </transformation>
+    <logvolref ref="Interlink0"/>
+  </transform>
+</assembly>
+
+<assembly name="TempInterlink1">
+  <transform>
+    <transformation name="PlaceInterlinkTest1Pos">
+      <translation z="StaveSupportCylLength / 2. + InterlinkThickness / 2. + 1"/>
+      <translation x="BarrelRadius_1 + ( (BarrelRadius_2 - BarrelRadius_1) / 2. + FlangeHeight_1 / 4.)"/>
+      <rotation zcos="1." angle="InterlinkFootAngle_1"/>
+    </transformation>
+    <logvolref ref="Interlink1"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceInterlinkTest1Neg">
+      <translation z="-(StaveSupportCylLength / 2. + InterlinkThickness / 2. + 1)"/>
+      <translation x="BarrelRadius_1 + ( (BarrelRadius_2 - BarrelRadius_1) / 2. + FlangeHeight_1 / 4.)"/>
+      <rotation zcos="1." angle="InterlinkFootAngle_1"/>
+    </transformation>
+    <logvolref ref="Interlink1"/>
+  </transform>
+</assembly>
+
+<assembly name="TempInterlink2">
+  <transform>
+    <transformation name="PlaceInterlinkTest2Pos">
+      <translation z="StaveSupportCylLength / 2. + InterlinkThickness / 2. + 1"/>
+      <translation x="BarrelRadius_2 + ( (BarrelRadius_3 - BarrelRadius_2) / 2. + FlangeHeight_2 / 4.)"/>
+      <rotation zcos="1." angle="InterlinkFootAngle_2"/>
+    </transformation>
+    <logvolref ref="Interlink2"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceInterlinkTest2Neg">
+      <translation z="-(StaveSupportCylLength / 2. + InterlinkThickness / 2. + 1)"/>
+      <translation x="BarrelRadius_2 + ( (BarrelRadius_3 - BarrelRadius_2) / 2. + FlangeHeight_2 / 4.)"/>
+      <rotation zcos="1." angle="InterlinkFootAngle_2"/>
+    </transformation>
+    <logvolref ref="Interlink2"/>
+  </transform>
+</assembly>
+
+<assembly name="TempInterlink3">
+  <transform>
+    <transformation name="PlaceInterlinkTest3Pos">
+      <translation z="StaveSupportCylLength / 2. + InterlinkThickness / 2. + 1"/>
+      <translation x="BarrelRadius_3 + ( (PolymoderatorOCInnerRadius - BarrelRadius_3) / 2. + FlangeHeight_3 / 4.)"/>
+      <rotation zcos="1." angle="InterlinkFootAngle_3"/>
+    </transformation>
+    <logvolref ref="Interlink3"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceInterlinkTest3Neg">
+      <translation z="-(StaveSupportCylLength / 2. + InterlinkThickness / 2. + 1)"/>
+      <translation x="BarrelRadius_3 + ( (PolymoderatorOCInnerRadius - BarrelRadius_3) / 2. + FlangeHeight_3 / 4.)"/>
+      <rotation zcos="1." angle="InterlinkFootAngle_3"/>
+    </transformation>
+    <logvolref ref="Interlink3"/>
+  </transform>
+</assembly>
+
+<assembly name="StaveCylHat0">
+  <logvolref ref="StaveCylHatTop0"/>
+
+  <transform>
+    <transformation name="PlaceStaveCylHatWall0Low">
+        <translation z="-(StaveCylHatTopWidth_0 / 2. + StaveCylWallWidth_0 / 2.)"/>
+        <rotation ycos="1." angle="PI"/>
+    </transformation>
+    <logvolref ref="StaveCylHatWall0"/>
+  </transform> 
+  <transform>
+    <transformation name="PlaceStaveCylHatWall0High">
+        <translation z="StaveCylHatTopWidth_0 / 2. + StaveCylWallWidth_0 / 2."/>
+    </transformation>
+    <logvolref ref="StaveCylHatWall0"/>
+  </transform> 
+
+  <transform>
+    <transformation name="PlaceStaveCylHatFoot0Low">
+        <translation z="-(StaveCylHatTopWidth_0 / 2. +  StaveCylHatFootWidth / 2. + StaveCylWallWidth_0)"/>
+    </transformation>
+    <logvolref ref="StaveCylHatFoot0"/>
+  </transform> 
+  <transform>
+    <transformation name="PlaceStaveCylHatFoot0High">
+        <translation z="StaveCylHatTopWidth_0 / 2. +  StaveCylHatFootWidth / 2. + StaveCylWallWidth_0"/>
+    </transformation>
+    <logvolref ref="StaveCylHatFoot0"/>
+  </transform> 
+</assembly>
+
+<assembly name="StaveCylHat1">
+  <logvolref ref="StaveCylHatTop1"/>
+
+  <transform>
+    <transformation name="PlaceStaveCylHatWall1Low">
+        <translation z="-(StaveCylHatTopWidth_1 / 2. + StaveCylWallWidth_1 / 2.)"/>
+        <rotation ycos="1." angle="PI"/>
+    </transformation>
+    <logvolref ref="StaveCylHatWall1"/>
+  </transform> 
+  <transform>
+    <transformation name="PlaceStaveCylHatWall1High">
+        <translation z="StaveCylHatTopWidth_1 / 2. + StaveCylWallWidth_1 / 2."/>
+    </transformation>
+    <logvolref ref="StaveCylHatWall1"/>
+  </transform> 
+
+  <transform>
+    <transformation name="PlaceStaveCylHatFoot1Low">
+        <translation z="-(StaveCylHatTopWidth_1 / 2. +  StaveCylHatFootWidth / 2. + StaveCylWallWidth_1)"/>
+    </transformation>
+    <logvolref ref="StaveCylHatFoot1"/>
+  </transform> 
+  <transform>
+    <transformation name="PlaceStaveCylHatFoot1High">
+        <translation z="StaveCylHatTopWidth_1 / 2. +  StaveCylHatFootWidth / 2. + StaveCylWallWidth_1"/>
+    </transformation>
+    <logvolref ref="StaveCylHatFoot1"/>
+  </transform> 
+</assembly>
+
+<assembly name="StaveCylHat2">
+  <logvolref ref="StaveCylHatTop2"/>
+
+  <transform>
+    <transformation name="PlaceStaveCylHatWall2Low">
+        <translation z="-(StaveCylHatTopWidth_2 / 2. + StaveCylWallWidth_2 / 2.)"/>
+        <rotation ycos="1." angle="PI"/>
+    </transformation>
+    <logvolref ref="StaveCylHatWall2"/>
+  </transform> 
+  <transform>
+    <transformation name="PlaceStaveCylHatWall2High">
+        <translation z="StaveCylHatTopWidth_2 / 2. + StaveCylWallWidth_2 / 2."/>
+    </transformation>
+    <logvolref ref="StaveCylHatWall2"/>
+  </transform> 
+
+  <transform>
+    <transformation name="PlaceStaveCylHatFoot2Low">
+        <translation z="-(StaveCylHatTopWidth_2 / 2. +  StaveCylHatFootWidth / 2. + StaveCylWallWidth_2)"/>
+    </transformation>
+    <logvolref ref="StaveCylHatFoot2"/>
+  </transform> 
+  <transform>
+    <transformation name="PlaceStaveCylHatFoot2High">
+        <translation z="StaveCylHatTopWidth_2 / 2. +  StaveCylHatFootWidth / 2. + StaveCylWallWidth_2"/>
+    </transformation>
+    <logvolref ref="StaveCylHatFoot2"/>
+  </transform> 
+</assembly>
+
+<assembly name="StaveCylHat3">
+  <logvolref ref="StaveCylHatTop3"/>
+
+  <transform>
+    <transformation name="PlaceStaveCylHatWall3Low">
+        <translation z="-(StaveCylHatTopWidth_3 / 2. + StaveCylWallWidth_3 / 2.)"/>
+        <rotation ycos="1." angle="PI"/>
+    </transformation>
+    <logvolref ref="StaveCylHatWall3"/>
+  </transform> 
+  <transform>
+    <transformation name="PlaceStaveCylHatWall3High">
+        <translation z="StaveCylHatTopWidth_3 / 2. + StaveCylWallWidth_3 / 2."/>
+    </transformation>
+    <logvolref ref="StaveCylHatWall3"/>
+  </transform> 
+
+  <transform>
+    <transformation name="PlaceStaveCylHatFoot3Low">
+        <translation z="-(StaveCylHatTopWidth_3 / 2. +  StaveCylHatFootWidth / 2. + StaveCylWallWidth_3)"/>
+    </transformation>
+    <logvolref ref="StaveCylHatFoot3"/>
+  </transform> 
+  <transform>
+    <transformation name="PlaceStaveCylHatFoot3High">
+        <translation z="StaveCylHatTopWidth_3 / 2. +  StaveCylHatFootWidth / 2. + StaveCylWallWidth_3"/>
+    </transformation>
+    <logvolref ref="StaveCylHatFoot3"/>
+  </transform> 
+</assembly>
+
+<assembly name="Barrel0Support">
+  <logvol name="StripB_Cyl0" shape="shStripB_Cyl0" material="CFRP"/>
+
+  <multicopy name="PlaceHatsCyl0" n="NumberOfHatsPerCyl">
+    <transformation name="TranslateHatsCyl0">
+      <translation z="StaveSupportCylLength / (NumberOfHatsPerCyl + 1)"/>
+    </transformation>
+    <transform>
+      <transformation name="PlaceTopHatAtLowEnd0">
+        <translation z="-StaveSupportCylLength / 2. + StaveSupportCylLength / (NumberOfHatsPerCyl + 1)"/>
+      </transformation>
+      <assemblyref ref="StaveCylHat0"/>
+    </transform>
+  </multicopy>
+
+  <transform>
+    <transformation name="PlaceFlangeAtPosEnd0">
+      <translation z="StaveSupportCylLength / 2. - FlangeThickness"/>
+      <rotation ycos="1." angle="PI"/>
+    </transformation>
+    <assemblyref ref="Flange0"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceFlangeAtNegEnd0">
+      <translation z="-(StaveSupportCylLength / 2. - FlangeThickness)"/>
+    </transformation>
+    <assemblyref ref="Flange0"/>
+  </transform>
+
+</assembly>
+
+<assembly name="Barrel1Support">
+  <logvol name="StripB_Cyl1" shape="shStripB_Cyl1" material="CFRP"/>
+
+  <multicopy name="PlaceHatsCyl1" n="NumberOfHatsPerCyl">
+    <transformation name="TranslateHatsCyl1">
+      <translation z="StaveSupportCylLength / (NumberOfHatsPerCyl + 1)"/>
+    </transformation>
+    <transform>
+      <transformation name="PlaceTopHatAtLowEnd1">
+        <translation z="-StaveSupportCylLength / 2. + StaveSupportCylLength / (NumberOfHatsPerCyl + 1)"/>
+      </transformation>
+      <assemblyref ref="StaveCylHat1"/>
+    </transform>
+  </multicopy>
+
+  <transform>
+    <transformation name="PlaceFlangeAtPosEnd1">
+      <translation z="StaveSupportCylLength / 2. - FlangeThickness"/>
+      <rotation ycos="1." angle="PI"/>
+    </transformation>
+    <assemblyref ref="Flange1"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceFlangeAtNegEnd1">
+      <translation z="-(StaveSupportCylLength / 2. - FlangeThickness)"/>
+    </transformation>
+    <assemblyref ref="Flange1"/>
+  </transform>
+
+</assembly>
+
+<assembly name="Barrel2Support">
+  <logvol name="StripB_Cyl2" shape="shStripB_Cyl2" material="CFRP"/>
+
+  <multicopy name="PlaceHatsCyl2" n="NumberOfHatsPerCyl">
+    <transformation name="TranslateHatsCyl2">
+      <translation z="StaveSupportCylLength / (NumberOfHatsPerCyl + 1)"/>
+    </transformation>
+    <transform>
+      <transformation name="PlaceTopHatAtLowEnd2">
+        <translation z="-StaveSupportCylLength / 2. + StaveSupportCylLength / (NumberOfHatsPerCyl + 1)"/>
+      </transformation>
+      <assemblyref ref="StaveCylHat2"/>
+    </transform>
+  </multicopy>
+
+  <transform>
+    <transformation name="PlaceFlangeAtPosEnd2">
+      <translation z="StaveSupportCylLength / 2. - FlangeThickness"/>
+      <rotation ycos="1." angle="PI"/>
+    </transformation>
+    <assemblyref ref="Flange2"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceFlangeAtNegEnd2">
+      <translation z="-(StaveSupportCylLength / 2. - FlangeThickness)"/>
+    </transformation>
+    <assemblyref ref="Flange2"/>
+  </transform>
+
+
+</assembly>
+
+<assembly name="Barrel3Support">
+  <logvol name="StripB_Cyl3" shape="shStripB_Cyl3" material="CFRP"/>
+
+  <multicopy name="PlaceHatsCyl3" n="NumberOfHatsPerCyl">
+    <transformation name="TranslateHatsCyl3">
+      <translation z="StaveSupportCylLength / (NumberOfHatsPerCyl + 1)"/>
+    </transformation>
+    <transform>
+      <transformation name="PlaceTopHatAtLowEnd3">
+        <translation z="-StaveSupportCylLength / 2. + StaveSupportCylLength / (NumberOfHatsPerCyl + 1)"/>
+      </transformation>
+      <assemblyref ref="StaveCylHat3"/>
+    </transform>
+  </multicopy>
+
+  <transform>
+    <transformation name="PlaceFlangeAtPosEnd3">
+      <translation z="StaveSupportCylLength / 2. - FlangeThickness"/>
+      <rotation ycos="1." angle="PI"/>
+    </transformation>
+    <assemblyref ref="Flange3"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceFlangeAtNegEnd3">
+      <translation z="-(StaveSupportCylLength / 2. - FlangeThickness)"/>
+    </transformation>
+    <assemblyref ref="Flange3"/>
+  </transform>
+
+
+</assembly>
+
+<!-- To be included in Barrel.gmx. Builds up the SS and MS staves cores (including bus tape copper) -->
+
+<shapes>
+  <box name="shStaveCoreMain" xhalflength="StaveCoreLength/2" yhalflength="StaveCoreWidth/2" zhalflength="StaveCoreT/2 - EPS"/>
+  <box name="shEOSCore" xhalflength="EOSCoreLength/2" yhalflength="EOSCoreWidth/2" zhalflength="EOSCoreT/2 - EPS"/>
+  <union name="shStaveCore">
+    <shaperef ref="shStaveCoreMain"/>
+    <transformation name="MoveEOS_ToCore">
+      <translation x="(StaveCoreLength - EOSCoreLength)/2" y="(StaveCoreWidth + EOSCoreWidth)/2"/>
+    </transformation>
+    <shaperef ref="shEOSCore"/>
+  </union>
+
+  <box name="shStaveFacesheet" xhalflength="StaveCoreLength/2 - EPS" yhalflength="StaveCoreWidth/2 - EPS" zhalflength="StaveFacesheetT/2 - EPS"/> 
+  <box name="shEOS_Facesheet" xhalflength="EOSCoreLength/2 - EPS" yhalflength="EOSCoreWidth/2 - EPS" zhalflength="StaveFacesheetT/2 - EPS"/>
+  <union name="shStaveFacesheetAll">
+    <shaperef ref="shStaveFacesheet"/>
+    <transformation name="MoveEOS_Facesheet">
+      <translation x="(StaveCoreLength - EOSCoreLength)/2" y="(StaveCoreWidth + EOSCoreWidth)/2"/>
+    </transformation>
+    <shaperef ref="shEOS_Facesheet"/>
+  </union>
+
+  <box name="shStaveCloseoutLong" xhalflength="StaveCloseoutLongL/2 - EPS" yhalflength="StaveCloseoutLongT/2" zhalflength="StaveCloseoutLongW/2 - EPS"/>
+
+  <box name="shStaveCloseoutLongEOS" xhalflength="StaveCloseoutLongEOS_L/2 - EPS" yhalflength="StaveCloseoutLongT/2" zhalflength="StaveCloseoutLongW/2 - EPS"/>
+
+  <box name="shStaveCloseoutFarEnd" xhalflength="StaveCloseoutFarEndW/2" yhalflength="StaveCloseoutFarEndL/2" zhalflength="StaveCloseoutFarEndT/2 - EPS"/>
+
+  <box name="shStaveCloseoutEOS_End" xhalflength="StaveCloseoutEOS_EndW/2" yhalflength="StaveCloseoutEOS_EndL/2" zhalflength="StaveCloseoutEOS_EndT/2 - EPS"/>
+
+  <tube name="shStaveMount" rmin="0.0" rmax="StaveMountR - EPS" zhalflength="StaveMountL/2"/>
+
+  <trap name="shStaveMountC" zhalflength="StaveMountLength_0 / 2." theta="atan( (tan(TiltAngle_3) ) / 2.)" phi="PI / 2." dydzn="StaveMountHeight_0 / 2." dxdyndzn="StaveMountThickness_0 / 2." dxdypdzn="StaveMountThickness_0 / 2." angleydzn="0." dydzp="(StaveMountHeight_0 + (tan(TiltAngle_3) * StaveMountLength_0)) / 2." dxdyndzp="StaveMountThickness_0 / 2." dxdypdzp="StaveMountThickness_0 / 2." angleydzp="0."/>
+
+  <trap name="shStaveMountI" zhalflength="StaveMountLength_1 / 2." theta="atan( (tan(TiltAngle_3) ) / 2.)" phi="PI / 2." dydzn="StaveMountHeight_1 / 2." dxdyndzn="StaveMountThickness_1 / 2." dxdypdzn="StaveMountThickness_1 / 2." angleydzn="0." dydzp="(StaveMountHeight_1 + (tan(TiltAngle_3) * StaveMountLength_1)) / 2." dxdyndzp="StaveMountThickness_1 / 2." dxdypdzp="StaveMountThickness_1 / 2." angleydzp="0."/>
+
+
+  <trap name="shStaveMountE" zhalflength="StaveMountLength_2 / 2." theta="atan( (tan(TiltAngle_3) ) / 2.)" phi="PI / 2." dydzn="StaveMountHeight_2 / 2." dxdyndzn="StaveMountThickness_2 / 2." dxdypdzn="StaveMountThickness_2 / 2." angleydzn="0." dydzp="(StaveMountHeight_2 + (tan(TiltAngle_3) * StaveMountLength_2)) / 2." dxdyndzp="StaveMountThickness_2 / 2." dxdypdzp="StaveMountThickness_2 / 2." angleydzp="0."/>
+
+  <box name="shStaveBusKapton" xhalflength="StaveCoreLength/2 - EPS" yhalflength="StaveCoreWidth/2 - EPS" zhalflength="StaveBusKaptonT/2 - EPS"/> 
+  <box name="shStaveBusGlue" xhalflength="StaveCoreLength/2 - EPS" yhalflength="StaveCoreWidth/2 - EPS" zhalflength="StaveBusGlueT/2 - EPS"/> 
+
+  <box name="shStaveGroundEOS_Cu" xhalflength="StaveGroundEOS_W/2" yhalflength="StaveGroundEOS_L/2" zhalflength="StaveBusCuT/2 - EPS"/> 
+  <box name="shStaveGroundPowerCu" xhalflength="StaveGroundPowerL/2" yhalflength="StaveGroundPowerW/2" zhalflength="StaveBusCuT/2 - EPS"/> 
+  <box name="shStaveGroundSignalCu" xhalflength="StaveGroundSignalL/2" yhalflength=" StaveGroundSignalW/2" zhalflength="StaveBusCuT/2 - EPS"/>
+  <union name="shStaveGroundU1">
+    <shaperef ref="shStaveGroundSignalCu"/>
+    <transformation name="AddPowerCu">
+      <translation y="-(StaveGroundEOS_L + (StaveGroundEOS_FromTop - StaveGroundSignalFromTop) -                        (StaveGroundSignalW + StaveGroundPowerW)/2)"/>
+    </transformation>
+    <shaperef ref="shStaveGroundPowerCu"/>
+  </union>
+  <union name="shStaveGround">
+    <shaperef ref="shStaveGroundU1"/>
+    <transformation name="AddEOS_Cu">
+      <translation x="(StaveGroundSignalL + StaveGroundEOS_W)/2" y="-((StaveGroundEOS_L - StaveGroundSignalW)/2 + (StaveGroundEOS_FromTop - StaveGroundSignalFromTop))"/>
+    </transformation>
+    <shaperef ref="shStaveGroundEOS_Cu"/>
+  </union>
+
+  <box name="shStaveSignalEOS_Cu" xhalflength="StaveSignalEOS_W/2" yhalflength="StaveSignalEOS_L/2" zhalflength="StaveBusCuT/2 - EPS"/> 
+  <box name="shStaveSignalPowerCu" xhalflength="StaveSignalPowerL/2" yhalflength="StaveSignalPowerW/2" zhalflength="StaveBusCuT/2 - EPS"/>
+  <!-- Trap has to be made with z in length direction; thickness is y direction; width changes in x direction -->  
+  <trd name="shStaveSignalSSSignalCu" xhalflength1="StaveSignalSSSignalBigW/2" xhalflength2="StaveSignalSSSignalSmallW/2" yhalflength1="StaveBusCuT/2" yhalflength2="StaveBusCuT/2" zhalflength="StaveSignalSignalL/2"/>
+  <trd name="shStaveSignalMSSignalCu" xhalflength1="StaveSignalMSSignalBigW/2" xhalflength2="StaveSignalMSSignalSmallW/2" yhalflength1="StaveBusCuT/2" yhalflength2="StaveBusCuT/2" zhalflength="StaveSignalSignalL/2"/>
+  <union name="shStaveSignalU1">
+    <shaperef ref="shStaveSignalEOS_Cu"/>
+    <transformation name="AddSignalPowerCu">
+      <translation x="-(StaveSignalEOS_W/2 + StaveSignalPowerL/2)" y="-(StaveSignalEOS_L/2 - StaveSignalPowerW/2)"/>
+    </transformation>
+    <shaperef ref="shStaveSignalPowerCu"/>
+  </union>
+  <union name="shStaveSignalSS">
+    <shaperef ref="shStaveSignalU1"/>
+    <transformation name="AddSignalSS_SignalCu">
+      <translation x="-(StaveSignalEOS_W/2 + StaveSignalSignalL/2)" y="B_SensorWidth/2 - StaveSignalSSSignalBigW/2 -                       ((StaveCoreWidth - StaveSignalEOS_L)/2 - StaveSignalEOS_FromTop)"/> <!-- Leave all copper below Si sensor -->
+      <rotation ycos="1" angle="-PI/2"/>
+      <rotation zcos="1" angle="PI/2"/>
+    </transformation>
+    <shaperef ref="shStaveSignalSSSignalCu"/>
+  </union>
+  <union name="shStaveSignalMS">
+    <shaperef ref="shStaveSignalU1"/>
+    <transformation name="AddSignalMS_SignalCu">
+      <translation x="-(StaveSignalEOS_W/2 + StaveSignalSignalL/2)" y="B_SensorWidth/2 - StaveSignalSSSignalBigW/2 -                       ((StaveCoreWidth - StaveSignalEOS_L)/2 - StaveSignalEOS_FromTop)"/> <!-- Leave all copper below Si sensor -->
+      <rotation ycos="1" angle="-PI/2"/>
+      <rotation zcos="1" angle="PI/2"/>
+    </transformation>
+    <shaperef ref="shStaveSignalMSSignalCu"/>
+  </union>
+
+  <box name="shStaveCFoam" xhalflength="StaveCoolingL/2" yhalflength="StaveCFoamW/2" zhalflength="StaveCFoamT/2 - EPS"/>
+
+  <box name="shStaveEOS_CFoam" xhalflength="StaveEOS_CFoamL/2" yhalflength="StaveEOS_CFoamW/2" zhalflength="StaveCFoamT/2 - EPS"/>
+
+  <tube name="shStaveCoolingTube" rmin="0.0" rmax="StaveCoolingPipeOD" zhalflength="StaveCoolingL/2 - 2 * EPS"/>
+  <tube name="shStaveCoolingCO2" rmin="0.0" rmax="StaveCoolingPipeID" zhalflength="StaveCoolingL/2 - 3 * EPS"/>
+
+</shapes>
+
+<logvol name="StaveFacesheetAll" shape="shStaveFacesheetAll" material="K13D2U"/>
+<logvol name="StaveCloseoutLong" shape="shStaveCloseoutLong" material="CFRP"/>
+<logvol name="StaveCloseoutLongEOS" shape="shStaveCloseoutLongEOS" material="CFRP"/>
+<logvol name="StaveCloseoutFarEnd" shape="shStaveCloseoutFarEnd" material="Peek"/>
+<logvol name="StaveCloseoutEOS_End" shape="shStaveCloseoutEOS_End" material="Peek"/>
+<logvol name="StaveMountC" shape="shStaveMountC" material="Peek"/>
+<logvol name="StaveMountI" shape="shStaveMountI" material="Peek"/>
+<logvol name="StaveMountE" shape="shStaveMountE" material="Peek"/>
+
+<logvol name="StaveBusKapton" shape="shStaveBusKapton" material="Kapton"/>
+<logvol name="StaveBusGlue" shape="shStaveBusGlue" material="BoronNitrideEpoxy"/> 
+<logvol name="StaveGround" shape="shStaveGround" material="CuMetal"/>
+<logvol name="StaveSignalSS" shape="shStaveSignalSS" material="CuMetal"/> 
+<logvol name="StaveSignalMS" shape="shStaveSignalMS" material="CuMetal"/> 
+
+
+<logvol name="StaveCoolingUnit" shape="shStaveCFoam" material="CFoam">
+  <transform>
+    <transformation name="PlaceTubeInStaveCFoam">
+      <rotation ycos="1" angle="PI / 2."/>
+    </transformation>
+      <logvol name="StaveCoolingTube" shape="shStaveCoolingTube" material="TiMetal">
+        <logvol name="StaveCoolingCO2" shape="shStaveCoolingCO2" material="CO2Liquid"/>
+      </logvol>
+  </transform>
+</logvol>
+
+<logvol name="StaveEOS_CFoam" shape="shStaveEOS_CFoam" material="CFoam"/>
+
+<logvol name="StaveCore" shape="shStaveCore" material="Honeycomb2pcf">
+
+  <transform>
+    <transformation name="PlaceLowZ_Facesheet">
+      <translation z="-((StaveHoneycombT + StaveFacesheetT)/2)"/>
+    </transformation>
+    <logvolref ref="StaveFacesheetAll"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceHighZ_Facesheet">
+      <translation z="(StaveHoneycombT + StaveFacesheetT)/2"/>
+    </transformation>
+    <logvolref ref="StaveFacesheetAll"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceCloseoutLongUp">
+      <translation x="(-StaveCoreLength + StaveCloseoutLongEOS_L)/2 + StaveCloseoutFarEndW" y="StaveCoreWidth/2 - 2."/>
+    </transformation>
+    <logvolref ref="StaveCloseoutLongEOS"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceCloseoutLongDown">
+      <translation x="(StaveCoreLength - StaveCloseoutLongL)/2 - StaveCloseoutEOS_EndW" y="-(StaveCoreWidth/2 - 2.)"/>
+    </transformation>
+    <logvolref ref="StaveCloseoutLong"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceCloseoutFarEnd">
+      <translation x="-(StaveCoreLength - StaveCloseoutFarEndW)/2"/>
+    </transformation>
+    <logvolref ref="StaveCloseoutFarEnd"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceCloseoutEOS_End">
+      <translation x="(StaveCoreLength - StaveCloseoutEOS_EndW)/2" y="EOSCoreWidth/2"/>
+    </transformation>
+    <logvolref ref="StaveCloseoutEOS_End"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceLowZ_BusGlue">
+      <translation z="-((StaveHoneycombT + StaveBusGlueT)/2 + StaveFacesheetT)"/>
+    </transformation>
+    <logvolref ref="StaveBusGlue"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceHighZ_BusGlue">
+      <translation z="(StaveHoneycombT + StaveBusGlueT)/2 + StaveFacesheetT"/>
+    </transformation>
+    <logvolref ref="StaveBusGlue"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceLowZ_BusKapton">
+      <translation z="-((StaveHoneycombT + StaveBusKaptonT)/2 + StaveFacesheetT + StaveBusGlueT)"/>
+    </transformation>
+    <logvolref ref="StaveBusKapton"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceHighZ_BusKapton">
+      <translation z="(StaveHoneycombT + StaveBusKaptonT)/2 + StaveFacesheetT + StaveBusGlueT"/>
+    </transformation>
+    <logvolref ref="StaveBusKapton"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceLowY_Cooling">
+      <translation x="(StaveCoreLength - StaveCoolingL)/2 - StaveCloseoutEOS_EndW" y="-StaveCoolingOffset"/>
+    </transformation>
+    <logvolref ref="StaveCoolingUnit"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceHighY_Cooling">
+      <translation x="(StaveCoreLength - StaveCoolingL)/2 - StaveCloseoutEOS_EndW" y="StaveCoolingOffset"/>
+    </transformation>
+    <logvolref ref="StaveCoolingUnit"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceStaveEOS_CFoam">
+      <translation x="(StaveCoreLength - EOSCoreLength)/2" y="StaveCoolingOffset + (StaveCFoamW + StaveEOS_CFoamW)/2"/>
+    </transformation>
+    <logvolref ref="StaveEOS_CFoam"/>
+  </transform>
+
+</logvol>
+
+<assembly name="StaveCoreSS"> <!-- A core plus the Cu in the cable bus plus mounts -->
+  <logvolref ref="StaveCore"/>
+  <transform>
+    <transformation name="PlaceLowZ_SignalCu">
+      <translation x="(StaveCoreLength - StaveSignalEOS_W)/2 - StaveSignalEOS_FromEnd" y="(StaveCoreWidth - StaveSignalEOS_L)/2 - StaveSignalEOS_FromTop" z="-((StaveCoreT + StaveBusCuT)/2 + StaveBusCuT)"/>
+    </transformation>
+    <logvolref ref="StaveSignalSS"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceHighZ_SignalCu">
+      <translation x="(StaveCoreLength - StaveSignalEOS_W)/2 - StaveSignalEOS_FromEnd" y="(StaveCoreWidth - StaveSignalEOS_L)/2 - StaveSignalEOS_FromTop" z="(StaveCoreT + StaveBusCuT)/2 + StaveBusCuT"/>
+    </transformation>
+    <logvolref ref="StaveSignalSS"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceLowZ_GroundCu">
+      <translation x="(StaveCoreLength - (StaveGroundSignalL + StaveGroundEOS_W))/2 - StaveGroundEOS_FromEnd" y="(StaveCoreWidth - StaveGroundSignalW)/2 - StaveGroundSignalFromTop" z="-((StaveCoreT + StaveBusCuT)/2)"/>
+    </transformation>
+    <logvolref ref="StaveGround"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceHighZ_GroundCu">
+      <translation x="(StaveCoreLength - (StaveGroundSignalL + StaveGroundEOS_W))/2 - StaveGroundEOS_FromEnd" y="(StaveCoreWidth - StaveGroundSignalW)/2 - StaveGroundSignalFromTop" z="(StaveCoreT + StaveBusCuT)/2"/>
+    </transformation>
+    <logvolref ref="StaveGround"/>
+  </transform>
+
+</assembly>
+
+<assembly name="StaveCoreMS"> <!-- A core plus the Cu in the cable bus plus mounts -->
+  <logvolref ref="StaveCore"/>
+  <transform>
+    <transformationref ref="PlaceLowZ_SignalCu"/>
+    <logvolref ref="StaveSignalMS"/>
+  </transform>
+  <transform>
+    <transformationref ref="PlaceHighZ_SignalCu"/>
+    <logvolref ref="StaveSignalMS"/>
+  </transform>
+  <transform>
+    <transformationref ref="PlaceLowZ_GroundCu"/>
+    <logvolref ref="StaveGround"/>
+  </transform>
+  <transform>
+    <transformationref ref="PlaceHighZ_GroundCu"/>
+    <logvolref ref="StaveGround"/>
+  </transform>
+
+</assembly>
+
+<!-- Build up SS and MS barrel hybrids -->
+<defines>
+  <!-- Ref. np49-01-104.pdf, Rev C June 2014, ignore extension for HCC -->
+  <var name="B_HybridW" value="15.5"/>
+  <var name="B_HybridL" value="B_SensorWidth"/>
+  <var name="B_HybridT" value="0.120 + 0.240 + 0.080"/>
+
+  <var name="HCC_OffsetX" value="B_HybridW/2 - (3.55 + 0.5 + ABC_W + HCC_L/2)"/>
+  <var name="HCC_OffsetY" value="36.41 + HCC_W/2"/>
+  <var name="NumABC_PerB_Hybrid" value="10"/>
+  <var name="ABC_Pitch" value="1.64 + ABC_L"/>
+  <var name="ABC_ToHybridEdgeGap" value="0.5"/>
+  <var name="B_HybridX_Offset" value="5.535"/>
+
+</defines>
+
+<shapes>
+  <box name="shB_HybridPCB" xhalflength="B_HybridW/2" yhalflength="B_HybridL/2" zhalflength="B_HybridT/2 - EPS"/>
+</shapes>
+
+<!-- GeoModelXml input created by ConsolidX version 1.100000 for B_HybridPCB, version 1.0. -->
+
+<materials>
+
+  <material name="matB_HybridPCB" density="2.165382">
+    <elementref ref="Aluminium" fraction="0.008079"/>
+    <elementref ref="Barium" fraction="0.057375"/>
+    <elementref ref="Carbon" fraction="0.250888"/>
+    <elementref ref="Copper" fraction="0.421377"/>
+    <elementref ref="Gold" fraction="0.004799"/>
+    <elementref ref="Hydrogen" fraction="0.014609"/>
+    <elementref ref="Lead" fraction="0.023518"/>
+    <elementref ref="Nickel" fraction="0.020306"/>
+    <elementref ref="Nitrogen" fraction="0.048265"/>
+    <elementref ref="Oxygen" fraction="0.058161"/>
+    <elementref ref="Silver" fraction="0.024977"/>
+    <elementref ref="Tin" fraction="0.047647"/>
+    <elementref ref="Titanium" fraction="0.019999"/>
+  </material>
+
+</materials>
+
+<!-- End of ConsolidX output -->
+
+<logvol name="B_HybridPCB" shape="shB_HybridPCB" material="matB_HybridPCB"/>
+
+<assembly name="B_HybridNear"> <!-- As in near to EOS -->
+  <logvolref ref="B_HybridPCB"/>
+
+  <transform>
+    <transformation name="PlaceHCCOnB_Hybrid">
+      <translation x="HCC_OffsetX" y="HCC_OffsetY" z="(B_HybridT + HCC_T) / 2"/>
+    </transformation>
+    <logvolref ref="HCC_Chip"/>
+  </transform>
+
+  <multicopy name="PlaceABCsOnB_Hybrid" n="NumABC_PerB_Hybrid">
+    <transformation name="PlaceABCOnHybrid">
+      <translation y="ABC_Pitch"/>
+    </transformation>
+    <transform>
+      <transformation name="ABC_ReadyForCopyingToB_Hybrid">
+        <translation x="B_HybridW/2 - ABC_ToHybridEdgeGap - ABC_W/2" y="-((NumABC_PerB_Hybrid - 1) * ABC_Pitch / 2.)" z="(B_HybridT + ABC_T) / 2"/>
+      </transformation>
+      <logvolref ref="ABC_Chip"/>
+    </transform>
+  </multicopy>
+
+</assembly>
+
+<assembly name="B_HybridFar">
+  <logvolref ref="B_HybridPCB"/>
+
+  <transform>
+    <transformation name="PlaceHCCOnB_HybridF">
+      <translation x="-HCC_OffsetX" y="HCC_OffsetY" z="(B_HybridT + HCC_T) / 2"/>
+    </transformation>
+    <logvolref ref="HCC_Chip"/>
+  </transform>
+
+  <multicopy name="PlaceABCsOnB_HybridF" n="NumABC_PerB_Hybrid">
+    <transformation name="PlaceABCOnHybridF">
+      <translation y="ABC_Pitch"/>
+    </transformation>
+    <transform>
+      <transformation name="ABC_ReadyForCopyingToB_HybridF">
+        <translation x="-(B_HybridW/2 - ABC_ToHybridEdgeGap - ABC_W/2)" y="-((NumABC_PerB_Hybrid - 1) * ABC_Pitch / 2.)" z="(B_HybridT + ABC_T) / 2"/>
+      </transformation>
+      <logvolref ref="ABC_Chip"/>
+    </transform>
+  </multicopy>
+
+</assembly>
+
+<shapes>
+
+  <tube name="shInnerPolyMod" rmin="StripB_OuterRadius - InnerPolyModThickness" rmax="StripB_OuterRadius - 3 * EPS" zhalflength="InnerPolyModHalfLength"/>
+
+  <tube name="shBarrel0" rmin="BarrelRadius_0" rmax="CylRadius_0 + CylEnvelopeThO" zhalflength="StaveSupportCylLength / 2. + 1. / 2."/>
+  <tube name="shBarrel1" rmin="BarrelRadius_1" rmax="CylRadius_1 + CylEnvelopeThO" zhalflength="StaveSupportCylLength / 2. + 1. / 2."/> <!-- Offset of + 1 to avoid Stavecore overlap in Barrel 2 -->
+  <tube name="shBarrel2" rmin="BarrelRadius_2" rmax="CylRadius_2 + CylEnvelopeThO" zhalflength="StaveSupportCylLength / 2. + 1. / 2."/> <!-- Why though? -->
+  <tube name="shBarrel3" rmin="BarrelRadius_3" rmax="StripB_OuterRadius - 2 * EPS" zhalflength="StaveSupportCylLength / 2. + 1. / 2."/> <!-- Originally StripB_HalfLength - EPS -->
+
+</shapes>
+
+<transformation name="StereoRot">
+  <rotation zcos="1" angle="StereoAngle"/>
+</transformation>
+
+<transformation name="RotateModulePowerEnd">
+  <rotation zcos="1" angle="PI + StereoAngle"/>
+</transformation>
+
+<!-- GeoModelXml input created by ConsolidX version 1.100000 for BarrelEOSBoard, version 1.0. -->
+
+<materials>
+
+  <material name="matEOS" density="1.052352">
+    <elementref ref="Carbon" fraction="0.103183"/>
+    <elementref ref="Copper" fraction="0.393132"/>
+    <elementref ref="Hydrogen" fraction="0.009621"/>
+    <elementref ref="Oxygen" fraction="0.266262"/>
+    <elementref ref="Silicon" fraction="0.215452"/>
+    <elementref ref="Tin" fraction="0.012349"/>
+  </material>
+
+</materials>
+
+<shapes>
+    <box name="shEOS" xhalflength="100/2" yhalflength="45/2" zhalflength="5/2"/>
+</shapes>
+
+<logvol name="EOS" shape="shEOS" material="matEOS"/>
+
+<assembly name="SS_Module">
+
+  <transform alignable="0">
+    <transformation name="BRLSensorSSdummy" alignable="true">
+      <translation/>
+    </transformation>
+    <logvolref ref="BRLSensorSS"/>
+  </transform>  
+
+  <transform>
+    <transformation name="PlaceNearHybridSS">
+      <translation x="B_HybridX_Offset + B_HybridW / 2" z="(SensorThickness + B_HybridT) / 2."/>
+    </transformation>
+    <assemblyref ref="B_HybridNear"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceFarHybridSS">
+      <translation x="-(B_HybridX_Offset + B_HybridW / 2)" z="(SensorThickness + B_HybridT) / 2."/>
+    </transformation>
+    <assemblyref ref="B_HybridFar"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceDCDC_PCB_SS">
+      <translation y="-(B_SensorWidth - DCDC_PCB_L) / 2." z="(SensorThickness + DCDC_PCB_T) / 2."/>
+    </transformation>
+    <logvolref ref="DCDC_PCB"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceDCDC_Box_SS">
+      <translation y="-(B_SensorWidth - DCDC_PCB_L - DCDC_PCB_L + DCDC_BoxL) / 2." z="(SensorThickness + DCDC_BoxT) / 2. + DCDC_PCB_T"/>
+    </transformation>
+    <logvolref ref="DCDC_Box"/>
+  </transform>
+
+</assembly>
+
+<assembly name="MS_Module">
+
+
+  <transform alignable="0">
+    <transformation name="BRLSensorMSdummy" alignable="true">
+      <translation/>
+    </transformation>
+    <logvolref ref="BRLSensorMS"/>
+  </transform>  
+
+  <transform>
+    <transformation name="PlaceNearHybridMS">
+      <translation x="B_HybridX_Offset + B_HybridW / 2" z="(SensorThickness + B_HybridT) / 2."/>
+    </transformation>
+    <assemblyref ref="B_HybridNear"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceDCDC_PCB_MS">
+      <translation y="-(B_SensorWidth - DCDC_PCB_L) / 2." z="(SensorThickness + DCDC_PCB_T) / 2."/>
+    </transformation>
+    <logvolref ref="DCDC_PCB"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceDCDC_Box_MS">
+      <translation y="-(B_SensorWidth - DCDC_PCB_L - DCDC_PCB_L + DCDC_BoxL) / 2." z="(SensorThickness + DCDC_BoxT) / 2. + DCDC_PCB_T"/>
+    </transformation>
+    <logvolref ref="DCDC_Box"/>
+  </transform>
+
+</assembly>
+
+<assembly name="SS_FaceL">
+  <index ref="side" value="CNL_5"/> 
+  <multicopy name="CopySS_InStereoFaceL" n="B_N_SensorsPerFace">
+    <transformation name="PlaceSS_InStereoFaceL">
+      <translation x="B_SensorGap + B_SensorLength"/>
+    </transformation>
+    <transform>
+      <transformationref ref="StereoRot"/>
+      <assemblyref ref="SS_Module"/>
+    </transform>
+  </multicopy>
+</assembly>
+
+<assembly name="SS_FaceR"> <!-- Modules rotated 180 deg cf L version -->
+  <index ref="side" value="1 - CNL_5"/> 
+  <multicopy name="CopySS_InStereoFaceR" n="B_N_SensorsPerFace">
+    <transformation name="PlaceSS_InStereoFaceR">
+      <translation x="B_SensorGap + B_SensorLength"/>
+    </transformation>
+    <transform>
+      <transformationref ref="RotateModulePowerEnd"/>
+      <assemblyref ref="SS_Module"/>
+    </transform>
+  </multicopy>
+</assembly>
+
+<assembly name="MS_FaceL">
+  <index ref="side" value="CNL_5"/> 
+  <multicopy name="CopyMS_InStereoFaceL" n="B_N_SensorsPerFace">
+    <transformation name="PlaceMS_InStereoFaceL">
+      <translation x="B_SensorGap + B_SensorLength"/>
+    </transformation>
+    <transform>
+      <transformationref ref="StereoRot"/>
+      <assemblyref ref="MS_Module"/>
+    </transform>
+  </multicopy>
+</assembly>
+
+<assembly name="MS_FaceR">
+  <index ref="side" value="1 - CNL_5"/> 
+  <multicopy name="CopyMS_InStereoFaceR" n="B_N_SensorsPerFace">
+    <transformation name="PlaceMS_InStereoFaceR">
+      <translation x="B_SensorGap + B_SensorLength"/>
+    </transformation>
+    <transform>
+      <transformationref ref="RotateModulePowerEnd"/>
+      <assemblyref ref="MS_Module"/>
+    </transform>
+  </multicopy>
+</assembly>
+
+<assembly name="SS_Stave"> 
+  <assemblyref ref="StaveCoreSS"/>
+  <transform>
+    <transformation name="PlaceFirstSS_FaceOnCore">
+      <translation x="StaveFaceTranslation" z="-(StavePlankT + SensorThickness)/2"/>
+      <rotation xcos="1" angle="PI"/> <!-- Strips on low-z side -->
+    </transformation>
+    <assemblyref ref="SS_FaceR" zeroid="true"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceSecondSS_FaceOnCore">
+      <translation x="StaveFaceTranslation" z="+(StavePlankT + SensorThickness)/2"/>
+    </transformation>
+    <assemblyref ref="SS_FaceL"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceFirstEOS_OnSS_Core">
+      <translation x="(StaveCoreLength - 100.)/2" y="(StaveCoreWidth + EOSCoreWidth)/2" z="-(StavePlankT + 5.)/2"/>
+    </transformation>
+    <logvolref ref="EOS"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceSecondEOS_OnSS_Core">
+      <translation x="(StaveCoreLength - 100.)/2" y="(StaveCoreWidth + EOSCoreWidth)/2" z="+(StavePlankT + 5.)/2"/>
+    </transformation>
+    <logvolref ref="EOS"/>
+  </transform>
+
+</assembly>
+
+<assembly name="MS_Stave"> 
+  <assemblyref ref="StaveCoreMS"/>
+
+  <transform>
+    <transformation name="PlaceFirstMS_FaceOnCore">
+      <translation x="StaveFaceTranslation" z="-(StavePlankT + SensorThickness)/2"/>
+      <rotation xcos="1" angle="PI"/> <!-- Strips on low-z side -->
+    </transformation>
+    <assemblyref ref="MS_FaceR" zeroid="true"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceSecondMS_FaceOnCore">
+      <translation x="StaveFaceTranslation" z="+(StavePlankT + SensorThickness)/2"/>
+    </transformation>
+    <assemblyref ref="MS_FaceL"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceFirstEOS_OnMS_Core">
+      <translation x="(StaveCoreLength - 100.)/2" y="(StaveCoreWidth + EOSCoreWidth)/2" z="-(StavePlankT + 5.)/2"/>
+    </transformation>
+    <logvolref ref="EOS"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceSecondEOS_OnMS_Core">
+      <translation x="(StaveCoreLength - 100.)/2" y="(StaveCoreWidth + EOSCoreWidth)/2" z="+(StavePlankT + 5.)/2"/>
+    </transformation>
+    <logvolref ref="EOS"/>
+  </transform>
+
+</assembly>
+
+<assembly name="StavePairSS">
+
+  <index ref="eta_module" value="CNL_7 + 1"/> 
+  <transform>
+    <transformation name="PlacePlusZ_SS_Stave">
+      <translation x="StaveGapZ0 + StaveCoreLength/2"/>
+    </transformation>
+    <assemblyref ref="SS_Stave" zeroid="true"/>
+  </transform>
+
+  <multicopy name="CopyStaveMountsSS_Plus" n="NumStaveMountsI">
+    <transformation name="PlaceStaveMountsSS_Plus">
+      <translation x="StaveSupportCylLength/(NumberOfHatsPerCyl + 1)"/>
+    </transformation>
+    <transform>
+      <transformation name="PlaceStaveMountReadySS_PlusForCopying">
+        <translation x="StaveSupportCylLength/(NumberOfHatsPerCyl + 1)" y="-(StaveCoreWidth/2 + StaveMountLength_1/2)" z="StaveMountR/2"/>
+        <rotation xcos="1" angle="-PI/2"/>
+      </transformation>
+      <logvolref ref="StaveMountI"/>
+    </transform>
+  </multicopy>
+
+  <index ref="eta_module" value="-(CNL_7 + 1)"/> 
+  <transform>
+    <transformation name="PlaceMinusZ_SS_Stave">
+      <translation x="-(StaveGapZ0 + StaveCoreLength/2)"/>
+      <rotation ycos="1" angle="PI"/>
+    </transformation>
+    <assemblyref ref="SS_Stave"/>
+  </transform>
+
+  <multicopy name="CopyStaveMountsSS_Minus" n="NumStaveMountsI">
+    <transformation name="PlaceStaveMountsSS_Minus">
+      <translation x="-(StaveSupportCylLength/(NumberOfHatsPerCyl + 1))"/>
+    </transformation>
+    <transform>
+      <transformation name="PlaceStaveMountSS_MinusReadyForCopying">
+        <translation x="-(StaveSupportCylLength/(NumberOfHatsPerCyl + 1))" y="-(StaveCoreWidth/2 + StaveMountLength_1/2)" z="StaveMountHeight_1 / 2."/>
+        <rotation xcos="1" angle="-PI/2"/>
+      </transformation>
+      <logvolref ref="StaveMountI"/>
+    </transform>
+  </multicopy>
+
+  <transform>
+    <transformation name="PlaceStaveMountCSS_Plus">
+      <translation x="StaveMountThickness_0 / 2." y="-(StaveCoreWidth/2 + StaveMountLength_0/2)" z="StaveMountHeight_0 / 2."/>
+      <rotation xcos="1" angle="-PI/2"/>
+    </transformation>
+    <logvolref ref="StaveMountC"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceStaveMountCSS_Minus">
+      <translation x="-(StaveMountThickness_0 / 2.)" y="-(StaveCoreWidth/2 + StaveMountLength_0/2)" z="StaveMountHeight_0 / 2."/>
+      <rotation xcos="1" angle="-PI/2"/>
+    </transformation>
+    <logvolref ref="StaveMountC"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceStaveMountESS_Plus">
+      <translation x="StaveCoreLength - StaveMountThickness_2 / 2." y="-(StaveCoreWidth/2 + StaveMountLength_2/2)" z="StaveMountHeight_2 / 2."/>
+      <rotation xcos="1" angle="-PI/2"/>
+    </transformation>
+    <logvolref ref="StaveMountE"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceStaveMountESS_Minus">
+      <translation x="-(StaveCoreLength - StaveMountThickness_2 / 2.)" y="-(StaveCoreWidth/2 + StaveMountLength_2/2)" z="StaveMountHeight_2 / 2."/>
+      <rotation xcos="1" angle="-PI/2"/>
+    </transformation>
+    <logvolref ref="StaveMountE"/>
+  </transform>
+
+</assembly>
+
+<assembly name="StavePairMS">
+
+  <index ref="eta_module" value="CNL_7 + 1"/> 
+  <transform>
+    <transformation name="PlacePlusZ_MS_Stave">
+      <translation x="StaveGapZ0 + StaveCoreLength/2"/>
+    </transformation>
+    <assemblyref ref="MS_Stave" zeroid="true"/>
+  </transform>
+
+  <multicopy name="CopyStaveMountsMS_Plus" n="NumStaveMountsI">
+    <transformation name="PlaceStaveMountsMS_Plus">
+      <translation x="StaveSupportCylLength/(NumberOfHatsPerCyl + 1)"/>
+    </transformation>
+    <transform>
+      <transformation name="PlaceStaveMountReadyMS_PlusForCopying">
+        <translation x="StaveSupportCylLength/(NumberOfHatsPerCyl + 1)" y="-(StaveCoreWidth/2 + StaveMountLength_1/2)" z="StaveMountHeight_1 / 2."/>
+        <rotation xcos="1" angle="-PI/2"/>
+      </transformation>
+      <logvolref ref="StaveMountI"/>
+    </transform>
+  </multicopy>
+
+  <index ref="eta_module" value="-(CNL_7 + 1)"/>
+  <transform>
+    <transformation name="PlaceMinusZ_MS_Stave">
+      <translation x="-(StaveGapZ0 + StaveCoreLength/2)"/>
+      <rotation ycos="1" angle="PI"/>
+    </transformation>
+    <assemblyref ref="MS_Stave"/>
+  </transform>
+
+  <multicopy name="CopyStaveMountsMS_Minus" n="NumStaveMountsI">
+    <transformation name="PlaceStaveMountsMS_Minus">
+      <translation x="-(StaveSupportCylLength/(NumberOfHatsPerCyl + 1))"/>
+    </transformation>
+    <transform>
+      <transformation name="PlaceStaveMountMS_MinusReadyForCopying">
+        <translation x="-(StaveSupportCylLength/(NumberOfHatsPerCyl + 1))" y="-(StaveCoreWidth/2 + StaveMountLength_1/2)" z="StaveMountHeight_1 / 2."/>
+        <rotation xcos="1" angle="-PI/2"/>
+      </transformation>
+      <logvolref ref="StaveMountI"/>
+    </transform>
+  </multicopy>
+
+  <transform>
+    <transformation name="PlaceStaveMountCMS_Plus">
+      <translation x="StaveMountThickness_0 / 2." y="-(StaveCoreWidth/2 + StaveMountLength_0/2)" z="StaveMountHeight_0 / 2."/>
+      <rotation xcos="1" angle="-PI/2"/>
+    </transformation>
+    <logvolref ref="StaveMountC"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceStaveMountCMS_Minus">
+      <translation x="-(StaveMountThickness_0 / 2.)" y="-(StaveCoreWidth/2 + StaveMountLength_0/2)" z="StaveMountHeight_0 / 2."/>
+      <rotation xcos="1" angle="-PI/2"/>
+    </transformation>
+    <logvolref ref="StaveMountC"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceStaveMountEMS_Plus">
+      <translation x="StaveCoreLength - StaveMountThickness_2 / 2." y="-(StaveCoreWidth/2 + StaveMountLength_2/2)" z="StaveMountHeight_2 / 2."/>
+      <rotation xcos="1" angle="-PI/2"/>
+    </transformation>
+    <logvolref ref="StaveMountE"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceStaveMountEMS_Minus">
+      <translation x="-(StaveCoreLength - StaveMountThickness_2 / 2.)" y="-(StaveCoreWidth/2 + StaveMountLength_2/2)" z="StaveMountHeight_2 / 2."/>
+      <rotation xcos="1" angle="-PI/2"/>
+    </transformation>
+    <logvolref ref="StaveMountE"/>
+  </transform>
+
+
+</assembly>
+
+<logvol name="Barrel0" shape="shBarrel0" material="N2" alignable="true">
+  <index ref="layer_wheel" value="0"/>
+  <multicopy name="PlaceStavesB0" n="N_StavesInCyl_0">
+    <transformation name="XfStavesB0">
+      <rotation zcos="1" angle="2 * PI / N_StavesInCyl_0"/>
+    </transformation>
+    <transform>
+      <transformation name="XfStave0ReadyForCopying">
+        <!-- Rotate half a notch so x = 0 passes through edges not centres (as in standard LoI) --> 
+        <rotation zcos="1" angle="PI / N_StavesInCyl_0"/>
+        <translation x="CylRadius_0"/>
+        <rotation zcos="1" angle="-TiltAngle_0"/> 
+        <rotation ycos="1" angle="-PI/2"/>       
+      </transformation>
+      <assemblyref ref="StavePairSS"/>
+    </transform>
+  </multicopy>
+
+  <assemblyref ref="Barrel0Support"/>
+
+</logvol>
+
+<logvol name="Barrel1" shape="shBarrel1" material="N2" alignable="true">
+  <index ref="layer_wheel" value="1"/>
+  <multicopy name="PlaceStavesB1" n="N_StavesInCyl_1">
+    <transformation name="XfStavesB1">
+      <rotation zcos="1" angle="2 * PI / N_StavesInCyl_1"/>
+    </transformation>
+    <transform>
+      <transformation name="XfStave1ReadyForCopying">
+        <!-- Rotate half a notch so x = 0 passes through edges not centres (as in standard LoI) --> 
+        <rotation zcos="1" angle="PI / N_StavesInCyl_1"/>
+        <translation x="CylRadius_1"/>
+        <rotation zcos="1" angle="-TiltAngle_1"/> 
+        <rotation ycos="1" angle="-PI/2"/>       
+      </transformation>
+      <assemblyref ref="StavePairSS"/>
+    </transform>
+  </multicopy>
+
+  <assemblyref ref="Barrel1Support"/>
+
+</logvol>
+
+<logvol name="Barrel2" shape="shBarrel2" material="N2" alignable="true">
+  <index ref="layer_wheel" value="2"/>
+  <multicopy name="PlaceStavesB2" n="N_StavesInCyl_2">
+    <transformation name="XfStavesB2">
+      <rotation zcos="1" angle="2 * PI / N_StavesInCyl_2"/>
+    </transformation>
+    <transform>
+      <transformation name="XfStave2ReadyForCopying">
+        <!-- Rotate half a notch so x = 0 passes through edges not centres (as in standard LoI) --> 
+        <rotation zcos="1" angle="PI / N_StavesInCyl_2"/>
+        <translation x="CylRadius_2"/>
+        <rotation zcos="1" angle="-TiltAngle_2"/> 
+        <rotation ycos="1" angle="-PI/2"/>       
+      </transformation>
+      <assemblyref ref="StavePairMS"/>
+    </transform>
+  </multicopy>
+
+  <assemblyref ref="Barrel2Support"/>
+
+</logvol>
+
+<logvol name="Barrel3" shape="shBarrel3" material="N2" alignable="true">
+  <index ref="layer_wheel" value="3"/>
+  <multicopy name="PlaceStavesB3" n="N_StavesInCyl_3">
+    <transformation name="XfStavesB3">
+      <rotation zcos="1" angle="2 * PI / N_StavesInCyl_3"/>
+    </transformation>
+    <transform>
+      <transformation name="XfStave3ReadyForCopying">
+        <!-- Rotate half a notch so x = 0 passes through edges not centres (as in standard LoI) --> 
+        <rotation zcos="1" angle="PI / N_StavesInCyl_3"/>
+        <translation x="CylRadius_3"/>
+        <rotation zcos="1" angle="-TiltAngle_3"/> 
+        <rotation ycos="1" angle="-PI/2"/>       
+      </transformation>
+      <assemblyref ref="StavePairMS"/>
+    </transform>
+  </multicopy>
+  <logvol name="InnerPolyMod" shape="shInnerPolyMod" material="BoratedPolyethylene"/>
+
+  <assemblyref ref="Barrel3Support"/>
+
+</logvol>
+
+<assembly name="StripB">
+  <index ref="phi_module" value="CNL_4"/>
+  
+  <transform alignable="2">
+    <transformation name="Barrel0dummy" alignable="true">
+      <translation/>
+    </transformation>
+    <logvolref ref="Barrel0"/>
+  </transform>
+  
+  <transform alignable="2">
+    <transformation name="Barrel1dummy" alignable="true">
+      <translation/>
+    </transformation>
+    <logvolref ref="Barrel1"/>
+  </transform>
+  
+  <transform alignable="2">
+    <transformation name="Barrel2dummy" alignable="true">
+      <translation/>
+    </transformation>
+    <logvolref ref="Barrel2"/>
+  </transform>
+  
+  <transform alignable="2">
+    <transformation name="Barrel3dummy" alignable="true">
+      <translation/>
+    </transformation>
+    <logvolref ref="Barrel3"/>
+  </transform>
+
+  <transform name="ZBraceCapFC">
+    <transformation name="PlaceZBraceCapFC">
+      <translation z="StaveSupportCylLength / 2. + ZBraceWidth_0 / 2. + ZBraceWidth_1 + InterlinkThickness + 1"/>
+    </transformation>
+  <assemblyref ref="ZBraceCap"/>
+  </transform>
+  
+
+  <transform name="ZBraceCapEC">
+    <transformation name="PlaceZBraceCapEC">
+      <rotation ycos="1." angle="PI"/>
+      <translation z="StaveSupportCylLength / 2. + ZBraceWidth_0 / 2. + ZBraceWidth_1 + InterlinkThickness + 1"/>
+    </transformation>
+  <assemblyref ref="ZBraceCap"/>
+  </transform>
+
+  <multicopy name="MultipleInterlinks0" n="N_StavesInCyl_0">
+    <transformation name="PlaceMultipleInterlinks0">
+      <rotation zcos="1." angle="2*PI / N_StavesInCyl_0"/>
+    </transformation>
+    <assemblyref ref="TempInterlink0"/>
+  </multicopy>
+
+  <multicopy name="MultipleInterlinks1" n="N_StavesInCyl_1">
+    <transformation name="PlaceMultipleInterlinks1">
+      <rotation zcos="1." angle="2*PI / N_StavesInCyl_1"/>
+    </transformation>
+    <assemblyref ref="TempInterlink1"/>
+  </multicopy>
+
+  <multicopy name="MultipleInterlinks2" n="N_StavesInCyl_2">
+    <transformation name="PlaceMultipleInterlinks2">
+      <rotation zcos="1." angle="2*PI / N_StavesInCyl_2"/>
+    </transformation>
+    <assemblyref ref="TempInterlink2"/>
+  </multicopy>
+
+  <multicopy name="MultipleInterlinks3" n="N_StavesInCyl_3">
+    <transformation name="PlaceMultipleInterlinks3">
+      <rotation zcos="1." angle="2*PI / N_StavesInCyl_3"/>
+    </transformation>
+    <assemblyref ref="TempInterlink3"/>
+  </multicopy>
+
+
+  
+<!--  
+  <logvolref ref="Barrel0"/>
+  <logvolref ref="Barrel1"/>
+  <logvolref ref="Barrel2"/>
+  <logvolref ref="Barrel3"/>
+-->  
+
+</assembly>
+
+
+<!-- CNL_n meanings:
+  n Meaning          Range
+  0 SCT Envelope      0
+  1 Endcap - or +     0 - 1
+  2 Endcap            0 - 0
+  3 Wheel             0 - 5
+  4 Pair              0 - 15
+  5 Petal             0 - 1
+  6 Face              0 - 1
+  7 Module 	      0 - big; not used and not zeroed
+  8 Sensor            0 - big; not used and not zeroed
+
+-->
+
+<defines>
+  <var name="N_Wheels" value="6"/>
+  <vector name="WheelZ" value="1512 1702 1952 2237 2532 2850"/>
+  <vector name="WheelZOdd" value="1512 1952 2532"/>
+  <vector name="WheelZEven" value="1702 2237 2850"/>
+  <var name="NPetalsInWheel" value="32"/>
+  <var name="CastellationOffset" value="7.5"/>
+  <var name="PetalCoreInnerRadius" value="380"/>
+  <var name="PetalCoreOuterRadius" value="975"/>
+  <var name="PetalCoreExtraWidth" value="41"/>
+  <!-- Extra width at outer edges for bus-tape -->
+  <var name="PetalCoreAngle" value="2*PI/NPetalsInWheel + 2 * PetalCoreExtraWidth / PetalCoreOuterRadius"/>
+  <var name="PetalEarLength" value="150"/>
+  <var name="PetalEarWidth" value="28.8"/>
+  <var name="PetalEarAngle" value="PetalEarWidth / PetalCoreOuterRadius"/>
+  <var name="PetalEarInnerRadius" value="PetalCoreOuterRadius - PetalEarLength"/>
+  <var name="PetalEarOuterRadius" value="PetalCoreOuterRadius"/>
+  <var name="PetalFaceRotation" value="-3.5e-3"/> <!-- 3.5 mrad, clockwise. See e-mail 2016-08-02 layout -->
+  <!-- Pixel core thickness built up in following order: -->
+  <var name="PetalHoneycombT" value="5.2 + 0.078"/>
+  <!-- Small correction to make Si-Si mid dist. 6.42. NPH logbook UG20 29/4/2016 This increases the thickness of honeycomb, Allcomp foam, and the closeouts. To be revised. -->
+  <var name="PetalFaceSheetT" value="0.15"/>
+  <var name="PetalBusGlueT" value="0.1"/>
+  <!-- Includes module-to-bus glue, 0.1 mm -->
+  <var name="PetalBusKaptonT" value="0.2"/>
+  <var name="PetalCoreT" value="PetalHoneycombT + 2 * (PetalFaceSheetT + PetalBusGlueT + PetalBusKaptonT)"/>
+  <var name="PetalBusCuT" value="0.018"/>
+  <var name="PetalPlankT" value="PetalCoreT + 4 * PetalBusCuT"/>
+
+  <var name="PetalCoreThickness" value="PetalCoreT"/>
+  <var name="PetalCloseoutW" value="8.0"/>
+  <var name="PetalCloseoutT" value="PetalHoneycombT"/>
+  <var name="PetalCchannelLongL" value="(PetalCoreOuterRadius-PetalCoreInnerRadius)-2*PetalCloseoutW"/>
+  <var name="PetalCchannelShortL" value="(PetalEarInnerRadius-PetalCoreInnerRadius)-PetalCloseoutW"/>
+  <var name="PetalCchannelW" value="4"/>
+  <var name="PetalCchannelInnerW" value="PetalCchannelW-0.5"/>	
+  <var name="PetalCchannelInnerT" value="PetalHoneycombT-0.9-2*EPS"/>	
+  <!-- Cooling-->
+  <var name="PetalCFoamT" value="PetalHoneycombT"/>
+  <var name="PetalCFoamW" value="10.0"/>
+  <var name="PetalCooling1L" value="510"/>
+  <var name="PetalCooling2L" value="440"/>
+  <var name="PetalCooling3L" value="173.9"/>
+  <var name="PetalCoolingOffset" value="25."/>
+  <var name="PetalCoolingPipeOD" value="2.275"/>
+  <var name="PetalCoolingPipeID" value="1.975"/>
+  <!-- 0.1 mm wall thickness on drawing, but not yet achieved so thicker -->
+  <var name="EC_InnerCylLength" value="2. * StripEC_HalfLength - 2."/>
+  <var name="EC_InnerCylThickness" value="0.6"/>
+  <var name="EC_InnerCylInnerR" value="367."/>
+  <var name="EC_InnerCylOuterR" value="EC_InnerCylInnerR + EC_InnerCylThickness"/>
+  <var name="WheelSupportOffset" value="40."/>
+  <var name="WheelInnerT_ShimThickness" value="1.0"/>
+  <var name="WheelInnerT_BaseThickness" value="2.0 + WheelInnerT_ShimThickness"/>
+  <var name="WheelInnerT_BaseWidth" value="20.0"/>
+  <var name="WheelInnerT_BaseOuterR" value="EC_InnerCylOuterR + WheelInnerT_BaseThickness "/>
+  <var name="WheelInnerT_UprightThickness" value="3.0"/>
+  <var name="WheelInnerT_UprightHeight" value="30.0"/>
+  <var name="WheelInnerT_UprightOuterR" value="WheelInnerT_BaseOuterR + WheelInnerT_UprightHeight"/>
+  <var name="WheelOuterT_OuterR" value="988.0"/>
+  <var name="WheelOuterT_BaseThickness" value="2.0"/>
+  <var name="WheelOuterT_BaseWidth" value="20.0"/>
+  <var name="WheelOuterT_BaseInnerR" value="WheelOuterT_OuterR - WheelOuterT_BaseThickness"/>
+  <var name="WheelOuterT_UprightThickness" value="3.0"/>
+  <var name="WheelOuterT_UprightHeight" value="50.0"/>
+  <var name="WheelOuterT_UprightInnerR" value="WheelOuterT_BaseInnerR - WheelOuterT_UprightHeight"/>
+  <!-- Cone modelled as tubes. See layout/LTF/services/StiffDisc.ods -->
+  <var name="StiffDiscRI" value="EC_InnerCylOuterR + 1."/>
+  <var name="StiffDiscRO" value="988.0"/>
+  <var name="StiffDiscCF_T" value="0.9"/>
+  <var name="StiffDiscFoamT" value="54.5"/>
+  <var name="StiffDiscTranslation" value="StripEC_HalfLength - StiffDiscFoamT/ 2. - StiffDiscCF_T - 1."/>
+  <!-- Word of mouth and guesses for the tubes at outer radius of wheels which control their z positions -->
+  <var name="ZtubeRI" value="2.0"/><!-- originally 3.0 -->
+  <var name="ZtubeRO" value="4.0"/><!-- originally 5.0 -->
+  <var name="ZtubeRadialPosition" value="WheelOuterT_OuterR - WheelOuterT_BaseThickness - ZtubeRO - EPS"/>
+  <var name="nZtubes" value="8"/>
+
+  <!-- Blade Supports -->
+  <vector name="BladeHoleDiameter" value="11. 26.58 39.07 55.3 76.41 103.86 139.54"/>
+  <var name="BladeHoleThickness" value="20."/>
+  <var name="BladeHoleGap" value="15."/>
+  <var name="BladeHoleOffset" value="480."/>
+  <var name="BladeAngle" value="15. * DEG"/>
+  <var name="BladeOuterEndWidth" value="38.09"/>
+  <var name="BladeLength" value="985."/>
+  <var name="BladeRodOuterEdge" value="8."/>
+  <var name="BladeRodInnerEdge" value="6."/>
+  <var name="BladeFaceSheetThickness" value="0.2"/>
+  <var name="BladeBarrelR" value="373."/>
+  <var name="BladeBaseHeight" value="15."/>
+  <var name="BladeBaseWidth" value="100."/>
+
+  <var name="LockBaseHHeight" value="26.5"/>
+  <var name="LockBaseHWidth" value="22.5"/>
+  <var name="LockBaseHThickness" value="5.77"/>
+  <var name="LockBaseLHeight" value="9.5"/>
+  <var name="LockBaseLWidth" value="22.5"/>
+  <var name="LockBaseLThickness" value="6.45"/>
+  <var name="LockBaseTAngleOffset" value="0.9375 * DEG"/>
+  <var name="LockBaseTAngle" value="11.25 * DEG"/>
+  <var name="LockBaseTAssemblyN" value="16."/>
+  <var name="LockBaseBAngleOffset" value="5.625 * DEG"/> <!-- was 3.91 * DEG -->
+  <var name="LockBaseBAssemblyN" value="16."/>
+  <var name="LockBaseOffset" value="3."/>
+
+  <!-- Blade Rails -->
+  <var name="RailRadius" value="998."/>
+  <var name="RailShelfLength" value="1479."/>
+  <var name="RailShelfWidth" value="40."/>
+  <var name="RailShelfHeight" value="10."/>
+  <var name="RailBoltHeight" value="25."/>
+  <var name="RailBoltRadius" value="3."/>
+  <var name="RailBoltGap" value="152."/>
+  <var name="RailBoltOffset" value="80."/>
+  <var name="RailBoltNumber" value="10."/>
+  <var name="RailWallLength" value="1434."/>
+  <var name="RailWallWidth" value="10."/>
+  <var name="RailWallHeight" value="50."/>
+  <var name="RailLength" value="1479."/>
+  <vector name="RailLengthS" value="155. 100. 1224."/>
+  <vector name="RailSquareTAngle" value="0.01999 0.009999"/>
+  <var name="RailCircleRadius" value="8."/>
+  <var name="RailSquareEdge" value="8."/>
+  <var name="RailWheelLength" value="20."/>
+  <var name="RailWheelRadius" value="25."/>
+  <var name="RailWheelOffsetClose" value="118."/>
+  <var name="RailWheelOffsetFar" value="187."/>
+  <vector name="RailWedgeHeight" value="12. 17."/>
+  <var name="RailWedgeLength" value="60"/>
+  <var name="RailWedgeWidth" value="14."/>
+  <var name="RailWedgeAngle" value="0.08314"/>
+  <var name="RailWedgeOffset" value="30."/>
+
+  <var name="ECPSTLength" value="1482."/><!-- Original value is 1632, revert when proper interfaces exist -->
+  <var name="ECPSTHatGap" value="300."/>
+  <var name="ECPSTHatHeight" value="15."/>
+  <var name="ECPSTOffset" value="216."/>
+  <var name="ECPSTHatNumber" value="5"/>
+
+</defines>
+
+<!--Build up EC hybrids-->
+<defines>
+  <var name="E_HybridT" value="0.120 + 0.240 + 0.080"/>
+  <var name="E_HybridRadiusMinR0H0" value="404.749"/>
+  <var name="E_HybridRadiusMaxR0H0" value="421.944"/>
+  <var name="E_HybridRadiusMinR0H1" value="437.406"/>
+  <var name="E_HybridRadiusMaxR0H1" value="454.601"/>
+  <var name="E_HybridRadiusMinR1H0" value="508.8"/>
+  <var name="E_HybridRadiusMaxR1H0" value="524.32"/>
+  <var name="E_HybridRadiusMinR1H1" value="542.769"/>
+  <var name="E_HybridRadiusMaxR1H1" value="557.523"/>
+  <var name="E_HybridRadiusMinR2H0" value="603.67"/>
+  <var name="E_HybridRadiusMaxR2H0" value="624.433"/>
+  <var name="E_HybridRadiusMinR3H0" value="671.918"/>
+  <var name="E_HybridRadiusMaxR3H0" value="688.336"/>
+  <var name="E_HybridRadiusMinR3H2" value="705.934"/>
+  <var name="E_HybridRadiusMaxR3H2" value="721.732"/>
+  <var name="E_HybridRadiusMinR3H1" value="E_HybridRadiusMinR3H0"/>
+  <var name="E_HybridRadiusMaxR3H1" value="E_HybridRadiusMaxR3H0"/>
+  <var name="E_HybridRadiusMinR3H3" value="E_HybridRadiusMinR3H2"/>
+  <var name="E_HybridRadiusMaxR3H3" value="E_HybridRadiusMaxR3H2"/>
+  <var name="E_HybridRadiusMinR4H0" value="812.573"/>
+  <var name="E_HybridRadiusMaxR4H0" value="834.485"/>
+  <var name="E_HybridRadiusMinR4H1" value="E_HybridRadiusMinR4H0"/>
+  <var name="E_HybridRadiusMaxR4H1" value="E_HybridRadiusMaxR4H0"/>
+  <var name="E_HybridRadiusMinR5H0" value="908.56"/>
+  <var name="E_HybridRadiusMaxR5H0" value="934.4"/>
+  <var name="E_HybridRadiusMinR5H1" value="E_HybridRadiusMinR5H0"/>
+  <var name="E_HybridRadiusMaxR5H1" value="E_HybridRadiusMaxR5H0"/>
+  <var name="E_HCCRadiusR0H0" value="419.6"/>
+  <var name="E_HCCRadiusR0H1" value="437.2"/>
+  <var name="E_HCCRadiusR1H0" value="520.02"/>
+  <var name="E_HCCRadiusR1H1" value="540.905"/>
+  <var name="E_HCCRadiusR2H0" value="618.3"/>  
+  <var name="E_HCCRadiusR2H0a" value="627.14"/>
+  <var name="E_HCCRadiusR3H1" value="686.509"/>	 
+  <var name="E_HCCRadiusR3H1a" value="690.503"/>
+  <var name="E_HCCRadiusR3H3" value="700.993"/>	 
+  <var name="E_HCCRadiusR3H3a" value="704.779"/>
+  <var name="E_HCCRadiusR4H1" value="830.651"/>	 
+  <var name="E_HCCRadiusR4H1a" value="833.607"/>
+  <var name="E_HCCRadiusR5H1" value="926.664"/>	 
+  <var name="E_HCCRadiusR5H1a" value="931.488"/>
+  <var name="N_ABC_R0" value="8"/>
+  <var name="N_ABC_R1" value="10"/>
+  <var name="N_ABC_R2" value="12"/>
+  <var name="N_ABC_R3" value="7"/>
+  <var name="N_ABC_R4" value="8"/>
+  <var name="N_ABC_R5" value="9"/>
+  <var name="ABC_ToEHybridEdgeGap" value="0.31"/>
+  <var name="HCC_R0H0_OffsetX" value="B_HybridW/2 - (3.55 + 0.5 + ABC_W + HCC_L/2)"/>
+  <var name="HCC_R0H0_OffsetY" value="36.41 + HCC_W/2"/>
+</defines>
+
+<shapes>
+  <tubs name="ShE_HybridR0H0" rmin="E_HybridRadiusMinR0H0" rmax="E_HybridRadiusMaxR0H0" zhalflength="E_HybridT / 2." sphi="-SensorPhiWidth_0 / 2" dphi="SensorPhiWidth_0"/>
+  <tubs name="ShE_HybridR0H1" rmin="E_HybridRadiusMinR0H1" rmax="E_HybridRadiusMaxR0H1" zhalflength="E_HybridT / 2." sphi="-SensorPhiWidth_0 / 2" dphi="SensorPhiWidth_0"/>
+  <tubs name="ShE_HybridR1H0" rmin="E_HybridRadiusMinR1H0" rmax="E_HybridRadiusMaxR1H0" zhalflength="E_HybridT / 2." sphi="-SensorPhiWidth_1 / 2" dphi="SensorPhiWidth_1"/>
+  <tubs name="ShE_HybridR1H1" rmin="E_HybridRadiusMinR1H1" rmax="E_HybridRadiusMaxR1H1" zhalflength="E_HybridT / 2." sphi="-SensorPhiWidth_1 / 2" dphi="SensorPhiWidth_1"/>
+  <tubs name="ShE_HybridR2H0" rmin="E_HybridRadiusMinR2H0" rmax="E_HybridRadiusMaxR2H0" zhalflength="E_HybridT / 2." sphi="-SensorPhiWidth_2 / 2" dphi="SensorPhiWidth_2"/>
+  <tubs name="ShE_HybridR3H0" rmin="E_HybridRadiusMinR3H0" rmax="E_HybridRadiusMaxR3H0" zhalflength="E_HybridT / 2." sphi="-SensorPhiWidth_3*0.49" dphi="SensorPhiWidth_3*0.975"/>
+  <tubs name="ShE_HybridR3H2" rmin="E_HybridRadiusMinR3H2" rmax="E_HybridRadiusMaxR3H2" zhalflength="E_HybridT / 2." sphi="-SensorPhiWidth_3*0.49" dphi="SensorPhiWidth_3*0.975"/>
+  <tubs name="ShE_HybridR3H1" rmin="E_HybridRadiusMinR3H1" rmax="E_HybridRadiusMaxR3H1" zhalflength="E_HybridT / 2." sphi="-SensorPhiWidth_3*0.49" dphi="SensorPhiWidth_3*0.975"/>
+  <tubs name="ShE_HybridR3H3" rmin="E_HybridRadiusMinR3H3" rmax="E_HybridRadiusMaxR3H3" zhalflength="E_HybridT / 2." sphi="-SensorPhiWidth_3*0.49" dphi="SensorPhiWidth_3*0.975"/>
+  <tubs name="ShE_HybridR4H0" rmin="E_HybridRadiusMinR4H0" rmax="E_HybridRadiusMaxR4H0" zhalflength="E_HybridT / 2." sphi="-SensorPhiWidth_4*0.49" dphi="SensorPhiWidth_4*0.975"/>
+  <tubs name="ShE_HybridR5H0" rmin="E_HybridRadiusMinR5H0" rmax="E_HybridRadiusMaxR5H0" zhalflength="E_HybridT / 2." sphi="-SensorPhiWidth_5*0.49" dphi="SensorPhiWidth_5*0.975"/>
+  <tubs name="ShE_HybridR4H1" rmin="E_HybridRadiusMinR4H1" rmax="E_HybridRadiusMaxR4H1" zhalflength="E_HybridT / 2." sphi="-SensorPhiWidth_4*0.49" dphi="SensorPhiWidth_4*0.975"/>
+  <tubs name="ShE_HybridR5H1" rmin="E_HybridRadiusMinR5H1" rmax="E_HybridRadiusMaxR5H1" zhalflength="E_HybridT / 2." sphi="-SensorPhiWidth_5*0.49" dphi="SensorPhiWidth_5*0.975"/>
+    <!--sphi="-SensorPhiWidth_5*0.49" dphi="SensorPhiWidth_5*0.97" />   enough clearance - can i reduce? 0.98 is not enough. 0.975 looks perfect in vp1/Debugger -->
+</shapes>
+
+<materials>
+
+  <!-- GeoModelXml input created by ConsolidX for EC_HybridPCB, version 1.0. -->
+  <material name="matEC_HybridPCB" density="0.002165*1000">
+    <elementref ref="Aluminium" fraction="0.008079"/>
+    <elementref ref="Barium" fraction="0.057375"/>
+    <elementref ref="Carbon" fraction="0.250888"/>
+    <elementref ref="Copper" fraction="0.421377"/>
+    <elementref ref="Gold" fraction="0.004799"/>
+    <elementref ref="Hydrogen" fraction="0.014609"/>
+    <elementref ref="Lead" fraction="0.023518"/>
+    <elementref ref="Nickel" fraction="0.020306"/>
+    <elementref ref="Nitrogen" fraction="0.048265"/>
+    <elementref ref="Oxygen" fraction="0.058161"/>
+    <elementref ref="Silver" fraction="0.024977"/>
+    <elementref ref="Tin" fraction="0.047647"/>
+    <elementref ref="Titanium" fraction="0.019999"/>
+  </material>
+
+  <material name="matEC_HybridR0H0" density="0.002283*1000">
+    <elementref ref="Aluminium" fraction="0.016242"/>
+    <elementref ref="Barium" fraction="0.056974"/>
+    <elementref ref="Carbon" fraction="0.232673"/>
+    <elementref ref="Copper" fraction="0.387344"/>
+    <elementref ref="Gold" fraction="0.004411"/>
+    <elementref ref="Hydrogen" fraction="0.013620"/>
+    <elementref ref="Lead" fraction="0.040407"/>
+    <elementref ref="Nickel" fraction="0.021053"/>
+    <elementref ref="Nitrogen" fraction="0.044367"/>
+    <elementref ref="Oxygen" fraction="0.064096"/>
+    <elementref ref="Silver" fraction="0.020835"/>
+    <elementref ref="Tin" fraction="0.078118"/>
+    <elementref ref="Titanium" fraction="0.019859"/>
+  </material>
+
+  <material name="matEC_HybridR0H1" density="0.002276*1000">
+    <elementref ref="Aluminium" fraction="0.015741"/>
+    <elementref ref="Barium" fraction="0.057777"/>
+    <elementref ref="Carbon" fraction="0.230008"/>
+    <elementref ref="Copper" fraction="0.388521"/>
+    <elementref ref="Gold" fraction="0.004425"/>
+    <elementref ref="Hydrogen" fraction="0.013347"/>
+    <elementref ref="Lead" fraction="0.040916"/>
+    <elementref ref="Nickel" fraction="0.021079"/>
+    <elementref ref="Nitrogen" fraction="0.044502"/>
+    <elementref ref="Oxygen" fraction="0.063062"/>
+    <elementref ref="Silver" fraction="0.021489"/>
+    <elementref ref="Tin" fraction="0.078995"/>
+    <elementref ref="Titanium" fraction="0.020139"/>
+  </material>
+
+  <material name="matEC_HybridR1H0" density="0.002291*1000">
+    <elementref ref="Aluminium" fraction="0.015573"/>
+    <elementref ref="Barium" fraction="0.059492"/>
+    <elementref ref="Carbon" fraction="0.226923"/>
+    <elementref ref="Copper" fraction="0.386042"/>
+    <elementref ref="Gold" fraction="0.004397"/>
+    <elementref ref="Hydrogen" fraction="0.013111"/>
+    <elementref ref="Lead" fraction="0.042078"/>
+    <elementref ref="Nickel" fraction="0.021198"/>
+    <elementref ref="Nitrogen" fraction="0.044218"/>
+    <elementref ref="Oxygen" fraction="0.062647"/>
+    <elementref ref="Silver" fraction="0.022440"/>
+    <elementref ref="Tin" fraction="0.081145"/>
+    <elementref ref="Titanium" fraction="0.020737"/>
+  </material>
+
+  <material name="matEC_HybridR1H1" density="0.002329*1000">
+    <elementref ref="Aluminium" fraction="0.015723"/>
+    <elementref ref="Barium" fraction="0.062244"/>
+    <elementref ref="Carbon" fraction="0.223189"/>
+    <elementref ref="Copper" fraction="0.379731"/>
+    <elementref ref="Gold" fraction="0.004325"/>
+    <elementref ref="Hydrogen" fraction="0.012895"/>
+    <elementref ref="Lead" fraction="0.043978"/>
+    <elementref ref="Nickel" fraction="0.021420"/>
+    <elementref ref="Nitrogen" fraction="0.043495"/>
+    <elementref ref="Oxygen" fraction="0.062818"/>
+    <elementref ref="Silver" fraction="0.023760"/>
+    <elementref ref="Tin" fraction="0.084726"/>
+    <elementref ref="Titanium" fraction="0.021696"/>
+  </material>
+  <material name="matEC_HybridR2H0" density="0.002217*1000">
+    <elementref ref="Aluminium" fraction="0.011959"/>
+    <elementref ref="Barium" fraction="0.074836"/>
+    <elementref ref="Carbon" fraction="0.216346"/>
+    <elementref ref="Copper" fraction="0.398835"/>
+    <elementref ref="Gold" fraction="0.004542"/>
+    <elementref ref="Hydrogen" fraction="0.011858"/>
+    <elementref ref="Lead" fraction="0.035170"/>
+    <elementref ref="Nickel" fraction="0.023559"/>
+    <elementref ref="Nitrogen" fraction="0.045683"/>
+    <elementref ref="Oxygen" fraction="0.063084"/>
+    <elementref ref="Silver" fraction="0.017340"/>
+    <elementref ref="Tin" fraction="0.070704"/>
+    <elementref ref="Titanium" fraction="0.026085"/>
+  </material>
+
+  <material name="matEC_HybridR3H0" density="0.001911*1000">
+    <elementref ref="Aluminium" fraction="0.011684"/>
+    <elementref ref="Barium" fraction="0.029534"/>
+    <elementref ref="Carbon" fraction="0.253875"/>
+    <elementref ref="Copper" fraction="0.462759"/>
+    <elementref ref="Gold" fraction="0.005270"/>
+    <elementref ref="Hydrogen" fraction="0.014025"/>
+    <elementref ref="Lead" fraction="0.025363"/>
+    <elementref ref="Nickel" fraction="0.018224"/>
+    <elementref ref="Nitrogen" fraction="0.053005"/>
+    <elementref ref="Oxygen" fraction="0.053494"/>
+    <elementref ref="Silver" fraction="0.014008"/>
+    <elementref ref="Tin" fraction="0.048465"/>
+    <elementref ref="Titanium" fraction="0.010294"/>
+  </material>
+
+  <material name="matEC_HybridR3H1" density="0.002005*1000">
+    <elementref ref="Aluminium" fraction="0.011138"/>
+    <elementref ref="Barium" fraction="0.046565"/>
+    <elementref ref="Carbon" fraction="0.242011"/>
+    <elementref ref="Copper" fraction="0.441134"/>
+    <elementref ref="Gold" fraction="0.005024"/>
+    <elementref ref="Hydrogen" fraction="0.013370"/>
+    <elementref ref="Lead" fraction="0.027924"/>
+    <elementref ref="Nickel" fraction="0.020280"/>
+    <elementref ref="Nitrogen" fraction="0.050528"/>
+    <elementref ref="Oxygen" fraction="0.057430"/>
+    <elementref ref="Silver" fraction="0.013499"/>
+    <elementref ref="Tin" fraction="0.054867"/>
+    <elementref ref="Titanium" fraction="0.016231"/>
+  </material>
+
+  <material name="matEC_HybridR3H2" density="0.001907*1000">
+    <elementref ref="Aluminium" fraction="0.011594"/>
+    <elementref ref="Barium" fraction="0.029306"/>
+    <elementref ref="Carbon" fraction="0.254014"/>
+    <elementref ref="Copper" fraction="0.463746"/>
+    <elementref ref="Gold" fraction="0.005282"/>
+    <elementref ref="Hydrogen" fraction="0.014018"/>
+    <elementref ref="Lead" fraction="0.025167"/>
+    <elementref ref="Nickel" fraction="0.018203"/>
+    <elementref ref="Nitrogen" fraction="0.053118"/>
+    <elementref ref="Oxygen" fraction="0.053348"/>
+    <elementref ref="Silver" fraction="0.013900"/>
+    <elementref ref="Tin" fraction="0.048091"/>
+    <elementref ref="Titanium" fraction="0.010215"/>
+  </material>
+
+  <material name="matEC_HybridR3H3" density="0.002000*1000">
+    <elementref ref="Aluminium" fraction="0.011056"/>
+    <elementref ref="Barium" fraction="0.046222"/>
+    <elementref ref="Carbon" fraction="0.242231"/>
+    <elementref ref="Copper" fraction="0.442234"/>
+    <elementref ref="Gold" fraction="0.005037"/>
+    <elementref ref="Hydrogen" fraction="0.013367"/>
+    <elementref ref="Lead" fraction="0.027719"/>
+    <elementref ref="Nickel" fraction="0.020245"/>
+    <elementref ref="Nitrogen" fraction="0.050654"/>
+    <elementref ref="Oxygen" fraction="0.057261"/>
+    <elementref ref="Silver" fraction="0.013399"/>
+    <elementref ref="Tin" fraction="0.054464"/>
+    <elementref ref="Titanium" fraction="0.016111"/>
+  </material>
+
+  <material name="matEC_HybridR4H0" density="0.001775*1000">
+    <elementref ref="Aluminium" fraction="0.008135"/>
+    <elementref ref="Barium" fraction="0.022302"/>
+    <elementref ref="Carbon" fraction="0.256947"/>
+    <elementref ref="Copper" fraction="0.498279"/>
+    <elementref ref="Gold" fraction="0.005675"/>
+    <elementref ref="Hydrogen" fraction="0.013571"/>
+    <elementref ref="Lead" fraction="0.018727"/>
+    <elementref ref="Nickel" fraction="0.017545"/>
+    <elementref ref="Nitrogen" fraction="0.057074"/>
+    <elementref ref="Oxygen" fraction="0.047715"/>
+    <elementref ref="Silver" fraction="0.010489"/>
+    <elementref ref="Tin" fraction="0.035768"/>
+    <elementref ref="Titanium" fraction="0.007774"/>
+  </material>
+
+  <material name="matEC_HybridR4H1" density="0.001835*1000">
+    <elementref ref="Aluminium" fraction="0.007868"/>
+    <elementref ref="Barium" fraction="0.034268"/>
+    <elementref ref="Carbon" fraction="0.248501"/>
+    <elementref ref="Copper" fraction="0.481900"/>
+    <elementref ref="Gold" fraction="0.005488"/>
+    <elementref ref="Hydrogen" fraction="0.013125"/>
+    <elementref ref="Lead" fraction="0.020926"/>
+    <elementref ref="Nickel" fraction="0.018974"/>
+    <elementref ref="Nitrogen" fraction="0.055198"/>
+    <elementref ref="Oxygen" fraction="0.050585"/>
+    <elementref ref="Silver" fraction="0.010253"/>
+    <elementref ref="Tin" fraction="0.040968"/>
+    <elementref ref="Titanium" fraction="0.011945"/>
+  </material>
+
+  <material name="matEC_HybridR5H0" density="0.001724*1000">
+    <elementref ref="Aluminium" fraction="0.006621"/>
+    <elementref ref="Barium" fraction="0.019448"/>
+    <elementref ref="Carbon" fraction="0.257935"/>
+    <elementref ref="Copper" fraction="0.512994"/>
+    <elementref ref="Gold" fraction="0.005842"/>
+    <elementref ref="Hydrogen" fraction="0.013356"/>
+    <elementref ref="Lead" fraction="0.016038"/>
+    <elementref ref="Nickel" fraction="0.017274"/>
+    <elementref ref="Nitrogen" fraction="0.058759"/>
+    <elementref ref="Oxygen" fraction="0.045248"/>
+    <elementref ref="Silver" fraction="0.009086"/>
+    <elementref ref="Tin" fraction="0.030619"/>
+    <elementref ref="Titanium" fraction="0.006779"/>
+  </material>
+
+  <material name="matEC_HybridR5H1" density="0.001769*1000">
+    <elementref ref="Aluminium" fraction="0.006450"/>
+    <elementref ref="Barium" fraction="0.028926"/>
+    <elementref ref="Carbon" fraction="0.251272"/>
+    <elementref ref="Copper" fraction="0.499742"/>
+    <elementref ref="Gold" fraction="0.005692"/>
+    <elementref ref="Hydrogen" fraction="0.013011"/>
+    <elementref ref="Lead" fraction="0.017835"/>
+    <elementref ref="Nickel" fraction="0.018404"/>
+    <elementref ref="Nitrogen" fraction="0.057241"/>
+    <elementref ref="Oxygen" fraction="0.047568"/>
+    <elementref ref="Silver" fraction="0.008937"/>
+    <elementref ref="Tin" fraction="0.034839"/>
+    <elementref ref="Titanium" fraction="0.010083"/>
+  </material>
+
+</materials>
+
+<logvol name="ECHybridPCBR0H0" shape="ShE_HybridR0H0" material="matEC_HybridR0H0">
+  <index ref="eta_module" value="0"/>
+</logvol>
+<assembly name="ECHybridR0H0">
+  <logvolref ref="ECHybridPCBR0H0"/>
+
+  <transform>
+    <transformation name="PlaceHCCOnB_HybridR0H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_0/(2*N_ABC_R0)*(1-N_ABC_R0+2*(N_ABC_R0-1.5))"/>		
+      <translation y="E_HCCRadiusR0H0+HCC_L/2" z="(E_HybridT + HCC_T) / 2"/>     
+    </transformation>
+    <logvolref ref="HCC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC0OnE_HybridR0H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_0/(2*N_ABC_R0)*(1-N_ABC_R0)"/>	
+      <translation y="E_HybridRadiusMinR0H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC1OnE_HybridR0H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_0/(2*N_ABC_R0)*(1-N_ABC_R0+2*1)"/>	
+      <translation y="E_HybridRadiusMinR0H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceABC2OnE_HybridR0H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_0/(2*N_ABC_R0)*(1-N_ABC_R0+2*2)"/>	
+      <translation y="E_HybridRadiusMinR0H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC3OnE_HybridR0H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_0/(2*N_ABC_R0)*(1-N_ABC_R0+2*3)"/>	
+      <translation y="E_HybridRadiusMinR0H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceABC4OnE_HybridR0H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_0/(2*N_ABC_R0)*(1-N_ABC_R0+2*4)"/>	
+      <translation y="E_HybridRadiusMinR0H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC5OnE_HybridR0H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_0/(2*N_ABC_R0)*(1-N_ABC_R0+2*5)"/>	
+      <translation y="E_HybridRadiusMinR0H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC6OnE_HybridR0H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_0/(2*N_ABC_R0)*(1-N_ABC_R0+2*6)"/>	
+      <translation y="E_HybridRadiusMinR0H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+<transform>
+    <transformation name="PlaceABC7OnE_HybridR0H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_0/(2*N_ABC_R0)*(1-N_ABC_R0+2*7)"/>	
+      <translation y="E_HybridRadiusMinR0H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+</assembly>
+
+<logvol name="ECHybridPCBR0H1" shape="ShE_HybridR0H1" material="matEC_HybridR0H1">
+  <index ref="eta_module" value="0"/>
+</logvol>
+<assembly name="ECHybridR0H1">
+  <logvolref ref="ECHybridPCBR0H1"/>
+
+  <transform>
+    <transformation name="PlaceHCCOnB_HybridR0H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_0/(2*N_ABC_R0)*(1-N_ABC_R0+2*(N_ABC_R0-1.5))"/>		
+      <translation y="E_HCCRadiusR0H1+HCC_L/2" z="(E_HybridT + HCC_T) / 2"/>     
+    </transformation>
+    <logvolref ref="HCC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC0OnE_HybridR0H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_0/(2*N_ABC_R0)*(1-N_ABC_R0)"/>	
+      <translation y="E_HybridRadiusMaxR0H1-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC1OnE_HybridR0H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_0/(2*N_ABC_R0)*(1-N_ABC_R0+2*1)"/>	
+      <translation y="E_HybridRadiusMaxR0H1-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC2OnE_HybridR0H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_0/(2*N_ABC_R0)*(1-N_ABC_R0+2*2)"/>	
+      <translation y="E_HybridRadiusMaxR0H1-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC3OnE_HybridR0H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_0/(2*N_ABC_R0)*(1-N_ABC_R0+2*3)"/>	
+      <translation y="E_HybridRadiusMaxR0H1-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC4OnE_HybridR0H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_0/(2*N_ABC_R0)*(1-N_ABC_R0+2*4)"/>	
+      <translation y="E_HybridRadiusMaxR0H1-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC5OnE_HybridR0H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_0/(2*N_ABC_R0)*(1-N_ABC_R0+2*5)"/>	
+      <translation y="E_HybridRadiusMaxR0H1-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC6OnE_HybridR0H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_0/(2*N_ABC_R0)*(1-N_ABC_R0+2*6)"/>	
+      <translation y="E_HybridRadiusMaxR0H1-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC7OnE_HybridR0H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_0/(2*N_ABC_R0)*(1-N_ABC_R0+2*7)"/>	
+      <translation y="E_HybridRadiusMaxR0H1-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+</assembly>
+<logvol name="ECHybridPCBR1H0" shape="ShE_HybridR1H0" material="matEC_HybridR1H0">
+  <index ref="eta_module" value="1"/>
+</logvol>
+<assembly name="ECHybridR1H0">
+  <logvolref ref="ECHybridPCBR1H0"/>
+
+  <transform>
+    <transformation name="PlaceHCCOnB_HybridR1H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*(N_ABC_R1-1.5))"/>		
+      <translation y="E_HCCRadiusR1H0+HCC_L/2" z="(E_HybridT + HCC_T) / 2"/>     
+    </transformation>
+    <logvolref ref="HCC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC0OnE_HybridR1H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1)"/>	
+      <translation y="E_HybridRadiusMinR1H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC1OnE_HybridR1H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*1)"/>	
+      <translation y="E_HybridRadiusMinR1H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC2OnE_HybridR1H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*2)"/>	
+      <translation y="E_HybridRadiusMinR1H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC3OnE_HybridR1H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*3)"/>	
+      <translation y="E_HybridRadiusMinR1H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC4OnE_HybridR1H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*4)"/>	
+      <translation y="E_HybridRadiusMinR1H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC5OnE_HybridR1H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*5)"/>	
+      <translation y="E_HybridRadiusMinR1H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC6OnE_HybridR1H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*6)"/>	
+      <translation y="E_HybridRadiusMinR1H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC7OnE_HybridR1H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*7)"/>	
+      <translation y="E_HybridRadiusMinR1H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC8OnE_HybridR1H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*8)"/>	
+      <translation y="E_HybridRadiusMinR1H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC9OnE_HybridR1H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*9)"/>	
+      <translation y="E_HybridRadiusMinR1H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+</assembly>
+
+<logvol name="ECHybridPCBR1H1" shape="ShE_HybridR1H1" material="matEC_HybridR1H1">
+  <index ref="eta_module" value="1"/>
+</logvol>
+
+<assembly name="ECHybridR1H1">
+  <logvolref ref="ECHybridPCBR1H1"/>
+
+  <transform>
+    <transformation name="PlaceHCCOnB_HybridR1H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*(N_ABC_R1-1.5))"/>		
+      <translation y="E_HCCRadiusR1H1+HCC_L/2" z="(E_HybridT + HCC_T) / 2"/>     
+    </transformation>
+    <logvolref ref="HCC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC0OnE_HybridR1H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1)"/>	
+      <translation y="E_HybridRadiusMaxR1H1-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC1OnE_HybridR1H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*1)"/>	
+      <translation y="E_HybridRadiusMaxR1H1-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC2OnE_HybridR1H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*2)"/>	
+      <translation y="E_HybridRadiusMaxR1H1-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC3OnE_HybridR1H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*3)"/>	
+      <translation y="E_HybridRadiusMaxR1H1-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC4OnE_HybridR1H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*4)"/>	
+      <translation y="E_HybridRadiusMaxR1H1-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC5OnE_HybridR1H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*5)"/>	
+      <translation y="E_HybridRadiusMaxR1H1-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC6OnE_HybridR1H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*6)"/>	
+      <translation y="E_HybridRadiusMaxR1H1-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC7OnE_HybridR1H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*7)"/>	
+      <translation y="E_HybridRadiusMaxR1H1-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC8OnE_HybridR1H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*8)"/>	
+      <translation y="E_HybridRadiusMaxR1H1-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC9OnE_HybridR1H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R1)*(1-N_ABC_R1+2*9)"/>	
+      <translation y="E_HybridRadiusMaxR1H1-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+</assembly>
+
+<logvol name="ECHybridPCBR2H0" shape="ShE_HybridR2H0" material="matEC_HybridR2H0">
+  <index ref="eta_module" value="2"/>
+</logvol>
+
+<assembly name="ECHybridR2H0">
+  <logvolref ref="ECHybridPCBR2H0"/>
+
+  <transform>
+    <transformation name="PlaceHCCOnB_HybridR2H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_2/(2*N_ABC_R2)*(1-N_ABC_R2+2*(N_ABC_R2-1.5))"/>		
+      <translation y="E_HCCRadiusR2H0+HCC_L/2" z="(E_HybridT + HCC_T) / 2"/>     
+    </transformation>
+    <logvolref ref="HCC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceHCCOnB_HybridR2H0a">
+      <rotation zcos="1.0" angle="SensorPhiWidth_2/(2*N_ABC_R2)*(1-N_ABC_R2+2*(N_ABC_R2-1.5))"/>		
+      <translation y="E_HCCRadiusR2H0a+HCC_L/2" z="(E_HybridT + HCC_T) / 2"/>     
+    </transformation>
+    <logvolref ref="HCC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC0OnE_HybridR2H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_2/(2*N_ABC_R2)*(1-N_ABC_R2+2*0)"/>	
+      <translation y="E_HybridRadiusMinR2H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC1OnE_HybridR2H0a">
+      <rotation zcos="1.0" angle="SensorPhiWidth_2/(2*N_ABC_R2)*(1-N_ABC_R2+2*1)"/>	
+      <translation y="E_HybridRadiusMinR2H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC2OnE_HybridR2H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_2/(2*N_ABC_R2)*(1-N_ABC_R2+2*2)"/>	
+      <translation y="E_HybridRadiusMinR2H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC3OnE_HybridR2H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_2/(2*N_ABC_R2)*(1-N_ABC_R2+2*3)"/>	
+      <translation y="E_HybridRadiusMinR2H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC4E_HybridR2H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_2/(2*N_ABC_R2)*(1-N_ABC_R2+2*4)"/>	
+      <translation y="E_HybridRadiusMinR2H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC5OnE_HybridR2H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_2/(2*N_ABC_R2)*(1-N_ABC_R2+2*5)"/>	
+      <translation y="E_HybridRadiusMinR2H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC6OnE_HybridR2H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_2/(2*N_ABC_R2)*(1-N_ABC_R2+2*6)"/>	
+      <translation y="E_HybridRadiusMinR2H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC7OnE_HybridR2H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_2/(2*N_ABC_R2)*(1-N_ABC_R2+2*7)"/>	
+      <translation y="E_HybridRadiusMinR2H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC8OnE_HybridR2H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_2/(2*N_ABC_R2)*(1-N_ABC_R2+2*8)"/>	
+      <translation y="E_HybridRadiusMinR2H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC9OnE_HybridR2H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_2/(2*N_ABC_R2)*(1-N_ABC_R2+2*9)"/>	
+      <translation y="E_HybridRadiusMinR2H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC10OnE_HybridR2H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_2/(2*N_ABC_R2)*(1-N_ABC_R2+2*10)"/>	
+      <translation y="E_HybridRadiusMinR2H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC11OnE_HybridR2H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_2/(2*N_ABC_R2)*(1-N_ABC_R2+2*11)"/>	
+      <translation y="E_HybridRadiusMinR2H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+<!--  <multicopy name="PlaceABCsOnR2_Hybrid" n="N_ABC_R2">  
+    <transformation name="ABC_ReadyForCopyingToR2_Hybrid">
+      <rotation zcos="1.0" angle="SensorPhiWidth_1/(2*N_ABC_R2)*(1-N_ABC_R2+2*N_ABC_R2)"/>	
+      <translation y="E_HybridRadiusMinR2H0+ABC_ToEHybridEdgeGap+ABC_L/2"  z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>
+    <logvolref ref="ABC_Chip"/>
+  </multicopy>
+-->
+</assembly>
+
+<logvol name="ECHybridPCBR3H0" shape="ShE_HybridR3H0" material="matEC_HybridR3H0">
+  <index ref="eta_module" value="3"/>
+</logvol>
+
+<assembly name="ECHybridR3H0">
+  <logvolref ref="ECHybridPCBR3H0"/>
+
+  <transform>
+    <transformation name="PlaceABC0OnE_HybridR3H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*0)"/>	
+      <translation y="E_HybridRadiusMinR3H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC1OnE_HybridR3H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*1)"/>	
+      <translation y="E_HybridRadiusMinR3H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC2OnE_HybridR3H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*2)"/>	
+      <translation y="E_HybridRadiusMinR3H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC3OnE_HybridR3H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*3)"/>	
+      <translation y="E_HybridRadiusMinR3H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC4E_HybridR3H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*4)"/>	
+      <translation y="E_HybridRadiusMinR3H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC5OnE_HybridR3H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*5)"/>	
+      <translation y="E_HybridRadiusMinR3H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC6OnE_HybridR3H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*6)"/>	
+      <translation y="E_HybridRadiusMinR3H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+</assembly>
+
+<logvol name="ECHybridPCBR3H2" shape="ShE_HybridR3H2" material="matEC_HybridR3H2">
+  <index ref="eta_module" value="3"/>
+</logvol>
+<assembly name="ECHybridR3H2">
+  <logvolref ref="ECHybridPCBR3H2"/>
+
+  <transform>
+    <transformation name="PlaceABC0OnE_HybridR3H2">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*0)"/>	
+      <translation y="E_HybridRadiusMaxR3H2-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC1OnE_HybridR3H2">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*1)"/>	
+      <translation y="E_HybridRadiusMaxR3H2-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC2OnE_HybridR3H2">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*2)"/>	
+      <translation y="E_HybridRadiusMaxR3H2-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC3OnE_HybridR3H2">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*3)"/>	
+      <translation y="E_HybridRadiusMaxR3H2-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC4E_HybridR3H2">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*4)"/>	
+      <translation y="E_HybridRadiusMaxR3H2-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC5OnE_HybridR3H2">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*5)"/>	
+      <translation y="E_HybridRadiusMaxR3H2-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC6OnE_HybridR3H2">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*6)"/>	
+      <translation y="E_HybridRadiusMaxR3H2-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+</assembly>
+
+<logvol name="ECHybridPCBR3H1" shape="ShE_HybridR3H1" material="matEC_HybridR3H1">
+  <index ref="eta_module" value="3"/>
+</logvol>
+
+<assembly name="ECHybridR3H1">
+  <logvolref ref="ECHybridPCBR3H1"/>
+
+  <transform>
+    <transformation name="PlaceABC0OnE_HybridR3H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*0)"/>	
+      <translation y="E_HybridRadiusMinR3H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC1OnE_HybridR3H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*1)"/>	
+      <translation y="E_HybridRadiusMinR3H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC2OnE_HybridR3H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*2)"/>	
+      <translation y="E_HybridRadiusMinR3H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC3OnE_HybridR3H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*3)"/>	
+      <translation y="E_HybridRadiusMinR3H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC4E_HybridR3H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*4)"/>	
+      <translation y="E_HybridRadiusMinR3H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC5OnE_HybridR3H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*5)"/>	
+      <translation y="E_HybridRadiusMinR3H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC6OnE_HybridR3H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*6)"/>	
+      <translation y="E_HybridRadiusMinR3H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+</assembly>
+
+<logvol name="ECHybridPCBR3H3" shape="ShE_HybridR3H3" material="matEC_HybridR3H3">
+  <index ref="eta_module" value="3"/>
+</logvol>
+
+<assembly name="ECHybridR3H3">
+  <logvolref ref="ECHybridPCBR3H3"/>
+
+  <transform>
+    <transformation name="PlaceABC0OnE_HybridR3H3">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*0)"/>	
+      <translation y="E_HybridRadiusMaxR3H3-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC1OnE_HybridR3H3">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*1)"/>	
+      <translation y="E_HybridRadiusMaxR3H3-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC2OnE_HybridR3H3">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*2)"/>	
+      <translation y="E_HybridRadiusMaxR3H3-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC3OnE_HybridR3H3">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*3)"/>	
+      <translation y="E_HybridRadiusMaxR3H3-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC4E_HybridR3H3">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*4)"/>	
+      <translation y="E_HybridRadiusMaxR3H3-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC5OnE_HybridR3H3">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*5)"/>	
+      <translation y="E_HybridRadiusMaxR3H3-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC6OnE_HybridR3H3">
+      <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*6)"/>	
+      <translation y="E_HybridRadiusMaxR3H3-ABC_ToEHybridEdgeGap-ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+</assembly>
+
+<logvol name="ECHybridPCBR4H0" shape="ShE_HybridR4H0" material="matEC_HybridR4H0">
+  <index ref="eta_module" value="4"/>
+</logvol>
+<assembly name="ECHybridR4H0">
+  <logvolref ref="ECHybridPCBR4H0"/>
+
+  <transform>
+    <transformation name="PlaceABC0OnE_HybridR4H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_4/(2*N_ABC_R4)*(1-N_ABC_R4+2*0)"/>	
+      <translation y="E_HybridRadiusMinR4H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC1OnE_HybridR4H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_4/(2*N_ABC_R4)*(1-N_ABC_R4+2*1)"/>	
+      <translation y="E_HybridRadiusMinR4H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC2OnE_HybridR4H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_4/(2*N_ABC_R4)*(1-N_ABC_R4+2*2)"/>	
+      <translation y="E_HybridRadiusMinR4H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC3OnE_HybridR4H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_4/(2*N_ABC_R4)*(1-N_ABC_R4+2*3)"/>	
+      <translation y="E_HybridRadiusMinR4H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC4E_HybridR4H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_4/(2*N_ABC_R4)*(1-N_ABC_R4+2*4)"/>	
+      <translation y="E_HybridRadiusMinR4H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC5OnE_HybridR4H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_4/(2*N_ABC_R4)*(1-N_ABC_R4+2*5)"/>	
+      <translation y="E_HybridRadiusMinR4H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC6OnE_HybridR4H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_4/(2*N_ABC_R4)*(1-N_ABC_R4+2*6)"/>	
+      <translation y="E_HybridRadiusMinR4H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC7OnE_HybridR4H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_4/(2*N_ABC_R4)*(1-N_ABC_R4+2*7)"/>	
+      <translation y="E_HybridRadiusMinR4H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+</assembly>
+
+<logvol name="ECHybridPCBR4H1" shape="ShE_HybridR4H1" material="matEC_HybridR4H1">
+  <index ref="eta_module" value="4"/>
+</logvol>
+
+<assembly name="ECHybridR4H1">
+  <logvolref ref="ECHybridPCBR4H1"/>
+
+  <transform>
+    <transformation name="PlaceABC0OnE_HybridR4H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_4/(2*N_ABC_R4)*(1-N_ABC_R4+2*0)"/>	
+      <translation y="E_HybridRadiusMinR4H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC1OnE_HybridR4H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_4/(2*N_ABC_R4)*(1-N_ABC_R4+2*1)"/>	
+      <translation y="E_HybridRadiusMinR4H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC2OnE_HybridR4H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_4/(2*N_ABC_R4)*(1-N_ABC_R4+2*2)"/>	
+      <translation y="E_HybridRadiusMinR4H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC3OnE_HybridR4H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_4/(2*N_ABC_R4)*(1-N_ABC_R4+2*3)"/>	
+      <translation y="E_HybridRadiusMinR4H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC4E_HybridR4H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_4/(2*N_ABC_R4)*(1-N_ABC_R4+2*4)"/>	
+      <translation y="E_HybridRadiusMinR4H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC5OnE_HybridR4H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_4/(2*N_ABC_R4)*(1-N_ABC_R4+2*5)"/>	
+      <translation y="E_HybridRadiusMinR4H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC6OnE_HybridR4H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_4/(2*N_ABC_R4)*(1-N_ABC_R4+2*6)"/>	
+      <translation y="E_HybridRadiusMinR4H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC7OnE_HybridR4H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_4/(2*N_ABC_R4)*(1-N_ABC_R4+2*7)"/>	
+      <translation y="E_HybridRadiusMinR4H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+</assembly>
+
+<logvol name="ECHybridPCBR5H0" shape="ShE_HybridR5H0" material="matEC_HybridR5H0">
+  <index ref="eta_module" value="5"/>
+</logvol>
+<assembly name="ECHybridR5H0">
+  <logvolref ref="ECHybridPCBR5H0"/>
+
+  <transform>
+    <transformation name="PlaceABC0OnE_HybridR5H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*0)"/>	
+      <translation y="E_HybridRadiusMinR5H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC1OnE_HybridR5H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*1)"/>	
+      <translation y="E_HybridRadiusMinR5H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC2OnE_HybridR5H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*2)"/>	
+      <translation y="E_HybridRadiusMinR5H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC3OnE_HybridR5H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*3)"/>	
+      <translation y="E_HybridRadiusMinR5H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC4E_HybridR5H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*4)"/>	
+      <translation y="E_HybridRadiusMinR5H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC5OnE_HybridR5H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*5)"/>	
+      <translation y="E_HybridRadiusMinR5H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC6OnE_HybridR5H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*6)"/>	
+      <translation y="E_HybridRadiusMinR5H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC7OnE_HybridR5H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*7)"/>	
+      <translation y="E_HybridRadiusMinR5H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC8OnE_HybridR5H0">
+      <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*8)"/>	
+      <translation y="E_HybridRadiusMinR5H0+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+</assembly>
+
+<logvol name="ECHybridPCBR5H1" shape="ShE_HybridR5H1" material="matEC_HybridR5H1">
+  <index ref="eta_module" value="5"/>
+</logvol>
+
+<assembly name="ECHybridR5H1">
+  <logvolref ref="ECHybridPCBR5H1"/>
+
+  <transform>
+    <transformation name="PlaceABC0OnE_HybridR5H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*0)"/>	
+      <translation y="E_HybridRadiusMinR5H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC1OnE_HybridR5H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*1)"/>	
+      <translation y="E_HybridRadiusMinR5H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC2OnE_HybridR5H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*2)"/>	
+      <translation y="E_HybridRadiusMinR5H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC3OnE_HybridR5H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*3)"/>	
+      <translation y="E_HybridRadiusMinR5H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC4E_HybridR5H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*4)"/>	
+      <translation y="E_HybridRadiusMinR5H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC5OnE_HybridR5H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*5)"/>	
+      <translation y="E_HybridRadiusMinR5H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC6OnE_HybridR5H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*6)"/>	
+      <translation y="E_HybridRadiusMinR5H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC7OnE_HybridR5H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*7)"/>	
+      <translation y="E_HybridRadiusMinR5H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceABC8OnE_HybridR5H1">
+      <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*8)"/>	
+      <translation y="E_HybridRadiusMinR5H1+ABC_ToEHybridEdgeGap+ABC_L/2" z="(E_HybridT + ABC_T) / 2"/>
+    </transformation>  
+    <logvolref ref="ABC_Chip"/>
+  </transform>
+</assembly>
+
+<!-- To be included in Endcaps.gmx. Builds up the Petal Plank cores (including bus tape copper) -->
+<!-- GeoModelXml input created by ConsolidX for BusTape, version 1.0. -->
+
+<materials>
+  <material name="matPetalBusKapton" density="1.180">
+    <elementref ref="Carbon" fraction="0.524968"/>
+    <elementref ref="Copper" fraction="0.266830"/>
+    <elementref ref="Hydrogen" fraction="0.031077"/>
+    <elementref ref="Nitrogen" fraction="0.098203"/>
+    <elementref ref="Oxygen" fraction="0.078922"/>
+  </material>
+</materials>
+
+<shapes>
+
+  <tubs name="ShPetalCore" rmin="PetalCoreInnerRadius" rmax="PetalCoreOuterRadius" zhalflength="PetalCoreThickness/2" sphi="-PetalCoreAngle/2" dphi="PetalCoreAngle"/>
+  <tubs name="ShPetalEOS" rmin="PetalEarInnerRadius" rmax="PetalEarOuterRadius" zhalflength="PetalCoreThickness/2" sphi="-PetalEarAngle/2" dphi="PetalEarAngle"/>
+  <union name="shPetalCore">
+    <shaperef ref="ShPetalCore"/>
+    <transformation name="PlaceFirstEOS">
+      <rotation zcos="1" angle="(PetalCoreAngle + PetalEarAngle)/2"/>
+    </transformation>
+    <shaperef ref="ShPetalEOS"/>
+  </union>
+
+  <tubs name="ShPetalFaceSheet" rmin="PetalCoreInnerRadius" rmax="PetalCoreOuterRadius" zhalflength="PetalFaceSheetT/2 - EPS" sphi="-PetalCoreAngle/2" dphi="PetalCoreAngle"/>
+
+  <tubs name="ShPetalEOS_FaceSheet" rmin="PetalEarInnerRadius" rmax="PetalEarOuterRadius" zhalflength="PetalFaceSheetT/2 - EPS" sphi="-PetalEarAngle/2" dphi="PetalEarAngle"/>
+
+  <union name="shPetalFaceSheet">
+    <shaperef ref="ShPetalFaceSheet"/>
+    <transformation name="PlaceFirstEOS_FaceSheet">
+      <rotation zcos="1" angle="(PetalCoreAngle + PetalEarAngle)/2"/>
+    </transformation>
+    <shaperef ref="ShPetalEOS_FaceSheet"/>
+  </union>
+
+  <tubs name="shPetalCloseoutFar" rmin="PetalCoreOuterRadius-PetalCloseoutW" rmax="PetalCoreOuterRadius" zhalflength="PetalCloseoutT/2" sphi="-PetalCoreAngle/2" dphi="PetalCoreAngle+PetalEarAngle"/> 
+  <tubs name="shPetalCloseoutNear" rmin="PetalCoreInnerRadius" rmax="PetalCoreInnerRadius+PetalCloseoutW" zhalflength="PetalCloseoutT/2" sphi="-PetalCoreAngle/2" dphi="PetalCoreAngle"/> 
+  <box name="shPetalCloseoutLong" xhalflength="PetalCchannelLongL/2 -2*EPS" yhalflength="PetalCchannelW/2" zhalflength="PetalCFoamT/2 - EPS"/>
+  <box name="shPetalCloseoutLongSpace" xhalflength="(PetalCchannelLongL-1)/2" yhalflength="PetalCchannelInnerW/2" zhalflength="PetalCchannelInnerT/2"/>
+  <box name="shPetalCloseoutShort" xhalflength="PetalCchannelShortL/2 - EPS" yhalflength="PetalCchannelW/2" zhalflength="PetalCFoamT/2 - EPS"/>
+  <box name="shPetalCloseoutShortSpace" xhalflength="(PetalCchannelShortL-1)/2" yhalflength="PetalCchannelInnerW/2" zhalflength="PetalCchannelInnerT/2"/>
+  <tubs name="shPetalBusKapton" rmin="PetalCoreInnerRadius" rmax="PetalCoreOuterRadius" zhalflength="PetalBusKaptonT/2" sphi="-PetalCoreAngle/2" dphi="PetalCoreAngle"/> 
+
+  <tubs name="shPetalBusGlue" rmin="PetalCoreInnerRadius" rmax="PetalCoreOuterRadius" zhalflength="PetalBusGlueT/2" sphi="-SensorPhiWidth_0/2" dphi="SensorPhiWidth_0"/>
+
+  <box name="shPetalCFoam1" xhalflength="PetalCooling1L/2" yhalflength="PetalCFoamW/2" zhalflength="PetalCFoamT/2 - EPS"/>
+
+  <tube name="shPetalCooling1Tube" rmin="0.0" rmax="PetalCoolingPipeOD" zhalflength="PetalCooling1L/2 - 2 * EPS"/>
+
+  <tube name="shPetalCooling1CO2" rmin="0.0" rmax="PetalCoolingPipeID" zhalflength="PetalCooling1L/2 - 3 * EPS"/>
+
+  <box name="shPetalCFoam2" xhalflength="PetalCooling2L/2" yhalflength="PetalCFoamW/2" zhalflength="PetalCFoamT/2 - EPS"/>  
+
+  <tube name="shPetalCooling2Tube" rmin="0.0" rmax="PetalCoolingPipeOD" zhalflength="PetalCooling2L/2 - 2 * EPS"/>
+
+  <tube name="shPetalCooling2CO2" rmin="0.0" rmax="PetalCoolingPipeID" zhalflength="PetalCooling2L/2 - 3 * EPS"/>
+
+  <box name="shPetalCFoam3" xhalflength="PetalCooling3L/2" yhalflength="PetalCFoamW/2" zhalflength="PetalCFoamT/2 - EPS"/>
+
+  <tube name="shPetalCooling3Tube" rmin="0.0" rmax="PetalCoolingPipeOD" zhalflength="PetalCooling3L/2 - 2 * EPS"/>
+
+  <tube name="shPetalCooling3CO2" rmin="0.0" rmax="PetalCoolingPipeID" zhalflength="PetalCooling3L/2 - 3 * EPS"/>
+
+</shapes>
+
+<logvol name="PetalFaceSheetAll" shape="shPetalFaceSheet" material="K13C2U"/>
+<logvol name="PetalBusKapton" shape="shPetalBusKapton" material="matPetalBusKapton"/>
+<logvol name="PetalBusGlue" shape="shPetalBusGlue" material="SE4445"/> 
+<logvol name="PetalCloseoutFar" shape="shPetalCloseoutFar" material="Torlon"/>
+<logvol name="PetalCloseoutNear" shape="shPetalCloseoutNear" material="Torlon"/>
+<logvol name="PetalCloseoutLong" shape="shPetalCloseoutLong" material="T300CF">
+<transform>
+    <transformation name="Place_PetalCloseoutLongSpace">   
+    <translation y="-(PetalCchannelW-PetalCchannelInnerW)/2+EPS"/>			 
+    </transformation>
+<logvol name="PetalCloseoutLongSpace" shape="shPetalCloseoutLongSpace" material="Air"/>
+  
+  </transform>
+</logvol>
+<logvol name="PetalCloseoutShort" shape="shPetalCloseoutShort" material="T300CF">
+<transform>
+<transformation name="Place_PetalCloseoutShortSpace">
+        <translation y="((PetalCchannelW-PetalCchannelInnerW)/2-EPS)"/>			 
+    </transformation>
+<logvol name="PetalCloseoutShortSpace" shape="shPetalCloseoutShortSpace" material="Air"/>
+  </transform>
+</logvol>
+
+
+<logvol name="PetalCooling1Unit" shape="shPetalCFoam1" material="k9Allcomp">
+  <transform>
+    <transformation name="PlaceTubeInPetalCFoam1">
+      <rotation ycos="1" angle="PI / 2."/>
+    </transformation>
+      <logvol name="PetalCoolingTube" shape="shPetalCooling1Tube" material="TiMetal">
+        <logvol name="PetalCoolingCO2" shape="shPetalCooling1CO2" material="CO2Liquid"/>
+      </logvol>
+  </transform>
+</logvol>
+
+<logvol name="PetalCooling2Unit" shape="shPetalCFoam2" material="k9Allcomp">
+  <transform>
+    <transformation name="PlaceTubeInPetalCFoam2">
+      <rotation ycos="1" angle="PI / 2."/>
+    </transformation>
+      <logvol name="PetalCooling2Tube" shape="shPetalCooling2Tube" material="TiMetal">
+        <logvol name="PetalCooling2CO2" shape="shPetalCooling2CO2" material="CO2Liquid"/>
+      </logvol>
+  </transform>
+</logvol>
+
+<logvol name="PetalCooling3Unit" shape="shPetalCFoam3" material="k9Allcomp">
+  <transform>
+    <transformation name="PlaceTubeInPetalCFoam3">
+      <rotation ycos="1" angle="PI / 2."/>
+    </transformation>
+      <logvol name="PetalCooling3Tube" shape="shPetalCooling3Tube" material="TiMetal">
+        <logvol name="PetalCooling3CO2" shape="shPetalCooling3CO2" material="CO2Liquid"/>
+      </logvol>
+  </transform>
+</logvol>
+
+<logvol name="PetalCore" shape="shPetalCore" material="Honeycomb3pcf">
+
+  <transform>
+    <transformation name="Place_PetalCloseoutFar">
+      <translation x="0.00"/>
+    </transformation>
+    <logvolref ref="PetalCloseoutFar"/>
+  </transform>
+
+  <transform>
+    <transformation name="Place_PetalCloseoutNear">
+      <translation x="0.00"/>
+    </transformation>
+    <logvolref ref="PetalCloseoutNear"/>
+  </transform>
+
+<transform>
+    <transformation name="Place_PetalCloseoutShort">
+    <rotation zcos="1" angle="+0.962*PetalCoreAngle/2"/>	
+    <translation x="PetalCoreInnerRadius +PetalCchannelShortL/2+PetalCloseoutW "/>
+      
+    </transformation>
+    <logvolref ref="PetalCloseoutShort"/>
+  </transform>
+
+  <transform>
+    <transformation name="Place_PetalCloseoutLong">
+    <rotation zcos="1" angle="-0.962*PetalCoreAngle/2"/>
+    <translation x="PetalCoreInnerRadius + (PetalCchannelLongL)/2+PetalCloseoutW "/>	
+
+    </transformation>
+    <logvolref ref="PetalCloseoutLong"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceLowZ_PetalFacesheet">
+      <translation z="-((PetalHoneycombT + PetalFaceSheetT)/2)"/>
+    </transformation>
+    <logvolref ref="PetalFaceSheetAll"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceHighZ_PetalFacesheet">
+      <translation z="(PetalHoneycombT + PetalFaceSheetT)/2"/>
+    </transformation>
+    <logvolref ref="PetalFaceSheetAll"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceLowZ_PetalBusGlue">
+      <translation z="-((PetalHoneycombT + PetalBusGlueT)/2 + PetalFaceSheetT)"/>
+    </transformation>
+    <logvolref ref="PetalBusGlue"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceHighZ_PetalBusGlue">
+      <translation z="(PetalHoneycombT + PetalBusGlueT)/2 + PetalFaceSheetT"/>
+    </transformation>
+    <logvolref ref="PetalBusGlue"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceLowZ_PetalBusKapton">
+      <translation z="-((PetalHoneycombT + PetalBusKaptonT)/2 + PetalFaceSheetT + PetalBusGlueT)"/>
+    </transformation>
+    <logvolref ref="PetalBusKapton"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceHighZ_PetalBusKapton">
+      <translation z="(PetalHoneycombT + PetalBusKaptonT)/2 + PetalFaceSheetT + PetalBusGlueT"/>
+    </transformation>
+    <logvolref ref="PetalBusKapton"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlacePetal_Cooling1">
+      <rotation zcos="1" angle="-4*PI/180"/>	
+      <translation x="(PetalCoreInnerRadius + PetalCooling1L/2+PetalCloseoutW) "/>
+          </transformation>
+    <logvolref ref="PetalCooling1Unit"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlacePetal_Cooling2">
+      <rotation zcos="1" angle="+4*PI/180"/>
+      <translation x="(PetalCoreInnerRadius + PetalCooling2L/2+PetalCloseoutW) "/>
+    </transformation>
+    <logvolref ref="PetalCooling2Unit"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlacePetal_Cooling3">
+      <translation x="(PetalCoreOuterRadius-40) "/>
+      <translation y="(30) "/>			
+      <rotation zcos="1" angle="+PI/2"/>
+    </transformation>
+    <logvolref ref="PetalCooling3Unit"/>
+  </transform>
+
+</logvol>
+
+<assembly name="PetalPlank"> <!-- A core plus the Cu in the cable bus plus mounts -->
+  <logvolref ref="PetalCore"/>
+</assembly>
+
+<shapes>
+  <tube name="shEC_InnerCyl" rmin="EC_InnerCylInnerR" rmax="EC_InnerCylOuterR - EPS" zhalflength="EC_InnerCylLength / 2."/>
+
+  <tube name="shWheelInnerT_Base" rmin="EC_InnerCylOuterR" rmax="WheelInnerT_BaseOuterR" zhalflength="WheelInnerT_BaseWidth / 2."/>
+  <tube name="shWheelInnerT_Upright" rmin="WheelInnerT_BaseOuterR" rmax="WheelInnerT_UprightOuterR" zhalflength="WheelInnerT_UprightThickness / 2."/>
+  <union name="shWheelInnerT">
+    <shaperef ref="shWheelInnerT_Base"/>
+    <transformationref ref="IdentityTransform"/>
+    <shaperef ref="shWheelInnerT_Upright"/>
+  </union>
+
+  <tube name="shWheelOuterT_Base" rmin="WheelOuterT_BaseInnerR" rmax="WheelOuterT_OuterR" zhalflength="WheelOuterT_BaseWidth / 2.0"/>
+  <tube name="shWheelOuterT_Upright" rmin="WheelOuterT_UprightInnerR" rmax="WheelOuterT_BaseInnerR" zhalflength="WheelOuterT_UprightThickness / 2.0"/>
+  <union name="shWheelOuterT">
+    <shaperef ref="shWheelOuterT_Base"/>
+    <transformationref ref="IdentityTransform"/>
+    <shaperef ref="shWheelOuterT_Upright"/>
+  </union>
+
+  <tube name="shStiffDiscCF" rmin="StiffDiscRI" rmax="StiffDiscRO" zhalflength="StiffDiscCF_T / 2."/>
+  <tube name="shStiffDiscFoam" rmin="StiffDiscRI" rmax="StiffDiscRO" zhalflength="StiffDiscFoamT / 2. - 2. * EPS"/>
+
+  <tube name="shZtubeD0D1" rmin="ZtubeRI" rmax="ZtubeRO" zhalflength="(WheelZ_1 - WheelZ_0 - WheelOuterT_UprightThickness) / 2. - EPS"/>
+  <tube name="shZtubeD1D2" rmin="ZtubeRI" rmax="ZtubeRO" zhalflength="(WheelZ_2 - WheelZ_1 - WheelOuterT_UprightThickness) / 2. - EPS"/>
+  <tube name="shZtubeD2D3" rmin="ZtubeRI" rmax="ZtubeRO" zhalflength="(WheelZ_3 - WheelZ_2 - WheelOuterT_UprightThickness) / 2. - EPS"/>
+  <tube name="shZtubeD3D4" rmin="ZtubeRI" rmax="ZtubeRO" zhalflength="(WheelZ_4 - WheelZ_3 - WheelOuterT_UprightThickness) / 2. - EPS"/>
+  <tube name="shZtubeD4D5" rmin="ZtubeRI" rmax="ZtubeRO" zhalflength="(WheelZ_5 - WheelZ_4 - WheelOuterT_UprightThickness) / 2. - EPS"/>
+
+
+
+
+
+  <trd name="BladeFaceSheet" xhalflength1="BladeFaceSheetThickness / 2." xhalflength2="BladeFaceSheetThickness / 2." yhalflength1="BladeOuterEndWidth / 2. + BladeLength * tan( BladeAngle / 2. )" yhalflength2="BladeOuterEndWidth / 2." zhalflength="BladeLength / 2."/>
+
+  <trd name="BladeCoreTrap" xhalflength1="BladeRodOuterEdge / 2. - 0.05" xhalflength2="BladeRodOuterEdge / 2. - 0.05" yhalflength1="BladeOuterEndWidth / 2. + BladeLength * tan( BladeAngle / 2. ) - 0.05" yhalflength2="BladeOuterEndWidth / 2. - 0.05" zhalflength="BladeLength / 2."/>
+
+  <trap name="BladeRodCore" zhalflength="(BladeLength / 2. ) + 1" theta="-BladeAngle / 2." phi="PI / 2." dydzn="BladeRodInnerEdge / 2." dxdyndzn="BladeRodInnerEdge / 2." dxdypdzn="BladeRodInnerEdge / 2." angleydzn="0." dydzp="BladeRodInnerEdge / 2." dxdyndzp="BladeRodInnerEdge / 2." dxdypdzp="BladeRodInnerEdge / 2." angleydzp="0."/>
+
+  <trap name="BladeRodShell" zhalflength="(BladeLength / 2. )" theta="-BladeAngle / 2." phi="PI / 2." dydzn="BladeRodOuterEdge / 2." dxdyndzn="BladeRodOuterEdge / 2." dxdypdzn="BladeRodOuterEdge / 2." angleydzn="0." dydzp="BladeRodOuterEdge / 2." dxdyndzp="BladeRodOuterEdge / 2." dxdypdzp="BladeRodOuterEdge / 2." angleydzp="0."/>
+
+  <tube name="BladeCircle0" rmin="0." rmax="BladeHoleDiameter_0 / 2." zhalflength="BladeHoleThickness"/>
+
+  <tube name="BladeCircle1" rmin="0." rmax="BladeHoleDiameter_1 / 2." zhalflength="BladeHoleThickness"/>
+
+  <tube name="BladeCircle2" rmin="0." rmax="BladeHoleDiameter_2 / 2." zhalflength="BladeHoleThickness"/>
+
+  <tube name="BladeCircle3" rmin="0." rmax="BladeHoleDiameter_3 / 2." zhalflength="BladeHoleThickness"/>
+
+  <tube name="BladeCircle4" rmin="0." rmax="BladeHoleDiameter_4 / 2." zhalflength="BladeHoleThickness"/>
+
+  <tube name="BladeCircle5" rmin="0." rmax="BladeHoleDiameter_5 / 2." zhalflength="BladeHoleThickness"/>
+
+  <tube name="BladeCircle6" rmin="0." rmax="BladeHoleDiameter_6 / 2." zhalflength="BladeHoleThickness"/>
+
+  <tubs name="BladeCircle7" rmin="0." rmax="BladeBarrelR" sphi="PI / 2." dphi="PI" zhalflength="BladeHoleThickness"/>
+
+  <tube name="BladeBarrelCore" rmin="0." rmax="BladeBarrelR" zhalflength="BladeHoleThickness"/>
+
+  <box name="BladeBaseHole" xhalflength="BladeBaseHeight" yhalflength="BladeBaseWidth / 2." zhalflength="BladeHoleThickness"/>
+
+  <tube name="shECPSTube" rmin="BarrelRadius_0 + EPS" rmax="BarrelRadius_0 + StaveSupportCylThickness - EPS" zhalflength="ECPSTLength / 2."/>
+
+
+
+  <union name="BarrelBase">
+    <shaperef ref="BladeBarrelCore"/>
+    <transformation name="AddBase">
+      <translation y="BladeBarrelR"/>
+      <rotation zcos="1." angle="PI / 2."/>
+    </transformation>
+    <shaperef ref="BladeBaseHole"/>
+  </union>
+
+  <union name="BarrelBase1Hole">
+    <shaperef ref="BarrelBase"/>
+    <transformation name="AddCircle1">
+      <translation y="BladeHoleOffset"/>
+    </transformation>
+    <shaperef ref="BladeCircle6"/>
+  </union>
+
+  <union name="BarrelBase2Hole">
+    <shaperef ref="BarrelBase1Hole"/>
+    <transformation name="AddCircle2">
+      <translation y="BladeHoleOffset + BladeHoleDiameter_6 / 2. + BladeHoleGap  + BladeHoleDiameter_5 / 2."/>
+    </transformation>
+    <shaperef ref="BladeCircle5"/>
+  </union>
+
+  <union name="BarrelBase3Hole">
+    <shaperef ref="BarrelBase2Hole"/>
+    <transformation name="AddCircle3">
+      <translation y="BladeHoleOffset + BladeHoleDiameter_6 / 2. + (2 * BladeHoleGap)  + BladeHoleDiameter_5 + BladeHoleDiameter_4 / 2."/>
+    </transformation>
+    <shaperef ref="BladeCircle4"/>
+  </union>
+
+  <union name="BarrelBase4Hole">
+    <shaperef ref="BarrelBase3Hole"/>
+    <transformation name="AddCircle4">
+      <translation y="BladeHoleOffset + BladeHoleDiameter_6 / 2. + (3 * BladeHoleGap)  + BladeHoleDiameter_5 + BladeHoleDiameter_4 + BladeHoleDiameter_3 / 2."/>
+    </transformation>
+    <shaperef ref="BladeCircle3"/>
+  </union>
+
+  <union name="BarrelBase5Hole">
+    <shaperef ref="BarrelBase4Hole"/>
+    <transformation name="AddCircle5">
+      <translation y="BladeHoleOffset + BladeHoleDiameter_6 / 2. + (4 * BladeHoleGap)  + BladeHoleDiameter_5 + BladeHoleDiameter_4 + BladeHoleDiameter_3 + BladeHoleDiameter_2 / 2."/>
+    </transformation>
+    <shaperef ref="BladeCircle2"/>
+  </union>
+
+  <union name="BarrelBase6Hole">
+    <shaperef ref="BarrelBase5Hole"/>
+    <transformation name="AddCircle6">
+      <translation y="BladeHoleOffset + BladeHoleDiameter_6 / 2. + (5 * BladeHoleGap)  + BladeHoleDiameter_5 + BladeHoleDiameter_4 + BladeHoleDiameter_3 + BladeHoleDiameter_2 + BladeHoleDiameter_1 /2."/>
+    </transformation>
+    <shaperef ref="BladeCircle1"/>
+  </union>
+
+  <union name="BarrelBase7Hole">
+    <shaperef ref="BarrelBase6Hole"/>
+    <transformation name="AddCircle7">
+      <translation y="BladeLength - 3"/>
+    </transformation>
+    <shaperef ref="BladeCircle0"/>
+  </union>
+
+  <subtraction name="BladeFaceSheetComplete">
+    <shaperef ref="BladeFaceSheet"/>
+    <transformation name="BladeFSRemoveShapes">
+      <translation z="-(BladeLength / 2.)"/>
+      <rotation ycos="1." angle="-(PI / 2.)"/>
+      <rotation zcos="1." angle="-(PI / 2.)"/>
+    </transformation>
+    <shaperef ref="BarrelBase7Hole"/>
+  </subtraction>
+
+  <subtraction name="BladeCore7HoleNoBarrel">
+    <shaperef ref="BladeCoreTrap"/>
+    <transformation name="BladeCoreRemoveShapes">
+      <translation z="-(BladeLength / 2.)"/>
+      <rotation ycos="1." angle="-(PI / 2.)"/>
+      <rotation zcos="1." angle="-(PI / 2.)"/>
+    </transformation>
+    <shaperef ref="BarrelBase7Hole"/>
+  </subtraction>
+
+
+  <subtraction name="BladeCoreminusL">
+    <shaperef ref="BladeCore7HoleNoBarrel"/>
+    <transformation name="BladeCRemoveLRod">
+      <translation y="(BladeLength * tan( BladeAngle / 2. ) + BladeOuterEndWidth - BladeRodOuterEdge) / 2."/>
+    </transformation>
+    <shaperef ref="BladeRodShell"/>
+  </subtraction>
+
+  <subtraction name="BladeCoreComplete">
+    <shaperef ref="BladeCoreminusL"/>
+    <transformation name="BladeCRemoveRRod">
+      <translation y="-(BladeLength * tan( BladeAngle / 2. ) + BladeOuterEndWidth - BladeRodOuterEdge) / 2."/>
+      <rotation zcos="1." angle="PI"/>
+    </transformation>
+    <shaperef ref="BladeRodShell"/>
+  </subtraction>
+
+  <!-- Blade Siderods -->
+  <subtraction name="BladeSideRodRemoveCore">
+    <shaperef ref="BladeRodShell"/>
+    <transformation name="BladeSideRodHollow">
+      <rotation ycos="1." angle="0."/>
+    </transformation>
+    <shaperef ref="BladeRodCore"/>
+  </subtraction>
+  
+  <subtraction name="BladeSideRodComplete">
+    <shaperef ref="BladeSideRodRemoveCore"/>
+    <transformation name="BladeSideRodRemoveBarrel">
+      <translation y="-(BladeLength * tan( BladeAngle / 2. ) + BladeOuterEndWidth - BladeRodOuterEdge) / 2."/>
+      <translation z="-(BladeLength / 2.)"/>
+      <rotation ycos="1." angle="PI / 2."/>
+    </transformation>
+    <shaperef ref="BladeBarrelCore"/>
+  </subtraction>
+
+  <box name="shLockBaseH" xhalflength="LockBaseHWidth / 2." yhalflength="LockBaseHHeight / 2." zhalflength="LockBaseHThickness / 2."/>
+
+  <box name="shLockBaseL" xhalflength="LockBaseLWidth / 2." yhalflength="LockBaseLHeight / 2." zhalflength="LockBaseLThickness / 2."/>
+
+  <tube name="shRailWheel" rmin="0." rmax="RailWheelRadius / 2." zhalflength="RailWheelLength / 2."/>
+
+  <tube name="shRailBolt" rmin="0." rmax="RailBoltRadius / 2." zhalflength="RailBoltHeight / 2."/>
+
+  <tube name="shRailBoltCore" rmin="0." rmax="RailBoltRadius / 2." zhalflength="RailShelfHeight / 2."/>
+
+  <box name="shRailShelf" xhalflength="RailShelfWidth / 2." yhalflength="RailShelfHeight / 2." zhalflength="RailShelfLength / 2."/>
+
+  <box name="shRailWall" xhalflength="RailWallWidth / 2." yhalflength="RailWallHeight / 2." zhalflength="RailWallLength / 2."/>
+
+  <box name="shRailSquare1" xhalflength="RailSquareEdge / 2." yhalflength="RailSquareEdge / 2." zhalflength="RailLengthS_0 / 2."/>
+
+  <trap name="shRailSquareT" zhalflength="RailLengthS_1 / 2." theta="RailSquareTAngle_1" phi="0." dydzn="RailSquareEdge / 2." dxdyndzn="(RailSquareEdge + 2) / 2." dxdypdzn="(RailSquareEdge + 2) / 2." angleydzn="0." dydzp="RailSquareEdge / 2." dxdyndzp="RailSquareEdge / 2." dxdypdzp="RailSquareEdge / 2." angleydzp="0."/>
+
+  <box name="shRailSquare2" xhalflength="RailSquareEdge / 2." yhalflength="(RailSquareEdge + 2) / 2." zhalflength="RailLengthS_2 / 2."/>
+
+  <tube name="shRailCircle" rmin="0." rmax="RailCircleRadius / 2." zhalflength="RailLength / 2."/>
+
+  <trap name="shRailWedge" zhalflength="RailWedgeLength / 2." theta="RailWedgeAngle / 2." phi="0." dydzn="RailWedgeWidth / 2." dxdyndzn="RailWedgeHeight_0 / 2." dxdypdzn="RailWedgeHeight_0 / 2." angleydzn="0." dydzp="RailWedgeWidth / 2." dxdyndzp="RailWedgeHeight_1 / 2." dxdypdzp="RailWedgeHeight_1 / 2." angleydzp="0."/>
+
+  <subtraction name="shRailBoltNoCore">
+    <shaperef ref="shRailBolt"/>
+    <transformation name="BoltSub">
+      <translation z="0."/>
+    </transformation>
+    <shaperef ref="shRailBoltCore"/>
+  </subtraction>
+
+</shapes>
+
+<logvol name="EC_InnerCyl" shape="shEC_InnerCyl" material="CFRP"/>
+<logvol name="WheelInnerT" shape="shWheelInnerT" material="CFRP"/>
+<logvol name="WheelOuterT" shape="shWheelOuterT" material="CFRP"/>
+
+<logvol name="StiffDiscCF" shape="shStiffDiscCF" material="CFRP"/>
+<logvol name="StiffDiscFoam" shape="shStiffDiscFoam" material="Rohacell110A"/>
+
+<logvol name="ZtubeD0D1" shape="shZtubeD0D1" material="CFRP"/>
+<logvol name="ZtubeD1D2" shape="shZtubeD1D2" material="CFRP"/>
+<logvol name="ZtubeD2D3" shape="shZtubeD2D3" material="CFRP"/>
+<logvol name="ZtubeD3D4" shape="shZtubeD3D4" material="CFRP"/>
+<logvol name="ZtubeD4D5" shape="shZtubeD4D5" material="CFRP"/>
+
+<logvol name="BladeFace" shape="BladeFaceSheetComplete" material="CFRP"/> <!-- Placeholder material -->
+<logvol name="BladeCore" shape="BladeCoreComplete" material="Honeycomb10pcf"/>
+<logvol name="BladeSideRod" shape="BladeSideRodComplete" material="CFRP"/>
+
+<logvol name="LockBaseH" shape="shLockBaseH" material="Torlon"/>
+<logvol name="LockBaseL" shape="shLockBaseL" material="Torlon"/>
+
+<logvol name="RailWall" shape="shRailWall" material="CFRP"/>
+<logvol name="RailShelf" shape="shRailShelf" material="CFRP"/>
+<logvol name="RailBolt" shape="shRailBoltNoCore" material="SS304"/>
+<logvol name="RailWheel" shape="shRailWheel" material="SS304"/>
+<logvol name="RailCircle" shape="shRailCircle" material="SS304"/>
+<logvol name="RailSquare1" shape="shRailSquare1" material="SS304"/>
+<logvol name="RailSquareT" shape="shRailSquareT" material="SS304"/>
+<logvol name="RailSquare" shape="shRailSquare2" material="SS304"/>
+<logvol name="RailWedge" shape="shRailWedge" material="SS304"/> <!-- Change to Bronze equivalent -->
+
+<logvol name="ECPSTube" shape="shECPSTube" material="CFRP"/>
+ 
+<assembly name="RailSquareComplete">
+  <transform>
+    <transformation name="AlignRailSquare">
+      <translation y="1."/>
+    </transformation>
+  <logvolref ref="RailSquare"/>
+  </transform>
+
+  <transform>
+    <transformation name="AttachRailT">
+      <translation z="RailLengthS_2 / 2. + RailLengthS_1 / 2. + EPS"/>
+      <translation y="tan(RailSquareTAngle_1) * RailLengthS_1 / 2. + EPS"/>
+      <rotation zcos="1." angle="-(PI / 2.)"/>
+    </transformation>
+    <logvolref ref="RailSquareT"/>
+  </transform>
+
+  <transform>
+    <transformation name="AttachRail1">
+      <translation z="RailLengthS_2 / 2. + RailLengthS_1 + RailLengthS_0 / 2. + EPS"/>
+    </transformation>
+    <logvolref ref="RailSquare1"/>
+  </transform>
+
+  <transform>
+    <transformation name="AttachWedge">
+      <translation z="RailLengthS_2 / 2. + RailLengthS_1 + RailLengthS_0 - RailWedgeOffset - RailWedgeLength / 2."/>
+      <translation y="RailSquareEdge / 2. + (RailWedgeHeight_0 + RailWedgeHeight_1) / 4. + 3*EPS"/>
+      <rotation zcos="1." angle="(PI / 2.)"/>
+    </transformation>
+  <logvolref ref="RailWedge"/>
+  </transform>
+</assembly>
+
+<assembly name="RailBoltReady">
+  <transform>
+    <transformation name="PrepareRailBolt">
+      <rotation xcos="1." angle="PI / 2."/>
+    </transformation>
+  <logvolref ref="RailBolt"/>
+  </transform>
+</assembly>
+
+<assembly name="RailWheelReady">
+  <transform>
+    <transformation name="PrepareRailWheel">
+      <rotation ycos="1." angle="PI / 2."/>
+    </transformation>
+  <logvolref ref="RailWheel"/>
+  </transform>
+</assembly>
+
+
+<assembly name="RailShelfWithBoltsSquare">
+  <multicopy name="AddBoltsToRail" n="RailBoltNumber">
+    <transformation name="PlaceRailBolts">
+      <translation z="RailBoltGap"/>
+    </transformation>
+    <assemblyref ref="RailBoltReady"/>
+  </multicopy>
+
+  <transform>
+    <transformation name="PlaceRailShelf">
+      <translation z="RailShelfLength / 2. - RailBoltOffset"/>
+    </transformation>
+  <logvolref ref="RailShelf"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceRailSquare">
+      <translation x="-(RailShelfWidth / 2. - RailSquareEdge)"/>
+      <translation y="(RailShelfHeight + RailSquareEdge) / 2."/>
+      <translation z="RailLengthS_2 / 2. - RailBoltOffset"/>
+    </transformation>
+  <assemblyref ref="RailSquareComplete"/>
+  </transform>
+</assembly>
+
+
+<assembly name="RailShelfSquareComplete">
+  <logvolref ref="RailWall"/>
+  
+  <transform>
+    <transformation name="PlaceRailShelfWithBoltsSquare">
+      <translation x="RailWallWidth / 2. + RailShelfWidth / 2."/>
+      <translation y="-(RailWallHeight /2.) + RailShelfHeight"/>
+      <translation z="-(RailShelfLength / 2. - RailBoltOffset) + (RailShelfLength - RailWallLength) / 2."/>
+    </transformation>
+  <assemblyref ref="RailShelfWithBoltsSquare"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceWheelClose">
+      <translation x="(RailWallWidth + RailWheelLength) / 2."/>
+      <translation y="RailWheelRadius / 2."/>
+      <translation z="-(RailShelfLength / 2. - RailWheelOffsetClose)"/>
+    </transformation>
+  <assemblyref ref="RailWheelReady"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceWheelFar">
+      <translation x="(RailWallWidth + RailWheelLength) / 2."/>
+      <translation y="RailWheelRadius / 2."/>
+      <translation z="RailShelfLength / 2. - RailWheelOffsetFar"/>
+    </transformation>
+  <assemblyref ref="RailWheelReady"/>
+  </transform>
+
+</assembly>
+
+<assembly name="RailShelfWithBoltsCircle">
+  <multicopy name="AddBoltsToRail2" n="RailBoltNumber">
+    <transformation name="PlaceRailBolts2">
+      <translation z="RailBoltGap"/>
+    </transformation>
+    <assemblyref ref="RailBoltReady"/>
+  </multicopy>
+
+  <transform>
+    <transformation name="PlaceRailShelf2">
+      <translation z="RailShelfLength / 2. - RailBoltOffset"/>
+    </transformation>
+  <logvolref ref="RailShelf"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceRailCircle">
+      <translation x="RailShelfWidth / 2. - RailCircleRadius"/>
+      <translation y="(RailShelfHeight + RailCircleRadius) / 2."/>
+      <translation z="RailLengthS_2 / 2. - RailBoltOffset"/>
+    </transformation>
+  <logvolref ref="RailCircle"/>
+  </transform>
+</assembly>
+
+
+<assembly name="RailShelfCircleComplete">
+  <logvolref ref="RailWall"/>
+  
+  <transform>
+    <transformation name="PlaceRailShelfWithBoltsCircle">
+      <translation x="-(RailWallWidth / 2. + RailShelfWidth / 2.)"/>
+      <translation y="-(RailWallHeight /2.) + RailShelfHeight"/>
+      <translation z="-(RailShelfLength / 2. - RailBoltOffset) + (RailShelfLength - RailWallLength) / 2."/>
+    </transformation>
+  <assemblyref ref="RailShelfWithBoltsSquare"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceWheelClose2">
+      <translation x="-(RailWallWidth + RailWheelLength) / 2."/>
+      <translation y="RailWheelRadius / 2."/>
+      <translation z="-(RailShelfLength / 2. - RailWheelOffsetClose)"/>
+    </transformation>
+  <assemblyref ref="RailWheelReady"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceWheelFar2">
+      <translation x="-(RailWallWidth + RailWheelLength) / 2."/>
+      <translation y="RailWheelRadius / 2."/>
+      <translation z="RailShelfLength / 2. - RailWheelOffsetFar"/>
+    </transformation>
+  <assemblyref ref="RailWheelReady"/>
+  </transform>
+
+</assembly>
+
+
+
+<assembly name="Ztubes">
+  <!-- We place each tube midway between discs, remembering how much the whole endcap will be shifted when placed -->
+  <transform>
+    <transformation name="PlaceZtubeD0D1">
+      <translation z="-(StripEC_Z_Start + 0.5 + EC_InnerCylLength / 2.) + (WheelZ_0 + WheelZ_1) / 2.0 + WheelSupportOffset"/>
+    </transformation>
+    <logvolref ref="ZtubeD0D1"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceZtubeD1D2">
+      <translation z="-(StripEC_Z_Start + 0.5 + EC_InnerCylLength / 2.) + (WheelZ_1 + WheelZ_2) / 2.0 + WheelSupportOffset"/>
+    </transformation>
+    <logvolref ref="ZtubeD1D2"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceZtubeD2D3">
+      <translation z="-(StripEC_Z_Start + 0.5 + EC_InnerCylLength / 2.) + (WheelZ_2 + WheelZ_3) / 2.0 + WheelSupportOffset"/>
+    </transformation>
+    <logvolref ref="ZtubeD2D3"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceZtubeD3D4">
+      <translation z="-(StripEC_Z_Start + 0.5 + EC_InnerCylLength / 2.) + (WheelZ_3 + WheelZ_4) / 2.0 + WheelSupportOffset"/>
+    </transformation>
+    <logvolref ref="ZtubeD3D4"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceZtubeD4D5">
+      <translation z="-(StripEC_Z_Start + 0.5 + EC_InnerCylLength / 2.) + (WheelZ_4 + WheelZ_5) / 2.0 + WheelSupportOffset"/>
+    </transformation>
+    <logvolref ref="ZtubeD4D5"/>
+  </transform>
+</assembly>
+
+<assembly name="StiffDisc">
+
+  <logvolref ref="StiffDiscFoam"/>
+
+  <transform>
+    <transformation name="PlaceNearFaceSheetStiffDisc">
+      <translation z="-(StiffDiscFoamT + StiffDiscCF_T) / 2.0"/>
+    </transformation>
+    <logvolref ref="StiffDiscCF"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceFarFaceSheetStiffDisc">
+      <translation z="(StiffDiscFoamT + StiffDiscCF_T) / 2.0"/>
+    </transformation>
+    <logvolref ref="StiffDiscCF"/>
+  </transform>
+
+</assembly>
+
+<assembly name="BladeSupport">
+  <logvolref ref="BladeCore"/>
+  <transform>
+    <transformation name="BladeFace1">
+      <translation x="BladeFaceSheetThickness / 2. + BladeRodOuterEdge / 2."/>
+    </transformation>  
+  <logvolref ref="BladeFace"/>
+  </transform>
+  <transform>
+    <transformation name="BladeFace2">
+      <translation x="-(BladeFaceSheetThickness / 2. + BladeRodOuterEdge / 2.)"/>
+    </transformation>  
+  <logvolref ref="BladeFace"/>
+  </transform>
+  <transform>
+    <transformation name="BladeRod1">
+      <translation y="(BladeLength * tan( BladeAngle / 2. ) + BladeOuterEndWidth - BladeRodOuterEdge) / 2."/>
+    </transformation>
+  <logvolref ref="BladeSideRod"/>
+  </transform>
+  <transform>
+    <transformation name="BladeRod2">
+      <translation y="-(BladeLength * tan( BladeAngle / 2. ) + BladeOuterEndWidth - BladeRodOuterEdge) / 2."/>
+      <rotation zcos="1." angle="PI"/>
+    </transformation>
+  <logvolref ref="BladeSideRod"/>
+  </transform>
+</assembly>
+
+<assembly name="BladeSingle">
+  <transform>
+    <transformation name="ShiftBlade">
+      <translation x="BladeLength / 2."/>
+      <rotation ycos="1." angle="PI / 2."/>
+    </transformation>
+  <assemblyref ref="BladeSupport"/>
+  </transform>
+</assembly>
+
+<assembly name="BladeSupportWheel">
+  <multicopy name="AddBlades" n="8">
+    <transformation name="WheelsGoRound">
+      <rotation zcos="1." angle="PI / 4."/>
+    </transformation>
+    <assemblyref ref="BladeSingle"/>
+  </multicopy>
+</assembly>
+
+<assembly name="LockPointTH">
+  <transform>
+    <transformation name="MoveLockPointTH">
+      <translation y="WheelOuterT_OuterR - LockBaseHHeight / 2. - LockBaseOffset"/>
+    </transformation>
+  <logvolref ref="LockBaseH"/>
+  </transform>
+</assembly>
+
+<assembly name="LockPointTL">
+  <transform>
+    <transformation name="MoveLockPointTL">
+      <translation y="WheelOuterT_OuterR - LockBaseLHeight / 2. - LockBaseOffset"/>
+    </transformation>
+  <logvolref ref="LockBaseL"/>
+  </transform>
+</assembly>
+
+<assembly name="LockPointBH">
+  <transform>
+    <transformation name="MoveLockPointBH">
+      <translation y="WheelInnerT_BaseOuterR + LockBaseHHeight / 2."/>
+    </transformation>
+  <logvolref ref="LockBaseH"/>
+  </transform>
+</assembly>
+
+<assembly name="LockPointBL">
+  <transform>
+    <transformation name="MoveLockPointBL">
+      <translation y="WheelInnerT_BaseOuterR + LockBaseLHeight / 2."/>
+    </transformation>
+  <logvolref ref="LockBaseL"/>
+  </transform>
+</assembly>
+
+<assembly name="LockPointTModule1">
+  <transform>
+    <transformation name="LockPointTH1">
+      <rotation zcos="1." angle="LockBaseTAngleOffset"/>
+    </transformation>
+  <assemblyref ref="LockPointTH"/>
+  </transform>
+  <transform>
+    <transformation name="LockPointTL1">
+      <rotation zcos="1." angle="-LockBaseTAngleOffset"/>
+    </transformation>
+  <assemblyref ref="LockPointTL"/>
+  </transform>
+</assembly>
+
+<assembly name="LockPointTModule2">
+  <transform>
+    <transformation name="LockPointTH2">
+      <rotation zcos="1." angle="-LockBaseTAngleOffset + LockBaseTAngle"/>
+    </transformation>
+  <assemblyref ref="LockPointTH"/>
+  </transform>
+  <transform>
+    <transformation name="LockPointTL2">
+      <rotation zcos="1." angle="LockBaseTAngleOffset + LockBaseTAngle"/>
+    </transformation>
+  <assemblyref ref="LockPointTL"/>
+  </transform>
+</assembly>
+
+<assembly name="LockPointBModule">
+  <transform>
+    <transformation name="LockPointModuleBH">
+      <rotation zcos="1." angle="LockBaseBAngleOffset"/>
+    </transformation>
+  <assemblyref ref="LockPointBH"/>
+  </transform>
+  <transform>
+    <transformation name="LockPointModuleBL">
+      <rotation zcos="1." angle="-(LockBaseBAngleOffset)"/>
+    </transformation>
+  <assemblyref ref="LockPointBL"/>
+  </transform>
+</assembly>
+
+
+
+<assembly name="LockPointWheel">
+  <multicopy name="LockBaseTWheel1" n="LockBaseTAssemblyN">
+    <transformation name="PlaceLockBaseTMod1">
+      <rotation zcos="1." angle="2 * PI / LockBaseTAssemblyN"/>
+    </transformation>
+    <assemblyref ref="LockPointTModule1"/>
+  </multicopy>
+
+  <multicopy name="LockBaseTWheel2" n="LockBaseTAssemblyN">
+    <transformation name="PlaceLockBaseTMod2">
+      <rotation zcos="1." angle="2 * PI / LockBaseTAssemblyN"/>
+    </transformation>
+    <assemblyref ref="LockPointTModule2"/>
+  </multicopy>
+
+  <multicopy name="LockBaseBWheel" n="LockBaseTAssemblyN">
+    <transformation name="PlaceLockBaseBMod">
+      <rotation zcos="1." angle="2 * PI / LockBaseTAssemblyN"/>
+    </transformation>
+    <assemblyref ref="LockPointBModule"/>
+  </multicopy>
+</assembly>
+
+<assembly name="WheelSupport">
+  <logvolref ref="WheelInnerT"/>
+  <logvolref ref="WheelOuterT"/>
+ <transform>
+    <transformation name="AddLockPoints">
+      <translation z="WheelInnerT_BaseWidth / 4. + WheelInnerT_UprightThickness / 2."/>
+    </transformation>
+  <assemblyref ref="LockPointWheel"/>
+  </transform>
+</assembly>
+
+<assembly name="EndcapPSTHats">
+  <multicopy name="CopyECPSTHats" n="ECPSTHatNumber">
+    <transformation name="PlaceECHats">
+      <translation z="ECPSTHatGap"/>
+    </transformation>
+    <assemblyref ref="StaveCylHat0"/>
+  </multicopy>
+</assembly>
+
+
+<assembly name="EndcapPST">
+  <logvolref ref="ECPSTube"/>
+  
+  <transform>
+    <transformation name="AssemblePST">
+      <translation z="-( ECPSTLength / 2. ) + ECPSTOffset"/>
+    </transformation>
+  <assemblyref ref="EndcapPSTHats"/>
+  </transform>
+</assembly>
+
+
+<assembly name="EC_Support">
+  <logvolref ref="EC_InnerCyl"/>
+<!-- For now, add support wheels with wheel-of-petals
+  <multicopy name="AddSupportWheels" loopvar="WheelZ" n="N_Wheels" >
+     ????
+  </multicopy>
+--> 
+
+<!--
+  <transform>
+    <transformation name="PlaceRailShelfSquareComplete">
+      <translation x="RailRadius"/>
+    </transformation>
+  <assemblyref ref="RailShelfSquareComplete"/>
+  </transform>
+-->
+
+
+  <transform>
+    <transformation name="PlaceStiffDisc">
+      <translation z="StiffDiscTranslation"/>
+    </transformation>
+    <assemblyref ref="StiffDisc"/>
+  </transform>
+
+  <multicopy name="AddZtubes" n="nZtubes">
+    <transformation name="PlaceZtubes">
+      <rotation zcos="1." angle="2. * PI / nZtubes"/> 
+    </transformation>
+    <transform>
+      <transformation name="PlaceZtubesReadyForRotation">
+        <translation x="ZtubeRadialPosition"/>
+      </transformation>
+      <assemblyref ref="Ztubes"/>
+    </transform>
+  </multicopy>
+
+</assembly>
+
+
+<assembly name="ECModule0">
+  
+  <logvolref ref="ECSensor0"/>
+  <transform>
+    <transformation name="PlaceR0H0">
+      <translation z="(SensorThickness + E_HybridT) / 2."/>
+    </transformation>
+    <assemblyref ref="ECHybridR0H0"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceR0H1">
+      <translation z="(SensorThickness + E_HybridT) / 2."/>
+    </transformation>
+    <assemblyref ref="ECHybridR0H1"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceDCDC_R0_PCB">
+      <translation z="(SensorThickness + DCDC_PCB_T) / 2."/>
+    </transformation>
+    <logvolref ref="DCDC_EC_PCBR0"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceDCDC_R0_Box">
+      <rotation zcos="1.0" angle="-SensorPhiWidth_0/2+E_DCDC_PCB_dPhiR0"/>	
+      <translation x="DCDC_EC_BoxL+DCDC_dist_from_PCBend" y="E_DCDC_PCB_RadiusMinR0+0.5*DCDC_BoxW" z="(SensorThickness + 2*DCDC_PCB_T + DCDC_BoxT)/2+EPS"/>
+    </transformation>
+    <logvolref ref="DCDC_EC_Box"/>
+  </transform>
+</assembly>
+
+<assembly name="ECModule1">
+  <logvolref ref="ECSensor1"/>
+  <transform>
+    <transformation name="PlaceR1H0">
+      <translation z="(SensorThickness + E_HybridT) / 2."/>
+    </transformation>
+    <assemblyref ref="ECHybridR1H0"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceR1H1">
+      <translation z="(SensorThickness + E_HybridT) / 2."/>
+    </transformation>
+    <assemblyref ref="ECHybridR1H1"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceDCDC_R1_PCB">
+      <translation z="(SensorThickness + DCDC_PCB_T) / 2."/>
+    </transformation>
+    <logvolref ref="DCDC_EC_PCBR1"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceDCDC_R1_Box">
+      <rotation zcos="1.0" angle="-SensorPhiWidth_1/2+E_DCDC_PCB_dPhiR1"/> 
+<!-- need to subtract half the length of DCDC  DCDC_EC_BoxL/(2*E_DCDC_PCB_RadiusMinR1)"/>-->
+      <translation x="DCDC_EC_BoxL+DCDC_dist_from_PCBend" y="E_DCDC_PCB_RadiusMinR1+0.5*DCDC_BoxW" z="(SensorThickness + 2*DCDC_PCB_T+DCDC_BoxT)/2+EPS"/>
+    </transformation>
+    <logvolref ref="DCDC_EC_Box"/>
+  </transform>
+</assembly>
+
+<assembly name="ECModule2">
+  <logvolref ref="ECSensor2"/>
+  <transform>
+    <transformation name="PlaceR2H0">
+      <translation z="(SensorThickness + E_HybridT) / 2."/>
+    </transformation>
+    <assemblyref ref="ECHybridR2H0"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceDCDC_R2_PCB">
+      <translation z="(SensorThickness + DCDC_PCB_T) / 2."/>
+    </transformation>
+    <logvolref ref="DCDC_EC_PCBR2"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceDCDC_R2_Box">
+      <rotation zcos="1.0" angle="-SensorPhiWidth_2/2+E_DCDC_PCB_dPhiR2"/>	
+      <translation x="DCDC_EC_BoxL+DCDC_dist_from_PCBend" y="E_DCDC_PCB_RadiusMinR2+0.5*DCDC_BoxW" z="+(SensorThickness + 2*DCDC_PCB_T+DCDC_BoxT)/2+EPS"/>
+    </transformation>
+    <logvolref ref="DCDC_EC_Box"/>
+  </transform>
+</assembly>
+
+<assembly name="ECModule3Plus">
+  <logvolref ref="ECSensor3"/>
+  <transform>
+    <transformation name="PlaceR3H1">
+      <translation z="(SensorThickness + E_HybridT) / 2."/>
+    </transformation>
+    <assemblyref ref="ECHybridR3H1"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceR3H3">
+      <translation z="(SensorThickness + E_HybridT) / 2."/>
+    </transformation>
+    <assemblyref ref="ECHybridR3H3"/>
+  </transform>
+<transform>
+    <transformation name="PlaceHCCOnB_HybridR3H1">
+     <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*(N_ABC_R3-1.5))"/>		
+      <translation y="E_HCCRadiusR3H1+HCC_L/2" z="(SensorThickness+2*E_HybridT + HCC_T) / 2"/>     
+    </transformation>
+    <logvolref ref="HCC_Chip"/>
+  </transform>
+<transform>
+    <transformation name="PlaceHCCOnB_HybridR3H1a">
+     <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*(N_ABC_R3-2.5))"/>		
+      <translation y="E_HCCRadiusR3H1a+HCC_L/2" z="(SensorThickness+2*E_HybridT + HCC_T) / 2"/>     
+    </transformation>
+    <logvolref ref="HCC_Chip"/>
+  </transform>
+
+<transform>
+    <transformation name="PlaceHCCOnB_HybridR3H3">
+     <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*(N_ABC_R3-2.5))"/>		
+      <translation y="E_HCCRadiusR3H3+HCC_L/2" z="(SensorThickness+2*E_HybridT + HCC_T) / 2"/>     
+    </transformation>
+    <logvolref ref="HCC_Chip"/>
+  </transform>
+<transform>
+    <transformation name="PlaceHCCOnB_HybridR3H3a">
+     <rotation zcos="1.0" angle="SensorPhiWidth_3/(2*N_ABC_R3)*(1-N_ABC_R3+2*(N_ABC_R3-1.5))"/>		
+      <translation y="E_HCCRadiusR3H3a+HCC_L/2" z="(SensorThickness+2*E_HybridT + HCC_T) / 2"/>     
+    </transformation>
+    <logvolref ref="HCC_Chip"/>
+  </transform>
+</assembly>
+
+<assembly name="ECModule3Minus">
+  <logvolref ref="ECSensor3"/>
+  <transform>
+    <transformation name="PlaceR3H0Minus">
+      <translation z="(SensorThickness + E_HybridT) / 2."/>
+    </transformation>
+    <assemblyref ref="ECHybridR3H0"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceR3H2Minus">
+      <translation z="(SensorThickness + E_HybridT) / 2."/>
+    </transformation>
+    <assemblyref ref="ECHybridR3H2"/>
+  </transform>
+
+
+
+  <transform>
+    <transformation name="PlaceDCDC_R3_PCB">
+      <translation z="(SensorThickness + DCDC_PCB_T) / 2."/>
+    </transformation>
+    <logvolref ref="DCDC_EC_PCBR3"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceDCDC_R3_Box">
+      <rotation zcos="1.0" angle="-SensorPhiWidth_3/2+E_DCDC_PCB_dPhiR3"/>	
+      <translation x="DCDC_EC_BoxL+DCDC_dist_from_PCBend" y="E_DCDC_PCB_RadiusMinR3+0.5*DCDC_BoxW" z="(SensorThickness + 2*DCDC_PCB_T+DCDC_BoxT)/2+EPS"/>
+    </transformation>
+    <logvolref ref="DCDC_EC_Box"/>
+  </transform>
+</assembly>
+
+<assembly name="ECModule4Plus">
+  <logvolref ref="ECSensor4"/>
+  <transform>
+    <transformation name="PlaceR4H1">
+      <translation z="(SensorThickness + E_HybridT) / 2."/>
+    </transformation>
+    <assemblyref ref="ECHybridR4H1"/>
+  </transform>
+<transform>
+    <transformation name="PlaceHCCOnB_HybridR4H1">
+     <rotation zcos="1.0" angle="SensorPhiWidth_4/(2*N_ABC_R4)*(1-N_ABC_R4+2*(N_ABC_R4-1.5))"/>		
+      <translation y="E_HCCRadiusR4H1+HCC_L/2" z="(SensorThickness+2*E_HybridT + HCC_T) / 2"/>     
+    </transformation>
+    <logvolref ref="HCC_Chip"/>
+  </transform>
+<transform>
+    <transformation name="PlaceHCCOnB_HybridR4H1a">
+     <rotation zcos="1.0" angle="SensorPhiWidth_4/(2*N_ABC_R4)*(1-N_ABC_R4+2*(N_ABC_R4-2.5))"/>		
+      <translation y="E_HCCRadiusR4H1a+HCC_L/2" z="(SensorThickness+2*E_HybridT + HCC_T) / 2"/>     
+    </transformation>
+    <logvolref ref="HCC_Chip"/>
+  </transform>
+</assembly>
+
+<assembly name="ECModule4Minus">
+  <logvolref ref="ECSensor4"/>
+  <transform>
+    <transformation name="PlaceR4H0">
+      <translation z="(SensorThickness + E_HybridT) / 2."/>
+    </transformation>
+    <assemblyref ref="ECHybridR4H0"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceDCDC_R4_PCB">
+      <translation z="(SensorThickness + DCDC_PCB_T) / 2."/>
+    </transformation>
+    <logvolref ref="DCDC_EC_PCBR4"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceDCDC_R4_Box">
+      <rotation zcos="1.0" angle="-SensorPhiWidth_4/2+E_DCDC_PCB_dPhiR4"/>	
+      <translation x="DCDC_EC_BoxL+DCDC_dist_from_PCBend" y="E_DCDC_PCB_RadiusMinR4+0.5*DCDC_BoxW" z="(SensorThickness + 2*DCDC_PCB_T+DCDC_BoxT)/2+EPS"/>
+    </transformation>
+    <logvolref ref="DCDC_EC_Box"/>
+  </transform>
+</assembly>
+
+<assembly name="ECModule5Plus">
+  <logvolref ref="ECSensor5"/>
+  <transform>
+    <transformation name="PlaceR5H1">
+      <translation z="(SensorThickness + E_HybridT) / 2."/>
+    </transformation>
+    <assemblyref ref="ECHybridR5H1"/>
+  </transform>
+<transform>
+    <transformation name="PlaceHCCOnB_HybridR5H1">
+     <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*(N_ABC_R5-1.5))"/>		
+      <translation y="E_HCCRadiusR5H1+HCC_L/2" z="(SensorThickness+2*E_HybridT + HCC_T) / 2"/>     
+    </transformation>
+    <logvolref ref="HCC_Chip"/>
+  </transform>
+<transform>
+    <transformation name="PlaceHCCOnB_HybridR5H1a">
+     <rotation zcos="1.0" angle="SensorPhiWidth_5/(2*N_ABC_R5)*(1-N_ABC_R5+2*(N_ABC_R5-2.5))"/>		
+      <translation y="E_HCCRadiusR5H1a+HCC_L/2" z="(SensorThickness+2*E_HybridT + HCC_T) / 2"/>     
+    </transformation>
+    <logvolref ref="HCC_Chip"/>
+  </transform>
+</assembly>
+
+<assembly name="ECModule5Minus">
+  <logvolref ref="ECSensor5"/>
+  <transform>
+    <transformation name="PlaceR5H0">
+      <translation z="(SensorThickness + E_HybridT) / 2."/>
+    </transformation>
+    <assemblyref ref="ECHybridR5H0"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceDCDC_R5_PCB">
+      <translation z="(SensorThickness + DCDC_PCB_T) / 2."/>
+    </transformation>
+    <logvolref ref="DCDC_EC_PCBR5"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceDCDC_R5_Box">
+      <rotation zcos="1.0" angle="-SensorPhiWidth_5/2+E_DCDC_PCB_dPhiR5"/>	
+      <translation x="DCDC_EC_BoxL+DCDC_dist_from_PCBend" y="E_DCDC_PCB_RadiusMinR5+0.5*DCDC_BoxW" z="(SensorThickness + 2*DCDC_PCB_T+DCDC_BoxT)/2+EPS"/>
+    </transformation>
+    <logvolref ref="DCDC_EC_Box"/>
+  </transform>
+</assembly>
+
+<assembly name="PetalFace">
+  <index ref="phi_module" value="2*CNL_4 + CNL_5"/> <!-- 0 to 31. -->
+
+ <transform alignable="0">		 
+  <transformation name="ESensor0dummy" alignable="true">
+    <translation/>
+  </transformation>
+  <assemblyref ref="ECModule0" zeroid="true"/>
+</transform>
+<transform alignable="0">
+  <transformation name="ESensor1dummy" alignable="true">
+    <translation/>
+  </transformation>
+  <assemblyref ref="ECModule1" zeroid="true"/>
+</transform>
+<transform alignable="0">
+  <transformation name="ESensor2dummy" alignable="true">
+    <translation/>
+  </transformation>
+  <assemblyref ref="ECModule2" zeroid="true"/>
+</transform>
+
+
+  <!-- For outer rings, we have to add 1 half the time; when? Depends which way round the face is in the wheel. 0 - 63. -->
+  <index ref="phi_module" value="2*(2*CNL_4 + CNL_5) + (CNL_5 == 0 &amp;&amp; CNL_6 == 0) + (CNL_5 == 1 &amp;&amp; CNL_6 == 1) "/>
+  <transform alignable="0">
+    <transformation name="PlaceFaceRing3Minus" alignable="true">
+      <rotation zcos="1.0" angle="-SensorRotation_3"/>
+    </transformation>
+    <assemblyref ref="ECModule3Minus"/>
+  </transform>
+
+  <transform alignable="0">
+    <transformation name="PlaceFaceRing4Minus" alignable="true">
+      <rotation zcos="1.0" angle="-SensorRotation_4"/>
+    </transformation>
+    <assemblyref ref="ECModule4Minus"/>
+  </transform>
+
+  <transform alignable="0">
+    <transformation name="PlaceFaceRing5Minus" alignable="true">
+      <rotation zcos="1.0" angle="-SensorRotation_5"/>
+    </transformation>
+    <assemblyref ref="ECModule5Minus"/>
+  </transform>
+<index ref="phi_module" value="2*(2*CNL_4 + CNL_5) + (CNL_5 == 0 &amp;&amp; CNL_6 == 1) + (CNL_5 == 1 &amp;&amp; CNL_6 == 0)"/>
+  <transform alignable="0">
+    <transformation name="PlaceFaceRing3Plus" alignable="true">
+      <rotation zcos="1.0" angle="+SensorRotation_3"/>
+    </transformation>
+    <assemblyref ref="ECModule3Plus"/>
+  </transform>
+
+  <transform alignable="0">
+    <transformation name="PlaceFaceRing4Plus" alignable="true">
+      <rotation zcos="1.0" angle="+SensorRotation_4"/>
+    </transformation>
+    <assemblyref ref="ECModule4Plus"/>
+  </transform>
+
+  <transform alignable="0">
+    <transformation name="PlaceFaceRing5Plus" alignable="true">
+      <rotation zcos="1.0" angle="+SensorRotation_5"/>
+    </transformation>
+    <assemblyref ref="ECModule5Plus"/>
+  </transform>
+</assembly>
+
+
+<assembly name="Petal">
+  <assemblyref ref="PetalPlank"/>
+
+  <transform name="NearFace">
+    <transformation name="PlacePetalFaceNear">
+      <translation z="-(PetalCoreThickness + SensorThickness)/2"/>
+      <rotation xcos="1." angle="PI"/> 
+      <rotation zcos="1." angle="PetalFaceRotation"/>
+    </transformation>
+    <assemblyref ref="PetalFace" zeroid="true"/>
+  </transform>
+
+  <transform name="FarFace">
+      <transformation name="PlacePetalFaceFar">
+        <translation z="(PetalCoreThickness + SensorThickness)/2"/>
+        <rotation zcos="1." angle="PetalFaceRotation"/>
+      </transformation>
+      <assemblyref ref="PetalFace"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceFirstEOS_OnPetalCore">
+      <rotation zcos="1.0" angle="+(PetalCoreAngle+PetalEarAngle)/2"/>
+      <translation x="(PetalEarOuterRadius -100)" z="+(PetalCoreThickness+5)/2" y="-17"/>
+    </transformation>
+    <logvolref ref="EOS"/>
+  </transform>
+
+  <transform>
+    <transformation name="PlaceSecondEOS_OnPetalCore">
+     <rotation zcos="1.0" angle="+(PetalCoreAngle+PetalEarAngle)/2"/>	      
+     <translation x="(PetalEarOuterRadius -100)" z="-(PetalCoreThickness+5)/2" y="-17"/>
+      
+    </transformation>
+    <logvolref ref="EOS"/>
+  </transform>
+
+</assembly>
+
+<assembly name="PetalPair">
+  <index ref="side" value="CNL_6"/>
+  <transform name="Near">
+    <transformation name="PlaceCastleNear">
+      <translation z="-CastellationOffset"/>
+    </transformation>
+    <assemblyref ref="Petal" zeroid="true"/>
+  </transform>
+
+  <index ref="side" value="1 - CNL_6"/>
+  <transform name="Far">
+    <transformation name="PlaceCastleFar">
+      <translation z="+CastellationOffset"/>
+      <rotation zcos="1." angle="2*PI/NPetalsInWheel"/>
+      <rotation xcos="1." angle="2*PI/2"/>
+    </transformation>
+    <assemblyref ref="Petal"/>
+  </transform>
+
+</assembly>
+
+
+<assembly name="Wheel" alignable="true">
+  <index ref="layer_wheel" value="CNL_3"/>
+  <multicopy name="AddPetalPairsToWheel" n="NPetalsInWheel/2">
+    <transformation name="PlacePetalPairsToWheel">
+      <rotation zcos="1." angle="2*PI/(NPetalsInWheel/2)"/>
+    </transformation>
+    <assemblyref ref="PetalPair"/>
+  </multicopy>
+  <transform>
+    <transformation name="PlaceWheelSupport">
+      <translation z="WheelSupportOffset"/>
+    </transformation>
+    <assemblyref ref="WheelSupport"/>
+  </transform>
+</assembly>
+
+
+<assembly name="SCT_Forward" alignable="true">
+  <multicopy name="AddWheelsToEndcap" n="N_Wheels" loopvar="WheelZ" alignable="2">
+    <transformation name="PlaceWheelsOdd" alignable="true">
+      <translation z="WheelZ"/>
+    </transformation>
+    <assemblyref ref="Wheel"/>
+  </multicopy>
+  <multicopy name="AddBladesToEndcapOdd" n="N_Wheels / 2." loopvar="WheelZOdd">
+    <transformation name="AddWheelBladesOdd">
+      <translation z="WheelZOdd -(WheelInnerT_BaseWidth / 4. + WheelInnerT_UprightThickness / 2.) + WheelSupportOffset"/>
+    </transformation>
+  <assemblyref ref="BladeSupportWheel"/>
+  </multicopy>
+  <multicopy name="AddBladesToEndcapEven" n="N_Wheels / 2." loopvar="WheelZEven">
+    <transformation name="AddWheelBladesEven">
+      <translation z="WheelZEven -(WheelInnerT_BaseWidth / 4. + WheelInnerT_UprightThickness / 2.) + WheelSupportOffset"/>
+      <rotation zcos="1." angle="PI / 8."/>
+    </transformation>
+  <assemblyref ref="BladeSupportWheel"/>
+  </multicopy>
+  <transform>
+    <transformation name="PlaceEC_Support">
+      <translation z="StripEC_Z_Start + 0.5 + EC_InnerCylLength / 2."/>
+    </transformation>
+    <assemblyref ref="EC_Support"/>
+  </transform>
+
+<!--
+    <transform>
+      <transformation name="PlacePST">
+        <translation z="StripEC_Z_Start + 0.5 + EC_InnerCylLength / 2. - 30."/>
+      </transformation>
+    <assemblyref ref="EndcapPST"/>
+    </transform>
+-->
+
+</assembly>
+
+<!-- GeoModelXml input created by ServMat. Detector "LoI Strip" version 2018-10-15 -->
+
+<!-- Masses of interlinks scaled by interlinkSF = 1.200000 -->
+
+
+  <materials>
+
+    <material name="matSV_Barrel01" density="0.103698">
+      <elementref ref="Aluminium" fraction="0.203153"/>
+      <elementref ref="Carbon" fraction="0.308931"/>
+      <elementref ref="Copper" fraction="0.110710"/>
+      <elementref ref="Hydrogen" fraction="0.011784"/>
+      <elementref ref="Nickel" fraction="0.025469"/>
+      <elementref ref="Nitrogen" fraction="0.093526"/>
+      <elementref ref="Oxygen" fraction="0.033535"/>
+      <elementref ref="Silicon" fraction="0.000688"/>
+      <elementref ref="Titanium" fraction="0.212203"/>
+    </material>
+
+    <material name="matSV_Barrel12" density="0.178647">
+      <elementref ref="Aluminium" fraction="0.207867"/>
+      <elementref ref="Carbon" fraction="0.316098"/>
+      <elementref ref="Copper" fraction="0.113279"/>
+      <elementref ref="Hydrogen" fraction="0.012057"/>
+      <elementref ref="Nickel" fraction="0.026060"/>
+      <elementref ref="Nitrogen" fraction="0.095696"/>
+      <elementref ref="Oxygen" fraction="0.034313"/>
+      <elementref ref="Silicon" fraction="0.000704"/>
+      <elementref ref="Titanium" fraction="0.193926"/>
+    </material>
+
+    <material name="matSV_Barrel23" density="0.240794">
+      <elementref ref="Aluminium" fraction="0.211315"/>
+      <elementref ref="Carbon" fraction="0.321342"/>
+      <elementref ref="Copper" fraction="0.115158"/>
+      <elementref ref="Hydrogen" fraction="0.012257"/>
+      <elementref ref="Nickel" fraction="0.026492"/>
+      <elementref ref="Nitrogen" fraction="0.097283"/>
+      <elementref ref="Oxygen" fraction="0.034882"/>
+      <elementref ref="Silicon" fraction="0.000716"/>
+      <elementref ref="Titanium" fraction="0.180553"/>
+    </material>
+
+    <material name="matSV_Barrel3Out" density="0.798240">
+      <elementref ref="Aluminium" fraction="0.088150"/>
+      <elementref ref="Carbon" fraction="0.134048"/>
+      <elementref ref="Copper" fraction="0.048038"/>
+      <elementref ref="Hydrogen" fraction="0.005113"/>
+      <elementref ref="Nickel" fraction="0.011051"/>
+      <elementref ref="Nitrogen" fraction="0.040582"/>
+      <elementref ref="Oxygen" fraction="0.014551"/>
+      <elementref ref="Silicon" fraction="0.000299"/>
+      <elementref ref="Titanium" fraction="0.658168"/>
+    </material>
+
+    <material name="matSV_BarrelPastEndcap" density="0.456011">
+      <elementref ref="Aluminium" fraction="0.228508"/>
+      <elementref ref="Carbon" fraction="0.347487"/>
+      <elementref ref="Copper" fraction="0.124527"/>
+      <elementref ref="Hydrogen" fraction="0.013255"/>
+      <elementref ref="Nickel" fraction="0.028648"/>
+      <elementref ref="Nitrogen" fraction="0.105198"/>
+      <elementref ref="Oxygen" fraction="0.037720"/>
+      <elementref ref="Silicon" fraction="0.000774"/>
+      <elementref ref="Titanium" fraction="0.113883"/>
+    </material>
+
+    <material name="matSV_Endcap01" density="0.253309">
+      <elementref ref="Aluminium" fraction="0.206755"/>
+      <elementref ref="Carbon" fraction="0.314407"/>
+      <elementref ref="Copper" fraction="0.112673"/>
+      <elementref ref="Hydrogen" fraction="0.011993"/>
+      <elementref ref="Nickel" fraction="0.025921"/>
+      <elementref ref="Nitrogen" fraction="0.095184"/>
+      <elementref ref="Oxygen" fraction="0.034130"/>
+      <elementref ref="Silicon" fraction="0.000700"/>
+      <elementref ref="Titanium" fraction="0.198239"/>
+    </material>
+
+    <material name="matSV_Endcap12" density="0.493606">
+      <elementref ref="Aluminium" fraction="0.212205"/>
+      <elementref ref="Carbon" fraction="0.322695"/>
+      <elementref ref="Copper" fraction="0.115643"/>
+      <elementref ref="Hydrogen" fraction="0.012309"/>
+      <elementref ref="Nickel" fraction="0.026604"/>
+      <elementref ref="Nitrogen" fraction="0.097693"/>
+      <elementref ref="Oxygen" fraction="0.035029"/>
+      <elementref ref="Silicon" fraction="0.000719"/>
+      <elementref ref="Titanium" fraction="0.177105"/>
+    </material>
+
+    <material name="matSV_Endcap23" density="0.732819">
+      <elementref ref="Aluminium" fraction="0.214402"/>
+      <elementref ref="Carbon" fraction="0.326037"/>
+      <elementref ref="Copper" fraction="0.116840"/>
+      <elementref ref="Hydrogen" fraction="0.012437"/>
+      <elementref ref="Nickel" fraction="0.026880"/>
+      <elementref ref="Nitrogen" fraction="0.098705"/>
+      <elementref ref="Oxygen" fraction="0.035392"/>
+      <elementref ref="Silicon" fraction="0.000726"/>
+      <elementref ref="Titanium" fraction="0.168582"/>
+    </material>
+
+    <material name="matSV_Endcap34" density="0.974642">
+      <elementref ref="Aluminium" fraction="0.214941"/>
+      <elementref ref="Carbon" fraction="0.326857"/>
+      <elementref ref="Copper" fraction="0.117134"/>
+      <elementref ref="Hydrogen" fraction="0.012468"/>
+      <elementref ref="Nickel" fraction="0.026947"/>
+      <elementref ref="Nitrogen" fraction="0.098953"/>
+      <elementref ref="Oxygen" fraction="0.035481"/>
+      <elementref ref="Silicon" fraction="0.000728"/>
+      <elementref ref="Titanium" fraction="0.166491"/>
+    </material>
+
+    <material name="matSV_Endcap45" density="1.211989">
+      <elementref ref="Aluminium" fraction="0.216061"/>
+      <elementref ref="Carbon" fraction="0.328559"/>
+      <elementref ref="Copper" fraction="0.117744"/>
+      <elementref ref="Hydrogen" fraction="0.012533"/>
+      <elementref ref="Nickel" fraction="0.027087"/>
+      <elementref ref="Nitrogen" fraction="0.099468"/>
+      <elementref ref="Oxygen" fraction="0.035666"/>
+      <elementref ref="Silicon" fraction="0.000732"/>
+      <elementref ref="Titanium" fraction="0.162149"/>
+    </material>
+
+    <material name="matSV_Endcap5Out" density="1.600535">
+      <elementref ref="Aluminium" fraction="0.196332"/>
+      <elementref ref="Carbon" fraction="0.298558"/>
+      <elementref ref="Copper" fraction="0.106993"/>
+      <elementref ref="Hydrogen" fraction="0.011388"/>
+      <elementref ref="Nickel" fraction="0.024614"/>
+      <elementref ref="Nitrogen" fraction="0.090386"/>
+      <elementref ref="Oxygen" fraction="0.032409"/>
+      <elementref ref="Silicon" fraction="0.000665"/>
+      <elementref ref="Titanium" fraction="0.238655"/>
+    </material>
+
+  </materials>
+
+  <shapes>
+    <tube name="shSV_Barrel01" rmin="399.000 + EPS" rmax="561.998 - EPS" zhalflength="4.000 - EPS"/>
+    <tube name="shSV_Barrel12" rmin="562.000 + EPS" rmax="761.998 - EPS" zhalflength="4.000 - EPS"/>
+    <tube name="shSV_Barrel23" rmin="762.000 + EPS" rmax="999.998 - EPS" zhalflength="4.000 - EPS"/>
+    <tube name="shSV_Barrel3Out" rmin="1000.000 + EPS" rmax="1013.998 - EPS" zhalflength="4.000 - EPS"/>
+    <tubs name="shSV_BarrelPastEndcap" rmin="1016.000 + EPS" rmax="1024.000 - EPS" zhalflength="860.498 - EPS" sphi="0.1308998" dphi="0.5235986"/>
+    <tubs name="shSV_Endcap01" rmin="990.000 + EPS" rmax="998.000 - EPS" zhalflength="94.999 - EPS" sphi="0.3054327" dphi="0.1745327"/>
+    <tubs name="shSV_Endcap12" rmin="990.000 + EPS" rmax="998.000 - EPS" zhalflength="124.999 - EPS" sphi="0.3054327" dphi="0.1745327"/>
+    <tubs name="shSV_Endcap23" rmin="990.000 + EPS" rmax="998.000 - EPS" zhalflength="142.499 - EPS" sphi="0.3054327" dphi="0.1745327"/>
+    <tubs name="shSV_Endcap34" rmin="990.000 + EPS" rmax="998.000 - EPS" zhalflength="147.499 - EPS" sphi="0.3054327" dphi="0.1745327"/>
+    <tubs name="shSV_Endcap45" rmin="990.000 + EPS" rmax="998.000 - EPS" zhalflength="158.999 - EPS" sphi="0.3054327" dphi="0.1745327"/>
+    <tubs name="shSV_Endcap5Out" rmin="990.000 + EPS" rmax="998.000 - EPS" zhalflength="63.499 - EPS" sphi="0.3054327" dphi="0.1745327"/>
+    <tube name="shSV_Barrel" rmin="346.701 + EPS" rmax="1015.000 - EPS" zhalflength="12.500 - EPS"/>
+    <tubs name="shSV_BarrelAtEC" rmin="1015.000 + EPS" rmax="1045.000 - EPS" zhalflength="860.500 - EPS" sphi="0.1308997" dphi="0.5235988"/>
+    <tubs name="shSV_Endcap" rmin="989.000 + EPS" rmax="1011.000 - EPS" zhalflength="748.500 - EPS" sphi="0.3054326" dphi="0.1745329"/>
+  </shapes>
+
+  <logvol name="SV_Barrel01" shape="shSV_Barrel01" material="matSV_Barrel01"/>
+  <logvol name="SV_Barrel12" shape="shSV_Barrel12" material="matSV_Barrel12"/>
+  <logvol name="SV_Barrel23" shape="shSV_Barrel23" material="matSV_Barrel23"/>
+  <logvol name="SV_Barrel3Out" shape="shSV_Barrel3Out" material="matSV_Barrel3Out"/>
+  <logvol name="SV_BarrelPastEndcap" shape="shSV_BarrelPastEndcap" material="matSV_BarrelPastEndcap"/>
+  <logvol name="SV_Endcap01" shape="shSV_Endcap01" material="matSV_Endcap01"/>
+  <logvol name="SV_Endcap12" shape="shSV_Endcap12" material="matSV_Endcap12"/>
+  <logvol name="SV_Endcap23" shape="shSV_Endcap23" material="matSV_Endcap23"/>
+  <logvol name="SV_Endcap34" shape="shSV_Endcap34" material="matSV_Endcap34"/>
+  <logvol name="SV_Endcap45" shape="shSV_Endcap45" material="matSV_Endcap45"/>
+  <logvol name="SV_Endcap5Out" shape="shSV_Endcap5Out" material="matSV_Endcap5Out"/>
+
+  <logvol name="SV_Barrel_lv" shape="shSV_Barrel" material="N2">
+    <transform>
+      <transformation name="placeSV_Barrel01">
+        <translation z="-7.500"/>
+      </transformation>
+      <logvolref ref="SV_Barrel01"/>
+    </transform>
+    <transform>
+      <transformation name="placeSV_Barrel12">
+        <translation z="-7.500"/>
+      </transformation>
+      <logvolref ref="SV_Barrel12"/>
+    </transform>
+    <transform>
+      <transformation name="placeSV_Barrel23">
+        <translation z="-7.500"/>
+      </transformation>
+      <logvolref ref="SV_Barrel23"/>
+    </transform>
+    <transform>
+      <transformation name="placeSV_Barrel3Out">
+        <translation z="-7.500"/>
+      </transformation>
+      <logvolref ref="SV_Barrel3Out"/>
+    </transform>
+  </logvol>
+
+  <logvol name="SV_BarrelAtEC_lv" shape="shSV_BarrelAtEC" material="N2">
+    <transform>
+      <transformation name="placeSV_BarrelPastEndcap">
+        <translation z="0.000"/>
+      </transformation>
+      <logvolref ref="SV_BarrelPastEndcap"/>
+    </transform>
+  </logvol>
+
+  <logvol name="SV_Endcap_lv" shape="shSV_Endcap" material="N2">
+    <transform>
+      <transformation name="placeSV_Endcap01">
+        <translation z="-621.501"/>
+      </transformation>
+      <logvolref ref="SV_Endcap01"/>
+    </transform>
+    <transform>
+      <transformation name="placeSV_Endcap12">
+        <translation z="-401.501"/>
+      </transformation>
+      <logvolref ref="SV_Endcap12"/>
+    </transform>
+    <transform>
+      <transformation name="placeSV_Endcap23">
+        <translation z="-134.001"/>
+      </transformation>
+      <logvolref ref="SV_Endcap23"/>
+    </transform>
+    <transform>
+      <transformation name="placeSV_Endcap34">
+        <translation z="155.999"/>
+      </transformation>
+      <logvolref ref="SV_Endcap34"/>
+    </transform>
+    <transform>
+      <transformation name="placeSV_Endcap45">
+        <translation z="462.499"/>
+      </transformation>
+      <logvolref ref="SV_Endcap45"/>
+    </transform>
+    <transform>
+      <transformation name="placeSV_Endcap5Out">
+        <translation z="684.999"/>
+      </transformation>
+      <logvolref ref="SV_Endcap5Out"/>
+    </transform>
+  </logvol>
+
+
+  <assembly name="SV_Barrel">
+    <logvolref ref="SV_Barrel_lv"/>
+  </assembly>
+
+  <assembly name="SV_BarrelAtEC">
+    <multicopy name="placeContentsOfSV_BarrelAtEC" n="8">
+      <transformation name="rotate_SV_BarrelAtEC">
+        <rotation zcos="1.0" angle="0.785"/>
+      </transformation>
+      <logvolref ref="SV_BarrelAtEC_lv"/>
+    </multicopy>
+  </assembly>
+
+  <assembly name="SV_Endcap">
+    <multicopy name="placeContentsOfSV_Endcap" n="8">
+      <transformation name="rotate_SV_Endcap">
+        <rotation zcos="1.0" angle="0.785"/>
+      </transformation>
+      <logvolref ref="SV_Endcap_lv"/>
+    </multicopy>
+  </assembly>
+
+
+
+<!-- To be included in Endcaps.gmx. Builds up the PP1 volume (including type 2 services) -->
+<materials>
+<material name="matPixRed1" density="0.155179495"> <!--red-outer-->
+      <materialref fraction="0.447786132" ref="CuMetal"/>
+      <materialref fraction="0.139515455" ref="AlMetal"/>
+      <materialref fraction="0.248955723" ref="PE"/>
+      <materialref fraction="0.16374269" ref="PVC"/>
+    </material>
+<material name="matPixRed2" density="0.124194654"> <!--red-inner-->
+      <materialref fraction="0.447786132" ref="CuMetal"/>
+ <materialref fraction="0.139515455" ref="AlMetal"/>
+ <materialref fraction="0.248955723" ref="PE"/>
+ <materialref fraction="0.16374269" ref="PVC"/>
+ 
+    </material>
+<material name="matPixCoolingInner" density="0.688923717"> <!--red-inner-->
+      <!--<materialref fraction="0.16" ref="Chromium"/>-->
+      <materialref fraction="0.967853023" ref="SS316"/>      
+      <chemicalref fraction="0.032146977" ref="CO2"/>
+    </material>
+<material name="matPixCoolingOuter" density="0.541945371"> <!--red-inner-->
+      <!--<materialref fraction="0.16" ref="Chromium"/>-->
+      <materialref fraction="0.872747728" ref="SS316"/>
+      <chemicalref fraction="0.127252272" ref="CO2"/>
+    </material>
+<material name="matPixCoolingSum" density="0.91406121"> <!--red-inner-->
+      <!--<materialref fraction="0.16" ref="Chromium"/>-->
+      <materialref fraction="0.911465252" ref="SS316"/>      
+      <chemicalref fraction="0.088534748" ref="CO2"/>
+    </material>
+<material name="matPixType2D" density="0.293763408"> <!--just try with one Type 2 value for now.-->
+      <materialref fraction="0.67070062" ref="CuMetal"/>
+      <materialref fraction="0.32929938" ref="Poliax"/><!--Poliax is 1.19 the density of Kapton-->
+      
+    </material>
+<material name="matPixType2E" density="0.159322011"> <!--just try with one Type 2 value for now.-->
+      <materialref fraction="0.67070062" ref="CuMetal"/>
+      <materialref fraction="0.32929938" ref="Poliax"/><!--Poliax is 1.19 the density of Kapton-->
+      
+    </material>
+<material name="matPixType2F" density="0.44538827"> <!--just try with one Type 2 value for now.-->
+      <materialref fraction="0.67070062" ref="CuMetal"/>
+      <materialref fraction="0.32929938" ref="Poliax"/><!--Poliax is 1.19 the density of Kapton-->
+    </material>
+<material name="matPixType2G" density="0.465356131"> <!--just try with one Type 2 value for now.-->
+      <materialref fraction="0.67070062" ref="CuMetal"/>
+      <materialref fraction="0.32929938" ref="Poliax"/><!--Poliax is 1.19 the density of Kapton-->
+      
+    </material>
+<material name="matPixType2H" density="0.564667619"> <!--just try with one Type 2 value for now.-->
+      <materialref fraction="0.67070062" ref="CuMetal"/>
+      <materialref fraction="0.32929938" ref="Poliax"/><!--Poliax is 1.19 the density of Kapton-->
+    </material>
+<material name="matPixType2I" density="0.528960234"> <!--just try with one Type 2 value for now.-->
+      <materialref fraction="0.67070062" ref="CuMetal"/>
+      <materialref fraction="0.32929938" ref="Poliax"/><!--Poliax is 1.19 the density of Kapton-->
+    </material>
+
+<material name="matPixType2L" density="0.775606326"> <!--just try with one Type 2 value for now.-->
+      <materialref fraction="0.67070062" ref="CuMetal"/>
+      <materialref fraction="0.32929938" ref="Poliax"/><!--Poliax is 1.19 the density of Kapton-->
+    </material>
+<material name="matPP1Type1PixInner" density="0.060277165"> <!--just try with one Type 2 value for now.-->
+  
+  <materialref fraction="0.582454255" ref="CuMetal"/>
+  <materialref fraction="0.095137505" ref="AlMetal"/>
+  <materialref fraction="0.021627338" ref="Kapton"/>
+  <materialref fraction="0.167436662" ref="Polyethylene"/>
+  <materialref fraction="0.110149445" ref="PVC"/>
+  <materialref fraction="0.023194794" ref="TiMetal"/>
+</material>
+
+<material name="matPP1Type1PixOuter" density="0.216283525"> <!--just try with one Type 2 value for now.-->
+<materialref fraction="0.684427651" ref="CuMetal"/>	   
+<materialref fraction="0.124967982" ref="AlMetal"/>	   
+<materialref fraction="0.021199502" ref="Kapton"/>	   
+<materialref fraction="0.220348505" ref="Polyethylene"/>
+<materialref fraction="0.144957892" ref="PVC"/>	   
+<materialref fraction="0.204098467" ref="TiMetal"/>       
+
+    
+
+
+</material>
+<material name="matPP1InnerConnectors" density="1.654315985"> <!--just try with one Type 2 value for now.-->
+<materialref fraction="1.0" ref="AlMetal"/>
+</material>
+<material name="matPP1OuterConnectors" density="2.704150857"> <!--just try with one Type 2 value for now.-->
+<materialref fraction="1.0" ref="AlMetal"/>
+</material>
+
+<material name="matHeatExchanger" density="0.592*4.507"> <!--just try with one Type 2 value for now.-->
+<elementref fraction="1.0" ref="Titanium"/>
+</material>
+
+
+
+
+</materials>
+<defines>
+  
+  <var name="Pix_PP1_Z_Start" value="3020 + EPS"/>
+  <var name="Pix_PP1_middle_Z_Start" value="3020 + EPS"/>      
+  <var name="Pix_PP1_middle_Z_End" value="3020+210"/>
+  <var name="Pix_PP1_cooling_Z_End" value="Pix_PP1_middle_Z_End+60."/>	
+  <var name="Pix_PP1_middle_RI" value="347."/>
+  <var name="Pix_PP1_middle_RO" value="419."/>
+  <var name="HXcorrection" value="100"/>
+  <var name="Pix_PP1_middle_L" value="Pix_PP1_middle_Z_End - Pix_PP1_middle_Z_Start-HXcorrection"/>
+  <var name="ConnectorDepth" value="20"/>
+  <var name="Pix_PP1_outer_Z_Start" value="3020 + EPS"/>          
+  <var name="Pix_PP1_outer_Z_End" value="3020+143"/>
+  <var name="Pix_PP1_outer_RI" value="Pix_PP1_middle_RO"/>
+  <var name="Pix_PP1_outer_RO" value="699."/>
+  <var name="Pix_PP1_outer_L" value="Pix_PP1_outer_Z_End - Pix_PP1_outer_Z_Start-HXcorrection"/>
+  <var name="PixPP1Type2End" value="3404 +EPS"/>
+  <var name="PixPP1Type2Length" value="PixPP1Type2End-Pix_PP1_Z_Start"/>
+  <var name="HeatExchanger_w" value="50"/>
+  <var name="HeatExchanger_t" value="HeatExchanger_w"/>
+  <var name="HeatExchanger_l" value="120"/>
+  <var name="HeatExchanger_z" value="-(3020+PixPP1Type2Length/2-3070)"/><!--3070-->
+  <var name="HeatExchanger_Ri" value="400"/>
+  <var name="PixType2D_l" value="3400-3302.8"/><!--Pix_PP1_cooling_Z_End"/>-->
+  <var name="PixType2D_hl" value="PixType2D_l/2."/>
+  <var name="PixType2E_l" value="PixType2D_l"/>
+  <var name="PixType2E_hl" value="PixType2E_l/2."/>
+<var name="PixType2OutZ_w" value="35"/>  
+<var name="PixType2OutZ_start" value="PixPP1Type2End-PixType2OutZ_w"/>
+  
+  <var name="PixType2MaxR" value="1000"/> <!--place holder, until i can put this through the strip PP1-->
+  <var name="CoolingAngle" value="(45.-9)*PI/180"/>
+  <var name="RedAngle" value="-7.*PI/180"/>
+  <var name="Type2Angle" value="(21.5-14.5)*PI/180"/>
+  <var name="Type2Angle_b" value="(68.5-14.5)*PI/180"/>
+</defines>
+<shapes>
+  
+  <tube name="shPix_PP1_middle" rmin="Pix_PP1_middle_RI" rmax="Pix_PP1_middle_RO" zhalflength="Pix_PP1_middle_L/2"/>
+  <tube name="shPix_PP1_outer" rmin="Pix_PP1_outer_RI" rmax="Pix_PP1_outer_RO" zhalflength="Pix_PP1_outer_L/2"/>
+  <tube name="shPix_PP1_outerskin_z" rmin="Pix_PP1_outer_RO-1" rmax="Pix_PP1_outer_RO" zhalflength="Pix_PP1_outer_L/2"/>  
+ <tube name="shPix_PP1_outerskin_r" rmin="375" rmax="Pix_PP1_outer_RO-1" zhalflength="0.5"/>  
+ <tube name="shPix_PP1InnerServices" rmin="Pix_PP1_middle_RI" rmax="Pix_PP1_middle_RO-1.5" zhalflength="(Pix_PP1_middle_L-Pix_PP1_outer_L-25)/2"/>
+<tube name="shPix_PP1OuterServices" rmin="375" rmax="Pix_PP1_outer_RO-1.5" zhalflength="(Pix_PP1_outer_L*1.25-ConnectorDepth)/2"/>
+ <tube name="shPix_PP1_middleskin_z" rmin="Pix_PP1_middle_RO-1" rmax="Pix_PP1_middle_RO" zhalflength="Pix_PP1_middle_L/2-Pix_PP1_outer_L/2"/>
+  <tube name="shPix_PP1_middleskin_r" rmin="Pix_PP1_middle_RI" rmax="Pix_PP1_middle_RO-1" zhalflength="0.5"/>
+  <!--<cons name="shPix_PP1_outercone"       rmin1="347"  rmin2="348"   rmax1="Pix_PP1_middle_RO-1"  rmax2="Pix_PP1_middle_RO-2"            dz="2" sphi="PI/4" dphi="2*PI"/>-->
+
+<cons name="shPix_PP1_outercone" rmin1="347" rmin2="375-2" rmax1="348" rmax2="375-1" dz="5" sphi="375/Pix_PP1_outer_Z_End" dphi="2*PI"/>
+
+  <box name="shHeatExTriplet" xhalflength="HeatExchanger_l/2" yhalflength="3*HeatExchanger_w/2" zhalflength="HeatExchanger_t/2"/>
+  <box name="shHeatExSingle" xhalflength="HeatExchanger_l/2" yhalflength="HeatExchanger_w/2" zhalflength="HeatExchanger_t/2"/> 
+  
+  <!--<tube name="shPixRed1" rmin="Pix_PP1_outer_RO" rmax="PixType2MaxR"   zhalflength="(Pix_PP1_outer_Z_End-Pix_PP1_outer_Z_Start)/2"/>-->
+  <tubs name="shOuterPP1Connectors" rmin="458.5" rmax="660" zhalflength="(ConnectorDepth-1)/2" sphi="0" dphi="0.45"/>
+<tubs name="shInnerPP1Connectors" rmin="Pix_PP1_middle_RI+EPS" rmax="395" zhalflength="(25)/2" sphi="0" dphi="0.45"/>
+  <tubs name="shPixRed1Q1" rmin="Pix_PP1_outer_RO" rmax="EC_PP1_RI" zhalflength="(Pix_PP1_outer_Z_End-Pix_PP1_outer_Z_Start)/2" sphi="0" dphi="14.*PI/180."/>
+
+  <!--<tube name="shPixRed2" rmin="Pix_PP1_outer_RI" rmax=""   zhalflength="(Pix_PP1_middle_Z_End-Pix_PP1_outer_Z_End)/2"/>-->
+  <tubs name="shPixRed2Q1" rmin="Pix_PP1_outer_RI" rmax="PixType2MaxR" zhalflength="(Pix_PP1_middle_Z_End-Pix_PP1_outer_Z_End)/2" sphi="0" dphi="14.*PI/180."/>
+  <!--<tube name="shPixCooling" rmin="Pix_PP1_middle_RI" rmax="PixType2MaxR"   zhalflength="(Pix_PP1_cooling_Z_End-Pix_PP1_middle_Z_End)/2"/>-->	
+  <tubs name="shPixCoolingInnerQ1" rmin="Pix_PP1_middle_RI" rmax="420-EPS" zhalflength="(Pix_PP1_cooling_Z_End-Pix_PP1_middle_Z_End)/2" sphi="0" dphi="18.*PI/180."/>	
+<tubs name="shPixCoolingOuterQ1" rmin="420" rmax="PixType2MaxR" zhalflength="(Pix_PP1_cooling_Z_End-Pix_PP1_middle_Z_End)/2" sphi="0" dphi="18.*PI/180."/>	
+
+  <!--<tube name="shPixType2D"      rmin="Pix_PP1_middle_RI"                rmax="Pix_PP1_middle_RO"              zhalflength="PixType2D_l/2"/>-->
+  <tubs name="shPixType2DQ1" rmin="Pix_PP1_middle_RI" rmax="Pix_PP1_middle_RO" zhalflength="PixType2D_l/2" sphi="0" dphi="29*PI/180"/> 
+  
+  <!--<tube name="shPixType2E"      rmin="Pix_PP1_middle_RO"                rmax="474"              zhalflength="PixType2E_l/2-EPS"/>-->
+  <tubs name="shPixType2EQ1" rmin="Pix_PP1_middle_RO" rmax="474" zhalflength="PixType2E_l/2-EPS" sphi="0" dphi="29*PI/180"/> 
+  
+  
+ <!--<tube name="shPixType2F"      rmin="474"                rmax="529"              zhalflength="PixType2E_hl-EPS"/>-->
+ <tubs name="shPixType2FQ1" rmin="474" rmax="529" zhalflength="PixType2E_hl-EPS" sphi="0" dphi="29*PI/180"/>
+
+  <!--<tube name="shPixType2G"      rmin="529"                rmax="584"              zhalflength="PixType2E_hl-EPS"/>-->
+  <tubs name="shPixType2GQ1" rmin="529" rmax="584" zhalflength="PixType2E_hl-EPS" sphi="0" dphi="29*PI/180"/>
+  <!--<tube name="shPixType2H"      rmin="584"                rmax="639"              zhalflength="PixType2E_hl-EPS"/>-->
+  <tubs name="shPixType2HQ1" rmin="584" rmax="639" zhalflength="PixType2E_hl-EPS" sphi="0" dphi="29*PI/180"/>
+  <!--<tube name="shPixType2I"      rmin="639"                rmax="700"              zhalflength="PixType2E_hl-EPS"/>-->
+  <tubs name="shPixType2IQ1" rmin="639" rmax="Pix_PP1_outer_RO" zhalflength="PixType2E_hl-EPS" sphi="0" dphi="29*PI/180"/>
+
+  <!--<tube name="shPixType2L"      rmin="Pix_PP1_outer_RO"                rmax="PixType2MaxR"              zhalflength="17.5-EPS"/>-->
+  <tubs name="shPixType2LQ1" rmin="Pix_PP1_outer_RO" rmax="EC_PP1_RO" zhalflength="17.5-EPS" sphi="0" dphi="29*PI/180"/>
+  
+
+  
+  <union name="pixPP1outerskinunion">
+    <shaperef ref="shPix_PP1_outerskin_z"/>
+    <transformation name="PlacePixPP1skinr">
+      <translation z="Pix_PP1_outer_L/2-0.5"/>
+    </transformation>
+    <shaperef ref="shPix_PP1_outerskin_r"/>
+  </union>
+  <union name="pixPP1middleskinunion">
+    <shaperef ref="shPix_PP1_middleskin_z"/>
+    <transformation name="PlacePixmPP1skinr">
+      <translation z="(-Pix_PP1_outer_L/2+Pix_PP1_middle_L/2)"/>
+    </transformation>
+    <shaperef ref="shPix_PP1_middleskin_r"/>
+  </union>
+  <union name="pixPP1skin1">
+    <shaperef ref="pixPP1outerskinunion"/>
+      <transformation name="PlacePixPP1skinrz">
+	<!--<translation z="Pix_PP1_outer_L+(Pix_PP1_middle_L-Pix_PP1_outer_L)/2+0.5"/>-->
+	<translation z="Pix_PP1_middle_L/2+0.5"/>
+      </transformation>
+      <shaperef ref="pixPP1middleskinunion"/>
+    </union>
+<union name="pixPP1skin">
+    <shaperef ref="pixPP1skin1"/>
+      <transformation name="PlacePixPP1cone">
+	<translation z="Pix_PP1_outer_L/2-(Pix_PP1_outer_Z_End-3149.4)/2"/>
+<!--	<translation z="Pix_PP1_outer_L/4"/>-->
+      </transformation>
+      <shaperef ref="shPix_PP1_outercone"/>
+    </union>
+    
+
+  <tube name="ShPixPP1_Envelope" rmin="Pix_PP1_middle_RI" rmax="EC_PP1_RO+EPS" zhalflength="PixPP1Type2Length/2"/> <!-- rmin = StripEC_InnerRadius originally -->
+</shapes>
+
+<logvol name="HeatExchanger" shape="shHeatExTriplet" material="matHeatExchanger"/>
+<logvol name="HeatExchanger_single" shape="shHeatExSingle" material="matHeatExchanger"/>
+<assembly name="HeatExchanger_doublet">
+<multicopy name="AddHX" n="2">
+  <transformation name="PlaceHX">
+    <translation y="2*HeatExchanger_w"/>
+  </transformation>
+  <logvolref ref="HeatExchanger_single"/>
+</multicopy>
+</assembly>
+
+
+
+
+
+<logvol name="Pix_PP1InnerServices" shape="shPix_PP1InnerServices" material="matPP1Type1PixInner"/><!--Placeholder for visibility !!-->
+<logvol name="Pix_PP1OuterServices" shape="shPix_PP1OuterServices" material="matPP1Type1PixOuter"/><!--Placeholder for visibility !!-->
+<logvol name="OuterPP1Connectors" shape="shOuterPP1Connectors" material="matPP1OuterConnectors"/><!--Placeholder for visibility !!-->
+<logvol name="InnerPP1Connectors" shape="shInnerPP1Connectors" material="matPP1InnerConnectors"/><!--Placeholder for visibility !!-->
+<logvol name="pixSvc_PP1_T2_R700_R1000_Data" shape="shPixRed1Q1" material="matPixRed1"/>
+<logvol name="pixSvc_PP1_T2_R347_R1000_Data" shape="shPixRed2Q1" material="matPixRed2"/><!--Placeholder for visibility !!-->
+<logvol name="pixSvc_PP1_T2_R347_R420_CoolingInner" shape="shPixCoolingInnerQ1" material="matPixCoolingInner"/>
+<logvol name="pixSvc_PP1_T2_R420_R1000_CoolingOuter" shape="shPixCoolingOuterQ1" material="matPixCoolingOuter"/>
+<logvol name="pixSvc_PP1_T2_R420_R1000_CoolingSum" shape="shPixCoolingOuterQ1" material="matPixCoolingSum"/><!--Placeholder for visibility !!-->
+
+<assembly name="OuterPP1ConnectorWheel">
+  
+  <multicopy name="AddConnectorsToWheel" n="8">
+    <transformation name="PlaceConnectorsToWheel">
+      <rotation zcos="1." angle="PI/4"/>
+    </transformation>
+    <logvolref ref="OuterPP1Connectors"/>
+  </multicopy>
+  
+</assembly>
+
+<assembly name="InnerPP1ConnectorWheel">
+  
+  <multicopy name="AddIConnectorsToWheel" n="8">
+    <transformation name="PlaceIConnectorsToWheel">
+      <rotation zcos="1." angle="PI/4"/>
+    </transformation>
+    <logvolref ref="InnerPP1Connectors"/>
+  </multicopy>
+  
+</assembly>
+
+<assembly name="CoolingOuterWheel">
+  
+  <multicopy name="AddCoolingOuterToWheel" n="3">
+    <transformation name="PlaceCoolingOuterToWheel">
+      <rotation zcos="1." angle="PI/2"/>
+    </transformation>
+    <logvolref ref="pixSvc_PP1_T2_R420_R1000_CoolingOuter"/>
+  </multicopy>
+  
+</assembly>
+
+
+<assembly name="PixRed1Wheel">
+  
+  <multicopy name="AddPixRed1ToWheel" n="4">
+    <transformation name="PlacePixRed1ToWheel">
+      <rotation zcos="1." angle="PI/2"/>
+    </transformation>
+    <logvolref ref="pixSvc_PP1_T2_R700_R1000_Data"/>
+  </multicopy>
+  
+</assembly>
+<assembly name="PixRed2Wheel">
+  
+  <multicopy name="AddPixRed2ToWheel" n="4">
+    <transformation name="PlacePixRed2ToWheel">
+      <rotation zcos="1." angle="PI/2"/>
+    </transformation>
+    <logvolref ref="pixSvc_PP1_T2_R347_R1000_Data"/>
+  </multicopy>
+  
+</assembly>
+
+<!--<logvol name="PixType2DQ1" shape="shPixType2DQ1" material="matPixType2D"></logvol>-->
+<logvol name="pixSvc_PP1_T2_R347_R420_Power" shape="shPixType2DQ1" material="matPixType2D"/>
+
+
+
+<assembly name="PixType2DWheel">
+  <multicopy name="AddType2DaToWheel" n="4">
+    <transformation name="PlaceType2DaToWheel">
+      <rotation zcos="1." angle="PI/2"/>
+    </transformation>
+    <logvolref ref="pixSvc_PP1_T2_R347_R420_Power"/>
+  </multicopy>
+</assembly>
+
+<logvol name="pixSvc_PP1_T2_R420_R474_Power" shape="shPixType2EQ1" material="matPixType2E"/>
+
+
+<assembly name="PixType2EWheel">
+  <multicopy name="AddType2EbToWheel" n="4">
+    <transformation name="PlaceType2EbToWheel">
+      <rotation zcos="1." angle="PI/2"/>
+    </transformation>
+    <logvolref ref="pixSvc_PP1_T2_R420_R474_Power"/>
+  </multicopy>
+</assembly>
+
+<logvol name="pixSvc_PP1_T2_R474_R529_Power" shape="shPixType2FQ1" material="matPixType2F"/>
+
+
+<assembly name="PixType2FWheel">
+  
+  <multicopy name="AddType2FbToWheel" n="4">
+    <transformation name="PlaceType2FbToWheel">
+      <rotation zcos="1." angle="PI/2"/>
+    </transformation>
+    <logvolref ref="pixSvc_PP1_T2_R474_R529_Power"/>
+    </multicopy>
+  
+  </assembly>
+<!--<assembly name="PixType2FWheel">
+<assemblyref ref="PixType2aFWheel"/>
+<assemblyref ref="PixType2FbWheel"/>
+</assembly>-->
+
+
+
+<logvol name="pixSvc_PP1_T2_R529_R584_Power" shape="shPixType2GQ1" material="matPixType2G"/>
+<assembly name="PixType2GWheel">
+  
+  <multicopy name="AddType2GToWheel" n="4">
+    <transformation name="PlaceType2GToWheel">
+      <rotation zcos="1." angle="PI/2"/>
+    </transformation>
+    <logvolref ref="pixSvc_PP1_T2_R529_R584_Power"/>
+    </multicopy>
+  
+  </assembly>
+<logvol name="pixSvc_PP1_T2_R584_R639_Power" shape="shPixType2HQ1" material="matPixType2H"/>
+<assembly name="PixType2HWheel">
+  
+  <multicopy name="AddType2HToWheel" n="4">
+    <transformation name="PlaceType2HToWheel">
+      <rotation zcos="1." angle="PI/2"/>
+    </transformation>
+    <logvolref ref="pixSvc_PP1_T2_R584_R639_Power"/>
+    </multicopy>
+  
+  </assembly>
+<logvol name="pixSvc_PP1_T2_R639_R700_Power" shape="shPixType2IQ1" material="matPixType2I"/>
+<assembly name="PixType2IWheel">
+  
+  <multicopy name="AddType2IToWheel" n="4">
+    <transformation name="PlaceType2IToWheel">
+      <rotation zcos="1." angle="PI/2"/>
+    </transformation>
+    <logvolref ref="pixSvc_PP1_T2_R639_R700_Power"/>
+    </multicopy>
+  
+  </assembly>
+
+<logvol name="pixSvc_PP1_T2_R700_R1000_Power" shape="shPixType2LQ1" material="matPixType2L"/>
+<assembly name="PixType2LWheel">
+  
+  <multicopy name="AddType2LToWheel" n="4">
+    <transformation name="PlaceType2LToWheel">
+      <rotation zcos="1." angle="PI/2"/>
+    </transformation>
+    <logvolref ref="pixSvc_PP1_T2_R700_R1000_Power"/>
+    </multicopy>
+  
+  </assembly>
+
+
+<!--<logvol name="pixPP1middle" shape="shPix_PP1_middle" material="AlMetal"/>-->
+<logvol name="pixPP1outer" shape="pixPP1skin" material="AlMetal"/><!--Placeholder for visibility !!-->
+<logvol name="pixPP1" shape="ShPixPP1_Envelope" material="Air">
+<!--
+  <transform>
+      <transformation  name="PlaceB_PP1A">
+        <translation z="-PixPP1Type2Length/2 + B_PP1_L/2"/>
+      </transformation>
+      <logvolref ref="B_PP1"/>
+    </transform>-->
+  <transform>
+	 <transformation name="PlaceEC_PP1A">
+           <translation z="-PixPP1Type2Length/2 + EC_PP1_L/2"/>
+	 </transformation>
+	 <logvolref ref="EC_PP1"/>
+       </transform>
+  <transform>
+
+    <transformation name="PlacePixPP1outer">
+      <translation z="Pix_PP1_outer_Z_Start-Pix_PP1_Z_Start+Pix_PP1_outer_L/2+HXcorrection-PixPP1Type2Length/2"/>
+    </transformation>
+    <logvolref ref="pixPP1outer"/>
+  </transform>
+  <!--<transform>
+    <transformation name="PlacePixPP1middle">
+      <translation z="Pix_PP1_middle_Z_Start-Pix_PP1_Z_Start+Pix_PP1_middle_L/2+HXcorrection-PixPP1Type2Length/2"/>
+    </transformation>
+    <logvolref ref="pixPP1middle"/>
+  </transform>-->
+  <!--place HX here-->
+<transform>  
+    <transformation name="PlacePixPP1OuterServices">
+
+      <translation z="Pix_PP1_outer_Z_End - Pix_PP1_Z_Start -PixPP1Type2Length/2+(-Pix_PP1_outer_L*1.25)/2-0.5-ConnectorDepth"/>
+
+    </transformation>
+    <logvolref ref="Pix_PP1OuterServices"/>
+  </transform>
+<transform>  
+    <transformation name="PlacePixPP1Connectors">
+
+      <translation z="Pix_PP1_outer_Z_End - Pix_PP1_Z_Start-PixPP1Type2Length/2-22/2"/>
+      <rotation zcos="1" angle="PI/16"/>
+    </transformation>
+    <assemblyref ref="OuterPP1ConnectorWheel"/>
+  </transform>
+
+<transform>  
+  <transformation name="PlacePixPP1IConnectors">
+    
+    <translation z="Pix_PP1_middle_Z_End - Pix_PP1_Z_Start -PixPP1Type2Length/2-25/2"/>
+    <rotation zcos="1" angle="PI/16"/>
+  </transformation>
+  <assemblyref ref="InnerPP1ConnectorWheel"/>
+</transform>
+<transform>  
+  <transformation name="PlacePixPP1InnerServices">
+    
+    <translation z="Pix_PP1_outer_Z_End - Pix_PP1_Z_Start + (Pix_PP1_middle_Z_End - Pix_PP1_outer_Z_End)/2-25/2-PixPP1Type2Length/2"/>
+    
+  </transformation>
+  <logvolref ref="Pix_PP1InnerServices"/>
+</transform>
+
+  <transform>  
+    <transformation name="PlaceHeatExchange_NC">
+      <rotation zcos="1." angle="0.785398"/>
+      <translation z="HeatExchanger_z"/>
+      <translation x="HeatExchanger_Ri+HeatExchanger_w/2"/>
+    </transformation>
+    <assemblyref ref="HeatExchanger_doublet"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceHeatExchange_EC">
+      <rotation zcos="1." angle="2.35619"/>
+      <translation z="HeatExchanger_z"/>
+      <translation x="HeatExchanger_Ri+HeatExchanger_w/2"/>
+      <translation y="-HeatExchanger_w"/>
+    </transformation>
+    <logvolref ref="HeatExchanger"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceHeatExchange_SC">
+      <rotation zcos="1." angle="3.92699"/>
+      <translation z="HeatExchanger_z"/>
+      <translation x="HeatExchanger_Ri+HeatExchanger_w/2"/>
+    </transformation>
+    <logvolref ref="HeatExchanger"/>
+  </transform>
+  <transform>
+    <transformation name="PlaceHeatExchange_WC">
+      <rotation zcos="1." angle="5.49779"/>
+      <translation z="HeatExchanger_z"/>
+      <translation x="HeatExchanger_Ri+HeatExchanger_w/2"/>
+    </transformation>
+    <logvolref ref="HeatExchanger"/>
+  </transform>
+  <!--now Type 2 service-->
+  
+  <transform>
+    <transformation name="PlacePixRed1">
+      
+      <translation z="(Pix_PP1_outer_Z_End - Pix_PP1_Z_Start)/2 -PixPP1Type2Length/2"/>
+      <rotation zcos="1." angle="RedAngle"/>
+    </transformation>
+    <assemblyref ref="PixRed1Wheel"/>
+  </transform>
+  
+  <transform>
+    <transformation name="PlacePixRed2">
+      
+      <translation z="Pix_PP1_outer_Z_End - Pix_PP1_Z_Start + (Pix_PP1_middle_Z_End - Pix_PP1_outer_Z_End)/2-PixPP1Type2Length/2"/>
+<rotation zcos="1." angle="RedAngle"/>
+    </transformation>
+    <assemblyref ref="PixRed2Wheel"/>
+  </transform>
+  
+  <transform>
+    <transformation name="PlacePixCoolingOuter">
+      
+      <translation z="Pix_PP1_middle_Z_End - Pix_PP1_Z_Start + 30-PixPP1Type2Length/2+4"/>
+      <rotation zcos="1." angle="CoolingAngle-3*PI/2"/>
+    </transformation>
+    <assemblyref ref="CoolingOuterWheel"/>
+  </transform>
+
+<transform>
+    <transformation name="PlacePixCoolingInner">
+      
+      <translation z="Pix_PP1_middle_Z_End - Pix_PP1_Z_Start + 30-PixPP1Type2Length/2+4"/>
+      <rotation zcos="1." angle="CoolingAngle"/>
+    </transformation>
+    <logvolref ref="pixSvc_PP1_T2_R347_R420_CoolingInner"/>
+  </transform>
+
+<transform>
+    <transformation name="PlacePixCoolingSum">
+      
+      <translation z="Pix_PP1_middle_Z_End - Pix_PP1_Z_Start + 30-PixPP1Type2Length/2+4"/>
+      <rotation zcos="1." angle="CoolingAngle"/>
+    </transformation>
+    <logvolref ref="pixSvc_PP1_T2_R420_R1000_CoolingSum"/>
+  </transform>
+  
+  <transform>
+    <transformation name="PlacePixPP1Type2D">
+      
+      <translation z="Pix_PP1_cooling_Z_End - Pix_PP1_Z_Start + PixType2D_hl-PixPP1Type2Length/2+4"/>
+      <rotation zcos="1." angle="Type2Angle"/>
+      
+    </transformation>
+    <assemblyref ref="PixType2DWheel"/>
+  </transform>
+  
+  <transform>
+    <transformation name="PlacePixPP1Type2Da">
+      
+      <translation z="Pix_PP1_cooling_Z_End - Pix_PP1_Z_Start + PixType2D_hl-PixPP1Type2Length/2+4"/>
+      <rotation zcos="1." angle="Type2Angle_b"/>
+    </transformation>
+    <assemblyref ref="PixType2DWheel"/>
+  </transform>
+  
+  <transform>
+    <transformation name="PlacePixPP1Type2E">
+      
+      <translation z="(Pix_PP1_cooling_Z_End -Pix_PP1_Z_Start +PixType2E_hl)-PixPP1Type2Length/2+4"/>
+      <rotation zcos="1." angle="Type2Angle"/>
+    </transformation>
+    <assemblyref ref="PixType2EWheel"/>
+  </transform>
+  
+  
+  
+  
+  
+  <transform>
+    <transformation name="PlacePixPP1Type2Ea">
+      
+      <translation z="(Pix_PP1_cooling_Z_End -Pix_PP1_Z_Start +PixType2E_hl)-PixPP1Type2Length/2+4"/>
+      <rotation zcos="1." angle="Type2Angle_b"/>
+    </transformation>
+    <assemblyref ref="PixType2EWheel"/>
+  </transform>
+    
+  
+  <transform>
+    <transformation name="PlacePixPP1Type2F">
+      
+      <translation z="(Pix_PP1_cooling_Z_End -Pix_PP1_Z_Start +PixType2E_hl)-PixPP1Type2Length/2+4"/>
+      <rotation zcos="1." angle="Type2Angle"/>
+    </transformation>
+    <assemblyref ref="PixType2FWheel"/>
+  </transform>
+  <transform>
+    <transformation name="PlacePixPP1Type2Fa">
+      
+      <translation z="(Pix_PP1_cooling_Z_End -Pix_PP1_Z_Start +PixType2E_hl)-PixPP1Type2Length/2+4"/>
+      <rotation zcos="1." angle="Type2Angle_b"/>
+      
+      
+    </transformation>
+    <assemblyref ref="PixType2FWheel"/>
+  </transform>
+  
+  
+  
+  <transform>
+    <transformation name="PlacePixPP1Type2G">
+      
+      <translation z="(Pix_PP1_cooling_Z_End-Pix_PP1_Z_Start+PixType2E_hl)-PixPP1Type2Length/2+4"/>
+      <rotation zcos="1." angle="Type2Angle"/>
+    </transformation>
+    <assemblyref ref="PixType2GWheel"/>
+  </transform>
+<transform>
+    <transformation name="PlacePixPP1Type2Ga">
+      
+      <translation z="(Pix_PP1_cooling_Z_End-Pix_PP1_Z_Start+PixType2E_hl)-PixPP1Type2Length/2+4"/>
+      <rotation zcos="1." angle="Type2Angle_b"/>
+    </transformation>
+    <assemblyref ref="PixType2GWheel"/>
+  </transform>
+  
+  
+  
+  <transform>
+    <transformation name="PlacePixPP1Type2H">
+      
+      <translation z="(Pix_PP1_cooling_Z_End-Pix_PP1_Z_Start + PixType2E_hl)-PixPP1Type2Length/2+4"/>
+      <rotation zcos="1." angle="Type2Angle"/>
+    </transformation>
+    <assemblyref ref="PixType2HWheel"/>
+  </transform>
+  <transform>
+    <transformation name="PlacePixPP1Type2Ha">
+      
+      <translation z="(Pix_PP1_cooling_Z_End-Pix_PP1_Z_Start + PixType2E_hl)-PixPP1Type2Length/2+4"/>
+      <rotation zcos="1." angle="Type2Angle_b"/>
+    </transformation>
+    <assemblyref ref="PixType2HWheel"/>
+  </transform>
+  
+  
+  
+  <transform>
+    <transformation name="PlacePixPP1Type2I">
+      
+      <translation z="(Pix_PP1_cooling_Z_End-Pix_PP1_Z_Start + PixType2E_hl)-PixPP1Type2Length/2+4"/>
+      <rotation zcos="1." angle="Type2Angle"/>
+    </transformation>
+    <assemblyref ref="PixType2IWheel"/>
+  </transform>
+<transform>
+    <transformation name="PlacePixPP1Type2Ia">
+      
+      <translation z="(Pix_PP1_cooling_Z_End-Pix_PP1_Z_Start + PixType2E_hl)-PixPP1Type2Length/2+4"/>
+      <rotation zcos="1." angle="Type2Angle_b"/>
+    </transformation>
+    <assemblyref ref="PixType2IWheel"/>
+  </transform>
+  
+  
+  
+  <transform>
+    <transformation name="PlacePixPP1Type2L">
+
+      <translation z="PixPP1Type2Length/2-35/2"/>
+      <rotation zcos="1." angle="Type2Angle"/>
+    </transformation>
+    <assemblyref ref="PixType2LWheel"/>
+  </transform>
+
+<transform>
+    <transformation name="PlacePixPP1Type2La">
+
+      <translation z="PixPP1Type2Length/2-35/2"/>
+      <rotation zcos="1." angle="Type2Angle_b"/>
+    </transformation>
+    <assemblyref ref="PixType2LWheel"/>
+  </transform>
+  
+  
+  
+  
+</logvol>
+<!--<logvol name="pixPP1" shape="shPix_PP1_outer" material="Air"></logvol>-->
+<assembly name="PixPP1"> <!-- pixPP1 plus HeatExchangers -->
+  <logvolref ref="pixPP1"/>
+</assembly>
+
+
+<shapes>
+
+  <tube name="ShStripEnvelope" rmin="StripInnerRadius" rmax="StripOuterRadius - EPS" zhalflength="ITkHalfLength"/> 
+  <tube name="ShStripB_Envelope" rmin="StripB_InnerRadius" rmax="StripB_OuterRadius - 2*EPS" zhalflength="StripB_HalfLength"/>
+  <tube name="ShStripEC_Envelope" rmin="365." rmax="StripEC_OuterRadius - 2*EPS" zhalflength="StripEC_HalfLength-EPS"/> <!-- rmin = StripEC_InnerRadius originally -->
+  
+</shapes>
+<logvol name="SCT_ForwardPlus" shape="ShStripEC_Envelope" material="N2" alignable="true">
+  <transform>
+    <transformation name="MoveEC1ToEnvelope">
+      <translation z="-(StripEC_Z_Start + StripEC_HalfLength)"/>
+    </transformation>
+    <assemblyref ref="SCT_Forward"/>
+  </transform>	
+</logvol>
+
+<!-- We make an identical logvol differing only in name for the other endcap, to fit with SCT_GeoModel convention -->
+<logvol name="SCT_ForwardMinus" shape="ShStripEC_Envelope" material="N2" alignable="true">
+  <transform>
+    <transformation name="MoveEC2ToEnvelope">
+      <translation z="-(StripEC_Z_Start + StripEC_HalfLength)"/>
+    </transformation>
+    <assemblyref ref="SCT_Forward"/>
+  </transform>
+</logvol>
+
+<!--log vol for pix pp1-->
+<!--
+<logvol name="SCT_PixPP1Plus" shape="ShPixPP1_Envelope" material="Air" alignable="true">
+  <transform>
+    <transformation name="MovePixPP11ToEnvelope">
+      
+      <translation z="-(Pix_PP1_outer_Z_Start+190)"/>
+    </transformation>
+    <assemblyref ref="PixPP1"/>
+  </transform>	
+</logvol>
+
+
+
+<logvol name="SCT_PixPP1Minus" shape="ShPixPP1_Envelope" material="Air" alignable="true">
+  <transform>
+    <transformation name="MovePixPP12ToEnvelope">
+      
+      <translation z="-(Pix_PP1_outer_Z_Start + 190)"/>
+    </transformation>
+   <assemblyref ref="PixPP1"/>
+  </transform>
+</logvol>
+-->
+<!--log vol for pix pp1-->
+
+<addbranch>
+
+  <logvol name="SCT" shape="ShStripEnvelope" material="N2">
+
+    <logvolref ref="PolyModOCEnvelope"/>
+
+    <transform>
+      <transformation name="PlaceBulkheadA">
+        <translation z="BulkheadTranslation"/>
+      </transformation>
+      <logvolref ref="Bulkhead"/>
+    </transform>
+    
+    <transform>
+      <transformation name="PlaceBulkheadC">
+        <translation z="-BulkheadTranslation"/>
+      </transformation>
+      <logvolref ref="Bulkhead"/>
+    </transform>
+    
+    <transform>
+      <transformation name="PlaceB_PP1A">
+        <translation z="B_PP1_Z_Start + B_PP1_L/2"/>
+      </transformation>
+      <logvolref ref="B_PP1"/>
+    </transform>
+    
+    <transform>
+      <transformation name="PlaceB_PP1C">
+        <translation z="-(B_PP1_Z_Start + B_PP1_L/2)"/>
+      </transformation>
+      <logvolref ref="B_PP1"/>
+    </transform>
+    <!--
+       <transform>
+	 <transformation  name="PlaceEC_PP1A">
+           <translation z="EC_PP1_Z_Start + EC_PP1_L/2"/>
+	 </transformation>
+	 <logvolref ref="EC_PP1"/>
+       </transform>
+       
+       <transform>
+	 <transformation  name="PlaceEC_PP1C">
+           <translation z="-(EC_PP1_Z_Start + EC_PP1_L/2)"/>
+	 </transformation>
+	 <logvolref ref="EC_PP1"/>
+       </transform>
+      
+       <transform>
+	 <transformation  name="PlacePix_PP1_middle_C">
+           <translation z="-(Pix_PP1_middle_Z_Start + Pix_PP1_middle_L/2)"/>
+	 </transformation>
+	 <logvolref ref="pixPP1"/>
+       </transform>
+       -->
+       
+       <!--
+       <transform>
+	 <transformation  name="PlaceHeatExchange_NA">
+	   <rotation  zcos="1." angle="0.785398"/>
+           <translation z="HeatExchanger_z"/>
+           <translation x="HeatExchanger_Ri+HeatExchanger_w/2"/>
+	 </transformation>
+	 <logvolref ref="HeatExchanger"/>
+       </transform>
+       <transform>
+	 <transformation  name="PlaceHeatExchange_EA">
+	   <rotation  zcos="1." angle="2.35619"/>
+           <translation z="HeatExchanger_z"/>
+           <translation x="HeatExchanger_Ri+HeatExchanger_w/2"/>
+	 </transformation>
+	 <logvolref ref="HeatExchanger"/>
+       </transform>
+       <transform>
+	 <transformation  name="PlaceHeatExchange_SA">
+	   <rotation  zcos="1." angle="3.92699"/>
+           <translation z="HeatExchanger_z"/>
+           <translation x="HeatExchanger_Ri+HeatExchanger_w/2"/>
+	 </transformation>
+	 <logvolref ref="HeatExchanger"/>
+       </transform>
+       <transform>
+	 <transformation  name="PlaceHeatExchange_WA">
+	   <rotation  zcos="1." angle="5.49779"/>
+           <translation z="HeatExchanger_z"/>
+           <translation x="HeatExchanger_Ri+HeatExchanger_w/2"/>
+	 </transformation>
+	 <logvolref ref="HeatExchanger"/>
+       </transform>
+       
+       <transform>
+	 <transformation  name="PlaceHeatExchange_NC">
+	   <rotation  zcos="1." angle="0.785398"/>
+           <translation z="-HeatExchanger_z"/>
+           <translation x="HeatExchanger_Ri+HeatExchanger_w/2"/>
+	 </transformation>
+	 <logvolref ref="HeatExchanger"/>
+       </transform>
+       <transform>
+	 <transformation  name="PlaceHeatExchange_EC">
+	   <rotation  zcos="1." angle="2.35619"/>
+           <translation z="-HeatExchanger_z"/>
+           <translation x="HeatExchanger_Ri+HeatExchanger_w/2"/>
+	 </transformation>
+	 <logvolref ref="HeatExchanger"/>
+       </transform>
+       <transform>
+	 <transformation  name="PlaceHeatExchange_SC">
+	   <rotation  zcos="1." angle="3.92699"/>
+           <translation z="-HeatExchanger_z"/>
+           <translation x="HeatExchanger_Ri+HeatExchanger_w/2"/>
+	 </transformation>
+	 <logvolref ref="HeatExchanger"/>
+       </transform>
+       <transform>
+	 <transformation  name="PlaceHeatExchange_WC">
+	   <rotation  zcos="1." angle="5.49779"/>
+           <translation z="-HeatExchanger_z"/>
+           <translation x="HeatExchanger_Ri+HeatExchanger_w/2"/>
+	 </transformation>
+	 <logvolref ref="HeatExchanger"/>
+       </transform>
+       -->
+    <index ref="barrel_endcap" value="0"/>
+    <transform alignable="3">
+      <transformation name="NoneButNeededForAlignable" alignable="true">
+	<translation/>
+      </transformation>
+      <logvol name="SCT_Barrel" shape="ShStripB_Envelope" material="N2" alignable="true">
+	<assemblyref ref="StripB"/>
+      </logvol>
+    </transform>
+    
+    <index ref="barrel_endcap" value="2"/>
+    <transform alignable="3">
+      <transformation name="PlaceEC_Plus" alignable="true">
+        <translation z="StripEC_Z_Start + StripEC_HalfLength"/>
+      </transformation>
+      <logvolref ref="SCT_ForwardPlus"/>
+    </transform>
+    
+    <index ref="barrel_endcap" value="-2"/>
+    <transform alignable="3">
+      <transformation name="TurnE_A_ToE_C" alignable="true">
+        <rotation ycos="1." angle="PI"/>
+        <translation z="StripEC_Z_Start + StripEC_HalfLength"/>
+      </transformation>
+      <logvolref ref="SCT_ForwardMinus"/>
+    </transform>
+    
+
+    <transform>
+      <transformation name="TurnPixPP1plus">
+	
+	<translation z="(Pix_PP1_Z_Start + 190)"/>
+      </transformation>
+      <logvolref ref="pixPP1"/>
+    </transform>
+
+    <transform>
+      <transformation name="TurnPixPP1minus">
+	<rotation ycos="1." angle="PI"/>
+	<translation z="(Pix_PP1_Z_Start + 190)"/>
+      </transformation>
+      <logvolref ref="pixPP1"/>
+    </transform>
+
+<!--
+    <transform>
+      <transformation name="PlacePixPP1Type2D">
+	
+	<translation z="(Pix_PP1_middle_Z_End + PixType2D_hl)"/>
+      </transformation>
+      <logvolref ref="pixType2D"/>
+    </transform>
+    
+    <transform>
+      <transformation name="TurnPixPP1Type2D_minus" >
+	<rotation ycos="1." angle="PI"/>
+	<translation z="(Pix_PP1_middle_Z_End + PixType2D_hl)"/>
+      </transformation>
+      <logvolref ref="pixType2D"/>
+    </transform>
+
+ <transform>
+      <transformation name="PlacePixPP1Type2E">
+	
+	<translation z="(Pix_PP1_outer_Z_End + PixType2E_hl)"/>
+      </transformation>
+      <logvolref ref="pixType2E"/>
+    </transform>
+    
+    <transform>
+      <transformation name="TurnPixPP1Type2E_minus" >
+	<rotation ycos="1." angle="PI"/>
+	<translation z="(Pix_PP1_outer_Z_End + PixType2E_hl)"/>
+      </transformation>
+      <logvolref ref="pixType2E"/>
+    </transform>
+
+<transform>
+      <transformation name="PlacePixPP1Type2F">
+	
+	<translation z="(Pix_PP1_outer_Z_End + PixType2E_hl)"/>
+      </transformation>
+      <logvolref ref="pixType2F"/>
+    </transform>
+    
+    <transform>
+      <transformation name="TurnPixPP1Type2F_minus" >
+	<rotation ycos="1." angle="PI"/>
+	<translation z="(Pix_PP1_outer_Z_End + PixType2E_hl)"/>
+      </transformation>
+      <logvolref ref="pixType2F"/>
+    </transform>
+
+<transform>
+      <transformation name="PlacePixPP1Type2G">
+	
+	<translation z="(Pix_PP1_outer_Z_End + PixType2E_hl)"/>
+      </transformation>
+      <logvolref ref="pixType2G"/>
+    </transform>
+    
+    <transform>
+      <transformation name="TurnPixPP1Type2G_minus" >
+	<rotation ycos="1." angle="PI"/>
+	<translation z="(Pix_PP1_outer_Z_End + PixType2E_hl)"/>
+      </transformation>
+      <logvolref ref="pixType2G"/>
+    </transform>
+
+<transform>
+      <transformation name="PlacePixPP1Type2H">
+	
+	<translation z="(Pix_PP1_outer_Z_End + PixType2E_hl)"/>
+      </transformation>
+      <logvolref ref="pixType2H"/>
+    </transform>
+    
+    <transform>
+      <transformation name="TurnPixPP1Type2H_minus" >
+	<rotation ycos="1." angle="PI"/>
+	<translation z="(Pix_PP1_outer_Z_End + PixType2E_hl)"/>
+      </transformation>
+      <logvolref ref="pixType2H"/>
+    </transform>
+
+<transform>
+      <transformation name="PlacePixPP1Type2I">
+	
+	<translation z="(Pix_PP1_outer_Z_End + PixType2E_hl)"/>
+      </transformation>
+      <logvolref ref="pixType2I"/>
+    </transform>
+    
+    <transform>
+      <transformation name="TurnPixPP1Type2I_minus" >
+	<rotation ycos="1." angle="PI"/>
+	<translation z="(Pix_PP1_outer_Z_End + PixType2E_hl)"/>
+      </transformation>
+      <logvolref ref="pixType2I"/>
+    </transform>
+
+<transform>
+      <transformation name="PlacePixPP1Type2J">
+	
+	<translation z="(PixType2OutZ_start + PixType2OutZ_w/2)"/>
+      </transformation>
+      <logvolref ref="pixType2J"/>
+    </transform>
+    
+    <transform>
+      <transformation name="TurnPixPP1Type2J_minus" >
+	<rotation ycos="1." angle="PI"/>
+	<translation z="(PixType2OutZ_start + PixType2OutZ_w/2)"/>
+      </transformation>
+      <logvolref ref="pixType2J"/>
+    </transform>
+
+<transform>
+      <transformation name="PlacePixPP1Type2K">
+	
+	<translation z="(PixType2OutZ_start + PixType2OutZ_w/2)"/>
+      </transformation>
+      <logvolref ref="pixType2K"/>
+    </transform>
+    
+    <transform>
+      <transformation name="TurnPixPP1Type2K_minus" >
+	<rotation ycos="1." angle="PI"/>
+	<translation z="(PixType2OutZ_start + PixType2OutZ_w/2)"/>
+      </transformation>
+      <logvolref ref="pixType2K"/>
+    </transform>
+
+<transform>
+      <transformation name="PlacePixPP1Type2L">
+	
+	<translation z="(PixType2OutZ_start + PixType2OutZ_w/2)"/>
+      </transformation>
+      <logvolref ref="pixType2L"/>
+    </transform>
+    
+    <transform>
+      <transformation name="TurnPixPP1Type2L_minus" >
+	<rotation ycos="1." angle="PI"/>
+	<translation z="(PixType2OutZ_start + PixType2OutZ_w/2)"/>
+      </transformation>
+      <logvolref ref="pixType2L"/>
+    </transform>
+-->
+    
+   
+
+    <!-- Service volumes -->
+    <transform>
+      <transformation name="PlaceBServicesPlus">
+	<translation z="StripB_ServicesGapZ_Start + StripB_ServicesGapHalfLength"/>
+      </transformation>
+      <assemblyref ref="SV_Barrel"/>
+    </transform>
+  
+  <transform>
+    <transformation name="PlaceBServicesMinus">
+      <rotation ycos="1." angle="PI"/>
+      <translation z="(StripB_ServicesGapZ_Start + StripB_ServicesGapHalfLength)"/>
+    </transformation>
+    <assemblyref ref="SV_Barrel"/>
+  </transform>
+  
+  <transform>
+    <transformation name="PlaceBServicesAtECPlus">
+      <translation z="StripB_ServicesEC_Z_Start + StripB_ServicesEC_HalfLength+EPS"/> <!-- Shrunk services by 10 halflength to fit SCT Barrel expansion -->
+    </transformation>
+    <assemblyref ref="SV_BarrelAtEC"/>
+  </transform>
+  
+  <transform>
+    <transformation name="PlaceBServicesAtECMinus">
+      <rotation ycos="1." angle="PI"/>
+      <translation z="StripB_ServicesEC_Z_Start + StripB_ServicesEC_HalfLength+EPS"/> <!-- Shrunk services by 10 halflength to fit SCT Barrel expansion -->
+    </transformation>
+    <assemblyref ref="SV_BarrelAtEC"/>
+  </transform>
+  
+  <transform>
+    <transformation name="PlaceECServicesPlus">
+      <translation z="StripEC_ServicesZ_Start + StripEC_ServicesHalfLength + EPS"/>
+    </transformation>
+    <assemblyref ref="SV_Endcap"/>
+  </transform>
+  
+  <transform>
+    <transformation name="PlaceECServicesMinus">
+      <rotation ycos="1." angle="PI"/>
+      <translation z="(StripEC_ServicesZ_Start + StripEC_ServicesHalfLength + EPS)"/>         
+      
+      
+    </transformation>
+    <assemblyref ref="SV_Endcap"/>
+  </transform>
+  
+  <transform>
+    <transformation name="PlaceRailShelfSquareCompleteA">
+      <translation x="RailRadius"/>
+      <translation z="StripEC_Z_Start + 0.5 + EC_InnerCylLength / 2."/>
+    </transformation>
+    <assemblyref ref="RailShelfSquareComplete"/>
+  </transform>
+  
+  <transform>
+    <transformation name="PlaceRailShelfCircleCompleteA">
+      <translation x="-RailRadius"/>
+      <translation z="StripEC_Z_Start + 0.5 + EC_InnerCylLength / 2."/>
+    </transformation>
+    <assemblyref ref="RailShelfCircleComplete"/>
+  </transform>
+  
+  <transform>
+    <transformation name="PlacePSTA">
+      <translation z="StripEC_Z_Start + 0.5 + EC_InnerCylLength / 2."/>
+    </transformation>
+    <assemblyref ref="EndcapPST"/>
+  </transform>
+  
+  <transform>
+    <transformation name="PlaceRailShelfSquareCompleteC">
+      <translation x="-( RailRadius )"/>
+      <translation z="-( StripEC_Z_Start + 0.5 + EC_InnerCylLength / 2. )"/>
+      <rotation ycos="1." angle="PI"/>
+    </transformation>
+    <assemblyref ref="RailShelfSquareComplete"/>
+  </transform>
+  
+  <transform>
+    <transformation name="PlaceRailShelfCircleCompleteC">
+      <translation x="RailRadius"/>
+      <translation z="-( StripEC_Z_Start + 0.5 + EC_InnerCylLength / 2. )"/>
+      <rotation ycos="1." angle="PI"/>
+    </transformation>
+    <assemblyref ref="RailShelfCircleComplete"/>
+  </transform>
+  
+  <transform>
+    <transformation name="PlacePSTC">
+      <translation z="-( StripEC_Z_Start + 0.5 + EC_InnerCylLength / 2. )"/>
+    </transformation>
+    <assemblyref ref="EndcapPST"/>
+  </transform>
+  
+</logvol>
+
+</addbranch>
+
+</geomodel>
diff --git a/GMXPlugin/data/geomodel.dtd b/GMXPlugin/data/geomodel.dtd
new file mode 100644
index 000000000..54cf5c59d
--- /dev/null
+++ b/GMXPlugin/data/geomodel.dtd
@@ -0,0 +1,245 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!-- Copyright N.P. Hessey, Nikhef, 2013 -->
+
+<!ELEMENT geomodel ((defines|materials|readoutgeometry|positionindex|shapes|logvol|transformation|assembly)+, addbranch)>
+  <!ATTLIST geomodel name    CDATA "Unnamed detector"
+                     version CDATA "0.0"
+                     xmlns   CDATA #FIXED "http://www.nikhef.nl/%7Er29/gmx">
+
+  <!ELEMENT defines (var|vector|matrix)+>
+
+    <!ELEMENT var EMPTY>
+      <!ATTLIST var name  ID    #REQUIRED
+                    value CDATA #REQUIRED>
+
+    <!ELEMENT vector EMPTY>
+      <!ATTLIST vector name  ID    #REQUIRED
+                       value CDATA #REQUIRED>
+
+    <!ELEMENT matrix EMPTY>
+      <!ATTLIST matrix name   ID    #REQUIRED
+                       coldim CDATA #REQUIRED
+                       value  CDATA #REQUIRED>
+
+  <!ELEMENT materials ((element|chemical|material)+)>
+    <!ATTLIST materials densitysf CDATA "1.0">
+
+    <!ELEMENT element EMPTY>
+      <!ATTLIST element name      ID      #REQUIRED
+                        shortname NMTOKEN #REQUIRED
+                        Z         CDATA   #REQUIRED
+                        A         CDATA   #REQUIRED>
+
+    <!ELEMENT chemical (elemcontent)+>
+      <!ATTLIST chemical name ID #REQUIRED>
+      <!ELEMENT elemcontent EMPTY>
+        <!ATTLIST elemcontent ref      IDREF #REQUIRED
+                              quantity CDATA #REQUIRED>
+
+    <!ELEMENT material (elementref|materialref|chemicalref)+>
+      <!ATTLIST material name    ID    #REQUIRED
+                         density CDATA #REQUIRED>
+
+      <!ELEMENT elementref EMPTY>
+        <!ATTLIST elementref ref      IDREF #REQUIRED
+                             fraction CDATA #REQUIRED>
+
+      <!ELEMENT materialref EMPTY>
+        <!ATTLIST materialref ref      IDREF #REQUIRED
+                              fraction CDATA #REQUIRED>
+
+      <!ELEMENT chemicalref EMPTY>
+        <!ATTLIST chemicalref ref      IDREF #REQUIRED
+                              fraction CDATA #REQUIRED>
+
+  <!ELEMENT readoutgeometry (param*, sensorclass+)>
+    <!ELEMENT param EMPTY>
+      <!ATTLIST param name  NMTOKEN #REQUIRED
+                      value CDATA   #REQUIRED>
+    <!ELEMENT sensorclass (param*, sensortype+)>
+    <!ATTLIST sensorclass name ID #REQUIRED>
+      <!ELEMENT sensortype (param*)>
+        <!ATTLIST sensortype name ID #REQUIRED>
+
+  <!ELEMENT positionindex (addindex+)>
+    <!ELEMENT addindex EMPTY>
+        <!ATTLIST addindex name ID #REQUIRED>
+
+  <!ELEMENT shapes ((box|cons|generictrap|para|pcon|pgon|trap|tube|tubs|trd|intersection|subtraction|union)+)>
+    <!-- All shapes allowed in GeoModel manual. Same name, parameters, parameter order, but always lower case -->
+
+    <!ELEMENT box EMPTY>
+      <!ATTLIST box name        ID    #REQUIRED
+                    xhalflength CDATA #REQUIRED
+                    yhalflength CDATA #REQUIRED
+                    zhalflength CDATA #REQUIRED>
+
+    <!ELEMENT cons EMPTY>
+      <!ATTLIST cons name  ID #REQUIRED
+                     rmin1 CDATA #REQUIRED
+                     rmin2 CDATA #REQUIRED
+                     rmax1 CDATA #REQUIRED
+                     rmax2 CDATA #REQUIRED
+                     dz    CDATA #REQUIRED
+                     sphi  CDATA #REQUIRED
+                     dphi  CDATA #REQUIRED>
+
+    <!ELEMENT generictrap EMPTY>
+      <!ATTLIST generictrap name        ID    #REQUIRED
+                            x0          CDATA #REQUIRED
+                            y0          CDATA #REQUIRED
+                            x1          CDATA #REQUIRED
+                            y1          CDATA #REQUIRED
+                            x2          CDATA #REQUIRED
+                            y2          CDATA #REQUIRED
+                            x3          CDATA #REQUIRED
+                            y3          CDATA #REQUIRED
+                            x4          CDATA #REQUIRED
+                            y4          CDATA #REQUIRED
+                            x5          CDATA #REQUIRED
+                            y5          CDATA #REQUIRED
+                            x6          CDATA #REQUIRED
+                            y6          CDATA #REQUIRED
+                            x7          CDATA #REQUIRED
+                            y7          CDATA #REQUIRED
+                            zhalflength CDATA #REQUIRED>
+
+    <!ELEMENT para EMPTY>
+      <!ATTLIST para name        ID    #REQUIRED
+                     xhalflength CDATA #REQUIRED
+                     yhalflength CDATA #REQUIRED
+                     zhalflength CDATA #REQUIRED
+                     alpha       CDATA #REQUIRED
+                     theta       CDATA #REQUIRED
+                     phi         CDATA #REQUIRED>
+
+    <!ELEMENT pcon (addplane, addplane+)>
+      <!ELEMENT addplane EMPTY>
+        <!ATTLIST addplane zplane    CDATA #REQUIRED
+                           rminplane CDATA #REQUIRED
+                           rmaxplane CDATA #REQUIRED>
+ 
+      <!ATTLIST pcon name ID    #REQUIRED
+                     sphi CDATA #REQUIRED
+                     dphi CDATA #REQUIRED>
+
+    <!ELEMENT pgon (addplane, addplane+)>
+      <!ATTLIST pgon name   ID    #REQUIRED
+                     sphi   CDATA #REQUIRED
+                     dphi   CDATA #REQUIRED
+                     nsides CDATA #REQUIRED>
+
+    <!ELEMENT trap EMPTY>
+      <!ATTLIST trap name        ID    #REQUIRED
+                     zhalflength CDATA #REQUIRED
+                     theta       CDATA #REQUIRED
+                     phi         CDATA #REQUIRED
+                     dydzn       CDATA #REQUIRED
+                     dxdyndzn    CDATA #REQUIRED
+                     dxdypdzn    CDATA #REQUIRED
+                     angleydzn   CDATA #REQUIRED
+                     dydzp       CDATA #REQUIRED
+                     dxdyndzp    CDATA #REQUIRED
+                     dxdypdzp    CDATA #REQUIRED
+                     angleydzp   CDATA #REQUIRED>
+
+    <!ELEMENT tube EMPTY>
+      <!ATTLIST tube name        ID    #REQUIRED
+                     rmin        CDATA #REQUIRED
+                     rmax        CDATA #REQUIRED
+                     zhalflength CDATA #REQUIRED>
+
+    <!ELEMENT tubs EMPTY>
+      <!ATTLIST tubs name        ID    #REQUIRED
+                     rmin        CDATA #REQUIRED
+                     rmax        CDATA #REQUIRED
+                     zhalflength CDATA #REQUIRED
+                     sphi        CDATA #REQUIRED
+                     dphi        CDATA #REQUIRED>
+
+    <!ELEMENT trd EMPTY>
+      <!ATTLIST trd name         ID    #REQUIRED
+                    xhalflength1 CDATA #REQUIRED
+                    xhalflength2 CDATA #REQUIRED
+                    yhalflength1 CDATA #REQUIRED
+                    yhalflength2 CDATA #REQUIRED
+                    zhalflength  CDATA #REQUIRED>
+
+    <!ELEMENT intersection (shaperef, (transformation|transformationref), shaperef)>
+      <!ATTLIST intersection name ID #REQUIRED>
+
+    <!ELEMENT subtraction (shaperef, (transformation|transformationref), shaperef)>
+      <!ATTLIST subtraction name ID #REQUIRED>
+
+    <!ELEMENT union (shaperef, (transformation|transformationref), shaperef)>
+      <!ATTLIST union name ID #REQUIRED>
+
+  <!ELEMENT shaperef EMPTY>
+    <!ATTLIST shaperef ref IDREF #REQUIRED>
+
+  <!ELEMENT transform ((transformation|transformationref), (logvol|logvolref|assembly|assemblyref))>
+    <!ATTLIST transform name      ID    #IMPLIED
+                        alignable CDATA #IMPLIED> <!-- CDATA = alignment level-number -->
+
+    <!ELEMENT transformation (scaling|rotation|translation)+>
+
+      <!ELEMENT scaling EMPTY>
+        <!ATTLIST scaling x CDATA "1.0"
+                          y CDATA "1.0"
+                          z CDATA "1.0">
+
+      <!ELEMENT rotation EMPTY>
+        <!ATTLIST rotation xcos  CDATA "0.0"
+                           ycos  CDATA "0.0"
+                           zcos  CDATA "0.0"
+                           angle CDATA "0.0">
+
+      <!ELEMENT translation EMPTY>
+        <!ATTLIST translation x CDATA "0.0"
+                              y CDATA "0.0"
+                              z CDATA "0.0">
+
+      <!ATTLIST transformation name ID #REQUIRED>
+      <!ATTLIST transformation alignable (true|false) "false"> 
+
+    <!ELEMENT transformationref EMPTY>
+      <!ATTLIST transformationref ref IDREF #REQUIRED>
+
+  <!ELEMENT logvol (transform|logvol|logvolref|assembly|assemblyref|multicopy|index)*>
+    <!-- If sensitive is not given, it is not sensitive. If given, it points to a digitization scheme -->
+    <!ATTLIST logvol name ID #REQUIRED
+                     shape IDREF #REQUIRED
+                     material IDREF #REQUIRED
+                     sensitive IDREF #IMPLIED 
+                     alignable (true|false) "false"> 
+
+  <!ELEMENT index EMPTY>
+    <!ATTLIST index ref   IDREF #REQUIRED
+                    value CDATA #REQUIRED>
+
+  <!ELEMENT logvolref EMPTY>
+    <!ATTLIST logvolref ref    IDREF         #REQUIRED
+                        zeroid (true|false) "false">
+
+  <!ELEMENT assembly (transform|logvol|logvolref|assembly|assemblyref|multicopy|index)+>
+    <!ATTLIST assembly name      ID           #REQUIRED
+                       alignable (true|false) "false"> 
+
+  <!ELEMENT assemblyref EMPTY>
+    <!ATTLIST assemblyref ref    IDREF        #REQUIRED
+                          zeroid (true|false) "false">
+
+  <!ELEMENT multicopy (transformation, (transform|logvolref|assemblyref))>
+    <!-- Removed logvol and assembly from multicopy content. There is no particular reason 
+         why they shouldn't be allowed there. But in practice one uses refs, and forbidding them simplifies coding 
+         the index stuff. If you need them, put them back. Got rid of transformref; never used. -->
+    <!-- loopvar: Set to a vector variable name or omit; see manual -->
+    <!-- alignable: Value is the alignment level-number -->
+    <!ATTLIST multicopy name      ID    #REQUIRED
+                        n         CDATA #REQUIRED
+                        loopvar   CDATA #IMPLIED
+                        alignable CDATA #IMPLIED>
+    <!-- N.B. no zeroid attribute: the copy-number is always zeroed each time the multicopy is inserted; no choice -->
+
+  <!ELEMENT addbranch (transform|logvol|logvolref|assembly|assemblyref)+>
+
diff --git a/GMXPlugin/src/GMXPlugin.cxx b/GMXPlugin/src/GMXPlugin.cxx
new file mode 100644
index 000000000..ffa34f585
--- /dev/null
+++ b/GMXPlugin/src/GMXPlugin.cxx
@@ -0,0 +1,74 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+
+#include "GeoModelKernel/GeoVGeometryPlugin.h"
+
+
+#include "GeoModelKernel/GeoNameTag.h"
+#include "GeoModelKernel/Units.h"
+#define SYSTEM_OF_UNITS GeoModelKernelUnits // so we will get, e.g., 'GeoModelKernelUnits::cm'
+
+#include "GeoModelXml/GmxInterface.h"
+#include "GeoModelXml/Gmx2Geo.h"
+
+#include <iostream>
+#include <fstream>
+#include <sstream>
+
+class GMXPlugin : public GeoVGeometryPlugin  {
+
+ public:
+
+  // Constructor:
+  GMXPlugin();
+
+  // Destructor:
+  ~GMXPlugin();
+
+  // Creation of geometry:
+  virtual void create(GeoPhysVol *world);
+
+ private:
+
+  // Illegal operations:
+  const GMXPlugin & operator=(const GMXPlugin &right)=delete;
+  GMXPlugin(const GMXPlugin &right) = delete;
+
+};
+
+
+
+
+
+GMXPlugin::GMXPlugin()
+{
+}
+
+
+GMXPlugin::~GMXPlugin()
+{
+}
+
+
+//## Other Operations (implementation)
+void GMXPlugin::create(GeoPhysVol *world)
+{
+
+  	std::cout<< "creating a GeoModelXml detector "<<std::endl;
+	
+	std::ifstream xmlFile("gmx.xml");
+	std::stringstream gmxInput;
+	gmxInput<<xmlFile.rdbuf();
+	
+//	std::cout<< " string being parsed "<<std::endl<<std::endl<<gmxInput.str()<<std::endl;
+	
+	GmxInterface gmxInterface;
+	Gmx2Geo gmx2Geo("gmx.xml", world, gmxInterface, 0);
+
+}
+
+extern "C" GMXPlugin *createGMXPlugin() {
+  return new GMXPlugin;
+}
diff --git a/GeoModelXml/CMakeLists.txt b/GeoModelXml/CMakeLists.txt
new file mode 100644
index 000000000..599797044
--- /dev/null
+++ b/GeoModelXml/CMakeLists.txt
@@ -0,0 +1,56 @@
+cmake_minimum_required( VERSION 3.1 )
+
+# Set up the project.
+project( "GeoModelXml" VERSION 1.0.0 LANGUAGES CXX )
+
+find_package( GeoModelCore REQUIRED )
+find_package( Eigen3 REQUIRED )
+find_package( GeoModelTools REQUIRED )
+find_package( Eigen3 REQUIRED )
+find_package( XercesC REQUIRED )
+find_package( ZLIB REQUIRED )
+
+
+# Set default build options.
+set( CMAKE_BUILD_TYPE "Release" CACHE STRING "CMake build mode to use" )
+set( CMAKE_CXX_STANDARD 14 CACHE STRING "C++ standard used for the build" )
+set( CMAKE_CXX_EXTENSIONS FALSE CACHE BOOL "(Dis)allow using GNU extensions" )
+
+# Use the GNU install directory names.
+include( GNUInstallDirs )
+
+# Find the header and source files.
+file( GLOB SOURCES src/*.cxx )
+file( GLOB HEADERS GeoModelXml/*.h )
+file( GLOB SHAPEHEADERS GeoModelXml/shape/*.h )
+
+
+# Create the library.
+add_library( GeoModelXml SHARED ${HEADERS} ${SOURCES} )
+set_property( TARGET GeoModelXml
+   PROPERTY PUBLIC_HEADER ${HEADERS} )
+
+target_compile_definitions( GeoModelXml PUBLIC -DSTANDALONE_GMX )
+target_link_libraries( GeoModelXml PUBLIC GeoModelCore::GeoModelKernel ExpressionEvaluator XercesC::XercesC ZLIB::ZLIB  )
+#  target_include_directories( AGDDKernel SYSTEM PUBLIC ${EIGEN3_INCLUDE_DIR} ) )
+target_include_directories( GeoModelXml PUBLIC ${EIGEN3_INCLUDE_DIR}
+   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+   $<INSTALL_INTERFACE:include> )
+source_group( "GeoModelXml" FILES ${HEADERS} )
+source_group( "src" FILES ${SOURCES} )
+
+
+# 
+install( TARGETS GeoModelXml EXPORT GeoModelXml-export LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+  PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/GeoModelXml )
+install( FILES ${SHAPEHEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/GeoModelXml/shape)
+#
+# Version the shared library. (Please update when cutting a new release!)
+#
+set(MYLIB_VERSION_MAJOR 1)
+set(MYLIB_VERSION_MINOR 1)
+set(MYLIB_VERSION_PATCH 0)
+set(MYLIB_VERSION_STRING ${MYLIB_VERSION_MAJOR}.${MYLIB_VERSION_MINOR}.${MYLIB_VERSION_PATCH})
+
+set_target_properties(GeoModelXml PROPERTIES VERSION ${MYLIB_VERSION_STRING} SOVERSION ${MYLIB_VERSION_MAJOR})
+
diff --git a/GeoModelXml/GeoModelXml/AddbranchProcessor.h b/GeoModelXml/GeoModelXml/AddbranchProcessor.h
new file mode 100644
index 000000000..c9f7350b9
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/AddbranchProcessor.h
@@ -0,0 +1,17 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef GEO_MODEL_XML_ADD_BRANCH_PROCESSOR_H
+#define GEO_MODEL_XML_ADD_BRANCH_PROCESSOR_H
+//
+//   Processor for addbranch tags.
+//
+#include "GeoModelXml/ElementProcessor.h"
+
+class AddbranchProcessor: public ElementProcessor {
+public:
+    void process(const xercesc::DOMElement *element, GmxUtil &util, GeoNodeList &toAdd);
+};
+
+#endif // ADD_BRANCH_PROCESSOR_H
diff --git a/GeoModelXml/GeoModelXml/AssemblyProcessor.h b/GeoModelXml/GeoModelXml/AssemblyProcessor.h
new file mode 100644
index 000000000..e35d330a1
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/AssemblyProcessor.h
@@ -0,0 +1,30 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef GEO_MODEL_XML_ASSEMBLY_PROCESSOR_H
+#define GEO_MODEL_XML_ASSEMBLY_PROCESSOR_H
+//
+//   Processor for assembly tags.
+//
+#include <string>
+#include <map>
+
+#include "GeoModelXml/ElementProcessor.h"
+class GmxUtil;
+class GeoNameTag;
+
+class AssemblyProcessor: public ElementProcessor {
+public:
+    typedef struct {
+        GeoNameTag *name;
+        int id;
+        bool alignable;
+    } AssemblyStore; 
+    void process(const xercesc::DOMElement *element, GmxUtil &gmxUtil, GeoNodeList &toAdd);
+    void zeroId(const xercesc::DOMElement *element);
+private:
+    std::map<std::string, AssemblyStore> m_map; 
+};
+
+#endif // ASSEMBLY_PROCESSOR_H
diff --git a/GeoModelXml/GeoModelXml/AssemblyrefProcessor.h b/GeoModelXml/GeoModelXml/AssemblyrefProcessor.h
new file mode 100644
index 000000000..9c3bf3c7f
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/AssemblyrefProcessor.h
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef GEO_MODEL_XML_ASSEMBLYREF_PROCESSOR_H
+#define GEO_MODEL_XML_ASSEMBLYREF_PROCESSOR_H
+
+//
+//   Processor for assemblyref tags.
+//
+
+#include "GeoModelXml/ElementProcessor.h"
+class GmxUtil;
+
+class AssemblyrefProcessor: public ElementProcessor {
+public:
+    void process(const xercesc::DOMElement *element, GmxUtil &gmxUtil, GeoNodeList &toAdd);
+};
+
+#endif // ASSEMBLYREF_PROCESSOR_H
diff --git a/GeoModelXml/GeoModelXml/Element2GeoItem.h b/GeoModelXml/GeoModelXml/Element2GeoItem.h
new file mode 100644
index 000000000..1e2faebbe
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/Element2GeoItem.h
@@ -0,0 +1,34 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//    Base class to process one element (not its children).
+//    For each element-tag, create a class inheriting from this; and supply the process method.
+//    Register your processor with the BranchProcessor.
+//
+#ifndef GEO_MODEL_XML_ELEMENT2GEO_ITEM_H
+#define GEO_MODEL_XML_ELEMENT2GEO_ITEM_H
+
+#include <map>
+#include <string>
+
+#include <xercesc/dom/DOM.hpp>
+
+class RCBase;
+class GmxUtil;
+
+class ProcessorRegistry;
+namespace HepTool {class Evaluator;}
+
+class Element2GeoItem {
+
+public:
+    Element2GeoItem();
+    virtual ~Element2GeoItem();
+    const RCBase * process(const xercesc::DOMElement *element, GmxUtil &gmxUtil);
+    virtual const RCBase * make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+protected:
+    std::map<std::string, const RCBase *> m_map;  
+};
+#endif // ELEMENT2GEO_ITEM_H
diff --git a/GeoModelXml/GeoModelXml/Element2GeoItemRegistry.h b/GeoModelXml/GeoModelXml/Element2GeoItemRegistry.h
new file mode 100644
index 000000000..bb85bc145
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/Element2GeoItemRegistry.h
@@ -0,0 +1,30 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//    Process an element followed by all its children.
+//    Element processors have to be registered with me so I know who to call.
+//    Any element tag with no registered processor will be handled by a default handler, which
+//    does nothing and stops processing of its children.
+//
+#ifndef GEO_MODEL_XML_ELEMENT2GEO_ITEM_REGISTRY_H
+#define GEO_MODEL_XML_ELEMENT2GEO_ITEM_REGISTRY_H
+#include <string>
+#include <map>
+
+class Element2GeoItem;
+
+class Element2GeoItemRegistry {
+public:
+    Element2GeoItemRegistry();
+    ~Element2GeoItemRegistry();
+    void enregister(const std::string tagName,  Element2GeoItem *processor); // register = keyword
+    Element2GeoItem *find(const std::string tagName);
+
+private:
+    Element2GeoItem *m_defaultProcessor;
+    std::map<std::string,  Element2GeoItem *> m_processor;
+};
+
+#endif // ELEMENT2GEO_ITEM_REGISTRY_H
diff --git a/GeoModelXml/GeoModelXml/ElementProcessor.h b/GeoModelXml/GeoModelXml/ElementProcessor.h
new file mode 100644
index 000000000..4a1f61e2d
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/ElementProcessor.h
@@ -0,0 +1,25 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//    Base class to process one element (not its children).
+//    For each element-tag, create a class inheriting from this; and supply the process method.
+//    Register your processor with the BranchProcessor.
+//
+#ifndef GEO_MODEL_XML_ELEMENT_PROCESSOR_H
+#define GEO_MODEL_XML_ELEMENT_PROCESSOR_H
+
+#include "GeoModelXml/GeoNodeList.h"
+#include <xercesc/dom/DOM.hpp>
+
+class GmxUtil;
+
+class ElementProcessor {
+
+public:
+    ElementProcessor();
+    virtual void process(const xercesc::DOMElement *element, GmxUtil &gmxUtil, 
+                         GeoNodeList &toBeAdded);
+};
+#endif // ELEMENT_PROCESSOR_H
diff --git a/GeoModelXml/GeoModelXml/GeoNodeList.h b/GeoModelXml/GeoModelXml/GeoNodeList.h
new file mode 100644
index 000000000..eac3c942d
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/GeoNodeList.h
@@ -0,0 +1,8 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include <vector>
+#include "GeoModelKernel/GeoGraphNode.h"
+
+typedef std::vector<GeoGraphNode *> GeoNodeList;
diff --git a/GeoModelXml/GeoModelXml/Gmx2Geo.h b/GeoModelXml/GeoModelXml/Gmx2Geo.h
new file mode 100644
index 000000000..9df842d8c
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/Gmx2Geo.h
@@ -0,0 +1,65 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef GEO_MODEL_XML_GMX2GEO_H
+#define GEO_MODEL_XML_GMX2GEO_H
+
+/**
+ *  @brief Create a branch of a GeoModel Tree.
+ *
+ * @author Nigel Hessey, Nikhef
+@section GeoModelXmlOverview Class Overview
+  The GeoModelXml package contains the following classes:
+
+  - Gmx2Geo : Create an instance of a Gmx2Geo class to do all the work
+ * First parameter is the name of the file containing the xml
+ * Second parameter is the position in the ATLAS GeoModel tree at which your geometry is to be inserted
+ * Third parameter gives a set of call back routines for dealing with sensitive and alignable volumes.
+ *
+ */
+
+//
+//    Gmx2Geo is the main class needed to set-up a GeoModel graph branch using 
+//    xml (in a .gmx file).
+//    The user instantiates one of these, giving the name of the file and where in the 
+//    GeoModel graph the volumes are to be added, and a GmxInterface object. The constructor does the rest,
+//    adding solids and materials etc. according to the .gmx file.
+//
+//    Use:
+//        #include "GeoModelXml/Gmx2Geo.h"
+//        #include "GeoModelXml/GmxInterface.h"
+//            ...create your world volume and do all the Athena setup...
+//            ... get the filename with the xml in:
+//              std::string xmlfilename; some athena stuff to get filename from the job options...
+//            ...create your envelope GeoPhysVol...
+//            GeoPhysVol *sct(...);
+//            GmxInterface gmxInterface;
+//
+//            Gmx2Geo gmx2Geo(xmlfilename, sct, gmxInterface);   
+//
+#include <string>
+#include "GeoModelXml/GmxUtil.h"
+#include "GeoModelXml/GmxInterface.h"
+
+class GeoPhysVol;
+
+#include <xercesc/dom/DOM.hpp>
+#include <xercesc/dom/DOMLSParser.hpp>
+
+class Evaluator;
+
+class Gmx2Geo {
+public:
+    Gmx2Geo(const std::string gmxFile, GeoPhysVol *addHere, GmxInterface &gmxInterface, unsigned int flags = 0);
+private:
+// Disallow copying
+    Gmx2Geo(const Gmx2Geo &right);
+    Gmx2Geo & operator=(const Gmx2Geo &right);
+
+    int doDefines(xercesc::DOMDocument *doc, Evaluator &eval);
+    int doPositionIndex(xercesc::DOMDocument *doc, GmxUtil &gmxUtil);
+    int doReadoutGeometry(xercesc::DOMDocument *doc, GmxUtil &gmxUtil);
+    void addParam(xercesc::DOMNode *node, std::map<std::string, std::string> &params);
+};
+#endif // GMX2GEO_H
diff --git a/GeoModelXml/GeoModelXml/GmxInterface.h b/GeoModelXml/GeoModelXml/GmxInterface.h
new file mode 100644
index 000000000..05647cf8b
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/GmxInterface.h
@@ -0,0 +1,34 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef GEO_MODEL_XML_GMX_INTERFACE_H
+#define GEO_MODEL_XML_GMX_INTERFACE_H
+//
+//    Interface between SCT_SLHC_GeoModel and GeoModelXml.
+//    Provides 4 call-back routines:
+//        (0) To get a copy number with which to label a sensitive ID. 
+//            ...gets copied to the G4 volume. Then SCT_G4_SD package uses this
+//            to get the position indexes or hashId
+//        (1) To add sensitive detector types
+//        (2) To add sensitive elements
+//        (3) To add alignable transforms
+//    - these get added to the detector manager.
+//
+#include <string>
+#include <vector>
+#include <map>
+#include "GeoModelKernel/GeoVFullPhysVol.h"
+#include "GeoModelKernel/GeoAlignableTransform.h"
+
+class GmxInterface {
+public:
+    virtual int sensorId(std::map<std::string, int> &index);
+    virtual void addSensorType(std::string type, std::string name, std::map<std::string, std::string> parameters);
+    virtual void addSensor(std::string name, std::map<std::string, int> &index, int id, 
+                           GeoVFullPhysVol *fpv);
+    virtual void addAlignable(int level, std::map<std::string, int> &index, 
+                              GeoVFullPhysVol *fpv, GeoAlignableTransform *transform);
+
+};
+#endif // GMX_INTERFACE_H
\ No newline at end of file
diff --git a/GeoModelXml/GeoModelXml/GmxUtil.h b/GeoModelXml/GeoModelXml/GmxUtil.h
new file mode 100644
index 000000000..a99e9a9a2
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/GmxUtil.h
@@ -0,0 +1,115 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef GEO_MODEL_XML_GMXUTIL_H
+#define GEO_MODEL_XML_GMXUTIL_H
+//
+//    Convenience class to hold Evaluator and registries. Allows one parameter to be passed
+//    to element handlers instead of a (changing??) list.
+//
+#include <string>
+#include "ExpressionEvaluator/Evaluator.h"
+#include "GeoModelXml/ProcessorRegistry.h"
+#include "GeoModelXml/Element2GeoItemRegistry.h"
+
+#include "GeoModelXml/AddbranchProcessor.h"
+#include "GeoModelXml/LogvolProcessor.h"
+#include "GeoModelXml/LogvolrefProcessor.h"
+#include "GeoModelXml/AssemblyProcessor.h"
+#include "GeoModelXml/AssemblyrefProcessor.h"
+#include "GeoModelXml/TransformProcessor.h"
+#include "GeoModelXml/MulticopyProcessor.h"
+#include "GeoModelXml/IndexProcessor.h"
+
+#include "GeoModelXml/MakeElement.h"
+#include "GeoModelXml/MakeMaterial.h"
+#include "GeoModelXml/MakeTransformation.h"
+#include "GeoModelXml/MakeTransformationref.h"
+#include "GeoModelXml/MakeTranslation.h"
+#include "GeoModelXml/MakeRotation.h"
+
+#include "GeoModelXml/shape/MakeBox.h"
+#include "GeoModelXml/shape/MakeCons.h"
+#include "GeoModelXml/shape/MakeGenericTrap.h"
+#include "GeoModelXml/shape/MakePara.h"
+#include "GeoModelXml/shape/MakePcon.h"
+#include "GeoModelXml/shape/MakePgon.h"
+#include "GeoModelXml/shape/MakeTrap.h"
+#include "GeoModelXml/shape/MakeTrd.h"
+#include "GeoModelXml/shape/MakeTube.h"
+#include "GeoModelXml/shape/MakeTubs.h"
+#include "GeoModelXml/shape/MakeIntersection.h"
+#include "GeoModelXml/shape/MakeUnion.h"
+#include "GeoModelXml/shape/MakeSubtraction.h"
+#include "GeoModelXml/shape/MakeShaperef.h"
+#include "GeoModelXml/shape/AddPlane.h"
+
+#include "GeoModelXml/PositionIndex.h"
+//#include "GeoModelXml/SensitiveId.h"
+#include "GeoModelXml/GmxInterface.h"
+
+class GmxUtil {
+public:
+    GmxUtil(GmxInterface &gmxInterface);
+    ~GmxUtil();
+    GmxInterface *gmxInterface();
+    double evaluate(char const *expression);
+    std::string debracket(std::string expression);
+    Evaluator eval;
+    PositionIndex positionIndex;
+    ProcessorRegistry processorRegistry;
+    Element2GeoItemRegistry geoItemRegistry;
+    GeoLogVol * getAssemblyLV() {return m_assemblyLV;};
+    struct TagHandler {
+//
+//    Things creating a vector of nodes to be added to the tree
+//
+        AddbranchProcessor addbranch;
+        LogvolProcessor logvol;
+        LogvolrefProcessor logvolref;
+        AssemblyProcessor assembly;
+        AssemblyrefProcessor assemblyref;
+        TransformProcessor transform;
+        MulticopyProcessor multicopy;
+        IndexProcessor index;
+//
+//    Things creating an RCBase *
+//
+        MakeElement element;
+        MakeMaterial material;
+        MakeBox box;
+        MakeCons cons;
+        MakeGenericTrap generictrap;
+        MakePara para;
+        MakePcon pcon;
+        MakePgon pgon;
+        MakeTrap trap;
+        MakeTrd trd;
+        MakeTube tube;
+        MakeTubs tubs;
+        MakeIntersection intersection;
+        MakeUnion onion; // union is reserved
+        MakeSubtraction subtraction;
+        MakeShaperef shaperef;
+        MakeTransformation transformation;
+        MakeTransformationref transformationref;
+//
+//    Things creating HEP transforms
+//
+        MakeTranslation translation;
+        MakeRotation rotation;
+//
+//    Other things
+//
+        AddPlane addplane;
+    } tagHandler;
+//    SensitiveId sensitiveId;
+private:
+    GeoLogVol *makeAssemblyLV();
+    GeoLogVol *m_assemblyLV; // Special logvol to be turned into an assembly-physical-volume. 
+                             // Achieved by filling it with special::ether material.
+    GmxInterface *m_gmxInterface; 
+};
+
+#endif // GMXUTIL_H
diff --git a/GeoModelXml/GeoModelXml/IndexProcessor.h b/GeoModelXml/GeoModelXml/IndexProcessor.h
new file mode 100644
index 000000000..036415efa
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/IndexProcessor.h
@@ -0,0 +1,17 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef GEO_MODEL_XML_INDEX_PROCESSOR_H
+#define GEO_MODEL_XML_INDEX_PROCESSOR_H
+//
+//   Processor for index tags which change the formula for generating a position-index.
+//
+#include "GeoModelXml/ElementProcessor.h"
+
+class IndexProcessor: public ElementProcessor {
+public:
+    void process(const xercesc::DOMElement *element, GmxUtil &util, GeoNodeList &toAdd);
+};
+
+#endif // INDEX_PROCESSOR_H
diff --git a/GeoModelXml/GeoModelXml/LogvolProcessor.h b/GeoModelXml/GeoModelXml/LogvolProcessor.h
new file mode 100644
index 000000000..61003e0e0
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/LogvolProcessor.h
@@ -0,0 +1,32 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef GEO_MODEL_XML_LOGVOL_PROCESSOR_H
+#define GEO_MODEL_XML_LOGVOL_PROCESSOR_H
+//
+//   Processor for logvol tags.
+//
+#include <string>
+#include <map>
+
+#include "GeoModelXml/ElementProcessor.h"
+class GmxUtil;
+class GeoNameTag;
+class GeoLogVol;
+
+class LogvolProcessor: public ElementProcessor {
+public:
+    typedef struct {
+        GeoNameTag *name;
+        int id;
+        GeoLogVol *logVol;
+        bool alignable;
+    } LogVolStore; 
+    void process(const xercesc::DOMElement *element, GmxUtil &gmxUtil, GeoNodeList &toAdd);
+    void zeroId(const xercesc::DOMElement *element);
+private:
+    std::map<std::string, LogVolStore> m_map; 
+};
+
+#endif // LOGVOL_PROCESSOR_H
diff --git a/GeoModelXml/GeoModelXml/LogvolrefProcessor.h b/GeoModelXml/GeoModelXml/LogvolrefProcessor.h
new file mode 100644
index 000000000..82ad815c0
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/LogvolrefProcessor.h
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef GEO_MODEL_XML_LOGVOLREF_PROCESSOR_H
+#define GEO_MODEL_XML_LOGVOLREF_PROCESSOR_H
+
+//
+//   Processor for logvolref tags.
+//
+
+#include "GeoModelXml/ElementProcessor.h"
+class GmxUtil;
+
+class LogvolrefProcessor: public ElementProcessor {
+public:
+    void process(const xercesc::DOMElement *element, GmxUtil &gmxUtil, GeoNodeList &toAdd);
+};
+
+#endif // LOGVOLREF_PROCESSOR_H
diff --git a/GeoModelXml/GeoModelXml/MakeElement.h b/GeoModelXml/GeoModelXml/MakeElement.h
new file mode 100644
index 000000000..f89e03a70
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/MakeElement.h
@@ -0,0 +1,19 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//    Handle material elements.
+//
+#ifndef GEO_MODEL_XML_MAKE_ELEMENT_H
+#define GEO_MODEL_XML_MAKE_ELEMENT_H
+
+#include "GeoModelXml/Element2GeoItem.h"
+
+class MakeElement: public Element2GeoItem {
+public:
+    MakeElement();
+    const RCBase * make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+};
+
+#endif // MAKE_ELEMENT_H
diff --git a/GeoModelXml/GeoModelXml/MakeMaterial.h b/GeoModelXml/GeoModelXml/MakeMaterial.h
new file mode 100644
index 000000000..a91509ce2
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/MakeMaterial.h
@@ -0,0 +1,19 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//    Handle material elements.
+//
+#ifndef GEO_MODEL_XML_MAKE_MATERIAL_H
+#define GEO_MODEL_XML_MAKE_MATERIAL_H
+
+#include "GeoModelXml/Element2GeoItem.h"
+
+class MakeMaterial: public Element2GeoItem {
+public:
+    MakeMaterial();
+    const RCBase * make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+};
+
+#endif // MAKE_MATERIAL_H
diff --git a/GeoModelXml/GeoModelXml/MakeRotation.h b/GeoModelXml/GeoModelXml/MakeRotation.h
new file mode 100644
index 000000000..00d304501
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/MakeRotation.h
@@ -0,0 +1,23 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef GEO_MODEL_XML_MAKE_ROTATION_H
+#define GEO_MODEL_XML_MAKE_ROTATION_H
+//
+//    Create and return a HepRotation3d. Caller must delete it.
+//
+
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelKernel/GeoDefinitions.h"
+
+//namespace HepGeom {class Rotate3D;}
+class GmxUtil;
+
+
+class MakeRotation {
+public:
+    MakeRotation();
+    GeoTrf::Rotation3D getTransform(const xercesc::DOMElement *rotation, GmxUtil &gmxUtil);
+};
+#endif // MAKE_ROTATION_H
diff --git a/GeoModelXml/GeoModelXml/MakeTransformation.h b/GeoModelXml/GeoModelXml/MakeTransformation.h
new file mode 100644
index 000000000..9977b8c26
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/MakeTransformation.h
@@ -0,0 +1,19 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//    Handle material elements.
+//
+#ifndef GEO_MODEL_XML_MAKE_TRANSFORMATION_H
+#define GEO_MODEL_XML_MAKE_TRANSFORMATION_H
+
+#include "GeoModelXml/Element2GeoItem.h"
+
+class MakeTransformation: public Element2GeoItem {
+public:
+    MakeTransformation();
+    const RCBase * make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+};
+
+#endif // MAKE_TRANSFORMATION_H
diff --git a/GeoModelXml/GeoModelXml/MakeTransformationref.h b/GeoModelXml/GeoModelXml/MakeTransformationref.h
new file mode 100644
index 000000000..ac1b56787
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/MakeTransformationref.h
@@ -0,0 +1,18 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//    Handle material elements.
+//
+#ifndef GEO_MODEL_XML_MAKE_TRANSFORMATIONREF_H
+#define GEO_MODEL_XML_MAKE_TRANSFORMATIONREF_H
+
+#include "GeoModelXml/Element2GeoItem.h"
+
+class MakeTransformationref: public Element2GeoItem {
+public:
+    const RCBase * make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+};
+
+#endif // MAKE_TRANSFORMATIONREF_H
diff --git a/GeoModelXml/GeoModelXml/MakeTranslation.h b/GeoModelXml/GeoModelXml/MakeTranslation.h
new file mode 100644
index 000000000..8bd4f793d
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/MakeTranslation.h
@@ -0,0 +1,24 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef GEO_MODEL_XML_MAKE_TRANSLATION_H
+#define GEO_MODEL_XML_MAKE_TRANSLATION_H
+//
+//    Create and return a HepRotation3d. Caller must delete it.
+//
+
+#include "GeoModelKernel/GeoDefinitions.h"
+
+#include <xercesc/dom/DOM.hpp>
+
+//namespace HepGeom {class Translate3D;}
+class GmxUtil;
+
+
+class MakeTranslation {
+public:
+    MakeTranslation();
+    GeoTrf::Translate3D getTransform(const xercesc::DOMElement *rotation, GmxUtil &gmxUtil);
+};
+#endif // MAKE_TRANSLATION_H
diff --git a/GeoModelXml/GeoModelXml/MulticopyProcessor.h b/GeoModelXml/GeoModelXml/MulticopyProcessor.h
new file mode 100644
index 000000000..4c0bd5978
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/MulticopyProcessor.h
@@ -0,0 +1,23 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef GEO_MODEL_XML_MULTICOPY_PROCESSOR_H
+#define GEO_MODEL_XML_MULTICOPY_PROCESSOR_H
+//
+//   Processor for multicopy tags.
+//
+#include <string>
+#include <map>
+
+#include "GeoModelXml/ElementProcessor.h"
+class GmxUtil;
+
+class MulticopyProcessor: public ElementProcessor {
+public:
+    void process(const xercesc::DOMElement *element, GmxUtil &gmxUtil, GeoNodeList &toAdd);
+private:
+    std::map <std::string, GeoNodeList> m_map; 
+};
+
+#endif // MULTICOPY_PROCESSOR_H
diff --git a/GeoModelXml/GeoModelXml/PositionIndex.h b/GeoModelXml/GeoModelXml/PositionIndex.h
new file mode 100644
index 000000000..59a730ac5
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/PositionIndex.h
@@ -0,0 +1,52 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//    Deal with positional indices (layer number etc.)
+//
+#ifndef GEO_MODEL_XML_POSITIONINDEX_H
+#define GEO_MODEL_XML_POSITIONINDEX_H
+
+/**
+ * @brief Handle the position index names, formulae, and values
+ *
+ * Values are calculated strictly in the order that the index names are given in the xml file.
+ * This allows the user freedom to choose the order of evaluation, which matters when he is using
+ * the CNL_n values in her formulae.
+ */
+
+#include <vector>
+#include <map>
+#include <string>
+
+class Evaluator;
+
+class PositionIndex {
+public:
+    PositionIndex(); 
+    ~PositionIndex();
+
+    int level();
+    int incrementLevel();
+    int decrementLevel();
+    
+    int copyNo(int level);
+    int setCopyNo(int copyNo);
+
+    void addIndex(std::string name);
+    std::string name(int whichOne);
+    std::string formula(std::string name);
+    void setFormula(std::string name, std::string formula);
+
+    void indices(std::map<std::string, int> &index, Evaluator &eval);
+
+private:
+    int m_level;
+    std::vector <int> m_copyNo; // Size is always m_level+1
+/** @brief We keep a separate vector of the names as a way of preserving the order of evaluation
+ */
+    std::vector <std::string> m_name;
+    std::map <std::string, std::string> m_formula;
+};
+#endif // POSITIONINDEX_H
diff --git a/GeoModelXml/GeoModelXml/ProcessorRegistry.h b/GeoModelXml/GeoModelXml/ProcessorRegistry.h
new file mode 100644
index 000000000..ae15a9b02
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/ProcessorRegistry.h
@@ -0,0 +1,30 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//    Process an element followed by all its children.
+//    Element processors have to be registered with me so I know who to call.
+//    Any element tag with no registered processor will be handled by a default handler, which
+//    does nothing and stops processing of its children.
+//
+#ifndef GEO_MODEL_XML_PROCESSOR_REGISTRY_H
+#define GEO_MODEL_XML_PROCESSOR_REGISTRY_H
+
+#include <string>
+#include <map>
+
+class ElementProcessor;
+
+class ProcessorRegistry {
+public:
+    ProcessorRegistry();
+    void enregister(const std::string tagName, ElementProcessor *processor);
+    ElementProcessor *find(const std::string name);
+
+private:
+    ElementProcessor *m_defaultProcessor;
+    std::map<std::string, ElementProcessor *> m_processor;
+};
+
+#endif // PROCESSOR_REGISTRY_H
diff --git a/GeoModelXml/GeoModelXml/SensitiveId.h b/GeoModelXml/GeoModelXml/SensitiveId.h
new file mode 100644
index 000000000..58927237c
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/SensitiveId.h
@@ -0,0 +1,18 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//    Class for generating unique id's for sensitive volumes (unique across 
+//    all sensitive detectors in the gmx file, so not unique across ATLAS!)
+//    Used in LogvolProcessor for GeoModel identifiers.
+//    Conceptually, the class has a stock of identifiers, and pop() returns the next one, like a stack.
+//    In fact, the identifiers are the sequence 0, 1, ...; suitable for use as an array index.
+//
+class SensitiveId {
+public:
+    SensitiveId() {m_id = 0;}
+    int pop() {return m_id++;}
+private:
+    int m_id;
+};
diff --git a/GeoModelXml/GeoModelXml/StrictErrorHandler.h b/GeoModelXml/GeoModelXml/StrictErrorHandler.h
new file mode 100644
index 000000000..84e00de59
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/StrictErrorHandler.h
@@ -0,0 +1,39 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//   Simple error handler
+//
+#ifndef GEO_MODEL_XML_STRICT_ERROR_HANDLER_H
+#define GEO_MODEL_XML_STRICT_ERROR_HANDLER_H
+
+#include <xercesc/dom/DOMErrorHandler.hpp>
+#include <xercesc/util/XMLString.hpp>
+
+class StrictErrorHandler: public xercesc::DOMErrorHandler {
+
+public:
+    StrictErrorHandler();
+    ~StrictErrorHandler();
+    bool getSawErrors() const;
+    //
+    //  Implementation of the DOM ErrorHandler interface
+    //
+    bool handleError(const xercesc::DOMError &domError);
+
+private :
+    //
+    //  fSawErrors
+    //      This is set if we get any errors, and is queryable via a getter
+    //      method. It's used by the main code to suppress output if there are
+    //      errors.
+    //
+    bool    m_SawErrors;
+};
+
+inline bool StrictErrorHandler::getSawErrors() const {
+    return m_SawErrors;
+}
+
+#endif //STRICT_ERROR_HANDLER_H
\ No newline at end of file
diff --git a/GeoModelXml/GeoModelXml/TransformProcessor.h b/GeoModelXml/GeoModelXml/TransformProcessor.h
new file mode 100644
index 000000000..1d90afd70
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/TransformProcessor.h
@@ -0,0 +1,19 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef GEO_MODEL_XML_TRANSFORM_PROCESSOR_H
+#define GEO_MODEL_XML_TRANSFORM_PROCESSOR_H
+
+//
+//   Processor for transform tags.
+//
+#include "GeoModelXml/ElementProcessor.h"
+class GmxUtil;
+
+class TransformProcessor: public ElementProcessor {
+public:
+    void process(const xercesc::DOMElement *element, GmxUtil &gmxUtil, GeoNodeList &toAdd);
+};
+
+#endif // TRANSFORM_PROCESSOR_H
diff --git a/GeoModelXml/GeoModelXml/TransformrefProcessor.h b/GeoModelXml/GeoModelXml/TransformrefProcessor.h
new file mode 100644
index 000000000..0c04a62b7
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/TransformrefProcessor.h
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef GEO_MODEL_XML_TRANSFORMREF_PROCESSOR_H
+#define GEO_MODEL_XML_TRANSFORMREF_PROCESSOR_H
+
+//
+//   Processor for logvolref tags.
+//
+
+#include "GeoModelXml/ElementProcessor.h"
+class GmxUtil;
+
+class TransformrefProcessor: public ElementProcessor {
+public:
+    void process(const xercesc::DOMElement *element, GmxUtil &gmxUtil, GeoNodeList &toAdd);
+};
+
+#endif // TRANSFORMREF_PROCESSOR_H
diff --git a/GeoModelXml/GeoModelXml/createdomdocument.h b/GeoModelXml/GeoModelXml/createdomdocument.h
new file mode 100644
index 000000000..2fafc9d77
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/createdomdocument.h
@@ -0,0 +1,12 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include <xercesc/dom/DOM.hpp>
+#include <xercesc/dom/DOMLSParser.hpp>
+#include <iostream>
+
+using namespace std;
+using namespace xercesc;
+
+DOMDocument *createDOMDocument(string xmlFile, DOMLSParser *parser, unsigned int flags = 0);
diff --git a/GeoModelXml/GeoModelXml/shape/AddPlane.h b/GeoModelXml/GeoModelXml/shape/AddPlane.h
new file mode 100644
index 000000000..411d73cca
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/shape/AddPlane.h
@@ -0,0 +1,18 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef ADDPLANE_H
+#define ADDPLANE_H
+
+#include <xercesc/dom/DOM.hpp>
+
+class AddPlane {
+public:
+    AddPlane() {};
+    ~AddPlane() {};
+    void process(const xercesc::DOMElement *element, double &zPlane, double &rMinPlane, double &rMaxPlane);
+};
+
+
+#endif //ADDPLANE_H
diff --git a/GeoModelXml/GeoModelXml/shape/MakeBox.h b/GeoModelXml/GeoModelXml/shape/MakeBox.h
new file mode 100644
index 000000000..8c039062c
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/shape/MakeBox.h
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// Automatically generated from scripts in /home/hessey/prog/gmx2geo/makeshape
+//    Handle tube shape elements.
+//
+#ifndef GEO_MODEL_XML_MAKE_BOX_H
+#define GEO_MODEL_XML_MAKE_BOX_H
+
+#include "GeoModelXml/Element2GeoItem.h"
+
+class MakeBox: public Element2GeoItem {
+public:
+    MakeBox();
+    const RCBase * make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+};
+
+#endif // GEO_MODEL_XML_MAKE_BOX_H
diff --git a/GeoModelXml/GeoModelXml/shape/MakeCons.h b/GeoModelXml/GeoModelXml/shape/MakeCons.h
new file mode 100644
index 000000000..8c4e3a77c
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/shape/MakeCons.h
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// Automatically generated from scripts in /home/hessey/prog/gmx2geo/makeshape
+//    Handle tube shape elements.
+//
+#ifndef GEO_MODEL_XML_MAKE_CONS_H
+#define GEO_MODEL_XML_MAKE_CONS_H
+
+#include "GeoModelXml/Element2GeoItem.h"
+
+class MakeCons: public Element2GeoItem {
+public:
+    MakeCons();
+    const RCBase * make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+};
+
+#endif // GEO_MODEL_XML_MAKE_CONS_H
diff --git a/GeoModelXml/GeoModelXml/shape/MakeGenericTrap.h b/GeoModelXml/GeoModelXml/shape/MakeGenericTrap.h
new file mode 100644
index 000000000..f0f2a77d9
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/shape/MakeGenericTrap.h
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// Automatically generated from scripts in /home/hessey/prog/gmx2geo/makeshape
+//    Handle tube shape elements.
+//
+#ifndef GEO_MODEL_XML_MAKE_GENERICTRAP_H
+#define GEO_MODEL_XML_MAKE_GENERICTRAP_H
+
+#include "GeoModelXml/Element2GeoItem.h"
+
+class MakeGenericTrap: public Element2GeoItem {
+public:
+    MakeGenericTrap();
+    const RCBase * make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+};
+
+#endif // GEO_MODEL_XML_MAKE_GENERICTRAP_H
diff --git a/GeoModelXml/GeoModelXml/shape/MakeIntersection.h b/GeoModelXml/GeoModelXml/shape/MakeIntersection.h
new file mode 100644
index 000000000..a99c42740
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/shape/MakeIntersection.h
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// Automatically generated from scripts in /home/hessey/prog/gmx2geo/makeshape
+//    Handle tube shape elements.
+//
+#ifndef GEO_MODEL_XML_MAKE_INTERSECTION_H
+#define GEO_MODEL_XML_MAKE_INTERSECTION_H
+
+#include "GeoModelXml/Element2GeoItem.h"
+
+class MakeIntersection: public Element2GeoItem {
+public:
+    MakeIntersection();
+    const RCBase * make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+};
+
+#endif // GEO_MODEL_XML_MAKE_INTERSECTION_H
diff --git a/GeoModelXml/GeoModelXml/shape/MakePara.h b/GeoModelXml/GeoModelXml/shape/MakePara.h
new file mode 100644
index 000000000..1fd1ca29e
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/shape/MakePara.h
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// Automatically generated from scripts in /home/hessey/prog/gmx2geo/makeshape
+//    Handle tube shape elements.
+//
+#ifndef GEO_MODEL_XML_MAKE_PARA_H
+#define GEO_MODEL_XML_MAKE_PARA_H
+
+#include "GeoModelXml/Element2GeoItem.h"
+
+class MakePara: public Element2GeoItem {
+public:
+    MakePara();
+    const RCBase * make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+};
+
+#endif // GEO_MODEL_XML_MAKE_PARA_H
diff --git a/GeoModelXml/GeoModelXml/shape/MakePcon.h b/GeoModelXml/GeoModelXml/shape/MakePcon.h
new file mode 100644
index 000000000..81343184f
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/shape/MakePcon.h
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// Automatically generated from scripts in /home/hessey/prog/gmx2geo/makeshape
+//    Handle tube shape elements.
+//
+#ifndef GEO_MODEL_XML_MAKE_PCON_H
+#define GEO_MODEL_XML_MAKE_PCON_H
+
+#include "GeoModelXml/Element2GeoItem.h"
+
+class MakePcon: public Element2GeoItem {
+public:
+    MakePcon();
+    const RCBase * make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+};
+
+#endif // GEO_MODEL_XML_MAKE_PCON_H
diff --git a/GeoModelXml/GeoModelXml/shape/MakePgon.h b/GeoModelXml/GeoModelXml/shape/MakePgon.h
new file mode 100644
index 000000000..15111add3
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/shape/MakePgon.h
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// Automatically generated from scripts in /home/hessey/prog/gmx2geo/makeshape
+//    Handle tube shape elements.
+//
+#ifndef GEO_MODEL_XML_MAKE_PGON_H
+#define GEO_MODEL_XML_MAKE_PGON_H
+
+#include "GeoModelXml/Element2GeoItem.h"
+
+class MakePgon: public Element2GeoItem {
+public:
+    MakePgon();
+    const RCBase * make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+};
+
+#endif // GEO_MODEL_XML_MAKE_PGON_H
diff --git a/GeoModelXml/GeoModelXml/shape/MakeShaperef.h b/GeoModelXml/GeoModelXml/shape/MakeShaperef.h
new file mode 100644
index 000000000..f90f750b2
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/shape/MakeShaperef.h
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// Automatically generated from scripts in /home/hessey/prog/gmx2geo/makeshape
+//    Handle tube shape elements.
+//
+#ifndef GEO_MODEL_XML_MAKE_SHAPEREF_H
+#define GEO_MODEL_XML_MAKE_SHAPEREF_H
+
+#include "GeoModelXml/Element2GeoItem.h"
+
+class MakeShaperef: public Element2GeoItem {
+public:
+//    MakeShaperef() {};
+    const RCBase * process(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+};
+
+#endif // GEO_MODEL_XML_MAKE_SHAPEREF_H
diff --git a/GeoModelXml/GeoModelXml/shape/MakeSubtraction.h b/GeoModelXml/GeoModelXml/shape/MakeSubtraction.h
new file mode 100644
index 000000000..3550f662b
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/shape/MakeSubtraction.h
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// Automatically generated from scripts in /home/hessey/prog/gmx2geo/makeshape
+//    Handle tube shape elements.
+//
+#ifndef GEO_MODEL_XML_MAKE_SUBTRACTION_H
+#define GEO_MODEL_XML_MAKE_SUBTRACTION_H
+
+#include "GeoModelXml/Element2GeoItem.h"
+
+class MakeSubtraction: public Element2GeoItem {
+public:
+    MakeSubtraction();
+    const RCBase * make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+};
+
+#endif // GEO_MODEL_XML_MAKE_SUBTRACTION_H
diff --git a/GeoModelXml/GeoModelXml/shape/MakeTrap.h b/GeoModelXml/GeoModelXml/shape/MakeTrap.h
new file mode 100644
index 000000000..fd0e871db
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/shape/MakeTrap.h
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// Automatically generated from scripts in /home/hessey/prog/gmx2geo/makeshape
+//    Handle tube shape elements.
+//
+#ifndef GEO_MODEL_XML_MAKE_TRAP_H
+#define GEO_MODEL_XML_MAKE_TRAP_H
+
+#include "GeoModelXml/Element2GeoItem.h"
+
+class MakeTrap: public Element2GeoItem {
+public:
+    MakeTrap();
+    const RCBase * make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+};
+
+#endif // GEO_MODEL_XML_MAKE_TRAP_H
diff --git a/GeoModelXml/GeoModelXml/shape/MakeTrd.h b/GeoModelXml/GeoModelXml/shape/MakeTrd.h
new file mode 100644
index 000000000..c12e0d23a
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/shape/MakeTrd.h
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// Automatically generated from scripts in /home/hessey/prog/gmx2geo/makeshape
+//    Handle tube shape elements.
+//
+#ifndef GEO_MODEL_XML_MAKE_TRD_H
+#define GEO_MODEL_XML_MAKE_TRD_H
+
+#include "GeoModelXml/Element2GeoItem.h"
+
+class MakeTrd: public Element2GeoItem {
+public:
+    MakeTrd();
+    const RCBase * make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+};
+
+#endif // GEO_MODEL_XML_MAKE_TRD_H
diff --git a/GeoModelXml/GeoModelXml/shape/MakeTube.h b/GeoModelXml/GeoModelXml/shape/MakeTube.h
new file mode 100644
index 000000000..47eeafee4
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/shape/MakeTube.h
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// Automatically generated from scripts in /home/hessey/prog/gmx2geo/makeshape
+//    Handle tube shape elements.
+//
+#ifndef GEO_MODEL_XML_MAKE_TUBE_H
+#define GEO_MODEL_XML_MAKE_TUBE_H
+
+#include "GeoModelXml/Element2GeoItem.h"
+
+class MakeTube: public Element2GeoItem {
+public:
+    MakeTube();
+    const RCBase * make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+};
+
+#endif // GEO_MODEL_XML_MAKE_TUBE_H
diff --git a/GeoModelXml/GeoModelXml/shape/MakeTubs.h b/GeoModelXml/GeoModelXml/shape/MakeTubs.h
new file mode 100644
index 000000000..6efbf27e1
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/shape/MakeTubs.h
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// Automatically generated from scripts in /home/hessey/prog/gmx2geo/makeshape
+//    Handle tube shape elements.
+//
+#ifndef GEO_MODEL_XML_MAKE_TUBS_H
+#define GEO_MODEL_XML_MAKE_TUBS_H
+
+#include "GeoModelXml/Element2GeoItem.h"
+
+class MakeTubs: public Element2GeoItem {
+public:
+    MakeTubs();
+    const RCBase * make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+};
+
+#endif // GEO_MODEL_XML_MAKE_TUBS_H
diff --git a/GeoModelXml/GeoModelXml/shape/MakeUnion.h b/GeoModelXml/GeoModelXml/shape/MakeUnion.h
new file mode 100644
index 000000000..ecb2eee44
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/shape/MakeUnion.h
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// Automatically generated from scripts in /home/hessey/prog/gmx2geo/makeshape
+//    Handle tube shape elements.
+//
+#ifndef GEO_MODEL_XML_MAKE_UNION_H
+#define GEO_MODEL_XML_MAKE_UNION_H
+
+#include "GeoModelXml/Element2GeoItem.h"
+
+class MakeUnion: public Element2GeoItem {
+public:
+    MakeUnion();
+    const RCBase * make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const;
+};
+
+#endif // GEO_MODEL_XML_MAKE_UNION_H
diff --git a/GeoModelXml/GeoModelXml/translate.h b/GeoModelXml/GeoModelXml/translate.h
new file mode 100644
index 000000000..d234adc7e
--- /dev/null
+++ b/GeoModelXml/GeoModelXml/translate.h
@@ -0,0 +1,18 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef GEO_MODEL_XML_TRANSLATE_H
+#define GEO_MODEL_XML_TRANSLATE_H
+//
+//    Just an abbreviation for transcode functions. 
+//        translate("a string") returns the u16 type needed internally by Xerces-C
+//        translate(Xerces-C string) returns a char * string version
+//
+//    remember to release a char * with XMLString::release(char *theStringYouGaveMe) when finished with it
+//
+#include <xercesc/util/XMLString.hpp>
+
+#define Translate xercesc::XMLString::transcode 
+
+#endif // TRANSLATE_H
diff --git a/GeoModelXml/data/geomodel.dtd b/GeoModelXml/data/geomodel.dtd
new file mode 100644
index 000000000..54cf5c59d
--- /dev/null
+++ b/GeoModelXml/data/geomodel.dtd
@@ -0,0 +1,245 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!-- Copyright N.P. Hessey, Nikhef, 2013 -->
+
+<!ELEMENT geomodel ((defines|materials|readoutgeometry|positionindex|shapes|logvol|transformation|assembly)+, addbranch)>
+  <!ATTLIST geomodel name    CDATA "Unnamed detector"
+                     version CDATA "0.0"
+                     xmlns   CDATA #FIXED "http://www.nikhef.nl/%7Er29/gmx">
+
+  <!ELEMENT defines (var|vector|matrix)+>
+
+    <!ELEMENT var EMPTY>
+      <!ATTLIST var name  ID    #REQUIRED
+                    value CDATA #REQUIRED>
+
+    <!ELEMENT vector EMPTY>
+      <!ATTLIST vector name  ID    #REQUIRED
+                       value CDATA #REQUIRED>
+
+    <!ELEMENT matrix EMPTY>
+      <!ATTLIST matrix name   ID    #REQUIRED
+                       coldim CDATA #REQUIRED
+                       value  CDATA #REQUIRED>
+
+  <!ELEMENT materials ((element|chemical|material)+)>
+    <!ATTLIST materials densitysf CDATA "1.0">
+
+    <!ELEMENT element EMPTY>
+      <!ATTLIST element name      ID      #REQUIRED
+                        shortname NMTOKEN #REQUIRED
+                        Z         CDATA   #REQUIRED
+                        A         CDATA   #REQUIRED>
+
+    <!ELEMENT chemical (elemcontent)+>
+      <!ATTLIST chemical name ID #REQUIRED>
+      <!ELEMENT elemcontent EMPTY>
+        <!ATTLIST elemcontent ref      IDREF #REQUIRED
+                              quantity CDATA #REQUIRED>
+
+    <!ELEMENT material (elementref|materialref|chemicalref)+>
+      <!ATTLIST material name    ID    #REQUIRED
+                         density CDATA #REQUIRED>
+
+      <!ELEMENT elementref EMPTY>
+        <!ATTLIST elementref ref      IDREF #REQUIRED
+                             fraction CDATA #REQUIRED>
+
+      <!ELEMENT materialref EMPTY>
+        <!ATTLIST materialref ref      IDREF #REQUIRED
+                              fraction CDATA #REQUIRED>
+
+      <!ELEMENT chemicalref EMPTY>
+        <!ATTLIST chemicalref ref      IDREF #REQUIRED
+                              fraction CDATA #REQUIRED>
+
+  <!ELEMENT readoutgeometry (param*, sensorclass+)>
+    <!ELEMENT param EMPTY>
+      <!ATTLIST param name  NMTOKEN #REQUIRED
+                      value CDATA   #REQUIRED>
+    <!ELEMENT sensorclass (param*, sensortype+)>
+    <!ATTLIST sensorclass name ID #REQUIRED>
+      <!ELEMENT sensortype (param*)>
+        <!ATTLIST sensortype name ID #REQUIRED>
+
+  <!ELEMENT positionindex (addindex+)>
+    <!ELEMENT addindex EMPTY>
+        <!ATTLIST addindex name ID #REQUIRED>
+
+  <!ELEMENT shapes ((box|cons|generictrap|para|pcon|pgon|trap|tube|tubs|trd|intersection|subtraction|union)+)>
+    <!-- All shapes allowed in GeoModel manual. Same name, parameters, parameter order, but always lower case -->
+
+    <!ELEMENT box EMPTY>
+      <!ATTLIST box name        ID    #REQUIRED
+                    xhalflength CDATA #REQUIRED
+                    yhalflength CDATA #REQUIRED
+                    zhalflength CDATA #REQUIRED>
+
+    <!ELEMENT cons EMPTY>
+      <!ATTLIST cons name  ID #REQUIRED
+                     rmin1 CDATA #REQUIRED
+                     rmin2 CDATA #REQUIRED
+                     rmax1 CDATA #REQUIRED
+                     rmax2 CDATA #REQUIRED
+                     dz    CDATA #REQUIRED
+                     sphi  CDATA #REQUIRED
+                     dphi  CDATA #REQUIRED>
+
+    <!ELEMENT generictrap EMPTY>
+      <!ATTLIST generictrap name        ID    #REQUIRED
+                            x0          CDATA #REQUIRED
+                            y0          CDATA #REQUIRED
+                            x1          CDATA #REQUIRED
+                            y1          CDATA #REQUIRED
+                            x2          CDATA #REQUIRED
+                            y2          CDATA #REQUIRED
+                            x3          CDATA #REQUIRED
+                            y3          CDATA #REQUIRED
+                            x4          CDATA #REQUIRED
+                            y4          CDATA #REQUIRED
+                            x5          CDATA #REQUIRED
+                            y5          CDATA #REQUIRED
+                            x6          CDATA #REQUIRED
+                            y6          CDATA #REQUIRED
+                            x7          CDATA #REQUIRED
+                            y7          CDATA #REQUIRED
+                            zhalflength CDATA #REQUIRED>
+
+    <!ELEMENT para EMPTY>
+      <!ATTLIST para name        ID    #REQUIRED
+                     xhalflength CDATA #REQUIRED
+                     yhalflength CDATA #REQUIRED
+                     zhalflength CDATA #REQUIRED
+                     alpha       CDATA #REQUIRED
+                     theta       CDATA #REQUIRED
+                     phi         CDATA #REQUIRED>
+
+    <!ELEMENT pcon (addplane, addplane+)>
+      <!ELEMENT addplane EMPTY>
+        <!ATTLIST addplane zplane    CDATA #REQUIRED
+                           rminplane CDATA #REQUIRED
+                           rmaxplane CDATA #REQUIRED>
+ 
+      <!ATTLIST pcon name ID    #REQUIRED
+                     sphi CDATA #REQUIRED
+                     dphi CDATA #REQUIRED>
+
+    <!ELEMENT pgon (addplane, addplane+)>
+      <!ATTLIST pgon name   ID    #REQUIRED
+                     sphi   CDATA #REQUIRED
+                     dphi   CDATA #REQUIRED
+                     nsides CDATA #REQUIRED>
+
+    <!ELEMENT trap EMPTY>
+      <!ATTLIST trap name        ID    #REQUIRED
+                     zhalflength CDATA #REQUIRED
+                     theta       CDATA #REQUIRED
+                     phi         CDATA #REQUIRED
+                     dydzn       CDATA #REQUIRED
+                     dxdyndzn    CDATA #REQUIRED
+                     dxdypdzn    CDATA #REQUIRED
+                     angleydzn   CDATA #REQUIRED
+                     dydzp       CDATA #REQUIRED
+                     dxdyndzp    CDATA #REQUIRED
+                     dxdypdzp    CDATA #REQUIRED
+                     angleydzp   CDATA #REQUIRED>
+
+    <!ELEMENT tube EMPTY>
+      <!ATTLIST tube name        ID    #REQUIRED
+                     rmin        CDATA #REQUIRED
+                     rmax        CDATA #REQUIRED
+                     zhalflength CDATA #REQUIRED>
+
+    <!ELEMENT tubs EMPTY>
+      <!ATTLIST tubs name        ID    #REQUIRED
+                     rmin        CDATA #REQUIRED
+                     rmax        CDATA #REQUIRED
+                     zhalflength CDATA #REQUIRED
+                     sphi        CDATA #REQUIRED
+                     dphi        CDATA #REQUIRED>
+
+    <!ELEMENT trd EMPTY>
+      <!ATTLIST trd name         ID    #REQUIRED
+                    xhalflength1 CDATA #REQUIRED
+                    xhalflength2 CDATA #REQUIRED
+                    yhalflength1 CDATA #REQUIRED
+                    yhalflength2 CDATA #REQUIRED
+                    zhalflength  CDATA #REQUIRED>
+
+    <!ELEMENT intersection (shaperef, (transformation|transformationref), shaperef)>
+      <!ATTLIST intersection name ID #REQUIRED>
+
+    <!ELEMENT subtraction (shaperef, (transformation|transformationref), shaperef)>
+      <!ATTLIST subtraction name ID #REQUIRED>
+
+    <!ELEMENT union (shaperef, (transformation|transformationref), shaperef)>
+      <!ATTLIST union name ID #REQUIRED>
+
+  <!ELEMENT shaperef EMPTY>
+    <!ATTLIST shaperef ref IDREF #REQUIRED>
+
+  <!ELEMENT transform ((transformation|transformationref), (logvol|logvolref|assembly|assemblyref))>
+    <!ATTLIST transform name      ID    #IMPLIED
+                        alignable CDATA #IMPLIED> <!-- CDATA = alignment level-number -->
+
+    <!ELEMENT transformation (scaling|rotation|translation)+>
+
+      <!ELEMENT scaling EMPTY>
+        <!ATTLIST scaling x CDATA "1.0"
+                          y CDATA "1.0"
+                          z CDATA "1.0">
+
+      <!ELEMENT rotation EMPTY>
+        <!ATTLIST rotation xcos  CDATA "0.0"
+                           ycos  CDATA "0.0"
+                           zcos  CDATA "0.0"
+                           angle CDATA "0.0">
+
+      <!ELEMENT translation EMPTY>
+        <!ATTLIST translation x CDATA "0.0"
+                              y CDATA "0.0"
+                              z CDATA "0.0">
+
+      <!ATTLIST transformation name ID #REQUIRED>
+      <!ATTLIST transformation alignable (true|false) "false"> 
+
+    <!ELEMENT transformationref EMPTY>
+      <!ATTLIST transformationref ref IDREF #REQUIRED>
+
+  <!ELEMENT logvol (transform|logvol|logvolref|assembly|assemblyref|multicopy|index)*>
+    <!-- If sensitive is not given, it is not sensitive. If given, it points to a digitization scheme -->
+    <!ATTLIST logvol name ID #REQUIRED
+                     shape IDREF #REQUIRED
+                     material IDREF #REQUIRED
+                     sensitive IDREF #IMPLIED 
+                     alignable (true|false) "false"> 
+
+  <!ELEMENT index EMPTY>
+    <!ATTLIST index ref   IDREF #REQUIRED
+                    value CDATA #REQUIRED>
+
+  <!ELEMENT logvolref EMPTY>
+    <!ATTLIST logvolref ref    IDREF         #REQUIRED
+                        zeroid (true|false) "false">
+
+  <!ELEMENT assembly (transform|logvol|logvolref|assembly|assemblyref|multicopy|index)+>
+    <!ATTLIST assembly name      ID           #REQUIRED
+                       alignable (true|false) "false"> 
+
+  <!ELEMENT assemblyref EMPTY>
+    <!ATTLIST assemblyref ref    IDREF        #REQUIRED
+                          zeroid (true|false) "false">
+
+  <!ELEMENT multicopy (transformation, (transform|logvolref|assemblyref))>
+    <!-- Removed logvol and assembly from multicopy content. There is no particular reason 
+         why they shouldn't be allowed there. But in practice one uses refs, and forbidding them simplifies coding 
+         the index stuff. If you need them, put them back. Got rid of transformref; never used. -->
+    <!-- loopvar: Set to a vector variable name or omit; see manual -->
+    <!-- alignable: Value is the alignment level-number -->
+    <!ATTLIST multicopy name      ID    #REQUIRED
+                        n         CDATA #REQUIRED
+                        loopvar   CDATA #IMPLIED
+                        alignable CDATA #IMPLIED>
+    <!-- N.B. no zeroid attribute: the copy-number is always zeroed each time the multicopy is inserted; no choice -->
+
+  <!ELEMENT addbranch (transform|logvol|logvolref|assembly|assemblyref)+>
+
diff --git a/GeoModelXml/oldCMakeLists.txt b/GeoModelXml/oldCMakeLists.txt
new file mode 100644
index 000000000..c474f1ea8
--- /dev/null
+++ b/GeoModelXml/oldCMakeLists.txt
@@ -0,0 +1,31 @@
+################################################################################
+# Package: GeoModelXml
+################################################################################
+
+# Declare the package name:
+atlas_subdir( GeoModelXml )
+
+# Declare the package's dependencies:
+atlas_depends_on_subdirs( PUBLIC
+                          AtlasPolicy
+                          DetectorDescription/GeoModel/GeoModelKernel
+                          PRIVATE
+                          Control/StoreGate
+                          DetectorDescription/GeoModel/GeoModelInterfaces
+                          GaudiKernel )
+
+# External dependencies:
+find_package( CLHEP )
+find_package( XercesC )
+find_package( ZLIB )
+
+# Component(s) in the package:
+atlas_add_library( GeoModelXml
+                   src/*.cxx
+                   PUBLIC_HEADERS GeoModelXml
+                   INCLUDE_DIRS ${XERCESC_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS}
+                   DEFINITIONS ${CLHEP_DEFINITIONS}
+                   LINK_LIBRARIES ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} ${ZLIB_LIBRARIES} GeoModelKernel StoreGateLib SGtests
+                   PRIVATE_LINK_LIBRARIES GaudiKernel )
+
+atlas_install_runtime( data/*.dtd )
diff --git a/GeoModelXml/src/AddPlane.cxx b/GeoModelXml/src/AddPlane.cxx
new file mode 100644
index 000000000..5befaade8
--- /dev/null
+++ b/GeoModelXml/src/AddPlane.cxx
@@ -0,0 +1,21 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "GeoModelXml/shape/AddPlane.h"
+#include <string>
+#include <sstream>
+
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelXml/translate.h"
+
+using namespace xercesc;
+
+void AddPlane::process(const DOMElement *element, double &zPlane, double &rMinPlane, double &rMaxPlane) {
+
+    std::istringstream(Translate(element->getAttribute(Translate("zplane")))) >> zPlane;
+    std::istringstream(Translate(element->getAttribute(Translate("rminplane")))) >> rMinPlane;
+    std::istringstream(Translate(element->getAttribute(Translate("rmaxplane")))) >> rMaxPlane;
+
+    return;
+}
diff --git a/GeoModelXml/src/AddbranchProcessor.cxx b/GeoModelXml/src/AddbranchProcessor.cxx
new file mode 100644
index 000000000..f0d311951
--- /dev/null
+++ b/GeoModelXml/src/AddbranchProcessor.cxx
@@ -0,0 +1,32 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//   Processor for addbranch elements
+//
+//   Process children and get list of things to be added to the tree.
+//
+#include "GeoModelXml/AddbranchProcessor.h"
+#include <map>
+
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelXml/ProcessorRegistry.h"
+
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+using namespace std;
+using namespace xercesc;
+
+void AddbranchProcessor::process(const DOMElement *element, GmxUtil &gmxUtil, GeoNodeList &toAdd) {
+
+    for (DOMNode *child = element->getFirstChild(); child != 0; child = child->getNextSibling()) {
+        if (child->getNodeType() == DOMNode::ELEMENT_NODE) {
+            char *name2release = Translate(child->getNodeName());
+            string name(name2release);
+            XMLString::release(&name2release);
+            gmxUtil.processorRegistry.find(name)->process(dynamic_cast<const DOMElement *>(child), gmxUtil, toAdd);
+        }
+    }
+}
diff --git a/GeoModelXml/src/AssemblyProcessor.cxx b/GeoModelXml/src/AssemblyProcessor.cxx
new file mode 100644
index 000000000..27cff3b60
--- /dev/null
+++ b/GeoModelXml/src/AssemblyProcessor.cxx
@@ -0,0 +1,115 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//   Processor for assembly elements
+//
+//   Add name to list.
+//   Create a physvol using special logvol GmxUtil.getAssemblyLV() add it to list.
+//      ...by using material "special::ether" Geo2G4 turns this into a G4Assembly
+//   Process children and get list of things to be added to the physvol.
+//   Add them to the physvol.
+//
+#include "GeoModelXml/AssemblyProcessor.h"
+
+#include <map>
+
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelKernel/GeoNameTag.h"
+#include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoLogVol.h"
+#include "GeoModelKernel/GeoPhysVol.h"
+#include "GeoModelKernel/GeoFullPhysVol.h"
+#include "GeoModelXml/GmxUtil.h"
+#include "GeoModelXml/GeoNodeList.h"
+#include "GeoModelXml/translate.h"
+
+// using namespace CLHEP;
+
+using namespace std;
+using namespace xercesc;
+
+void AssemblyProcessor::process(const DOMElement *element, GmxUtil &gmxUtil, GeoNodeList &toAdd) {
+GeoLogVol *lv;
+GeoNameTag *physVolName;
+
+    gmxUtil.positionIndex.incrementLevel();
+
+    char *name2release = Translate(element->getAttribute(Translate("name")));
+    string name(name2release);
+    XMLString::release(&name2release);
+//
+//    Look for the assembly in the map; if not yet there, add it
+//
+    map<string, AssemblyStore>::iterator entry;
+    if ((entry = m_map.find(name)) == m_map.end()) { // Not in registry; make a new item
+//
+//    Name
+//
+        m_map[name] = AssemblyStore();
+        AssemblyStore *store = &m_map[name];
+        physVolName = new GeoNameTag(name); 
+        store->name = physVolName;
+        store->id = 0;
+    }
+    else { // Already in the registry; use it.
+        physVolName = entry->second.name;
+    }
+    lv = gmxUtil.getAssemblyLV();
+    toAdd.push_back(physVolName);
+    gmxUtil.positionIndex.setCopyNo(m_map[name].id);
+    toAdd.push_back(new GeoIdentifierTag(m_map[name].id++)); 
+//
+//    Process the assembly's children
+//
+    GeoNodeList childrenAdd;
+    for (DOMNode *child = element->getFirstChild(); child != 0; child = child->getNextSibling()) {
+        if (child->getNodeType() == DOMNode::ELEMENT_NODE) {
+            DOMElement *el = dynamic_cast<DOMElement *> (child);
+            name2release = Translate(el->getNodeName());
+            string name(name2release);
+            XMLString::release(&name2release);
+            gmxUtil.processorRegistry.find(name)->process(el, gmxUtil, childrenAdd);
+        }
+    }
+//
+//    Make a new PhysVol and add everything to it, then add it to the list of things for my caller to add
+//
+    char *toRelease = Translate(element->getAttribute(Translate("alignable")));
+    string alignable(toRelease);
+    XMLString::release(&toRelease);
+    if (alignable.compare(string("true")) == 0) {
+        GeoFullPhysVol *pv = new GeoFullPhysVol(lv);
+        for (GeoNodeList::iterator node = childrenAdd.begin(); node != childrenAdd.end(); ++node) {
+            pv->add(*node);
+        }
+        toAdd.push_back(pv); // NB: the *PV is third item added, so reference as toAdd[2].
+    }
+    else {
+        GeoPhysVol *pv = new GeoPhysVol(lv);
+        for (GeoNodeList::iterator node = childrenAdd.begin(); node != childrenAdd.end(); ++node) {
+            pv->add(*node);
+        }
+        toAdd.push_back(pv);
+    }
+
+    gmxUtil.positionIndex.decrementLevel();
+
+    return;
+}
+
+void AssemblyProcessor::zeroId(const xercesc::DOMElement *element) {
+
+    char *name2release = Translate(element->getAttribute(Translate("name")));
+    string name(name2release);
+    XMLString::release(&name2release);
+//
+//    Look for the assembly in the map; if not yet there, add it
+//
+    map<string, AssemblyStore>::iterator entry;
+    if ((entry = m_map.find(name)) != m_map.end()) {
+        entry->second.id = 0;
+    }
+/* else ... Not an error: it is usually just about to be made with id = 0; no action needed. */
+}
diff --git a/GeoModelXml/src/AssemblyrefProcessor.cxx b/GeoModelXml/src/AssemblyrefProcessor.cxx
new file mode 100644
index 000000000..8a362ab11
--- /dev/null
+++ b/GeoModelXml/src/AssemblyrefProcessor.cxx
@@ -0,0 +1,65 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//    Process assemblyref items: basically, just find the referenced assembly and call its processor.
+//
+
+#ifndef STANDALONE_GMX
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/IMessageSvc.h"
+#else 
+#include <iostream>
+#endif
+
+
+#include "GeoModelXml/AssemblyrefProcessor.h"
+#include <string>
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelXml/GmxUtil.h"
+#include "GeoModelXml/GeoNodeList.h"
+#include "GeoModelXml/translate.h"
+
+using namespace std;
+using namespace xercesc;
+
+void AssemblyrefProcessor::process(const DOMElement *element, GmxUtil &gmxUtil, GeoNodeList &toAdd) {
+const XMLCh *ref = Translate("ref");
+const XMLCh *idref;
+DOMDocument *doc = element->getOwnerDocument();
+char *toRelease;
+//
+//    Get the referenced element
+//
+    idref = element->getAttribute(ref);
+    DOMElement *elem = doc->getElementById(idref);
+//
+//    Check it is the right sort
+//
+    toRelease = Translate(elem->getNodeName());
+    string nodeName(toRelease);
+    XMLString::release(&toRelease);
+    if (nodeName != string("assembly")) {
+#ifndef STANDALONE_GMX
+        ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+        MsgStream log(&(*msgh), "GeoModelXml");
+        log << MSG::FATAL << "Error in xml/gmx file: assemblyref " << Translate(idref) << " referenced a " << 
+                              nodeName << " instead of an assembly.\n";
+#else
+	std::cerr<< "Error in xml/gmx file: assemblyref " << Translate(idref) << " referenced a " << 
+                              nodeName << " instead of an assembly.\n";
+#endif
+        exit(999); // Should do better...
+    }
+//
+//    Process it
+//
+    const XMLCh *zeroid = element->getAttribute(Translate("zeroid"));
+    if (XMLString::equals(zeroid, Translate("true"))) {
+        gmxUtil.tagHandler.assembly.zeroId(elem);
+    }
+    gmxUtil.tagHandler.assembly.process(elem, gmxUtil, toAdd);
+    return;
+}
diff --git a/GeoModelXml/src/Element2GeoItem.cxx b/GeoModelXml/src/Element2GeoItem.cxx
new file mode 100644
index 000000000..a3503b31e
--- /dev/null
+++ b/GeoModelXml/src/Element2GeoItem.cxx
@@ -0,0 +1,64 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef STANDALONE_GMX
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IMessageSvc.h"
+#else
+#include <iostream>
+#endif
+
+#include "GeoModelXml/Element2GeoItem.h"
+#include <string>
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelXml/GmxUtil.h"
+#include "GeoModelKernel/RCBase.h"
+#include "GeoModelXml/translate.h"
+
+using namespace std;
+using namespace xercesc;
+
+Element2GeoItem::Element2GeoItem() {}
+
+Element2GeoItem::~Element2GeoItem() {}
+
+const RCBase * Element2GeoItem::process(const xercesc::DOMElement *element, GmxUtil &gmxUtil) {
+
+    char *name2release;
+
+    name2release = Translate(element->getAttribute(Translate("name")));
+    string name(name2release);
+    XMLString::release(&name2release);
+
+    const RCBase *item;
+    map<string, const RCBase *>::iterator entry;
+    if (name == "") { // Unnamed item; cannot store in the map; make a new one 
+        item = make(element, gmxUtil);
+    }
+    else if ((entry = m_map.find(name)) == m_map.end()) { // Not in; make a new one
+        item = make(element, gmxUtil);
+        m_map[name] = item; // And put it in the map
+    }
+    else { // Get it from the map
+        item = entry->second; 
+    }
+
+    return item;
+}
+
+const RCBase * Element2GeoItem::make(const xercesc::DOMElement *element, GmxUtil & /* gmxUtil */) const {
+    char *name2release = Translate(element->getNodeName());
+
+#ifndef STANDALONE_GMX
+    ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+    MsgStream log(&(*msgh), "GeoModelXml");
+    log << MSG::FATAL << "Oh oh: called base class make() method of Element2GeoType object; tag " << name2release << endmsg;
+#else
+    std::cerr<< "Oh oh: called base class make() method of Element2GeoType object; tag " << name2release << std::endl;
+#endif
+    XMLString::release(&name2release);
+
+    exit(999); // Should improve on this 
+}
diff --git a/GeoModelXml/src/Element2GeoItemRegistry.cxx b/GeoModelXml/src/Element2GeoItemRegistry.cxx
new file mode 100644
index 000000000..ab6dab041
--- /dev/null
+++ b/GeoModelXml/src/Element2GeoItemRegistry.cxx
@@ -0,0 +1,24 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "GeoModelXml/Element2GeoItemRegistry.h"
+#include "GeoModelXml/Element2GeoItem.h"
+
+Element2GeoItemRegistry::Element2GeoItemRegistry() {
+    m_defaultProcessor = new Element2GeoItem; 
+}
+
+Element2GeoItemRegistry::~Element2GeoItemRegistry() {
+    delete m_defaultProcessor; 
+}
+
+void Element2GeoItemRegistry::enregister(const std::string tagName, Element2GeoItem *processor) {
+    m_processor[tagName] = processor;
+}
+
+Element2GeoItem * Element2GeoItemRegistry::find(const std::string name) {
+    std::map<std::string, Element2GeoItem *>::iterator it = m_processor.find(name);
+
+    return it == m_processor.end()? m_defaultProcessor: it->second;
+}
diff --git a/GeoModelXml/src/ElementProcessor.cxx b/GeoModelXml/src/ElementProcessor.cxx
new file mode 100644
index 000000000..13847821e
--- /dev/null
+++ b/GeoModelXml/src/ElementProcessor.cxx
@@ -0,0 +1,53 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//   Example element processor. This is useful for debugging etc: it helps 
+//   get all elements processed, just printing out their name. Including 
+//   children of referenced tags. Can be used for example as the default element
+//   processor in the processor registry. 
+//
+//   Parameters: 
+//       The element to be processed;
+//       The GmxUtil for access to the Evaluator etc.
+//       A vector of *GeoGraphNode to add things to that need to be added to the GeoModel tree 
+//
+//
+#include "GeoModelXml/ElementProcessor.h"
+
+#ifndef STANDALONE_GMX
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IMessageSvc.h"
+#else
+#include <iostream>
+#endif
+
+
+#include <string>
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelXml/translate.h"
+
+#include "GeoModelXml/GeoNodeList.h"
+#include "GeoModelXml/ProcessorRegistry.h"
+#include "GeoModelXml/GmxUtil.h"
+
+using namespace xercesc;
+
+ElementProcessor::ElementProcessor() {}
+
+void ElementProcessor::process(const DOMElement *element, GmxUtil & /* gmxUtil*/, GeoNodeList & /* toAdd */) {
+
+    char *name2release = Translate(element->getNodeName());
+    std::string name(name2release);
+    XMLString::release(&name2release);
+
+#ifndef STANDALONE_GMX
+    ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+    MsgStream log(&(*msgh), "GeoModelXml");
+    log << MSG::FATAL << "Error!!! Default element processor called for tag-name " << name << endmsg;
+#else
+    std::cerr << "Error!!! Default element processor called for tag-name " << name << std::endl;
+#endif
+}
diff --git a/GeoModelXml/src/Gmx2Geo.cxx b/GeoModelXml/src/Gmx2Geo.cxx
new file mode 100644
index 000000000..53eb447cd
--- /dev/null
+++ b/GeoModelXml/src/Gmx2Geo.cxx
@@ -0,0 +1,375 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "GeoModelXml/Gmx2Geo.h"
+
+#ifndef STANDALONE_GMX
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/IMessageSvc.h"
+#include "GaudiKernel/MsgStream.h"
+#else
+#include <iostream>
+#endif
+
+#include <string>
+#include <iomanip>
+#include <sstream>
+#include <stdlib.h>
+
+#include <xercesc/dom/DOM.hpp>
+#include <xercesc/dom/DOMLSParser.hpp>
+#include <xercesc/util/PlatformUtils.hpp>
+
+#include "GeoModelKernel/GeoPhysVol.h"
+
+#include "ExpressionEvaluator/Evaluator.h"
+
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GeoNodeList.h"
+#include "GeoModelXml/ElementProcessor.h"
+#include "GeoModelXml/GmxUtil.h"
+#include "GeoModelXml/GmxInterface.h"
+#include "GeoModelXml/createdomdocument.h"
+
+using namespace std;
+using namespace xercesc;
+
+Gmx2Geo::Gmx2Geo(const string xmlFile, GeoPhysVol *addHere, GmxInterface &gmxInterface, unsigned int flags) {
+//
+//    Create the xml tree (DOMDocument)
+//
+
+// Logging: ref https://wiki.bnl.gov/dayabay/index.php?title=Logging
+// Turn on logging in job-options with: MessageSvc.setDebug += {"GeoModelXml"}
+#ifndef STANDALONE_GMX
+    ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+    MsgStream log(&(*msgh), "GeoModelXml");
+#endif
+
+    DOMLSParser *parser = 0;
+    DOMDocument *doc = createDOMDocument(xmlFile, parser, flags);
+    if (!doc) {// Parsed badly
+        XMLPlatformUtils::Terminate();
+#ifndef STANDALONE_GMX
+        log << MSG::FATAL << "Error in xml file " << xmlFile << ". Exiting athena." << endmsg;
+#else
+	std::cout<<"Error in xml file " << xmlFile << ". Exiting athena." <<std::endl;
+#endif
+        exit(0);
+    }
+//
+//    Set up the CLHEP evaluator and the xml-tag processors, and store the GmxInterface:
+//
+    GmxUtil gmxUtil(gmxInterface); 
+//
+//    Process the xml tree, creating all the GeoModel items and adding to the GeoModel tree.
+//
+    const DOMElement *root = doc->getDocumentElement();
+//
+//    info message: name of detector
+//
+    if (flags & 0x1) {
+#ifndef STANDALONE_GMX
+        log << MSG::INFO << "Set up detector geometry from db-string \nwhich adds sub-detector ";
+#else
+	std::cout<<"Set up detector geometry from db-string \nwhich adds sub-detector ";
+#endif
+    }
+    else {
+#ifndef STANDALONE_GMX
+        log << MSG::INFO << "Set up detector geometry from file " << xmlFile << " which adds sub-detector ";
+#else
+	std::cout<<"Set up detector geometry from db-string \nwhich adds sub-detector ";
+#endif
+    }
+    const DOMElement *element = dynamic_cast<const DOMElement*>(root);
+    const XMLCh *attribute = element->getAttribute(Translate("name"));
+#ifndef STANDALONE_GMX
+    log << Translate(attribute) << endmsg;
+#else
+    std::cout<<Translate(attribute) << std::endl;
+#endif
+//
+//    Add all constant definitions to the evaluator, so they are ready if needed.
+//
+    doDefines(doc, gmxUtil.eval);
+//
+//    Set up all sensitive detector types (readout geometry)
+//
+    doReadoutGeometry(doc, gmxUtil);
+//
+//    Add all index names
+//
+    doPositionIndex(doc, gmxUtil);
+//
+//   The xml file ends with an addbranch element. We start there, process it, 
+//   and it fills in the list of things to be added to the GeoModel graph. 
+//   There is one and only one addbranch element according to the DTD.
+//
+    xercesc::DOMNodeList *addbranchs = doc->getElementsByTagName(Translate("addbranch"));
+    const DOMElement *addbranch = dynamic_cast<const DOMElement *> (addbranchs->item(0)); 
+    GeoNodeList toAdd;
+    gmxUtil.processorRegistry.find("addbranch")->process(addbranch, gmxUtil, toAdd);
+    for (GeoNodeList::iterator node = toAdd.begin(); node != toAdd.end(); ++node) {
+        addHere->add(*node);
+    }
+
+    XMLPlatformUtils::Terminate();
+}
+
+int Gmx2Geo::doDefines(DOMDocument *doc, Evaluator &eval) {
+//
+//    Add all defines to the CLHEP::Evaluator
+//
+//
+//    It is better to store the evaluated number, not the expression 
+//      1: it avoids the parenthesis problem sum = a + b; 2 * sum != 2(a + b)
+//      2: it finds undefined constants sooner (helps debugging)
+//      3: anyway, everything is a constant so we might as well
+//    ...This means we need everything already defined before it is introduced
+//    ...Which means we must do matrices and vectors (which are only numbers) before vars.
+//    in case the user uses a vector-element when defining a var element
+//
+
+const DOMElement *element;
+//
+//-------------------------------------------------------------------------------------------
+//
+// Turn var printout on and off with 
+    
+#ifndef STANDALONE_GMX
+    ServiceHandle<IMessageSvc> msgh("MessageSvc","GmxUtil");
+    MsgStream log(&(*msgh), "GmxUtil");
+    log << MSG::DEBUG << "\n\nGmx2Geo GmxUtil matrix, vector and var values:\n";
+    log << MSG::DEBUG <<     "==============================================\n\n";
+#else
+    std::cout << "\n\nGmx2Geo GmxUtil matrix, vector and var values:\n";
+    std::cout <<     "==============================================\n\n";
+#endif
+
+    DOMNodeList *defines = doc->getElementsByTagName(Translate("defines"));
+    int nDefines = defines->getLength();
+    for (int i = 0; i < nDefines; ++i) {
+        element = dynamic_cast<DOMElement *>(defines->item(i));
+        DOMNodeList *vars;
+        DOMElement *var;
+        int nVars;
+//
+//   Vectors: a list of variables. Names subscripted by _k; values white-space separated numbers.
+//
+
+#ifndef STANDALONE_GMX
+        log << "\n\n    Vectors\n    =======\n\n";
+#else
+	std::cout<<"\n\n    Vectors\n    =======\n\n";
+#endif
+
+        vars = element->getElementsByTagName(Translate("vector"));
+        nVars = vars->getLength();
+        for (int j = 0; j < nVars; ++j) {
+            var = dynamic_cast<DOMElement*>(vars->item(j));
+            char *name = Translate(var->getAttribute(Translate("name")));
+            char *val = Translate(var->getAttribute(Translate("value")));
+            string fullname(name);
+            fullname += '_';
+            istringstream list(val);
+            double dble;
+            int k = 0;
+            do  {
+                list >> dble;
+#ifndef STANDALONE_GMX
+                log << fullname + to_string(k) << " = " << dble << endl; 
+#else
+		std::cout<<fullname + to_string(k) << " = " << dble << std::endl;
+#endif
+                eval.setVariable((fullname + to_string(k++)).c_str(), dble);
+            } while(list.good());
+            XMLString::release(&name);
+            XMLString::release(&val);
+        }
+//
+//   Matrices: a matrix of variables. Names subscripted by _j_k; values: white-space separated numbers.
+//
+#ifndef STANDALONE_GMX
+        log << "\n\n    Matrices\n    ========\n\n";
+#else
+	std::cout<<"\n\n    Matrices\n    ========\n\n";
+#endif
+
+        vars = element->getElementsByTagName(Translate("matrix"));
+        nVars = vars->getLength();
+        for (int j = 0; j < nVars; ++j) {
+            var = dynamic_cast<DOMElement*>(vars->item(j));
+            char *name = Translate(var->getAttribute(Translate("name")));
+            char *val = Translate(var->getAttribute(Translate("value")));
+            int coldim;
+            istringstream(Translate(var->getAttribute(Translate("coldim")))) >> coldim;
+            string fullname(name);
+            fullname += '_';
+            istringstream list(val);
+            double dble;
+            int k = 0;
+            do  {
+                for (int col = 0; col < coldim; ++col) {
+                        list >> dble;
+#ifndef STANDALONE_GMX
+                        log << fullname + to_string(k) + '_' + to_string(col) << " = " << dble << endl; 
+#else
+			std::cout<<fullname + to_string(k) + '_' + to_string(col) << " = " << dble << std::endl; 
+#endif
+                        eval.setVariable((fullname + to_string(k) + '_' + to_string(col)).c_str(), dble);
+                        if (!list.good()) break;
+                }
+                k++;
+            } while(list.good());
+            XMLString::release(&name);
+            XMLString::release(&val);
+        }
+//
+//    Vars: single variable
+//
+#ifndef STANDALONE_GMX
+        log << "\n\n    Single variables\n    ================\n\n";
+#else
+	std::cout<<"\n\n    Single variables\n    ================\n\n";
+#endif
+
+        vars = element->getElementsByTagName(Translate("var"));
+        nVars = vars->getLength();
+        for (int j = 0; j < nVars; ++j) {
+            var = dynamic_cast<DOMElement*>(vars->item(j));
+            char *name = Translate(var->getAttribute(Translate("name")));
+            char *val = Translate(var->getAttribute(Translate("value")));
+            double evaluated = eval.evaluate(val);
+            if (eval.status() != Evaluator::OK) {
+#ifndef STANDALONE_GMX
+                log << MSG::FATAL << "GeoModelXml Error processing CLHEP Evaluator expression. Error name " <<
+                eval.error_name() << endl << "Message: ";
+                eval.print_error();
+                log << val << endl;
+                log << string(eval.error_position(), '-') << '^' << '\n';
+                log << "Exiting program." << endmsg;
+#else
+		std::cout<< "GeoModelXml Error processing CLHEP Evaluator expression. Error name " <<
+                eval.error_name() << std::endl << "Message: ";
+                eval.print_error();
+		std::cout << val << std::endl;
+                std::cout << string(eval.error_position(), '-') << '^' << '\n';
+                std::cout << "Exiting program." << std::endl;
+#endif
+                exit(999); // Should do better...
+            }
+            eval.setVariable(name, evaluated);
+#ifndef STANDALONE_GMX
+            log << name << "\t\t" << val << " = " << setprecision(10) << evaluated << endl;
+#else
+	    std::cout<<"\t\t" << val << " = " << setprecision(10) << evaluated << std::endl;
+#endif
+            XMLString::release(&name);
+            XMLString::release(&val);
+        }
+    }
+#ifndef STANDALONE_GMX
+    log << endmsg;
+#else
+    std::cout<<std::endl;
+#endif
+    return 1;
+}
+
+int Gmx2Geo::doPositionIndex(xercesc::DOMDocument *doc, GmxUtil &gmxUtil) {
+    DOMNodeList *posIndex = doc->getElementsByTagName(Translate("positionindex"));
+    int nPosIndex = posIndex->getLength(); // Probably limited to 0 or 1 by DTD
+    for (int i = 0; i < nPosIndex; ++i) {
+        const DOMElement *element = dynamic_cast<DOMElement *>(posIndex->item(i));
+        DOMNodeList *addindexs = element->getElementsByTagName(Translate("addindex"));
+        int nIndexs = addindexs->getLength();
+        for (int j = 0; j < nIndexs; ++j) {
+            DOMElement *addindex = dynamic_cast<DOMElement*>(addindexs->item(j));
+            string name = string(Translate(addindex->getAttribute(Translate("name"))));
+            gmxUtil.positionIndex.addIndex(name);
+        }
+    }
+    return 1;
+}
+
+int Gmx2Geo::doReadoutGeometry(xercesc::DOMDocument *doc, GmxUtil &gmxUtil) {
+//
+//    We keep three parameter lists (each is a map of (parameter name, parameter value)), one at each
+//    level (readoutgeometry, sensorclass, sensortype). Currently just created new, copying previous one into
+//    it. In this way the sensortype parameter list has all parameters in it. Not efficient, but the list is always short?
+//
+char *name2release;
+string tagName;
+//
+//    Loop over all readoutgeometry elements
+//
+    DOMNodeList *rgs = doc->getElementsByTagName(Translate("readoutgeometry"));
+    int nRG = rgs->getLength(); 
+    for (int i = 0; i < nRG; ++i) {
+        map<string, string> rgParams; // New empty list
+        const DOMElement *rg = dynamic_cast<DOMElement *>(rgs->item(i));
+//
+//    Loop over readoutgeometry children
+//
+        for (DOMNode *rgChild = rg->getFirstChild(); rgChild != 0; rgChild = rgChild->getNextSibling()) {
+            if (rgChild->getNodeType() != DOMNode::ELEMENT_NODE) continue; // Skip char data
+            name2release = Translate(rgChild->getNodeName());
+            tagName = name2release;
+            XMLString::release(&name2release);
+            if (tagName == "param") {
+                addParam(rgChild, rgParams);
+            }
+            else if (tagName == "sensorclass") {
+                map<string, string> scParams(rgParams); // Initialised with all previous params
+                const DOMElement *sensorClass = dynamic_cast<DOMElement *>(rgChild);
+                name2release = Translate(sensorClass->getAttribute(Translate("name")));
+                string clas(name2release); // class is reserved word
+                XMLString::release(&name2release);
+//
+//    Loop over sensorclass children
+//
+                for (DOMNode *scChild = sensorClass->getFirstChild(); scChild != 0; scChild = scChild->getNextSibling()) {
+                    if (scChild->getNodeType() != DOMNode::ELEMENT_NODE) continue; // Skip char data
+                    name2release = Translate(scChild->getNodeName());
+                    tagName = name2release;
+                    XMLString::release(&name2release);
+                    if (tagName == "param") {
+                        addParam(scChild, scParams);
+                    }
+                    else if (tagName == "sensortype") {
+                        map<string, string> stParams(scParams); // Initialised with all previous params
+                        const DOMElement *sensorType = dynamic_cast<DOMElement *>(scChild);
+                        name2release = Translate(sensorType->getAttribute(Translate("name")));
+                        string name(name2release);
+                        XMLString::release(&name2release);
+//
+//    Loop over sensortype parameters
+//
+                        for (DOMNode *stChild = scChild->getFirstChild(); stChild != 0; stChild = stChild->getNextSibling()) {
+                            if (stChild->getNodeType() != DOMNode::ELEMENT_NODE) continue; // Skip char data
+                            addParam(stChild, stParams);
+                        }
+//
+//    Call the user's call back routine to add this sensor type with its specific parameters
+//
+                        gmxUtil.gmxInterface()->addSensorType(clas, name, stParams);
+                    }
+                }
+            }
+        }
+    }
+    return 1;
+}
+
+void Gmx2Geo::addParam(DOMNode *node, map<string, string> &params) {
+    const DOMElement *param = dynamic_cast<DOMElement *>(node);
+    char *name2release = Translate(param->getAttribute(Translate("name")));
+    string name(name2release);
+    XMLString::release(&name2release);
+    name2release = Translate(param->getAttribute(Translate("value")));
+    string value(name2release);
+    XMLString::release(&name2release);
+    params[name] = value;
+}
diff --git a/GeoModelXml/src/GmxInterface.cxx b/GeoModelXml/src/GmxInterface.cxx
new file mode 100644
index 000000000..ae8a18a12
--- /dev/null
+++ b/GeoModelXml/src/GmxInterface.cxx
@@ -0,0 +1,114 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//    Implement default GmxInterface, which just prints debug messages.
+//    User should over-ride all three methods.
+//    Use: create an instance of this, and pass a reference to it in the Gmx2Geo constructor.
+//
+#include "GeoModelXml/GmxInterface.h"
+
+#ifndef STANDALONE_GMX
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IMessageSvc.h"
+#else
+#include <iostream>
+#endif
+
+#include "GeoModelKernel/GeoPVConstLink.h"
+#include "GeoModelKernel/Query.h"
+#include "GeoModelKernel/GeoPhysVol.h"
+#include "GeoModelKernel/GeoVFullPhysVol.h"
+using namespace std;
+
+int GmxInterface::sensorId(map<string, int> &/*index*/) {
+    static int sequentialId;
+    return sequentialId++;
+}
+
+void GmxInterface::addSensorType(string clas, string type, map<string, string> params) {
+
+#ifndef STANDALONE_GMX
+    ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+    MsgStream log(&(*msgh), "GeoModelXml");
+
+    log << MSG::DEBUG << "GmxInterface::addSensorType called for class " << clas << "; type " << type << 
+                         "\n    Parameter names and values:\n";
+    for (map<string, string>::iterator p = params.begin(); p != params.end(); ++p) {
+        log << "        " << p->first << " = " << p->second << endmsg;
+    }
+#else
+    std::cout << "GmxInterface::addSensorType called for class " << clas << "; type " << type << 
+                         "\n    Parameter names and values:\n";
+
+    for (map<string, string>::iterator p = params.begin(); p != params.end(); ++p) {
+        std::cout << "        " << p->first << " = " << p->second << std::endl;
+    }
+#endif
+
+}
+
+void GmxInterface::addSensor(string name, map<string, int> &index, int sequentialId, GeoVFullPhysVol *fpv) {
+
+#ifndef STANDALONE_GMX
+    ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+    MsgStream log(&(*msgh), "GeoModelXml");
+
+    log << MSG::DEBUG << "GmxInterface::addSensor called for " << fpv->getLogVol()->getName() << ", type " << name << 
+                         ". Indices:   ";
+#else
+    std::cout<< "GmxInterface::addSensor called for " << fpv->getLogVol()->getName() << ", type " << name << 
+                         ". Indices:   ";
+#endif	 
+		
+    for (map<string, int>::iterator i = index.begin(); i != index.end(); ++i) {
+#ifndef STANDALONE_GMX
+        log << i->second << "   ";
+    }
+    log << "\nSequential ID = " << sequentialId << endmsg;
+#else
+    	std::cout << i->second << "   ";
+    }
+    std::cout << "\nSequential ID = " << sequentialId << std::endl;
+#endif
+
+}
+
+void GmxInterface::addAlignable(int level, map<std::string, int> &index, GeoVFullPhysVol *fpv, 
+                                GeoAlignableTransform */*transform*/) {
+//
+//    Logvol name is not very useful (usually == AssemblyLV). Get PhysVol name (seems surprisingly awkward way needed)
+//
+#ifndef STANDALONE_GMX
+    ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+    MsgStream log(&(*msgh), "GeoModelXml");
+/* Cannot get this to work.
+    string name("New name");
+    GeoPVConstLink parent = fpv->getParent();
+    Query<unsigned int> cIndex = parent->indexOf(fpv);
+    if (cIndex.isValid()) {
+        name = parent->getNameOfChildVol(cIndex);
+    }
+    else {
+        name = string("Something Wrong, fullPV not found in parent in GmxInterface::addAlignable");
+    }
+    log << MSG::DEBUG << "GmxInterface::addAlignable called for physvol name " << name << ".  Level = " << level << ". Indices:   ";
+*/
+
+    log << MSG::DEBUG << "GmxInterface::addAlignable called for a physvol. Logvol name " << fpv->getLogVol()->getName() << 
+            ". Level = " << level << ". Indices:   ";
+    for (map<string, int>::iterator i = index.begin(); i != index.end(); ++i) {
+        log << i->second << "   ";
+    }
+    log << endmsg;
+#else
+    std::cout << "GmxInterface::addAlignable called for a physvol. Logvol name " << fpv->getLogVol()->getName() << 
+            ". Level = " << level << ". Indices:   ";
+    for (map<string, int>::iterator i = index.begin(); i != index.end(); ++i) {
+        std::cout << i->second << "   ";
+    }
+    std::cout << std::endl;
+#endif
+}
diff --git a/GeoModelXml/src/GmxUtil.cxx b/GeoModelXml/src/GmxUtil.cxx
new file mode 100644
index 000000000..c9beab1b3
--- /dev/null
+++ b/GeoModelXml/src/GmxUtil.cxx
@@ -0,0 +1,209 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "GeoModelXml/GmxUtil.h"
+#ifndef STANDALONE_GMX
+#include "StoreGate/StoreGateSvc.h"
+#include "GaudiKernel/ISvcLocator.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IMessageSvc.h"
+#include "GeoModelInterfaces/StoredMaterialManager.h"
+#else
+#include <iostream>
+#endif
+#include "GeoModelKernel/GeoElement.h"
+#include "GeoModelKernel/GeoMaterial.h"
+#include "GeoModelKernel/GeoBox.h"
+#include "GeoModelKernel/GeoLogVol.h"
+#include "GeoModelXml/GmxInterface.h"
+
+#include <cstdlib>
+#include <sstream>
+#include <cctype>
+#include <limits>
+
+using namespace std;
+
+GmxUtil::GmxUtil(GmxInterface &gmxInterface) {
+    m_gmxInterface = &gmxInterface;
+//
+//    Initialise the Evaluator
+//
+    eval.setStdMath();
+//
+//    Fetch the material special::Ether and make any shape with it to make a special logvol.
+//    When Geo2G4 finds any physvol using a logvol with material special::Ether, it creates a G4Assembly
+//    instead of a G4Volume.
+//
+    m_assemblyLV = makeAssemblyLV();
+//
+//   Register tag handlers that produce a vector of items to add to the tree.
+//
+    processorRegistry.enregister("addbranch", &tagHandler.addbranch);
+    processorRegistry.enregister("logvol", &tagHandler.logvol);
+    processorRegistry.enregister("logvolref", &tagHandler.logvolref);
+    processorRegistry.enregister("assembly", &tagHandler.assembly);
+    processorRegistry.enregister("assemblyref", &tagHandler.assemblyref);
+    processorRegistry.enregister("transform", &tagHandler.transform);
+    processorRegistry.enregister("multicopy", &tagHandler.multicopy);
+    processorRegistry.enregister("index", &tagHandler.index);
+//
+//   Register tag handlers that produce GeoNodes. Only useful for those tags which
+//   can appear in a long list in any order. So certainly all shapes; maybe others.
+//
+    geoItemRegistry.enregister("box", (Element2GeoItem *) &tagHandler.box);
+    geoItemRegistry.enregister("cons", (Element2GeoItem *) &tagHandler.cons);
+    geoItemRegistry.enregister("generictrap", (Element2GeoItem *) &tagHandler.generictrap);
+    geoItemRegistry.enregister("para", (Element2GeoItem *) &tagHandler.para);
+    geoItemRegistry.enregister("pcon", (Element2GeoItem *) &tagHandler.pcon);
+    geoItemRegistry.enregister("pgon", (Element2GeoItem *) &tagHandler.pgon);
+    geoItemRegistry.enregister("trap", (Element2GeoItem *) &tagHandler.trap);
+    geoItemRegistry.enregister("trd", (Element2GeoItem *) &tagHandler.trd);
+    geoItemRegistry.enregister("tube", (Element2GeoItem *) &tagHandler.tube);
+    geoItemRegistry.enregister("tubs", (Element2GeoItem *) &tagHandler.tubs);
+    geoItemRegistry.enregister("intersection", (Element2GeoItem *) &tagHandler.intersection);
+    geoItemRegistry.enregister("union", (Element2GeoItem *) &tagHandler.onion); // union is reserved
+    geoItemRegistry.enregister("subtraction", (Element2GeoItem *) &tagHandler.subtraction);
+    geoItemRegistry.enregister("shaperef", (Element2GeoItem *) &tagHandler.shaperef);
+    geoItemRegistry.enregister("transformation", (Element2GeoItem *) &tagHandler.transformation);
+    geoItemRegistry.enregister("transformationref", (Element2GeoItem *) &tagHandler.transformationref);
+}
+
+GmxUtil::~GmxUtil() {
+}
+
+GmxInterface * GmxUtil::gmxInterface() {
+    return m_gmxInterface;
+}
+
+double GmxUtil::evaluate(char const *expression) {
+    static string lastGoodExpression("none"); // It is helpful for debugging to get some idea of where we had got to...
+    string strExpression(expression);
+
+    bool isWhiteSpace = true;
+    for(unsigned int i = 0; i < strExpression.length(); ++i){
+        if(!std::isspace(strExpression[i])) {
+            isWhiteSpace = false;
+            break;
+        }
+    }
+    if (isWhiteSpace) { // Catch a common error early and give best message possible
+#ifndef STANDALONE_GMX
+        ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+        MsgStream log(&(*msgh), "GeoModelXml");
+        log << MSG::FATAL << "GeoModelXml Error processing Evaluator expression: empty expression. Exiting program.\n" << 
+               endmsg;
+#else
+	std::cout <<"GeoModelXml Error processing CLHEP Evaluator expression: empty expression. Exiting program.\n";
+        throw runtime_error(string("evaluate: empty or white space expression. Last good expression was " + lastGoodExpression));
+#endif
+    }
+//
+//    Process any []s. Contents are evaluated to in integer, then the [...] are replaced by 
+//    string representation of that integer. Idea from Joakim Gradin. Re-coded by Nigel.
+//    Allows array elements to be accessed as array_[col-expression]_[row-expression]. 
+//
+    string noBrackets = debracket(strExpression);
+//
+//   And evaluate the result
+//
+    double result = eval.evaluate(noBrackets.c_str());
+    if (eval.status() != Evaluator::OK) {
+#ifndef STANDALONE_GMX
+        ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+        MsgStream log(&(*msgh), "GeoModelXml");
+        log << MSG::FATAL << "GeoModelXml Error processing Evaluator expression. Error name <" <<
+         eval.error_name() << ">" << endl << "Message: <";
+        eval.print_error();
+        log << ">. Original expression <" << expression << ">; Expression after de-bracketing:\n";
+        log << noBrackets << endl;
+        log << string(eval.error_position(), '-') << '^' << '\n';
+        log << "Exiting program.\n" << endmsg;
+#else
+	std::cout << "GeoModelXml Error processing Evaluator expression. Error name <" <<
+         eval.error_name() << ">" << std::endl << "Message: <";
+        eval.print_error();
+        std::cout << ">. Original expression <" << expression << ">; Expression after de-bracketing:\n";
+        std::cout << noBrackets << std::endl;
+        std::cout << string(eval.error_position(), '-') << '^' << '\n';
+        std::cout << "Exiting program.\n" << std::endl;
+#endif
+        throw runtime_error(string("evaluate: invalid expression. Last good expression was <" + lastGoodExpression + ">"));
+    }
+    lastGoodExpression = strExpression;
+    return result;
+}
+
+std::string GmxUtil::debracket(std::string expression) {
+//
+//    Get the last brackets contents and evaluate it
+//
+    size_t lastOpen = expression.find_last_of('[');
+    if (lastOpen == string::npos) { // None found
+        return expression; // Done
+    }
+    size_t nextClose = expression.find_first_of(']', lastOpen);
+    if (nextClose == string::npos) {
+#ifndef STANDALONE_GMX
+        ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+        MsgStream log(&(*msgh), "GeoModelXml");
+        log << MSG::ERROR << "debracket: unpaired opening [; expression was:\n    " << expression << endmsg; 
+#else
+	std::cout<<"debracket: unpaired opening [; expression was:\n    " <<
+	expression << std::endl;
+#endif
+
+        return expression;
+    }
+    string toEvaluate = expression.substr(lastOpen + 1, nextClose - lastOpen - 1);
+//
+//    Evaluate it
+//
+    stringstream result;
+    result << (int) eval.evaluate(toEvaluate.c_str());
+//
+//    Replace [sub-expr] with result
+//
+    string newExpression = expression.substr(0, lastOpen) + result.str() + 
+                           expression.substr(nextClose + 1, string::npos);
+
+    return debracket(newExpression);
+}
+
+GeoLogVol * GmxUtil::makeAssemblyLV() {
+#ifndef STANDALONE_GMX
+    StoreGateSvc *pDetStore = 0;
+    ISvcLocator *svcLocator = Gaudi::svcLocator();
+
+    ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+    MsgStream log(&(*msgh), "GeoModelXml");
+
+    StatusCode sc = svcLocator->service("DetectorStore", pDetStore);
+    if (sc.isFailure()) {
+            log << MSG::ERROR << "GmxUtil::makeAssemblyLV: Unable to access Detector Store" << endmsg;
+    }
+    else {
+        DataHandle<StoredMaterialManager> theMaterialManager;
+        sc = pDetStore->retrieve(theMaterialManager, "MATERIALS");
+        if(sc.isFailure()) {
+                log << MSG::ERROR << "GmxUtil::makeAssemblyLV: Unable to access Material Manager" << endmsg;
+        }
+        else {
+            GeoMaterial *assembly_material = theMaterialManager->getMaterial("special::Ether");
+            GeoBox *box = new GeoBox(1., 1., 1.); // Simplest shape; it is irrelevant
+            GeoLogVol *lv = new GeoLogVol(string("AssemblyLV"), box, assembly_material);
+            return lv;
+        }
+    }
+    return 0;
+#else
+    GeoMaterial *assembly_material = new GeoMaterial("special::Ether", 1.e-20);
+    GeoElement *vacuum = new GeoElement("vacuum", "Mt", 1, 1);
+    assembly_material->add(vacuum, 1.0);
+    assembly_material->lock();
+    GeoBox *box = new GeoBox(1., 1., 1.); // Simplest shape; it is irrelevant
+    GeoLogVol *lv = new GeoLogVol(string("AssemblyLV"), box, assembly_material);
+    return lv;
+#endif
+}
diff --git a/GeoModelXml/src/IndexProcessor.cxx b/GeoModelXml/src/IndexProcessor.cxx
new file mode 100644
index 000000000..ac82dd2da
--- /dev/null
+++ b/GeoModelXml/src/IndexProcessor.cxx
@@ -0,0 +1,34 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//   Processor for index elements
+//
+#include <map>
+
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelXml/IndexProcessor.h"
+
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+using namespace std;
+using namespace xercesc;
+
+void IndexProcessor::process(const DOMElement *element, GmxUtil &gmxUtil, GeoNodeList &/* toAdd */) {
+
+    char *name2release;
+
+    name2release = Translate(element->getAttribute(Translate("ref")));
+    string name(name2release);
+    XMLString::release(&name2release);
+
+    name2release = Translate(element->getAttribute(Translate("value")));
+    string value(name2release);
+    XMLString::release(&name2release);
+
+    gmxUtil.positionIndex.setFormula(name, value);
+
+    return;
+}
diff --git a/GeoModelXml/src/LogvolProcessor.cxx b/GeoModelXml/src/LogvolProcessor.cxx
new file mode 100644
index 000000000..e60b2be59
--- /dev/null
+++ b/GeoModelXml/src/LogvolProcessor.cxx
@@ -0,0 +1,207 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//   Processor for logvol elements
+//
+//   Add name to list.
+//   Create a physvol using my logvol; add it to list.
+//   Process children and get list of things to be added to the physvol.
+//   Add them to the physvol.
+//
+#include "GeoModelXml/LogvolProcessor.h"
+
+#ifndef STANDALONE_GMX
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IMessageSvc.h"
+#else
+#include <iostream>
+#endif
+
+#include <map>
+
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelKernel/GeoNameTag.h"
+#include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoLogVol.h"
+#include "GeoModelKernel/GeoPhysVol.h"
+#include "GeoModelKernel/GeoFullPhysVol.h"
+#include "GeoModelKernel/GeoVFullPhysVol.h"
+#include "GeoModelXml/GmxUtil.h"
+#include "GeoModelXml/GeoNodeList.h"
+#include "GeoModelXml/translate.h"
+
+// using namespace CLHEP;
+
+using namespace std;
+using namespace xercesc;
+
+void LogvolProcessor::process(const DOMElement *element, GmxUtil &gmxUtil, GeoNodeList &toAdd) {
+GeoLogVol *lv;
+GeoNameTag *physVolName;
+
+#ifndef STANDALONE_GMX
+    ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+    MsgStream log(&(*msgh), "GeoModelXml");
+#endif
+
+    gmxUtil.positionIndex.incrementLevel();
+
+    char *name2release = Translate(element->getAttribute(Translate("name")));
+    string name(name2release);
+    XMLString::release(&name2release);
+//
+//    Look for the logvol in the map; if not yet there, add it
+//
+    map<string, LogVolStore>::iterator entry;
+    if ((entry = m_map.find(name)) == m_map.end()) { // Not in registry; make a new item
+//
+//    Name
+//
+        m_map[name] = LogVolStore();
+        LogVolStore *store = &m_map[name];
+        physVolName = new GeoNameTag(name); 
+        store->name = physVolName;
+        store->id = 0;
+//
+//    Get the shape.
+//
+        DOMDocument *doc = element->getOwnerDocument();
+        const XMLCh *shape = element->getAttribute(Translate("shape"));
+        DOMElement *refShape = doc->getElementById(shape);
+        // Check it is a shape... its parent should be a <shapes>. DTD cannot do this for us.
+        DOMNode *parent = refShape->getParentNode();
+        if (XMLString::compareIString(parent->getNodeName(), Translate("shapes")) != 0) {
+
+#ifndef STANDALONE_GMX
+            log << MSG::FATAL << "Processing logvol " << name << 
+                    ". Error in gmx file. An IDREF for a logvol shape did not refer to a shape.\n" <<
+                    "Shape ref was " << shape << "; exiting" << endmsg;
+#else
+	    std::cout<<"Processing logvol " << name << 
+                    ". Error in gmx file. An IDREF for a logvol shape did not refer to a shape.\n" <<
+                    "Shape ref was " << shape << "; exiting" <<std::endl;
+#endif
+            exit (1); // Need to improve...
+        }
+//
+//    What sort of shape?
+//
+        name2release = Translate(refShape->getNodeName());
+        string shapeType(name2release);
+        XMLString::release(&name2release);
+
+        GeoShape *s = (GeoShape *) gmxUtil.geoItemRegistry.find(shapeType)->process(refShape, gmxUtil);
+//
+//    Get the material
+//
+        const XMLCh *material = element->getAttribute(Translate("material"));
+        DOMElement *refMaterial = doc->getElementById(material);
+        // Check it is a material... its parent should be a <materials>. DTD cannot do this for us.
+        parent = refMaterial->getParentNode();
+        if (XMLString::compareIString(parent->getNodeName(), Translate("materials")) != 0) {
+#ifndef STANDALONE_GMX
+            log << MSG::FATAL << "Processing logvol " << name << 
+                    ". Error in gmx file. An IDREF for a logvol material did not refer to a material.\n" <<
+                    "Material ref was " << material << "; exiting" << endmsg;
+#else
+	    std::cout<<"Processing logvol " << name << 
+                    ". Error in gmx file. An IDREF for a logvol material did not refer to a material.\n" <<
+                    "Material ref was " << material << "; exiting" <<std::endl;
+#endif
+            exit (1); // Need to improve...
+        }
+
+        GeoMaterial *m = (GeoMaterial *) gmxUtil.tagHandler.material.process(refMaterial, gmxUtil);
+//
+//    Make the LogVol and add it to the map ready for next time
+//
+        lv = new GeoLogVol(name, s, m);
+        store->logVol = lv;
+    }
+    else { // Already in the registry; use it.
+        physVolName = entry->second.name;
+        lv = entry->second.logVol;
+    }
+//
+//    Process the logvol children (side effect: sets formulae for indexes before calculating them)
+//
+    GeoNodeList childrenAdd;
+    for (DOMNode *child = element->getFirstChild(); child != 0; child = child->getNextSibling()) {
+        if (child->getNodeType() == DOMNode::ELEMENT_NODE) {
+            DOMElement *el = dynamic_cast<DOMElement *> (child);
+            name2release = Translate(el->getNodeName());
+            string name(name2release);
+            XMLString::release(&name2release);
+            gmxUtil.processorRegistry.find(name)->process(el, gmxUtil, childrenAdd);
+        }
+    }
+//
+//   Make a list of things to be added
+//
+    toAdd.push_back(physVolName);
+    bool sensitive = element->hasAttribute(Translate("sensitive"));
+    int sensId = 0;
+    map<string, int> index;
+    if (sensitive) {
+        gmxUtil.positionIndex.setCopyNo(m_map[name].id++);
+        gmxUtil.positionIndex.indices(index, gmxUtil.eval);
+        sensId = gmxUtil.gmxInterface()->sensorId(index);
+//        toAdd.push_back(new GeoIdentifierTag(m_map[name].id)); // Normal copy number
+        toAdd.push_back(new GeoIdentifierTag(sensId)); 
+    }
+    else {
+        toAdd.push_back(new GeoIdentifierTag(m_map[name].id)); // Normal copy number
+        gmxUtil.positionIndex.setCopyNo(m_map[name].id++);
+    } 
+//
+//    Make a new PhysVol and add everything to it, then add it to the list of things for my caller to add
+//
+    char *toRelease = Translate(element->getAttribute(Translate("alignable")));
+    string alignable(toRelease);
+    XMLString::release(&toRelease);
+    if (sensitive || (alignable.compare(string("true")) == 0)) {
+        GeoFullPhysVol *pv = new GeoFullPhysVol(lv);
+        for (GeoNodeList::iterator node = childrenAdd.begin(); node != childrenAdd.end(); ++node) {
+            pv->add(*node);
+        }
+        toAdd.push_back(pv); // NB: the *PV is third item added, so reference as toAdd[2].
+//
+//    Add sensitive volumes to detector manager via GmxInterface
+//
+        if (sensitive) {
+            name2release = Translate(element->getAttribute(Translate("sensitive")));
+            string sensitiveName(name2release);
+            XMLString::release(&name2release);
+            gmxUtil.gmxInterface()->addSensor(sensitiveName, index, sensId, dynamic_cast<GeoVFullPhysVol *> (pv));
+        }
+    }
+    else {
+        GeoPhysVol *pv = new GeoPhysVol(lv);
+        for (GeoNodeList::iterator node = childrenAdd.begin(); node != childrenAdd.end(); ++node) {
+            pv->add(*node);
+        }
+        toAdd.push_back(pv);
+    }
+
+    gmxUtil.positionIndex.decrementLevel();
+
+    return;
+}
+
+void LogvolProcessor::zeroId(const xercesc::DOMElement *element) {
+
+    char *name2release = Translate(element->getAttribute(Translate("name")));
+    string name(name2release);
+    XMLString::release(&name2release);
+//
+//    Look for the logvol in the map; if not yet there, add it
+//
+    map<string, LogVolStore>::iterator entry;
+    if ((entry = m_map.find(name)) != m_map.end()) {
+        entry->second.id = 0;
+    }
+/* else: Not an error: it is usually just about to be made with id = 0; no action needed. */
+}
diff --git a/GeoModelXml/src/LogvolrefProcessor.cxx b/GeoModelXml/src/LogvolrefProcessor.cxx
new file mode 100644
index 000000000..3f5520c8d
--- /dev/null
+++ b/GeoModelXml/src/LogvolrefProcessor.cxx
@@ -0,0 +1,65 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//    Process logvolref items: basically, just find the referenced logvol and call its processor.
+//
+#include "GeoModelXml/LogvolrefProcessor.h"
+
+#ifndef STANDALONE_GMX
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IMessageSvc.h"
+#else
+#include <iostream>
+#endif
+#include <string>
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelXml/GeoNodeList.h"
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+using namespace std;
+using namespace xercesc;
+
+void LogvolrefProcessor::process(const DOMElement *element, GmxUtil &gmxUtil, GeoNodeList &toAdd) {
+const XMLCh *ref = Translate("ref");
+const XMLCh *idref;
+DOMDocument *doc = element->getOwnerDocument();
+char *toRelease;
+//
+//    Get the referenced element
+//
+    idref = element->getAttribute(ref);
+    DOMElement *elem = doc->getElementById(idref);
+//
+//    Check it is the right sort
+//
+    toRelease = Translate(elem->getNodeName());
+    string nodeName(toRelease);
+    XMLString::release(&toRelease);
+    if (nodeName != string("logvol")) {
+#ifndef STANDALONE_GMX
+        ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+        MsgStream log(&(*msgh), "GeoModelXml");
+        log << MSG::FATAL << "Error in xml/gmx file: logvolref " << Translate(idref) << " referenced a " << nodeName << 
+                " instead of a logvol." << endmsg;
+#else
+	std::cout << "Error in xml/gmx file: logvolref " << Translate(idref) << " referenced a " << nodeName << 
+                " instead of a logvol." << std::endl;
+#endif
+        exit(999); // Should do better...
+    }
+//
+//    Process it
+//
+    const XMLCh *zeroid = element->getAttribute(Translate("zeroid"));
+    if (XMLString::equals(zeroid, Translate("true"))) {
+        gmxUtil.tagHandler.logvol.zeroId(elem);
+    }
+
+    gmxUtil.tagHandler.logvol.process(elem, gmxUtil, toAdd);
+
+    return;
+}
diff --git a/GeoModelXml/src/MakeBox.cxx b/GeoModelXml/src/MakeBox.cxx
new file mode 100644
index 000000000..ae4c9a285
--- /dev/null
+++ b/GeoModelXml/src/MakeBox.cxx
@@ -0,0 +1,30 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// Automatically generated code from /home/hessey/prog/gmx2geo/makeshape
+#include "GeoModelXml/shape/MakeBox.h"
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelKernel/RCBase.h"
+#include "GeoModelKernel/GeoBox.h"
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+using namespace xercesc;
+
+MakeBox::MakeBox() {}
+
+const RCBase * MakeBox::make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const {
+const int nParams = 3; 
+char const *parName[nParams] = {"xhalflength", "yhalflength", "zhalflength"};
+double p[nParams];
+char *toRelease;
+
+    for (int i = 0; i < nParams; ++i) {
+        toRelease = Translate(element->getAttribute(Translate(parName[i])));
+        p[i] = gmxUtil.evaluate(toRelease);
+        XMLString::release(&toRelease);
+    }
+
+    return new GeoBox(p[0], p[1], p[2]);
+}
diff --git a/GeoModelXml/src/MakeCons.cxx b/GeoModelXml/src/MakeCons.cxx
new file mode 100644
index 000000000..e650c5cf3
--- /dev/null
+++ b/GeoModelXml/src/MakeCons.cxx
@@ -0,0 +1,30 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// Automatically generated code from /home/hessey/prog/gmx2geo/makeshape
+#include "GeoModelXml/shape/MakeCons.h"
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelKernel/RCBase.h"
+#include "GeoModelKernel/GeoCons.h"
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+using namespace xercesc;
+
+MakeCons::MakeCons() {}
+
+const RCBase * MakeCons::make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const {
+const int nParams = 7; 
+char const *parName[nParams] = {"rmin1", "rmin2", "rmax1", "rmax2", "dz", "sphi", "dphi"};
+double p[nParams];
+char *toRelease;
+
+    for (int i = 0; i < nParams; ++i) {
+        toRelease = Translate(element->getAttribute(Translate(parName[i])));
+        p[i] = gmxUtil.evaluate(toRelease);
+        XMLString::release(&toRelease);
+    }
+
+    return new GeoCons(p[0], p[1], p[2], p[3], p[4], p[5], p[6]);
+}
diff --git a/GeoModelXml/src/MakeElement.cxx b/GeoModelXml/src/MakeElement.cxx
new file mode 100644
index 000000000..c12e1fe38
--- /dev/null
+++ b/GeoModelXml/src/MakeElement.cxx
@@ -0,0 +1,51 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "GeoModelXml/MakeElement.h"
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelKernel/RCBase.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoModelKernel/Units.h"
+#include "GeoModelKernel/GeoElement.h"
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+using namespace xercesc;
+using namespace GeoModelKernelUnits;
+
+MakeElement::MakeElement() {}
+
+const RCBase * MakeElement::make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const {
+char *name, *shortname;
+char *z;
+char *a;
+double zVal, aVal;
+//
+//   Get my Z
+//
+    z = Translate(element->getAttribute(Translate("Z")));
+    zVal = gmxUtil.evaluate(z);
+    XMLString::release(&z);
+//
+//   Get my A
+//
+    a = Translate(element->getAttribute(Translate("A")));
+    aVal = gmxUtil.evaluate(a);
+	
+    XMLString::release(&a);
+//
+//    Get my names
+//
+    name = Translate(element->getAttribute(Translate("name")));
+    shortname = Translate(element->getAttribute(Translate("shortname")));
+//
+//    Create it
+//
+    aVal *= gram/mole;
+    GeoElement *el = new GeoElement(name, shortname, zVal, aVal);
+    XMLString::release(&name);
+    XMLString::release(&shortname);
+
+    return (const RCBase *) el;
+}
diff --git a/GeoModelXml/src/MakeGenericTrap.cxx b/GeoModelXml/src/MakeGenericTrap.cxx
new file mode 100644
index 000000000..c9e60458b
--- /dev/null
+++ b/GeoModelXml/src/MakeGenericTrap.cxx
@@ -0,0 +1,48 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// *NOT*!!! Automatically generated code from /home/hessey/prog/gmx2geo/makeshape
+// GenericTraps would have 17 params, so Vakho built up a vector instead.
+// So skeleton was automatically generated, then edited by hand.
+//
+#include "GeoModelXml/shape/MakeGenericTrap.h"
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelKernel/RCBase.h"
+#include "GeoModelKernel/GeoGenericTrap.h"
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+
+using namespace xercesc;
+
+MakeGenericTrap::MakeGenericTrap() {}
+
+const RCBase * MakeGenericTrap::make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const {
+const int nParams = 17; 
+char const *parName[nParams] = {"x0", "y0", "x1", "y1", "x2", "y2", "x3", "y3", 
+                                "x4", "y4", "x5", "y5", "x6", "y6", "x7", "y7", "zhalflength"};
+double p;
+char *toRelease;
+std::vector<GeoTwoVector> vertices;
+double x;
+double y;
+
+    for (int i = 0; i < (nParams - 1) / 2; ++i) {
+        toRelease = Translate(element->getAttribute(Translate(parName[2 * i])));
+        x = gmxUtil.evaluate(toRelease);
+        XMLString::release(&toRelease);
+        toRelease = Translate(element->getAttribute(Translate(parName[2 * i + 1])));
+        y = gmxUtil.evaluate(toRelease);
+        XMLString::release(&toRelease);
+        vertices.push_back(GeoTwoVector(x, y));
+    }
+//
+//    z-half-length
+//
+    toRelease = Translate(element->getAttribute(Translate(parName[16])));
+    p = gmxUtil.evaluate(toRelease);
+    XMLString::release(&toRelease);
+
+    return new GeoGenericTrap(p, vertices);
+}
diff --git a/GeoModelXml/src/MakeIntersection.cxx b/GeoModelXml/src/MakeIntersection.cxx
new file mode 100644
index 000000000..4ff2728b6
--- /dev/null
+++ b/GeoModelXml/src/MakeIntersection.cxx
@@ -0,0 +1,83 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// Automatically generated code from /home/hessey/prog/gmx2geo/makeshape
+// Then heavily modified
+#include "GeoModelXml/shape/MakeIntersection.h"
+#include <string>
+
+#ifndef STANDALONE_GMX
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IMessageSvc.h"
+#else
+#include <iostream>
+#endif
+
+#include <xercesc/dom/DOM.hpp>
+//   #include <CLHEP/Geometry/Transform3D.h>
+#include <Eigen/Dense>
+#include "GeoModelKernel/RCBase.h"
+#include "GeoModelKernel/GeoShape.h"
+#include "GeoModelKernel/GeoTransform.h"
+
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+using namespace xercesc;
+using namespace std;
+
+MakeIntersection::MakeIntersection() {}
+
+const RCBase * MakeIntersection::make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const {
+// 
+//    Process child elements; first is first shaperef; then transform; then second shaperef.
+//
+    typedef Eigen::Affine3d Transform3D;
+
+    GeoShape *first = 0;
+    GeoShape *second = 0;
+    // HepGeom::Transform3D hepXf;
+    
+    Transform3D hepXf=Transform3D::Identity();
+    
+    int elementIndex = 0;
+    for (DOMNode *child = element->getFirstChild(); child != 0; child = child->getNextSibling()) {
+        if (child->getNodeType() == DOMNode::ELEMENT_NODE) { // Skips text nodes
+            switch (elementIndex) {
+                case 0: { // First element is first shaperef
+                    first = (GeoShape *) gmxUtil.tagHandler.shaperef.process(dynamic_cast<DOMElement *> (child), gmxUtil);
+                    break;
+                }
+                case 1: { // Second element is transformation or transformationref
+                    char *toRelease = Translate(child->getNodeName());
+                    string nodeName(toRelease);
+                    XMLString::release(&toRelease);
+                    GeoTransform *geoXf = nodeName == "transformation"? 
+(GeoTransform *) gmxUtil.tagHandler.transformation.process(dynamic_cast<DOMElement *>(child), gmxUtil):
+(GeoTransform *) gmxUtil.tagHandler.transformationref.process(dynamic_cast<DOMElement *>(child), gmxUtil);
+                    hepXf = geoXf->getTransform();
+                    break;
+                }
+                case 2: { // Third element is second shaperef
+                    second = (GeoShape *) gmxUtil.tagHandler.shaperef.process(dynamic_cast<DOMElement *> (child), gmxUtil);
+                    break;
+                }
+                default: // More than 3 elements?
+#ifndef STANDALONE_GMX
+                    ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+                    MsgStream log(&(*msgh), "GeoModelXml");
+                    log << MSG::FATAL << "MakeIntersection: Incompatible DTD? got more than 3 child elements\n";
+#else
+		    std::cout<<"MakeIntersection: Incompatible DTD? got more than 3 child elements\n";
+#endif
+            }
+            elementIndex++;
+        }
+    }
+
+    const GeoShapeIntersection *temp = &(first->intersect(*(GeoShape *) &(*(second) << hepXf)));
+
+    return (RCBase *) temp;
+}
diff --git a/GeoModelXml/src/MakeMaterial.cxx b/GeoModelXml/src/MakeMaterial.cxx
new file mode 100644
index 000000000..d123a2939
--- /dev/null
+++ b/GeoModelXml/src/MakeMaterial.cxx
@@ -0,0 +1,215 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "GeoModelXml/MakeMaterial.h"
+
+#ifndef STANDALONE_GMX
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IMessageSvc.h"
+#else
+#include <iostream>
+#endif
+
+#include <string>
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelKernel/RCBase.h"
+#include "GeoModelKernel/GeoMaterial.h"
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+#include "GeoModelKernel/Units.h"
+
+using namespace xercesc;
+using namespace std;
+using namespace GeoModelKernelUnits;
+
+MakeMaterial::MakeMaterial() {}
+
+const RCBase * MakeMaterial::make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const {
+char *name;
+char *density;
+char *densitySF;
+double rho;
+char *fracString;
+double fraction;
+char *qString;
+const XMLCh *ref = Translate("ref");
+const XMLCh *idref;
+DOMDocument *doc = element->getOwnerDocument();
+char *toRelease;
+
+#ifndef STANDALONE_GMX
+    ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+    MsgStream log(&(*msgh), "GeoModelXml");
+#endif
+//
+//    Get material density scale-factor for the block of materials this one is in 
+//
+    DOMNode *parent = element->getParentNode();
+    if (XMLString::compareIString(parent->getNodeName(), Translate("materials")) != 0) {
+#ifndef STANDALONE_GMX
+        log << MSG::FATAL << "Asked to make a material for non-material element. Parent element was " << 
+                             Translate(parent->getNodeName()) << "; error in gmx file; exiting" << endmsg;
+#else 
+	std::cout<<"Asked to make a material for non-material element. Parent element was " << 
+                             Translate(parent->getNodeName()) << "; error in gmx file; exiting" << std::endl;
+#endif
+        exit(1);
+    }
+    double scaleFactor(1.0);
+    DOMElement *el = dynamic_cast<DOMElement *> (parent);
+//    if (el->hasAttribute(Translate("densitysf"))) { // Guaranteed by DTD; don't recheck.
+        densitySF = Translate(el->getAttribute(Translate("densitysf")));
+        scaleFactor = gmxUtil.evaluate(densitySF);
+//    }
+//
+//    Get my name
+//
+    name = Translate(element->getAttribute(Translate("name")));
+//
+//   Get my density
+//
+    density = Translate(element->getAttribute(Translate("density")));
+    rho = gmxUtil.evaluate(density) * scaleFactor;
+    XMLString::release(&density);
+//
+//    Create it
+//
+    GeoMaterial *material = new GeoMaterial(name, rho * g/cm3);
+    XMLString::release(&name);
+//
+//   Add my element contents
+//
+    DOMNodeList *elRefs = element->getElementsByTagName(Translate("elementref"));
+    int nElRefs = elRefs->getLength();
+    for (int i = 0; i < nElRefs; ++i) {
+        DOMElement *elRef = dynamic_cast<DOMElement *>(elRefs->item(i));
+        idref = elRef->getAttribute(ref);
+        DOMElement *elem = doc->getElementById(idref);
+
+        toRelease = Translate(elem->getNodeName());
+        string nodeName(toRelease);
+        XMLString::release(&toRelease);
+        if (nodeName != string("element")) {
+#ifndef STANDALONE_GMX
+            log << MSG::FATAL << "Error in xml/gmx file: An elementref referenced a " << nodeName << " instead of an element." 
+                              << endmsg;
+#else
+	    std::cout<< "Error in xml/gmx file: An elementref referenced a " << nodeName << " instead of an element." 
+                              << std::endl;
+#endif
+            exit(999); // Should do better...
+        }
+
+        GeoElement *geoElem = (GeoElement *) gmxUtil.tagHandler.element.process(elem, gmxUtil);
+
+        fracString = Translate(elRef->getAttribute(Translate("fraction")));
+        fraction = gmxUtil.evaluate(fracString);
+        XMLString::release(&fracString);
+        material->add(geoElem, fraction);
+    }
+//
+//   Add my chemical contents
+//
+    DOMNodeList *chemRefs = element->getElementsByTagName(Translate("chemicalref"));
+    int nChemRefs = chemRefs->getLength();
+    for (int i = 0; i < nChemRefs; ++i) {
+        DOMElement *chemRef = dynamic_cast<DOMElement *>(chemRefs->item(i));
+        idref = chemRef->getAttribute(ref);
+        DOMElement *chem = doc->getElementById(idref);
+
+        toRelease = Translate(chem->getNodeName());
+        string nodeName(toRelease);
+        XMLString::release(&toRelease);
+        if (nodeName != string("chemical")) {
+#ifndef STANDALONE_GMX
+            log << MSG::FATAL << "Error in xml/gmx file: A chemref referenced a " << nodeName << " instead of a chemical." << 
+                                  endmsg;
+#else
+	    std::cout<< "Error in xml/gmx file: A chemref referenced a " << nodeName << " instead of a chemical." << 
+                                  std::endl;
+#endif
+            exit(999); // Should do better...
+        }
+
+        fracString = Translate(chemRef->getAttribute(Translate("fraction")));
+        fraction = gmxUtil.evaluate(fracString);
+        XMLString::release(&fracString);
+
+        // Loop over chemical contents, adding each element to this material
+        DOMNodeList *chemEls = chem->getElementsByTagName(Translate("elemcontent"));
+        int nChemEls = chemEls->getLength();
+        vector<GeoElement *> geoElem;
+        vector<double> atomicWeight;
+        double molWeight = 0.0;
+        vector<double> formula;
+        for (int i = 0; i < nChemEls; ++i) {
+            DOMElement *chemEl = dynamic_cast<DOMElement *>(chemEls->item(i));
+            idref = chemEl->getAttribute(ref);
+            DOMElement *elem = doc->getElementById(idref);
+
+            toRelease = Translate(elem->getNodeName());
+            string nodeName(toRelease);
+            XMLString::release(&toRelease);
+            if (nodeName != string("element")) {
+#ifndef STANDALONE_GMX
+                log << MSG::FATAL << 
+                       "Error in xml/gmx file: An elementref referenced a " << nodeName << " instead of an element." << endmsg;
+#else
+		std::cout<<"Error in xml/gmx file: An elementref referenced a " << nodeName << " instead of an element." <<
+			std::endl;
+#endif
+                exit(999); // Should do better...
+            }
+
+            geoElem.push_back((GeoElement *) gmxUtil.tagHandler.element.process(elem, gmxUtil));
+            atomicWeight.push_back(geoElem.back()->getA());
+
+            qString = Translate(chemEl->getAttribute(Translate("quantity")));
+            formula.push_back(gmxUtil.evaluate(qString));
+            XMLString::release(&qString);
+
+            molWeight += atomicWeight.back() * formula.back();
+        }
+        for (int i = 0; i < nChemEls; ++i) {
+            material->add(geoElem[i], fraction * formula[i] * atomicWeight[i] / molWeight);
+        }
+    }
+
+//
+//   Add my material contents
+//
+    elRefs = element->getElementsByTagName(Translate("materialref"));
+    nElRefs = elRefs->getLength();
+    for (int i = 0; i < nElRefs; ++i) {
+        DOMElement *elRef = dynamic_cast<DOMElement *>(elRefs->item(i));
+        idref = elRef->getAttribute(ref);
+        DOMElement *elem = doc->getElementById(idref);
+
+        toRelease = Translate(elem->getNodeName());
+        string nodeName(toRelease);
+        XMLString::release(&toRelease);
+        if (nodeName != string("material")) {
+#ifndef STANDALONE_GMX
+            log << MSG::FATAL << 
+                   "Error in xml/gmx file: A materialref referenced a " << nodeName << " instead of a material." << endmsg;
+#else
+	    std::cout<<"Error in xml/gmx file: A materialref referenced a " << nodeName << " instead of a material." << 
+	    	std::endl;
+#endif
+            exit(999); // Should do better...
+        }
+
+        GeoMaterial *geoMaterial = (GeoMaterial *) gmxUtil.tagHandler.material.process(elem, gmxUtil);
+
+        fracString = Translate(elRef->getAttribute(Translate("fraction")));
+        fraction = gmxUtil.evaluate(fracString);
+        XMLString::release(&fracString);
+        material->add(geoMaterial, fraction);
+    }
+
+    material->lock(); // Calculate my params and prevent modification
+
+    return (const RCBase *) material;
+}
diff --git a/GeoModelXml/src/MakePara.cxx b/GeoModelXml/src/MakePara.cxx
new file mode 100644
index 000000000..bcb7e788d
--- /dev/null
+++ b/GeoModelXml/src/MakePara.cxx
@@ -0,0 +1,30 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// Automatically generated code from /home/hessey/prog/gmx2geo/makeshape
+#include "GeoModelXml/shape/MakePara.h"
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelKernel/RCBase.h"
+#include "GeoModelKernel/GeoPara.h"
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+using namespace xercesc;
+
+MakePara::MakePara() {}
+
+const RCBase * MakePara::make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const {
+const int nParams = 6; 
+char const *parName[nParams] = {"xhalflength", "yhalflength", "zhalflength", "alpha", "theta", "phi"};
+double p[nParams];
+char *toRelease;
+
+    for (int i = 0; i < nParams; ++i) {
+        toRelease = Translate(element->getAttribute(Translate(parName[i])));
+        p[i] = gmxUtil.evaluate(toRelease);
+        XMLString::release(&toRelease);
+    }
+
+    return new GeoPara(p[0], p[1], p[2], p[3], p[4], p[5]);
+}
diff --git a/GeoModelXml/src/MakePcon.cxx b/GeoModelXml/src/MakePcon.cxx
new file mode 100644
index 000000000..a1a924c25
--- /dev/null
+++ b/GeoModelXml/src/MakePcon.cxx
@@ -0,0 +1,50 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// Automatically generated code from /home/hessey/prog/gmx2geo/makeshape
+// But then edited for AddPlane stuff
+#include "GeoModelXml/shape/MakePcon.h"
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelKernel/RCBase.h"
+#include "GeoModelKernel/GeoPcon.h"
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+using namespace xercesc;
+
+MakePcon::MakePcon() {}
+
+const RCBase * MakePcon::make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const {
+const int nParams = 2; 
+char const *parName[nParams] = {"sphi", "dphi"};
+double p[nParams];
+char *toRelease;
+
+    for (int i = 0; i < nParams; ++i) {
+        toRelease = Translate(element->getAttribute(Translate(parName[i])));
+        p[i] = gmxUtil.evaluate(toRelease);
+        XMLString::release(&toRelease);
+    }
+
+    GeoPcon *pcon = new GeoPcon(p[0], p[1]);
+//
+//    Add planes
+//
+    double zPlane = 0.;
+    double rMinPlane = 0.;
+    double rMaxPlane = 0.;
+    for (DOMNode *child = element->getFirstChild(); child != 0; child = child->getNextSibling()) {
+        if (child->getNodeType() == DOMNode::ELEMENT_NODE) {
+            toRelease = Translate(child->getNodeName());
+            std::string name(toRelease);
+            XMLString::release(&toRelease);
+            if (name == "addplane") {
+                gmxUtil.tagHandler.addplane.process(dynamic_cast<const DOMElement *>(child), zPlane, rMinPlane, rMaxPlane);
+                pcon->addPlane(zPlane, rMinPlane, rMaxPlane);
+            }
+        }
+    }
+
+    return pcon;
+}
diff --git a/GeoModelXml/src/MakePgon.cxx b/GeoModelXml/src/MakePgon.cxx
new file mode 100644
index 000000000..426c37343
--- /dev/null
+++ b/GeoModelXml/src/MakePgon.cxx
@@ -0,0 +1,50 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// Automatically generated code from /home/hessey/prog/gmx2geo/makeshape
+// But then edited for AddPlane stuff
+#include "GeoModelXml/shape/MakePgon.h"
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelKernel/RCBase.h"
+#include "GeoModelKernel/GeoPgon.h"
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+using namespace xercesc;
+
+MakePgon::MakePgon() {}
+
+const RCBase * MakePgon::make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const {
+const int nParams = 3; 
+char const *parName[nParams] = {"sphi", "dphi", "nsides"};
+double p[nParams];
+char *toRelease;
+
+    for (int i = 0; i < nParams; ++i) {
+        toRelease = Translate(element->getAttribute(Translate(parName[i])));
+        p[i] = gmxUtil.evaluate(toRelease);
+        XMLString::release(&toRelease);
+    }
+
+    GeoPgon *pgon = new GeoPgon(p[0], p[1], p[2]);
+//
+//    Add planes
+//
+    double zPlane = 0.;
+    double rMinPlane = 0.;
+    double rMaxPlane = 0.;
+    for (DOMNode *child = element->getFirstChild(); child != 0; child = child->getNextSibling()) {
+        if (child->getNodeType() == DOMNode::ELEMENT_NODE) {
+            toRelease = Translate(child->getNodeName());
+            std::string name(toRelease);
+            XMLString::release(&toRelease);
+            if (name == "addplane") {
+                gmxUtil.tagHandler.addplane.process(dynamic_cast<const DOMElement *>(child), zPlane, rMinPlane, rMaxPlane);
+                pgon->addPlane(zPlane, rMinPlane, rMaxPlane);
+            }
+        }
+    }
+
+    return pgon;
+}
diff --git a/GeoModelXml/src/MakeRotation.cxx b/GeoModelXml/src/MakeRotation.cxx
new file mode 100644
index 000000000..6c88dfa33
--- /dev/null
+++ b/GeoModelXml/src/MakeRotation.cxx
@@ -0,0 +1,34 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "GeoModelXml/MakeRotation.h"
+#include <xercesc/dom/DOM.hpp>
+//  #include <CLHEP/Geometry/Transform3D.h>
+//  #include <CLHEP/Geometry/Vector3D.h>
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+
+MakeRotation::MakeRotation() {}
+
+using namespace xercesc;
+//  using namespace HepGeom;
+
+GeoTrf::Rotation3D MakeRotation::getTransform(const DOMElement *rotation, GmxUtil &gmxUtil) {
+
+const int nParams = 4; 
+char const *parName[nParams] = {"angle", "xcos", "ycos", "zcos"};
+double p[nParams];
+char *toRelease;
+
+    for (int i = 0; i < nParams; ++i) {
+        toRelease = Translate(rotation->getAttribute(Translate(parName[i])));
+        p[i] = gmxUtil.evaluate(toRelease);
+        XMLString::release(&toRelease);
+    }
+    GeoTrf::Rotation3D temp;
+    temp = GeoTrf::AngleAxis3D(p[0], GeoTrf::Vector3D(p[1], p[2], p[3]));
+
+    return temp;
+}
diff --git a/GeoModelXml/src/MakeShaperef.cxx b/GeoModelXml/src/MakeShaperef.cxx
new file mode 100644
index 000000000..55ed872cf
--- /dev/null
+++ b/GeoModelXml/src/MakeShaperef.cxx
@@ -0,0 +1,60 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//    Process transformationref items: basically, just find the referenced transform and call its processor.
+//
+#include "GeoModelXml/shape/MakeShaperef.h"
+
+#ifndef STANDALONE_GMX
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IMessageSvc.h"
+#else
+#include <iostream>
+#endif
+
+#include <string>
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelXml/GmxUtil.h"
+#include "GeoModelXml/translate.h"
+
+using namespace std;
+using namespace xercesc;
+
+const RCBase *MakeShaperef::process(const DOMElement *element, GmxUtil &gmxUtil) const {
+//
+//    Get the referenced shape
+//
+    const XMLCh *idref = element->getAttribute(Translate("ref"));
+    DOMDocument *doc = element->getOwnerDocument();
+    DOMElement *shape = doc->getElementById(idref);
+//
+//    Check it is the right sort: it's parent should be a shapes
+//
+    DOMNode *parent = shape->getParentNode();
+    if (XMLString::compareIString(parent->getNodeName(), Translate("shapes")) != 0) {
+#ifndef STANDALONE_GMX
+        ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+        MsgStream log(&(*msgh), "GeoModelXml");
+        log << MSG::FATAL << "Error processing <shaperef> tag: An IDREF for a shape did not refer to a shape.\nShape ref was " << 
+               idref << "; exiting" << endmsg;
+#else
+	std::cout<< "Error processing <shaperef> tag: An IDREF for a shape did not refer to a shape.\nShape ref was " << 
+               idref << "; exiting" << std::endl;
+#endif
+
+        exit (1); // Need to improve...
+    }
+//
+//    Get what sort of shape
+//
+    char *toRelease = Translate(shape->getNodeName());
+    string tag(toRelease);
+    XMLString::release(&toRelease);
+//
+//    Find and return it
+//
+    return (RCBase *) gmxUtil.geoItemRegistry.find(tag)->process(shape, gmxUtil);
+}
diff --git a/GeoModelXml/src/MakeSubtraction.cxx b/GeoModelXml/src/MakeSubtraction.cxx
new file mode 100644
index 000000000..a2982ccff
--- /dev/null
+++ b/GeoModelXml/src/MakeSubtraction.cxx
@@ -0,0 +1,79 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// Automatically generated code from /home/hessey/prog/gmx2geo/makeshape
+// Then heavily modified
+#include "GeoModelXml/shape/MakeSubtraction.h"
+
+#ifndef STANDALONE_GMX
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IMessageSvc.h"
+#else
+#include <iostream>
+#endif
+
+#include <string>
+#include <xercesc/dom/DOM.hpp>
+//   #include <CLHEP/Geometry/Transform3D.h>
+#include "GeoModelKernel/RCBase.h"
+#include "GeoModelKernel/GeoShape.h"
+#include "GeoModelKernel/GeoTransform.h"
+
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+using namespace xercesc;
+using namespace std;
+
+MakeSubtraction::MakeSubtraction() {}
+
+const RCBase * MakeSubtraction::make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const {
+// 
+//    Process child elements; first is first shaperef; then transformation; then second shaperef.
+//
+    typedef Eigen::Affine3d Transform3D;
+
+    GeoShape *first = 0;
+    GeoShape *second = 0;
+    Transform3D hepXf=Transform3D::Identity();
+    int elementIndex = 0;
+    for (DOMNode *child = element->getFirstChild(); child != 0; child = child->getNextSibling()) {
+        if (child->getNodeType() == DOMNode::ELEMENT_NODE) { // Skips text nodes
+            switch (elementIndex) {
+                case 0: { // First element is first shaperef
+                    first = (GeoShape *) gmxUtil.tagHandler.shaperef.process(dynamic_cast<DOMElement *> (child), gmxUtil);
+                    break;
+                }
+                case 1: { // Second element is transformation or transformationref
+                    char *toRelease = Translate(child->getNodeName());
+                    string nodeName(toRelease);
+                    XMLString::release(&toRelease);
+                    GeoTransform *geoXf = nodeName == "transformation"? 
+(GeoTransform *) gmxUtil.tagHandler.transformation.process(dynamic_cast<DOMElement *>(child), gmxUtil):
+(GeoTransform *) gmxUtil.tagHandler.transformationref.process(dynamic_cast<DOMElement *>(child), gmxUtil);
+                    hepXf = geoXf->getTransform();
+                    break;
+                }
+                case 2: { // Third element is second shaperef
+                    second = (GeoShape *) gmxUtil.tagHandler.shaperef.process(dynamic_cast<DOMElement *> (child), gmxUtil);
+                    break;
+                }
+                default: // More than 3 elements?
+#ifndef STANDALONE_GMX
+                    ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+                    MsgStream log(&(*msgh), "GeoModelXml");
+                    log << MSG::FATAL  << "MakeSubtraction: Incompatible DTD? got more than 3 child elements" << endmsg;
+#else
+		    std::cout<<"MakeSubtraction: Incompatible DTD? got more than 3 child elements" << std::endl;
+#endif
+            }
+            elementIndex++;
+        }
+    }
+
+    const GeoShapeSubtraction *temp = &(first->subtract(*(GeoShape *) &(*(second) << hepXf)));
+
+    return (RCBase *) temp;
+}
diff --git a/GeoModelXml/src/MakeTransformation.cxx b/GeoModelXml/src/MakeTransformation.cxx
new file mode 100644
index 000000000..1a154a724
--- /dev/null
+++ b/GeoModelXml/src/MakeTransformation.cxx
@@ -0,0 +1,59 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "GeoModelXml/MakeTransformation.h"
+#include <xercesc/dom/DOM.hpp>
+//   #include <CLHEP/Geometry/Transform3D.h>
+#include "GeoModelKernel/RCBase.h"
+#include "GeoModelKernel/GeoTransform.h"
+#include "GeoModelKernel/GeoAlignableTransform.h"
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+#include <Eigen/Dense>
+
+using namespace xercesc;
+using namespace std;
+
+MakeTransformation::MakeTransformation() {}
+
+const RCBase * MakeTransformation::make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const {
+char *name2release;
+typedef Eigen::Affine3d Transform3D;
+ Transform3D hepTransform=Transform3D::Identity(); // Starts as Identity transform
+//
+//   Add my element contents
+//
+    for (DOMNode *child = element->getFirstChild(); child != 0; child = child->getNextSibling()) {
+        if (child->getNodeType() == DOMNode::ELEMENT_NODE) {
+            name2release = Translate(child->getNodeName());
+            string name(name2release);
+            DOMElement *el = dynamic_cast<DOMElement *>(child);
+            if (name == string("translation")) {
+                hepTransform = hepTransform * gmxUtil.tagHandler.translation.getTransform(el, gmxUtil); 
+            }
+            else if (name == "rotation") {
+                hepTransform = hepTransform * gmxUtil.tagHandler.rotation.getTransform(el, gmxUtil); 
+            }
+            else if (name == "scaling") {
+	    
+// TODO: figure out what to do in this case 	    
+//                hepTransform = hepTransform * gmxUtil.tagHandler.scaling.getTransform(el, gmxUtil); 
+            }
+            XMLString::release(&name2release);
+        }
+    }
+//
+//    Create and return GeoModel transform
+//
+    char *toRelease = Translate(element->getAttribute(Translate("alignable")));
+    string alignable(toRelease);
+    XMLString::release(&toRelease);
+    if (alignable.compare(string("true")) == 0) {
+        return (const RCBase *) new GeoAlignableTransform(hepTransform);
+    }
+    else {
+        return (const RCBase *) new GeoTransform(hepTransform);
+    }
+}
diff --git a/GeoModelXml/src/MakeTransformationref.cxx b/GeoModelXml/src/MakeTransformationref.cxx
new file mode 100644
index 000000000..e4d9e7278
--- /dev/null
+++ b/GeoModelXml/src/MakeTransformationref.cxx
@@ -0,0 +1,59 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//    Process transformationref items: basically, just find the referenced transform and call its processor.
+//
+#include "GeoModelXml/MakeTransformationref.h"
+
+#ifndef STANDALONE_GMX
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IMessageSvc.h"
+#else
+#include <iostream>
+#endif
+
+#include <string>
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelXml/GmxUtil.h"
+#include "GeoModelXml/GeoNodeList.h"
+#include "GeoModelXml/translate.h"
+
+using namespace std;
+using namespace xercesc;
+
+const RCBase *MakeTransformationref::make(const DOMElement *element, GmxUtil &gmxUtil) const {
+const XMLCh *ref = Translate("ref");
+const XMLCh *idref;
+DOMDocument *doc = element->getOwnerDocument();
+char *toRelease;
+//
+//    Get the referenced element
+//
+    idref = element->getAttribute(ref);
+    DOMElement *elem = doc->getElementById(idref);
+//
+//    Check it is the right sort
+//
+    toRelease = Translate(elem->getNodeName());
+    string nodeName(toRelease);
+    XMLString::release(&toRelease);
+    if (nodeName != string("transformation")) {
+#ifndef STANDALONE_GMX
+        ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+        MsgStream log(&(*msgh), "GeoModelXml");
+        log << MSG::FATAL << "Error in xml/gmx file: transformationref " << Translate(idref) << " referenced a " << nodeName << 
+                " instead of a transformation." << endmsg;
+#else
+	std::cout<<"Error in xml/gmx file: transformationref " << Translate(idref) << " referenced a " << nodeName << 
+                " instead of a transformation." <<std::endl;
+#endif
+        exit(999); // Should do better...
+    }
+//
+//    Process it
+//
+    return gmxUtil.tagHandler.transformation.process(elem, gmxUtil);
+}
diff --git a/GeoModelXml/src/MakeTranslation.cxx b/GeoModelXml/src/MakeTranslation.cxx
new file mode 100644
index 000000000..d0de25a58
--- /dev/null
+++ b/GeoModelXml/src/MakeTranslation.cxx
@@ -0,0 +1,33 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "GeoModelXml/MakeTranslation.h"
+#include <xercesc/dom/DOM.hpp>
+//#include <CLHEP/Geometry/Transform3D.h>
+//#include <CLHEP/Geometry/Vector3D.h>
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+#include "GeoModelKernel/GeoDefinitions.h"
+
+MakeTranslation::MakeTranslation() {}
+
+using namespace xercesc;
+//using namespace HepGeom;
+
+GeoTrf::Translate3D MakeTranslation::getTransform(const DOMElement *translation, GmxUtil &gmxUtil) {
+
+const int nParams = 3; 
+char const *parName[nParams] = {"x", "y", "z"};
+double p[nParams];
+char *toRelease;
+
+    for (int i = 0; i < nParams; ++i) {
+        toRelease = Translate(translation->getAttribute(Translate(parName[i])));
+        p[i] = gmxUtil.evaluate(toRelease);
+        XMLString::release(&toRelease);
+    }
+    GeoTrf::Translate3D temp(p[0], p[1], p[2]);
+    return temp;
+}
diff --git a/GeoModelXml/src/MakeTrap.cxx b/GeoModelXml/src/MakeTrap.cxx
new file mode 100644
index 000000000..78f77aa0f
--- /dev/null
+++ b/GeoModelXml/src/MakeTrap.cxx
@@ -0,0 +1,30 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// Automatically generated code from /home/hessey/prog/gmx2geo/makeshape
+#include "GeoModelXml/shape/MakeTrap.h"
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelKernel/RCBase.h"
+#include "GeoModelKernel/GeoTrap.h"
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+using namespace xercesc;
+
+MakeTrap::MakeTrap() {}
+
+const RCBase * MakeTrap::make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const {
+const int nParams = 11; 
+char const *parName[nParams] = {"zhalflength", "theta", "phi", "dydzn", "dxdyndzn", "dxdypdzn", "angleydzn", "dydzp", "dxdyndzp", "dxdypdzp", "angleydzp"};
+double p[nParams];
+char *toRelease;
+
+    for (int i = 0; i < nParams; ++i) {
+        toRelease = Translate(element->getAttribute(Translate(parName[i])));
+        p[i] = gmxUtil.evaluate(toRelease);
+        XMLString::release(&toRelease);
+    }
+
+    return new GeoTrap(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9], p[10]);
+}
diff --git a/GeoModelXml/src/MakeTrd.cxx b/GeoModelXml/src/MakeTrd.cxx
new file mode 100644
index 000000000..668154a06
--- /dev/null
+++ b/GeoModelXml/src/MakeTrd.cxx
@@ -0,0 +1,30 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// Automatically generated code from /home/hessey/prog/gmx2geo/makeshape
+#include "GeoModelXml/shape/MakeTrd.h"
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelKernel/RCBase.h"
+#include "GeoModelKernel/GeoTrd.h"
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+using namespace xercesc;
+
+MakeTrd::MakeTrd() {}
+
+const RCBase * MakeTrd::make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const {
+const int nParams = 5; 
+char const *parName[nParams] = {"xhalflength1", "xhalflength2", "yhalflength1", "yhalflength2", "zhalflength"};
+double p[nParams];
+char *toRelease;
+
+    for (int i = 0; i < nParams; ++i) {
+        toRelease = Translate(element->getAttribute(Translate(parName[i])));
+        p[i] = gmxUtil.evaluate(toRelease);
+        XMLString::release(&toRelease);
+    }
+
+    return new GeoTrd(p[0], p[1], p[2], p[3], p[4]);
+}
diff --git a/GeoModelXml/src/MakeTube.cxx b/GeoModelXml/src/MakeTube.cxx
new file mode 100644
index 000000000..27e318707
--- /dev/null
+++ b/GeoModelXml/src/MakeTube.cxx
@@ -0,0 +1,30 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// Automatically generated code from /home/hessey/prog/gmx2geo/makeshape
+#include "GeoModelXml/shape/MakeTube.h"
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelKernel/RCBase.h"
+#include "GeoModelKernel/GeoTube.h"
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+using namespace xercesc;
+
+MakeTube::MakeTube() {}
+
+const RCBase * MakeTube::make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const {
+const int nParams = 3; 
+char const *parName[nParams] = {"rmin", "rmax", "zhalflength"};
+double p[nParams];
+char *toRelease;
+
+    for (int i = 0; i < nParams; ++i) {
+        toRelease = Translate(element->getAttribute(Translate(parName[i])));
+        p[i] = gmxUtil.evaluate(toRelease);
+        XMLString::release(&toRelease);
+    }
+
+    return new GeoTube(p[0], p[1], p[2]);
+}
diff --git a/GeoModelXml/src/MakeTubs.cxx b/GeoModelXml/src/MakeTubs.cxx
new file mode 100644
index 000000000..b71bdaa78
--- /dev/null
+++ b/GeoModelXml/src/MakeTubs.cxx
@@ -0,0 +1,30 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// Automatically generated code from /home/hessey/prog/gmx2geo/makeshape
+#include "GeoModelXml/shape/MakeTubs.h"
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelKernel/RCBase.h"
+#include "GeoModelKernel/GeoTubs.h"
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+using namespace xercesc;
+
+MakeTubs::MakeTubs() {}
+
+const RCBase * MakeTubs::make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const {
+const int nParams = 5; 
+char const *parName[nParams] = {"rmin", "rmax", "zhalflength", "sphi", "dphi"};
+double p[nParams];
+char *toRelease;
+
+    for (int i = 0; i < nParams; ++i) {
+        toRelease = Translate(element->getAttribute(Translate(parName[i])));
+        p[i] = gmxUtil.evaluate(toRelease);
+        XMLString::release(&toRelease);
+    }
+
+    return new GeoTubs(p[0], p[1], p[2], p[3], p[4]);
+}
diff --git a/GeoModelXml/src/MakeUnion.cxx b/GeoModelXml/src/MakeUnion.cxx
new file mode 100644
index 000000000..f28be31d1
--- /dev/null
+++ b/GeoModelXml/src/MakeUnion.cxx
@@ -0,0 +1,76 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "GeoModelXml/shape/MakeUnion.h"
+#include <string>
+
+#ifndef STANDALONE_GMX
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IMessageSvc.h"
+#else
+#include <iostream>
+#endif
+
+#include <xercesc/dom/DOM.hpp>
+//   #include <CLHEP/Geometry/Transform3D.h>
+#include "GeoModelKernel/RCBase.h"
+#include "GeoModelKernel/GeoShape.h"
+#include "GeoModelKernel/GeoTransform.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GmxUtil.h"
+
+using namespace xercesc;
+using namespace std;
+
+MakeUnion::MakeUnion() {}
+
+const RCBase * MakeUnion::make(const xercesc::DOMElement *element, GmxUtil &gmxUtil) const {
+// 
+//    Process child elements; first is first shaperef; then transform; then second shaperef.
+//
+    GeoShape *first = 0;
+    GeoShape *second = 0;
+    GeoTrf::Transform3D hepXf=GeoTrf::Transform3D::Identity();
+    int elementIndex = 0;
+    for (DOMNode *child = element->getFirstChild(); child != 0; child = child->getNextSibling()) {
+        if (child->getNodeType() == DOMNode::ELEMENT_NODE) { // Skips text nodes
+            switch (elementIndex) {
+                case 0: { // First element is first shaperef
+                    first = (GeoShape *) gmxUtil.tagHandler.shaperef.process(dynamic_cast<DOMElement *> (child), gmxUtil);
+                    break;
+                }
+                case 1: { // Second element is transformation or transformationref
+                    char *toRelease = Translate(child->getNodeName());
+                    string nodeName(toRelease);
+                    XMLString::release(&toRelease);
+                    GeoTransform *geoXf = nodeName == "transformation"? 
+(GeoTransform *) gmxUtil.tagHandler.transformation.process(dynamic_cast<DOMElement *>(child), gmxUtil):
+(GeoTransform *) gmxUtil.tagHandler.transformationref.process(dynamic_cast<DOMElement *>(child), gmxUtil);
+                    hepXf = geoXf->getTransform();
+                    break;
+                }
+                case 2: { // Third element is second shaperef
+                    second = (GeoShape *) gmxUtil.tagHandler.shaperef.process(dynamic_cast<DOMElement *> (child), gmxUtil);
+                    break;
+                }
+                default: // More than 3 elements?
+#ifndef STANDALONE_GMX
+                    ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+                    MsgStream log(&(*msgh), "GeoModelXml");
+                    log << MSG::FATAL << "MakeUnion: Incompatible DTD? got more than 3 child elements" << endmsg;
+#else
+		    std::cout<<"MakeUnion: Incompatible DTD? got more than 3 child elements" << std::endl;
+#endif
+            }
+            elementIndex++;
+        }
+    }
+
+    const GeoShapeUnion *temp = &(first->add(*(GeoShape *) &(*(second) << hepXf)));
+
+    return (RCBase *) temp;
+}
diff --git a/GeoModelXml/src/MulticopyProcessor.cxx b/GeoModelXml/src/MulticopyProcessor.cxx
new file mode 100644
index 000000000..6abdd3073
--- /dev/null
+++ b/GeoModelXml/src/MulticopyProcessor.cxx
@@ -0,0 +1,269 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//   multicopy element processor.
+//
+//   First time round, a loop creates all the Geo-transforms needed and stores them. First and subsequent calls, 
+//   a second loop adds these to the toAdd list, along with copies of the object. The object-handler stores and 
+//   deals with the object. This si needed to make sure sensitive volumes and alignable volumes are always added 
+//   correctly. 
+//
+//   The copy number of the copied object can be zeroed each time the multicopy-element is processed if the 
+//   zeroid attribute is set true. This has to be done here - if the attribute is given on a logvol or assembly ref, 
+//   it would alwasy be zero.
+//
+//   There are two ways of making the n transformations:
+//        loopvar attribute not set:    The transformation is raised to the power i-1
+//        loopvar set to a vector name: In the loop, before each transformation is created, the vector generic name is set
+//                                      equal to the next element of the vector.
+//
+#include "GeoModelXml/MulticopyProcessor.h"
+
+#ifndef STANDALONE_GMX
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IMessageSvc.h"
+#else
+#include <iostream>
+#endif
+
+#include <sstream>
+#include <string>
+#include <cstdlib>
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelKernel/GeoTransform.h"
+#include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoVFullPhysVol.h"
+#include "GeoModelKernel/GeoNameTag.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+//  #include <CLHEP/Geometry/Transform3D.h>
+
+#include "GeoModelXml/translate.h"
+#include "GeoModelXml/GeoNodeList.h"
+#include "GeoModelXml/ProcessorRegistry.h"
+#include "GeoModelXml/GmxUtil.h"
+
+
+using namespace xercesc;
+using namespace std;
+
+void MulticopyProcessor::process(const DOMElement *element, GmxUtil &gmxUtil, GeoNodeList &toAdd) {
+char *toRelease;
+const XMLCh *ref = Translate("ref");
+const XMLCh *idref;
+DOMDocument *doc = element->getOwnerDocument();
+
+#ifndef STANDALONE_GMX
+    ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+    MsgStream log(&(*msgh), "GeoModelXml");
+#endif
+
+    bool alignable = element->hasAttribute(Translate("alignable"));
+//
+//    How many copies?
+//
+    int nCopies;
+    toRelease = Translate(element->getAttribute(Translate("n")));
+    nCopies = gmxUtil.evaluate(toRelease);
+    XMLString::release(&toRelease);
+//
+//    See if it is in the map; if so, xfList is already done. If not, fill xfList.
+//
+    toRelease = Translate(element->getAttribute(Translate("name")));
+    string name(toRelease);
+    XMLString::release(&toRelease);
+    map<string, GeoNodeList>::iterator entry;
+    GeoNodeList *xfList;
+    if ((entry = m_map.find(name)) == m_map.end()) { // Not in registry; make a new item
+//
+//    Add empty node list to the map
+//
+        m_map[name] = GeoNodeList();
+        xfList = &m_map[name];
+//
+//    Loopvar Variable name
+//
+        string varname, firstElement;
+        bool hasVarname = (element->getAttributeNode(Translate("loopvar")) != 0);
+        if (hasVarname) {
+            toRelease = Translate(element->getAttribute(Translate("loopvar")));
+            varname = toRelease;
+            XMLString::release(&toRelease);
+            // Check it is a vector
+            firstElement = varname + "_0";
+            if (!gmxUtil.eval.findVariable(firstElement.c_str())) {
+#ifndef STANDALONE_GMX
+                log << MSG::FATAL << "Error in .gmx file. Processing multicopy element with name " << name << 
+                ". Found loopvar set to " << varname << ", but no vector with that name has been defined." << endmsg;
+#else
+		std::cout<< "Error in .gmx file. Processing multicopy element with name " << name << 
+                ". Found loopvar set to " << varname << ", but no vector with that name has been defined." << std::endl;
+#endif
+
+                exit(999); // Should do better
+            }
+        }
+//
+//    Get the transformation-element
+//
+        DOMElement *elXf = element->getFirstElementChild();
+        toRelease = Translate(elXf->getNodeName());
+        string nodeName(toRelease);
+        XMLString::release(&toRelease);
+        Element2GeoItem *xFormProcessor;
+        if (hasVarname) {
+            if (nodeName == "transformation") { // OK
+                xFormProcessor = (Element2GeoItem *) &(gmxUtil.tagHandler.transformation);
+            }
+            else { // Not OK
+#ifndef STANDALONE_GMX
+                log << MSG::FATAL << "Error in .gmx file. Processing multicopy element with name " << name <<
+                ". \nIt gives loopvar therefore should have a <transformation> and not a <transformationref> (despite the DTD)\n";
+#else
+		std::cout<<"Error in .gmx file. Processing multicopy element with name " << name <<
+                ". \nIt gives loopvar therefore should have a <transformation> and not a <transformationref> (despite the DTD)\n";
+#endif
+                exit(999); // Should do better
+            }
+        }
+        else {
+            xFormProcessor = nodeName == "transformation"?
+                             (Element2GeoItem *) &(gmxUtil.tagHandler.transformation):
+                             (Element2GeoItem *) &(gmxUtil.tagHandler.transformationref);
+        }
+//
+//    Produce all the transformations
+//
+        GeoAlignableTransform *geoAXf;
+        GeoTransform *geoXf;
+        if (hasVarname) {
+            for (int i = 0; i < nCopies; ++i) {
+                gmxUtil.eval.setVariable(varname.c_str(), (varname + "_" + to_string(i)).c_str());
+                if (alignable) {
+                    geoAXf = (GeoAlignableTransform *) xFormProcessor->make(elXf, gmxUtil);
+                    xfList->push_back((GeoGraphNode *) geoAXf);
+                }
+                else {
+                    geoXf = (GeoTransform *) xFormProcessor->make(elXf, gmxUtil);
+                    xfList->push_back((GeoGraphNode *) geoXf);
+                }
+                gmxUtil.eval.removeVariable(varname.c_str()); // Avoids a warning status in evaluator
+            }
+        }
+        else {
+//
+//    If varname not given, we get the CLHEP xForm and raise it to the power i, so NOT applied to first object.
+//    No transform (i.e. identity) for the first; so one less transform than objects
+//
+	  GeoTrf::Transform3D hepXf0=GeoTrf::Transform3D::Identity();
+            if (alignable) {
+                geoAXf = (GeoAlignableTransform *) xFormProcessor->make(elXf, gmxUtil);
+                hepXf0 = geoAXf->getTransform();
+            }
+            else {
+                geoXf = (GeoTransform *) xFormProcessor->make(elXf, gmxUtil);
+                hepXf0 = geoXf->getTransform();
+            }
+            GeoTrf::Transform3D hepXf=GeoTrf::Transform3D::Identity(); // Identity initially
+            for (int i = 0; i < nCopies; ++i) {
+                xfList->push_back((GeoGraphNode *) new GeoTransform(hepXf));
+                hepXf = hepXf0 * hepXf;
+            }
+        }
+    }
+    else {
+        xfList = &entry->second;
+    }
+//
+//    Get object to be copied
+//
+    DOMElement *object = element->getLastElementChild();
+    toRelease = Translate(object->getNodeName());
+    string nodeName(toRelease);
+    XMLString::release(&toRelease);
+    ElementProcessor *objectProcessor = gmxUtil.processorRegistry.find(nodeName);
+//
+//    Zero its copy number. Only needed if an item is used in 2 or more multicopies;
+//    harmless in case of only one use.
+//
+    if (nodeName == "logvolref") {
+        idref = object->getAttribute(ref);
+        DOMElement *elem = doc->getElementById(idref);
+        gmxUtil.tagHandler.logvol.zeroId(elem);
+    }
+    else if (nodeName == "assemblyref") {
+        idref = object->getAttribute(ref);
+        DOMElement *elem = doc->getElementById(idref);
+        gmxUtil.tagHandler.assembly.zeroId(elem);
+    }
+    else if (nodeName == "transform") { // Object is either an assemlyref or logvolref, and there is only one of these
+        DOMNodeList *lvList = element->getElementsByTagName(Translate("logvolref"));
+        if (lvList->getLength() > 0) {
+            const XMLCh *idref =  dynamic_cast<DOMElement *> (lvList->item(0))->getAttribute(Translate("ref"));
+            DOMElement *lv = doc->getElementById(idref);
+            gmxUtil.tagHandler.logvol.zeroId(lv);
+        }
+        else {
+            DOMNodeList *asList = element->getElementsByTagName(Translate("assemblyref"));
+            if (asList->getLength() > 0) {
+                const XMLCh *idref =  dynamic_cast<DOMElement *> (asList->item(0))->getAttribute(Translate("ref"));
+                DOMDocument *doc = element->getOwnerDocument();
+                DOMElement *as = doc->getElementById(idref);
+                gmxUtil.tagHandler.assembly.zeroId(as);
+            }
+            else {
+#ifndef STANDALONE_GMX
+                log << MSG::FATAL << 
+                    "multicopyprocessor: error in " << name << ". <transform> object was neither assemblyref nor logvolref\n"
+                    << "Exiting Athena" << endmsg;
+#else
+		std::cout<<"multicopyprocessor: error in " << name << ". <transform> object was neither assemblyref nor logvolref\n"
+                    << "Exiting Athena" << std::endl;
+#endif
+                exit(999); // Should do better
+            }
+        }
+    }
+//
+//    If alignable, add transformation to DetectorManager via GmxInterface.
+//    (NB. Alignable is messy because it involves both a transformation and an object as well as
+//    the multicopy or transform element to tell us when to insert it and what level of alignment 
+//    is wanted; and passing info from one routine to another when you try to keep a uniform interface is 
+//    difficult; and we only have partial GeoModel trees so we cannot use GeoModel tree traversal at this 
+//    moment (comes back to no way of knowing if we have a GeoFullPV or GeoPV)).
+//
+//    Also: no one is using it at the time of writing, so it is ***TOTALLY*** untested.
+//    It is done now to (i) make sure there ought to be a solution (ii) implement (imperfectly) 
+//    a way now while things are fresh in my mind.
+//
+    int level;
+    if (alignable) {
+        istringstream(Translate(element->getAttribute(Translate("alignable")))) >> level;
+    }
+//
+//    Add transforms and physvols etc. to list to be added
+//
+    map<string, int> index;
+    for (int copy = 0; copy < nCopies; ++copy) {
+        toAdd.push_back((*xfList)[copy]);
+        int lastTransform = toAdd.size() - 1;
+        objectProcessor->process(object, gmxUtil, toAdd);
+        if (alignable) {
+
+            cout << "copy = " << copy << "; level = " << level << endl;
+            cout << "\nAdd Alignable named " << endl;
+            cout << ((GeoNameTag *) (toAdd[lastTransform + 1]))->getName() << endl;
+            cout << " with id " << endl;
+            cout << ((GeoIdentifierTag *) (toAdd[lastTransform + 2]))->getIdentifier() << endl;
+
+            gmxUtil.positionIndex.incrementLevel(); // Logvol has unfortunately already decremented this; temp. restore it
+            gmxUtil.positionIndex.indices(index, gmxUtil.eval);
+            gmxUtil.gmxInterface()->addAlignable(level, index, (GeoVFullPhysVol *) toAdd[lastTransform + 3],
+                                                 (GeoAlignableTransform *) toAdd[lastTransform]);
+            gmxUtil.positionIndex.decrementLevel(); // Put it back where it was
+            index.clear();
+        }
+    }
+}
diff --git a/GeoModelXml/src/PositionIndex.cxx b/GeoModelXml/src/PositionIndex.cxx
new file mode 100644
index 000000000..0150212f4
--- /dev/null
+++ b/GeoModelXml/src/PositionIndex.cxx
@@ -0,0 +1,132 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include <cstdlib>
+
+#ifndef STANDALONE_GMX
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IMessageSvc.h"
+#else
+#include <iostream>
+#endif
+
+#include <vector>
+#include <string>
+#include "ExpressionEvaluator/Evaluator.h"
+#include "GeoModelXml/PositionIndex.h"
+
+using namespace std;
+
+PositionIndex::PositionIndex() {
+    m_level = -1; // Level -1 represents the "world" with no Copy Number
+}
+
+PositionIndex::~PositionIndex() {}
+
+int PositionIndex::level() {
+    return m_level;
+}
+
+int PositionIndex::incrementLevel()  {
+    ++m_level;
+    if ((int) m_copyNo.size() < m_level + 1)
+        m_copyNo.push_back(0);
+    return m_level;
+}
+
+int PositionIndex::decrementLevel() {
+    return --m_level;
+}
+
+int PositionIndex::copyNo(int level) {
+    if (level >= 0 && level <= m_level) {
+        return m_copyNo[level];
+    }
+    else {
+        return 0;
+    }
+}
+
+int PositionIndex::setCopyNo(int copyNo) {
+    m_copyNo[m_level] = copyNo;
+    return m_copyNo[m_level];
+}
+
+void PositionIndex::addIndex(std::string name) {
+    m_name.push_back(name);
+    m_formula[name] = "0";
+}
+
+string  PositionIndex::name(int whichOne) {
+    if (whichOne >= 0 && whichOne < (int) m_name.size()) {
+        return m_name[whichOne];
+    }
+    else {
+        return string("");
+    }
+}
+
+std::string PositionIndex::formula(std::string name) {
+    return m_formula[name];
+}
+
+void PositionIndex::setFormula(std::string name, std::string formula) {
+    m_formula[name] = formula;
+}
+
+void PositionIndex::indices(map<string, int> &index, Evaluator &eval) {
+    index.clear(); // In case caller uses it many times
+//
+//    Set Copy Number of each Level (CNL_i) up to current level
+//
+    string name("CNL_");
+    for (int i = 0; i <= m_level; ++i) {
+        eval.setVariable((name + to_string(i)).c_str(), m_copyNo[i]);
+    }
+//
+//    Set rest to zero
+//
+    for (int i = m_level + 1; true; ++i) {
+        string varName = name + to_string(i);
+        if (!eval.findVariable(varName.c_str())) break;
+        eval.setVariable(varName.c_str(), "0");
+    }
+//
+//    Evaluate each index in turn
+//
+//
+//   We loop over the vector of names to make sure we evaluate the CNL_n values in the order they
+//   are given in the <positionindex> element. Thus the user can select the order of evaluation, which is 
+//   important when CNL_n are used in the formulae. Looping directly over a map<>::iterator would process them
+//   in alphabetical order.
+//
+    for (vector <string>::iterator n = m_name.begin(); n < m_name.end(); ++n) {
+        string name = *n;
+        index[name] = (int) eval.evaluate(m_formula[name].c_str());
+        if (eval.status() != Evaluator::OK) {
+#ifndef STANDALONE_GMX
+            ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+            MsgStream log(&(*msgh), "GeoModelXml");
+            log << MSG::FATAL <<
+                   "GeoModelXml Error processing Evaluator expression for PositionIndex. Error name " <<
+                    eval.error_name() << endl << "Message: ";
+            eval.print_error();
+            log << m_formula[name] << endl << string(eval.error_position(), '-') << '^' << '\n' << "Exiting program." << 
+                   endmsg;
+#else
+	    std::cout<<"GeoModelXml Error processing Evaluator expression for PositionIndex. Error name " <<
+                    eval.error_name() << endl << "Message: ";
+            eval.print_error();
+            std::cout << m_formula[name] << endl << string(eval.error_position(), '-') << '^' << '\n' << "Exiting program." << 
+		  std::endl;
+#endif
+            exit(999); // Should do better...
+        }
+//
+//    And create a CLHEP variable with the same index-name in case the user needs it 
+//
+        eval.setVariable(name.c_str(), (double) index[name]);
+    }
+}
diff --git a/GeoModelXml/src/ProcessorRegistry.cxx b/GeoModelXml/src/ProcessorRegistry.cxx
new file mode 100644
index 000000000..66ec8fb07
--- /dev/null
+++ b/GeoModelXml/src/ProcessorRegistry.cxx
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "GeoModelXml/ProcessorRegistry.h"
+#include "GeoModelXml/ElementProcessor.h"
+
+ProcessorRegistry::ProcessorRegistry() {
+    m_defaultProcessor = new ElementProcessor(); 
+}
+
+void ProcessorRegistry::enregister(const std::string tagName, ElementProcessor *processor) {
+    m_processor[tagName] = processor;
+}
+
+ElementProcessor * ProcessorRegistry::find(const std::string name) {
+    std::map<std::string, ElementProcessor *>::iterator it = m_processor.find(name);
+
+    return it == m_processor.end()? m_defaultProcessor: it->second;
+}
diff --git a/GeoModelXml/src/StrictErrorHandler.cxx b/GeoModelXml/src/StrictErrorHandler.cxx
new file mode 100644
index 000000000..e8ee0ed8e
--- /dev/null
+++ b/GeoModelXml/src/StrictErrorHandler.cxx
@@ -0,0 +1,66 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "GeoModelXml/StrictErrorHandler.h"
+#include "GeoModelXml/translate.h"
+#include <xercesc/dom/DOMError.hpp>
+#include <xercesc/dom/DOMLocator.hpp>
+
+#ifndef STANDALONE_GMX
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IMessageSvc.h"
+#else
+#include <iostream>
+#endif
+
+StrictErrorHandler::StrictErrorHandler(): m_SawErrors(false) {}
+StrictErrorHandler::~StrictErrorHandler() {}
+
+bool StrictErrorHandler::handleError(const xercesc::DOMError &domError) {
+
+#ifndef STANDALONE_GMX
+    ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+    MsgStream log(&(*msgh), "GeoModelXml");
+    log << MSG::ERROR << "StrictErrorHandler: Handle an error\n";
+#else
+    std::cout << "StrictErrorHandler: Handle an error\n";
+#endif
+
+    m_SawErrors = true;
+
+    switch (domError.getSeverity()) {
+    case (xercesc::DOMError::DOM_SEVERITY_WARNING):
+#ifndef STANDALONE_GMX
+        log << "\nWarning at file \n";
+#else
+	std::cout<< "\nWarning at file \n";
+#endif
+        break;
+    case (xercesc::DOMError::DOM_SEVERITY_ERROR):
+#ifndef STANDALONE_GMX
+        log << "\nError at file \n";
+#else
+	std::cout<< "\nError at file \n";
+#endif
+        break;
+    default:
+#ifndef STANDALONE_GMX
+        log << "\nFatal Error at file \n";
+    }
+    log << Translate(domError.getLocation()->getURI())
+         << ", line " << domError.getLocation()->getLineNumber()
+         << ", char " << domError.getLocation()->getColumnNumber()
+         << "\n  Message: " << Translate(domError.getMessage()) << endmsg;
+#else
+    std::cout << "\nFatal Error at file \n";
+    }
+    std::cout << Translate(domError.getLocation()->getURI())
+         << ", line " << domError.getLocation()->getLineNumber()
+         << ", char " << domError.getLocation()->getColumnNumber()
+         << "\n  Message: " << Translate(domError.getMessage()) << std::endl;
+#endif
+
+    return true;
+}
diff --git a/GeoModelXml/src/TransformProcessor.cxx b/GeoModelXml/src/TransformProcessor.cxx
new file mode 100644
index 000000000..5c3e567f6
--- /dev/null
+++ b/GeoModelXml/src/TransformProcessor.cxx
@@ -0,0 +1,74 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//   Processor for transform elements
+//
+//   Decide if I need alignable transforms from my second child
+//   Add transform from first child to list
+//   Create physvol using my second child; add it to list.
+//
+#include "GeoModelXml/TransformProcessor.h"
+
+#include <string>
+#include <sstream>
+#include <vector>
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelKernel/GeoNameTag.h"
+#include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoLogVol.h"
+#include "GeoModelKernel/GeoPhysVol.h"
+#include "GeoModelKernel/GeoVFullPhysVol.h"
+#include "GeoModelKernel/GeoAlignableTransform.h"
+#include "GeoModelXml/GmxUtil.h"
+#include "GeoModelXml/translate.h"
+
+//  using namespace CLHEP;
+using namespace std;
+using namespace xercesc;
+
+void TransformProcessor::process(const DOMElement *element, GmxUtil &gmxUtil, GeoNodeList &toAdd) {
+char *tagName;
+    bool alignable = element->hasAttribute(Translate("alignable"));
+//
+//    Do second element first, to find what sort of transform is needed (shape or logvol etc.?)
+//
+    GeoNodeList objectsToAdd;
+    DOMElement *object = element->getLastElementChild();
+    tagName = Translate(object->getTagName());
+    string objectName(tagName);
+    gmxUtil.processorRegistry.find(objectName)->process(object, gmxUtil, objectsToAdd);
+    XMLString::release(&tagName);
+//
+//    Get the transformation
+//
+    DOMElement *transformation = element->getFirstElementChild();
+    tagName = Translate(transformation->getTagName()); // transformation or transformationref
+//  ******* Should check here that an alignable transform is given an alignable transformation and object; to be done
+    toAdd.push_back((GeoGraphNode *)gmxUtil.geoItemRegistry.find(string(tagName))->process(transformation, gmxUtil));
+    XMLString::release(&tagName);
+//
+//    Add transformation to DetectorManager via GmxInterface, if it is alignable
+//
+    if (alignable) { 
+        int level;
+        istringstream(Translate(element->getAttribute(Translate("alignable")))) >> level;
+	//cout << "\nTransformProcessor: Add Alignable named " << ((GeoNameTag *) objectsToAdd[0])->getName() << " with GeoModel id " << 
+        //((GeoIdentifierTag *) objectsToAdd[1])->getIdentifier() << endl; // commenting out this cout, as it is spamming all ITk jobs with tens of thousands of lines of output
+        map<string, int> index;
+        gmxUtil.positionIndex.incrementLevel(); // Logvol has unfortunately already decremented this; temp. restore it
+        gmxUtil.positionIndex.indices(index, gmxUtil.eval);
+// ****** Using "[2]" is an ugly way to reach the PV. Define const int in LogvolProcessor?
+        gmxUtil.gmxInterface()->addAlignable(level, index, (GeoVFullPhysVol *) objectsToAdd[2], 
+                                             (GeoAlignableTransform *) toAdd.back());
+
+        gmxUtil.positionIndex.decrementLevel(); 
+    }
+//
+//    And add the name and physvol etc. after the transformation
+//
+    toAdd.insert(toAdd.end(), objectsToAdd.begin(), objectsToAdd.end());
+
+    return;
+}
diff --git a/GeoModelXml/src/TransformrefProcessor.cxx b/GeoModelXml/src/TransformrefProcessor.cxx
new file mode 100644
index 000000000..b6c7c4235
--- /dev/null
+++ b/GeoModelXml/src/TransformrefProcessor.cxx
@@ -0,0 +1,61 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//    Process transformref items: basically, just find the referenced transform and call its processor.
+//
+#include "GeoModelXml/TransformrefProcessor.h"
+
+#ifndef STANDALONE_GMX
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/MsgStream.h"
+#include "GaudiKernel/IMessageSvc.h"
+#else
+#include <iostream>
+#endif
+
+#include <string>
+#include <xercesc/dom/DOM.hpp>
+#include "GeoModelXml/GmxUtil.h"
+#include "GeoModelXml/GeoNodeList.h"
+#include "GeoModelXml/translate.h"
+
+using namespace std;
+using namespace xercesc;
+
+void TransformrefProcessor::process(const DOMElement *element, GmxUtil &gmxUtil, GeoNodeList &toAdd) {
+const XMLCh *ref = Translate("ref");
+const XMLCh *idref;
+DOMDocument *doc = element->getOwnerDocument();
+char *toRelease;
+//
+//    Get the referenced element
+//
+    idref = element->getAttribute(ref);
+    DOMElement *elem = doc->getElementById(idref);
+//
+//    Check it is the right sort
+//
+    toRelease = Translate(elem->getNodeName());
+    string nodeName(toRelease);
+    XMLString::release(&toRelease);
+    if (nodeName != "transform") {
+#ifndef STANDALONE_GMX
+        ServiceHandle<IMessageSvc> msgh("MessageSvc", "GeoModelXml");
+        MsgStream log(&(*msgh), "GeoModelXml");
+        log << MSG::FATAL<< "Error in xml/gmx file: transformref " << Translate(idref) << " referenced a " << nodeName << 
+                " instead of a logvol." << endmsg;
+#else
+	std::cout <<"Error in xml/gmx file: transformref " << Translate(idref) << " referenced a " << nodeName << 
+                " instead of a logvol." << std::endl;
+#endif
+        exit(999); // Should do better...
+    }
+//
+//    Process it
+//
+    gmxUtil.tagHandler.transform.process(elem, gmxUtil, toAdd);
+
+    return;
+}
diff --git a/GeoModelXml/src/createdomdocument.cxx b/GeoModelXml/src/createdomdocument.cxx
new file mode 100644
index 000000000..39366f72c
--- /dev/null
+++ b/GeoModelXml/src/createdomdocument.cxx
@@ -0,0 +1,119 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//    Read in the xml and create an in-memory copy of it.
+//    The first parameter is either the name of a file containing the xml, or a
+//    (possibly very long) string with the xml itself. The flags parameter indicates which.
+//
+//    flags = 0 (default): file-name
+//    flags & 1? xml
+//    flags & 2? compressed xml
+//
+#include "GeoModelXml/createdomdocument.h"
+#include <xercesc/util/PlatformUtils.hpp>
+#include <xercesc/dom/DOMImplementation.hpp>
+#include <xercesc/dom/DOMImplementationLS.hpp>
+#include <xercesc/dom/DOMImplementationRegistry.hpp>
+#include "GeoModelXml/StrictErrorHandler.h"
+#include "GeoModelXml/translate.h"
+#include <iostream>
+#include <stdexcept>
+
+using namespace std;
+using namespace xercesc;
+
+string decompress(const string & compressed);
+
+DOMDocument *createDOMDocument(string xmlFile, DOMLSParser *parser, unsigned int flags) {
+//
+//    Initialise Xerces-C 
+//
+    try {
+        XMLPlatformUtils::Initialize();
+    }
+    catch (const xercesc::XMLException &toCatch) {
+        char *message = Translate(toCatch.getMessage());
+        cout << "XercesC error during initialization: " << message << "\n";
+        XMLString::release(&message);
+        return 0;
+    }
+//
+//   Get a DOMLS parser (Document Object Model Load Save)
+//
+    static const XMLCh gLS[] = {chLatin_L, chLatin_S, chNull};
+    DOMImplementation *impl = DOMImplementationRegistry::getDOMImplementation(gLS);
+    parser = ((DOMImplementationLS*)impl)->createLSParser(DOMImplementationLS::MODE_SYNCHRONOUS, 0);
+    DOMConfiguration  *config = parser->getDomConfig();
+
+    config->setParameter(XMLUni::fgDOMNamespaces, true);
+    config->setParameter(XMLUni::fgXercesSchema, true);
+    config->setParameter(XMLUni::fgXercesHandleMultipleImports, true);
+    config->setParameter(XMLUni::fgXercesSchemaFullChecking, true);
+    config->setParameter(XMLUni::fgDOMValidateIfSchema, true);
+    config->setParameter(XMLUni::fgDOMDatatypeNormalization, true);
+// The next is important if you want to insert elements into the tree. Without it, elements loaded 
+// from a file included via an !ENTITY are not writable. False should be the default, but for some reason the
+// following is still needed
+    config->setParameter(xercesc::XMLUni::fgDOMEntities, false);
+
+    // And create our error handler and install it
+    StrictErrorHandler errorHandler;
+    config->setParameter(XMLUni::fgDOMErrorHandler, &errorHandler);
+//
+//    Parse the file
+//
+    XMLCh *xmlCh(0); 
+    xercesc::DOMDocument *doc;
+    try {
+        if (!(flags & 0x1)) { // String is a file name
+            doc = parser->parseURI(xmlFile.c_str());
+        }
+        else {
+            string decompressed;
+            if (flags & 0x2) { // Decompress it
+                decompressed = decompress(xmlFile);
+cout << "Decompressed it\n";
+            }
+            else {
+                decompressed = xmlFile;
+            }
+            xmlCh = Translate(decompressed.c_str());
+cout << "Transcoded it\n";
+            DOMLSInput *input = impl->createLSInput();
+            input->setStringData(xmlCh);            
+            doc = parser->parse(input);
+cout << "Parsed it\n";
+        }
+        if (errorHandler.getSawErrors()) {
+            cout << "Oh oh, saw errors. \n";
+if (flags & 0x1) cout << "\n\n\n" << Translate(xmlCh) << "\n\n\n";
+            return 0;
+        }
+        else {
+            if (!(flags & 0x1)) {
+                std::cout << "File " << xmlFile << " successfully parsed.\n";
+            }
+            else {
+                std::cout << "Database string successfully parsed.\n";
+            }
+        }
+    }
+    catch (const XMLException &toCatch) {
+        char *message = Translate(toCatch.getMessage());
+        cout << "Parse-file xml exception: \n" << message << "\n";
+        XMLString::release(&message);
+        return 0;
+    }
+    catch (const DOMException &toCatch) {
+        char *message = Translate(toCatch.msg);
+        cout << "DOM exception: \n" << message << "\n";
+        XMLString::release(&message);
+        return 0;
+    }
+// You cannot delete the parser, even though you never refer to it again. It is needed 
+// to get DOMElement *root etc.
+//    delete parser;
+    return doc;
+}
diff --git a/GeoModelXml/src/decompress.cxx b/GeoModelXml/src/decompress.cxx
new file mode 100644
index 000000000..6566366cb
--- /dev/null
+++ b/GeoModelXml/src/decompress.cxx
@@ -0,0 +1,60 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+//    Decompress a gzipped string to its original form 
+//
+#include <string>
+#include <sstream>
+#include <algorithm>
+#include <stdexcept>
+
+extern "C" {
+    #include <zlib.h>
+}
+
+using namespace std;
+
+string decompress(const string& str) {
+
+    z_stream zs;                        // z_stream is zlib's control structure
+//    std::fill_n(&zs, 1, 0);
+//    memset(&zs, 0, sizeof(zs));
+    zs.zalloc   = NULL;
+    zs.zfree    = NULL;
+    zs.opaque   = NULL;
+    zs.next_in  = (Bytef *)str.c_str();
+    zs.avail_in = str.size();
+
+    // According to the official manual, 2nd param is windowsBits and is max. 15. But a web page somewhere 
+    // said for gzip files, it should be 16 or'd (or added) to the usual windowsBits. By trial and error, the following works:
+    int returnCode = inflateInit2(&zs, 0x1f);
+    if (returnCode != Z_OK)
+        throw runtime_error(string("decompress: inflateInit2 failed, error code means: ") + string(zError(returnCode)));
+
+    char outBuffer[32768];
+    string output;
+    do {
+        zs.next_out = reinterpret_cast<Bytef*>(outBuffer);
+        zs.avail_out = sizeof(outBuffer);
+
+        returnCode = inflate(&zs, 0);
+
+        if (output.size() < zs.total_out) {
+            output.append(outBuffer, zs.total_out - output.size());
+        }
+
+    } while (returnCode == Z_OK);
+
+    inflateEnd(&zs);
+
+    if (returnCode != Z_STREAM_END) { // an error occurred that was not EOF
+        ostringstream oss;
+        oss << "decompress: Exception during zlib decompression (code: " << returnCode << "): "
+            << zs.msg;
+        throw runtime_error(oss.str());
+    }
+
+    return output;
+}
diff --git a/README.md b/README.md
index 19e5cf4db..75846f9eb 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1 @@
-# GeoModelXML
-
+GMX is a straight copy of Nigel Hessey's GeoModelXml
\ No newline at end of file
diff --git a/cmake/GMXConfig.cmake b/cmake/GMXConfig.cmake
new file mode 100644
index 000000000..688b865b6
--- /dev/null
+++ b/cmake/GMXConfig.cmake
@@ -0,0 +1,3 @@
+get_filename_component(SELF_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+include(${SELF_DIR}/GMX-GeoModelXml.cmake)
+
-- 
GitLab