Print

Print


Author: phansson
Date: Mon Nov  3 18:26:47 2014
New Revision: 3412

Log:
Adding new 2014 HPS SVT geometry. Use compact to read in survey constants with a new SurveyVolume class. Active the LCDD converter for now and add test to build the lcdd file. Try to re-use as much as possible from the Test Run detector; within limits.

Added:
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/CompactSurveyVolume.java
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerGeometryDefinition.java
    projects/lcsim/trunk/detector-framework/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014LCDDTest.java
Modified:
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014JavaBuilder.java
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014LCDDBuilder.java
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014LCDDBuilder.java
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerBuilder.java
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerLCDDBuilder.java
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/LCDDSurveyVolume.java
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyCoordinateSystem.java
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java
    projects/lcsim/trunk/detector-framework/src/test/resources/org/lcsim/geometry/subdetector/HPSTracker2014.xml

Added: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/CompactSurveyVolume.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/CompactSurveyVolume.java	(added)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/CompactSurveyVolume.java	Mon Nov  3 18:26:47 2014
@@ -0,0 +1,223 @@
+package org.lcsim.geometry.compact.converter;
+
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+
+import java.util.List;
+
+import org.jdom.DataConversionException;
+import org.jdom.Element;
+
+public abstract class CompactSurveyVolume extends SurveyVolume {
+    public static final String xmlTagNameTop = "SurveyVolumes";
+    public static final String xmlTagName = "SurveyVolume";
+    
+    Element node = null;
+    
+    public CompactSurveyVolume(String name, SurveyVolume m,
+            AlignmentCorrection alignmentCorrection, Element node2) {
+        super(name, m, alignmentCorrection);
+        node = node2;
+    }
+
+    public CompactSurveyVolume(String name, SurveyVolume m,
+            AlignmentCorrection alignmentCorrection, SurveyVolume ref, Element node2) {
+        super(name, m, alignmentCorrection, ref);
+        node = node2;
+    }
+
+
+    /**
+     * Extract survey positions from xml description
+     */
+    protected void setPos() {
+       
+        if(debug) System.out.printf("%s: getSurveyPosFromCompact for %s from %s\n",getClass().getSimpleName(), getName(), node.getAttributeValue("name"));
+     
+        Element eNameTop = node.getChild(xmlTagNameTop);
+        if(eNameTop==null) {
+            throw new RuntimeException("no eName for " + xmlTagNameTop + " found in compact file");
+        } 
+
+        List<Element> eNames = eNameTop.getChildren(xmlTagName);
+        if(eNames==null) {
+            throw new RuntimeException("no eNames for " + xmlTagName + " found in compact file");
+        } 
+
+        for(Element eName : eNames) {
+
+            if(eName.getAttributeValue("name").compareTo(getName())==0) {
+
+               
+                Element eCoord = eName.getChild("SurveyPos");
+
+                if(eCoord==null) {
+                    throw new RuntimeException("no eCoord for " + getName() + " found in compact file");
+                } 
+                
+                Element eOrigin = eCoord.getChild("origin");
+                
+                if(eOrigin==null) {
+                    throw new RuntimeException("no eOrigin for " + getName() + " found in compact file");
+                } 
+
+//                origin = null;
+//                try {
+//                    double x,y,z;
+//                    x= eOrigin.getAttribute("x").getDoubleValue();
+//                    y= eOrigin.getAttribute("y").getDoubleValue();
+//                    z= eOrigin.getAttribute("z").getDoubleValue();
+//                    origin = new BasicHep3Vector(x, y, z);
+//                } catch (DataConversionException e) {
+//                    e.printStackTrace();
+//                }
+                
+                List<Element> eCoordComponents = eCoord.getChildren("point");
+
+                for(Element eUnitVec: eCoordComponents) {
+                    try {
+                        double x,y,z;
+                        if(eUnitVec.getAttributeValue("name").compareTo("ball") == 0) {
+                            x = eUnitVec.getAttribute("x").getDoubleValue();
+                            y = eUnitVec.getAttribute("y").getDoubleValue();
+                            z = eUnitVec.getAttribute("z").getDoubleValue();
+                            setBallPos(x, y, z);
+                        } else if(eUnitVec.getAttributeValue("name").compareTo("vee") == 0) {
+                            x = eUnitVec.getAttribute("x").getDoubleValue();
+                            y = eUnitVec.getAttribute("y").getDoubleValue();
+                            z = eUnitVec.getAttribute("z").getDoubleValue();
+                            setVeePos(x, y, z);
+                        } else if(eUnitVec.getAttributeValue("name").compareTo("flat") == 0) {
+                            x = eUnitVec.getAttribute("x").getDoubleValue();
+                            y = eUnitVec.getAttribute("y").getDoubleValue();
+                            z = eUnitVec.getAttribute("z").getDoubleValue();
+                            setFlatPos(x, y, z);
+                        } else {
+                            throw new RuntimeException("eUnitVec name " + eUnitVec.getAttributeValue("name") + " is ill-defined for " + getName() + " found in compact file");
+                        }
+                    } catch (DataConversionException e) {
+                        e.printStackTrace();
+                    }
+                }
+                
+                
+                
+                
+            }
+        }
+        if(debug) {
+            System.out.printf("%s: Extracted these survey constants from compact\n", this.getClass().getSimpleName());
+            System.out.printf("%s: ball %s \n", this.getClass().getSimpleName(),getBallPos().toString());
+            System.out.printf("%s: vee  %s \n", this.getClass().getSimpleName(),getVeePos().toString());
+            System.out.printf("%s: flat %s \n", this.getClass().getSimpleName(),getFlatPos().toString());
+        }
+
+    }
+    
+  
+    
+    /**
+     * Extract coordinate system from xml description
+     */
+    private void getCoordFromCompact() {
+
+        
+       
+        if(debug) System.out.printf("%s: getCoordFromCompact for %s from %s\n",getClass().getSimpleName(), getName(), node.getAttributeValue("name"));
+     
+        if(1==1)
+            throw new UnsupportedOperationException("Need to work on interface of a new coordinate system and the ball, vee, flat procedure to build coord system!");
+
+        
+        
+        Element eNameTop = node.getChild(xmlTagNameTop);
+        if(eNameTop==null) {
+            throw new RuntimeException("no eName for " + xmlTagNameTop + " found in compact file");
+        } 
+
+        List<Element> eNames = eNameTop.getChildren(xmlTagName);
+        if(eNames==null) {
+            throw new RuntimeException("no eNames for " + xmlTagName + " found in compact file");
+        } 
+
+        for(Element eName : eNames) {
+
+            if(eName.getAttributeValue("name").compareTo(getName())==0) {
+
+               
+                Element eCoord = eName.getChild("SurveyCoord");
+
+                if(eCoord==null) {
+                    throw new RuntimeException("no eCoord for " + getName() + " found in compact file");
+                } 
+                
+                Element eOrigin = eCoord.getChild("origin");
+                
+                if(eOrigin==null) {
+                    throw new RuntimeException("no eOrigin for " + getName() + " found in compact file");
+                } 
+
+                Hep3Vector coord_org = null;
+                Hep3Vector coord_unit_u = null;
+                Hep3Vector coord_unit_v = null;
+                Hep3Vector coord_unit_w = null;
+
+                
+                double x,y,z;
+                try {
+                    x= eOrigin.getAttribute("x").getDoubleValue();
+                    y= eOrigin.getAttribute("y").getDoubleValue();
+                    z= eOrigin.getAttribute("z").getDoubleValue();
+                    coord_org =new BasicHep3Vector(x, y, z);
+                } catch (DataConversionException e) {
+                    e.printStackTrace();
+                }
+               
+                
+                
+                
+                List<Element> eCoordComponents = eCoord.getChildren("unitVec");
+
+                for(Element eUnitVec: eCoordComponents) {
+                    try {
+                        double ux,uy,uz;
+                        double vx,vy,vz;
+                        double wx,wy,wz;
+                        if(eUnitVec.getAttributeValue("name").compareTo("u") == 0) {
+                            ux = eUnitVec.getAttribute("x").getDoubleValue();
+                            uy = eUnitVec.getAttribute("y").getDoubleValue();
+                            uz = eUnitVec.getAttribute("z").getDoubleValue();
+                            coord_unit_u = new BasicHep3Vector(ux, uy, uz);
+                        } else if(eUnitVec.getAttributeValue("name").compareTo("v") == 0) {
+                            vx = eUnitVec.getAttribute("x").getDoubleValue();
+                            vy = eUnitVec.getAttribute("y").getDoubleValue();
+                            vz = eUnitVec.getAttribute("z").getDoubleValue();
+                            coord_unit_v = new BasicHep3Vector(vx, vy, vz);
+                        } else if(eUnitVec.getAttributeValue("name").compareTo("w") == 0) {
+                            wx = eUnitVec.getAttribute("x").getDoubleValue();
+                            wy = eUnitVec.getAttribute("y").getDoubleValue();
+                            wz = eUnitVec.getAttribute("z").getDoubleValue();
+                            coord_unit_w = new BasicHep3Vector(wx, wy, wz);
+                        } else {
+                            throw new RuntimeException("eUnitVec name " + eUnitVec.getAttributeValue("name") + " is ill-defined for " + getName() + " found in compact file");
+                        }
+                    } catch (DataConversionException e) {
+                        e.printStackTrace();
+                    }
+                }
+                
+                throw new RuntimeException("need to work on this!");
+                //SurveyCoordinateSystem coord = new SurveyCoordinateSystem(coord_org, coord_unit_u, coord_unit_v, coord_unit_w);
+                //setCoord(coord);
+                
+            }
+        }
+        if(debug) {
+            System.out.printf("%s: found coord system\n%s\n", this.getClass().getSimpleName(),getCoord().toString());
+        }
+
+    }
+    
+
+
+}

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java	Mon Nov  3 18:26:47 2014
@@ -20,7 +20,7 @@
  * @author Per Hansson Adrian <[log in to unmask]>
  *
  */
-public class HPSTestRunTracker2014GeometryDefinition extends HPSTrackerBuilder {
+public class HPSTestRunTracker2014GeometryDefinition extends HPSTrackerGeometryDefinition {
 
 
 
@@ -34,7 +34,6 @@
 
 
     //General
-    static final double inch = 25.4; //mm
     protected static final boolean useSiStripsConvention = true;
     protected static final boolean use30mradRotation = true;
     protected static final boolean useFakeHalfModuleAxialPos = false;
@@ -43,8 +42,7 @@
     protected static final double target_pos_wrt_base_plate_x = 162.3; //from Marco's 3D model
     protected static final double target_pos_wrt_base_plate_y = 80.55; //from Tim's sketchup //68.75; //from Marco's 3D model
     protected static final double target_pos_wrt_base_plate_z = 926.59; //from Marco's 3D model
-    protected static final double PS_vac_box_inner_height = 7.0*inch;
-
+    
 
 
     public HPSTestRunTracker2014GeometryDefinition(boolean debug, Element node) {
@@ -63,32 +61,32 @@
         // Keep the order correct.
         // Each item has knowledge of its mother but not its daughters
         TrackingVolume tracking = new TrackingVolume("trackingVolume",null);
-        geometries.add(tracking);
+        surveyVolumes.add(tracking);
 
         TrackerEnvelope base = new TrackerEnvelope("base",tracking);
-        geometries.add(base);
+        surveyVolumes.add(base);
         
         BasePlate basePlate = new BasePlate("baseplate",base, "Aluminum");
-        geometries.add(basePlate);
+        surveyVolumes.add(basePlate);
         
         CSupport cSupport = new CSupport("c_support", base);
-        geometries.add(cSupport);        
+        surveyVolumes.add(cSupport);        
         
         AlignmentCorrection alignmentCorrectionSupportBottom = getSupportAlignmentCorrection(false);
         SupportBottom supportBottom = new SupportBottom("support_bottom", base, alignmentCorrectionSupportBottom, cSupport);
-        geometries.add(supportBottom);
+        surveyVolumes.add(supportBottom);
         // The support survey positions are now with respect to its mother and not the reference coord. system.
         // So to get the reference for the support plate I don't need to apply that extra transformation
         
         SupportPlateBottom supportPlateBottom = new SupportPlateBottom("support_plate_bottom", base, supportBottom, "Aluminum");
-        geometries.add(supportPlateBottom);        
+        surveyVolumes.add(supportPlateBottom);        
         
         AlignmentCorrection alignmentCorrectionSupportTop = getSupportAlignmentCorrection(true);
         SupportTop supportTop = new SupportTop("support_top", base, alignmentCorrectionSupportTop, cSupport);
-        geometries.add(supportTop);
+        surveyVolumes.add(supportTop);
         
         SupportPlateTop supportPlateTop = new SupportPlateTop("support_plate_top", base, supportTop, "Aluminum");
-        geometries.add(supportPlateTop);
+        surveyVolumes.add(supportPlateTop);
 
         // Modules are built using an encapsulating class that keeps tracks of all components
         modules = new ArrayList<ModuleBundle>();
@@ -103,7 +101,7 @@
         if(isDebug()) {
             System.out.printf("%s: DONE constructing the geometry objects\n", this.getClass().getSimpleName());
             System.out.printf("%s: List of all the geometry objects built\n", this.getClass().getSimpleName());
-            for(SurveyVolume bg : geometries) {
+            for(SurveyVolume bg : surveyVolumes) {
                 System.out.printf("-------\n%s\n", bg.toString());
             }
         }
@@ -135,11 +133,11 @@
         final SurveyVolume mother;
         final SurveyVolume ref;
         if(half == "bottom") {
-            mother = getBaseGeometry(TrackerEnvelope.class);
-            ref = getBaseGeometry(SupportPlateBottom.class);
+            mother = getSurveyVolume(TrackerEnvelope.class);
+            ref = getSurveyVolume(SupportPlateBottom.class);
         } else {
-            mother= getBaseGeometry(TrackerEnvelope.class);
-            ref = getBaseGeometry(SupportPlateTop.class);
+            mother= getSurveyVolume(TrackerEnvelope.class);
+            ref = getSurveyVolume(SupportPlateTop.class);
         }
 
         //Create the module
@@ -375,15 +373,11 @@
 
     }
 
-    private boolean doLayer(int layer) {
-        int a = (1<<(layer-1)) & layerBitMask;
-        return a!=0?true:false;
-    }
-
 
     /**
      * Tracking volume geometry definition. 
      */
+    /*
     public static class TrackingVolume extends SurveyVolume {
         public TrackingVolume(String name, SurveyVolume mother) {
             super(name,mother, null);
@@ -408,6 +402,7 @@
         }
     }
 
+*/
     public static class TrackerEnvelope extends SurveyVolume {
         // height of the dummy box holding the entire SVT: 
         // this means the bottom of the base plate to the the inner surface of of the PS vac box for now
@@ -433,9 +428,6 @@
             setVeePos(vee_pos_base_x,vee_pos_base_y,vee_pos_base_z);
             setFlatPos(flat_pos_base_x, flat_pos_base_y, flat_pos_base_z);
         }
-        protected void setCoord() {
-            setCoord(null);
-        }
         protected void setCenter() {
             setCenter(base_width/2.0, base_length/2.0, base_height/2.0 - BasePlate.base_plate_thickness);
         }
@@ -462,9 +454,6 @@
             setBallPos(0,0,0);
             setVeePos(base_plate_width,ballPos.y(),ballPos.z());
             setFlatPos(ballPos.x(),base_plate_length,ballPos.z());
-        }
-        protected void setCoord() {
-            setCoord(null);
         }
         protected void setCenter() {
             setCenter(base_plate_width/2.0, base_plate_length/2.0, -base_plate_thickness/2.0);
@@ -546,9 +535,6 @@
                 printSurveyPos();
             }
         }
-        protected void setCoord() {
-            setCoord(null);
-        }
         protected void setCenter() {
             // this is never used since it's only a reference volume
             setCenter(null);
@@ -632,9 +618,6 @@
                 System.out.printf("%s: survey positions for %s\n",this.getClass().getSimpleName(),getName());
                 printSurveyPos();
             }
-        }
-        protected void setCoord() {
-            setCoord(null);
         }
         protected void setCenter() {
             setCenter(support_top_width/2.0+1.0, support_top_length/2.0 + (17.00-10.50/2.0), -1.0 * (support_top_height/2.0 - (12.70-6.66-1.34)));
@@ -763,9 +746,6 @@
             }
 
         }
-        protected void setCoord() {
-            setCoord(null);
-        }
         protected void setCenter() {
             setCenter(support_bottom_width/2.0+1.0, support_bottom_length/2.0 + (17.00-10.50/2.0), support_bottom_height/2.0 - (12.70-6.66-1.34));
         }
@@ -849,9 +829,6 @@
                 printSurveyPos();
             }
         }
-        protected void setCoord() {
-            setCoord(null);
-        }
         protected void setCenter() {
             setCenter(support_plate_bottom_width/2.0, support_plate_bottom_length/2.0, -1.0 * support_plate_bottom_height/2.0);
         }
@@ -904,9 +881,6 @@
                 System.out.printf("%s: survey positions for %s\n",this.getClass().getSimpleName(),getName());
                 printSurveyPos();
             }
-        }
-        protected void setCoord() {
-            setCoord(null);
         }
         protected void setCenter() {
             setCenter(support_plate_top_width/2.0, support_plate_top_length/2.0,  support_plate_top_height/2.0);
@@ -1003,12 +977,6 @@
 
         protected void setBoxDim() {
             setBoxDim(getModuleBoxLength(),getModuleBoxHeight(),getModuleBoxWidth());
-        }
-        protected void setCoord() {				
-            setCoord(null);
-            if(debug) System.out.printf("%s: coordinate system:\n%s\n",this.getClass().getSimpleName(), getCoord().toString());
-            if(debug) System.out.printf("%s: translation:\n%s\n",this.getClass().getSimpleName(), getCoord().getTransformation().getTranslation().toString());
-            if(debug) System.out.printf("%s: rotation:\n%s\n",this.getClass().getSimpleName(), getCoord().getTransformation().getRotation().toString());
         }
         protected void setCenter() {
             setCenter(getModuleBoxLength()/2.0-5.0, 0.0, getModuleBoxWidth()/2.0-box_extra_width/5.0); 
@@ -1204,9 +1172,6 @@
                 setCenter(box_center_local_x, box_center_local_y, box_center_local_z); 
             }
         }
-        protected void setCoord() {
-            setCoord(null);
-        }
         protected void setBoxDim() {
             //setBoxDim(getLength(), getThickness(), getWidth());
             
@@ -1470,9 +1435,6 @@
         public void setLayer(int layer) {
             this.layer = layer;
         }
-        protected void setCoord() {
-            setCoord(null);
-        }
         protected void setCenter() {
             setCenter(getLength()/2.0, 0.0, getWidth()/2.0); 
         }
@@ -1601,9 +1563,6 @@
             }
             
         }
-        protected void setCoord() {
-            setCoord(null);
-        }
         protected void setCenter() {
             setCenter(0,0,0);
         }
@@ -1676,9 +1635,6 @@
                 System.out.printf("%s: survey positions for %s\n",this.getClass().getSimpleName(),getName());
                 printSurveyPos();
             }
-        }
-        protected void setCoord() {
-            setCoord(null);
         }
         protected void setCenter() {
             setCenter(0,0,0);
@@ -1931,9 +1887,6 @@
         protected abstract double getHeigth();
         protected abstract double getWidth();
         protected abstract double getLength();
-        protected void setCoord() {
-            setCoord(null);
-        }
         public int getId() {
             return id;
         }
@@ -1945,22 +1898,6 @@
         TestRunModuleBundle(TestRunModule m) {
             module = m;
         }	
-        public int getLayer() {
-            if(module==null) throw new RuntimeException("Need to add module to bundle first!");
-            return HPSTrackerBuilder.getLayerFromVolumeName(module.getName());
-        }
-        public String getHalf() {
-            if(module==null) throw new RuntimeException("Need to add module to bundle first!");
-            return HPSTrackerBuilder.getHalfFromName(module.getName()); 
-        }
-        /**
-         * Find mother to this module.
-         * @return mother 
-         */
-        public SurveyVolume getMother() {
-            if(module==null) throw new RuntimeException("Need to add module to bundle first!");
-            return module.getMother();
-        }
         public void print() {
             if(module!=null) System.out.printf("%s: %s\n", this.getClass().getSimpleName(),module.getName());
             if(halfModuleAxial!=null) halfModuleAxial.print();

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014JavaBuilder.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014JavaBuilder.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014JavaBuilder.java	Mon Nov  3 18:26:47 2014
@@ -7,17 +7,15 @@
 
 import org.jdom.Element;
 import org.lcsim.detector.ILogicalVolume;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.BasePlate;
 import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.Sensor;
-import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunHalfModuleBundle;
-import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunModuleBundle;
-import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope;
-import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.BasePlate;
 import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.SupportBottom;
 import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.SupportPlateBottom;
 import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.SupportPlateTop;
 import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.SupportTop;
-import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TrackingVolume;
-import org.lcsim.geometry.compact.converter.HPSTrackerBuilder.HalfModuleBundle;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunHalfModuleBundle;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunModuleBundle;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope;
 import org.lcsim.geometry.compact.converter.HPSTrackerBuilder.ModuleBundle;
 
 
@@ -65,23 +63,23 @@
 		javaSurveyVolumes = new ArrayList<JavaSurveyVolume>();
 
 		// Go through the list of volumes to build that is created in the generic builder class
-		JavaSurveyVolume trackingGeometry = new JavaSurveyVolume(_builder.getBaseGeometry(TrackingVolume.class), trackingVolume);
+		JavaSurveyVolume trackingGeometry = new JavaSurveyVolume(_builder.getSurveyVolume(org.lcsim.geometry.compact.converter.HPSTrackerGeometryDefinition.TrackingVolume.class), trackingVolume);
 		add(trackingGeometry);
 		//setBaseTrackerGeometry(new GhostJavaBaseGeom(_builder.getBaseGeometry(Base.class), trackingGeometry));
-        setBaseTrackerGeometry(new JavaSurveyVolume(_builder.getBaseGeometry(TrackerEnvelope.class), trackingGeometry,1));
+        setBaseTrackerGeometry(new JavaSurveyVolume(_builder.getSurveyVolume(TrackerEnvelope.class), trackingGeometry,1));
         add(getBaseTrackerGeometry());
-		JavaSurveyVolume basePlateGeometry = new JavaGhostSurveyVolume(_builder.getBaseGeometry(BasePlate.class), getBaseTrackerGeometry());
+		JavaSurveyVolume basePlateGeometry = new JavaGhostSurveyVolume(_builder.getSurveyVolume(BasePlate.class), getBaseTrackerGeometry());
 		add(basePlateGeometry);
 		// skip the c-support, this is purely a reference volume in the builder so should have no use here!?
 		//JavaBaseGeometry cSupportGeometry = new GhostJavaBaseGeom(_builder.getBaseGeometry(CSupport.class), baseTrackerGeometry);
 		//add(cSupportGeometry);
-		JavaSurveyVolume supportBottomGeometry = new JavaGhostSurveyVolume(_builder.getBaseGeometry(SupportBottom.class), getBaseTrackerGeometry());
+		JavaSurveyVolume supportBottomGeometry = new JavaGhostSurveyVolume(_builder.getSurveyVolume(SupportBottom.class), getBaseTrackerGeometry());
 		add(supportBottomGeometry);
-		JavaSurveyVolume supportPlateBottomGeometry = new JavaGhostSurveyVolume(_builder.getBaseGeometry(SupportPlateBottom.class), getBaseTrackerGeometry());
+		JavaSurveyVolume supportPlateBottomGeometry = new JavaGhostSurveyVolume(_builder.getSurveyVolume(SupportPlateBottom.class), getBaseTrackerGeometry());
 		add(supportPlateBottomGeometry);
-		JavaSurveyVolume supportTopGeometry = new JavaGhostSurveyVolume(_builder.getBaseGeometry(SupportTop.class), getBaseTrackerGeometry());
+		JavaSurveyVolume supportTopGeometry = new JavaGhostSurveyVolume(_builder.getSurveyVolume(SupportTop.class), getBaseTrackerGeometry());
 		add(supportTopGeometry);
-		JavaSurveyVolume supportPlateTopGeometry = new JavaGhostSurveyVolume(_builder.getBaseGeometry(SupportPlateTop.class), getBaseTrackerGeometry());
+		JavaSurveyVolume supportPlateTopGeometry = new JavaGhostSurveyVolume(_builder.getSurveyVolume(SupportPlateTop.class), getBaseTrackerGeometry());
 		add(supportPlateTopGeometry);
 
 		// build modules	

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014LCDDBuilder.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014LCDDBuilder.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014LCDDBuilder.java	Mon Nov  3 18:26:47 2014
@@ -1,16 +1,16 @@
 package org.lcsim.geometry.compact.converter;
 
 import org.jdom.Element;
-import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunHalfModuleBundle;
-import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunModuleBundle;
-import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope;
 import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.BasePlate;
 import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.CSupport;
 import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.SupportBottom;
 import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.SupportPlateBottom;
 import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.SupportPlateTop;
 import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.SupportTop;
-import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TrackingVolume;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunHalfModuleBundle;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunModuleBundle;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope;
+import org.lcsim.geometry.compact.converter.HPSTrackerBuilder.HalfModuleBundle;
 import org.lcsim.geometry.compact.converter.HPSTrackerBuilder.ModuleBundle;
 import org.lcsim.geometry.compact.converter.lcdd.util.LCDD;
 import org.lcsim.geometry.compact.converter.lcdd.util.SensitiveDetector;
@@ -30,11 +30,16 @@
 		super(debugFlag, node, lcdd, sens);
 	}
 
+	
+	public void setBuilder() {
+	    setBuilder(new HPSTestRunTracker2014GeometryDefinition(_debug, node));
+	}
+	
 	public void build(Volume worldVolume) {
 		
-		// build geometry
-        setBuilder(new HPSTestRunTracker2014GeometryDefinition(_debug, node));
-
+		// set and build geometry
+        setBuilder();
+        
 		if(_builder==null) throw new RuntimeException("need to set builder class before calling build!");
 
 		if(isDebug()) System.out.printf("%s: build the base geometry objects\n", getClass().getSimpleName());
@@ -49,22 +54,22 @@
 		
 		// Go through the list of volumes to build that is created in the generic builder class
 		// TODO this is manual now since I don't have a way of knowing in the generic builder class what is a ghost volume at this point.
-		LCDDSurveyVolume trackingGeometry = new LCDDSurveyVolume(_builder.getBaseGeometry(TrackingVolume.class), worldVolume);
+		LCDDSurveyVolume trackingGeometry = new LCDDSurveyVolume(_builder.getSurveyVolume(org.lcsim.geometry.compact.converter.HPSTrackerGeometryDefinition.TrackingVolume.class), worldVolume);
 		add(trackingGeometry);
-		baseSurveyVolume = new LCDDSurveyVolume(_builder.getBaseGeometry(TrackerEnvelope.class), lcdd, trackingGeometry);
+		baseSurveyVolume = new LCDDSurveyVolume(_builder.getSurveyVolume(TrackerEnvelope.class), lcdd, trackingGeometry);
 		add(baseSurveyVolume);
-		LCDDSurveyVolume basePlateGeometry = new LCDDSurveyVolume(_builder.getBaseGeometry(BasePlate.class), lcdd, baseSurveyVolume);
+		LCDDSurveyVolume basePlateGeometry = new LCDDSurveyVolume(_builder.getSurveyVolume(BasePlate.class), lcdd, baseSurveyVolume);
 		add(basePlateGeometry);
 		// TODO I don't think this c-support has any use at all since the coordinates of it has been already used in the builder. Should remove?
-		LCDDSurveyVolume cSupportGeometry = new LCDDGhostSurveyVolume(_builder.getBaseGeometry(CSupport.class), baseSurveyVolume);
+		LCDDSurveyVolume cSupportGeometry = new LCDDGhostSurveyVolume(_builder.getSurveyVolume(CSupport.class), baseSurveyVolume);
 		add(cSupportGeometry);
-		LCDDSurveyVolume supportBottomGeometry = new LCDDGhostSurveyVolume(_builder.getBaseGeometry(SupportBottom.class), baseSurveyVolume);
+		LCDDSurveyVolume supportBottomGeometry = new LCDDGhostSurveyVolume(_builder.getSurveyVolume(SupportBottom.class), baseSurveyVolume);
 		add(supportBottomGeometry);
-		LCDDSurveyVolume supportPlateBottomGeometry = new LCDDSurveyVolume(_builder.getBaseGeometry(SupportPlateBottom.class), lcdd, baseSurveyVolume);
+		LCDDSurveyVolume supportPlateBottomGeometry = new LCDDSurveyVolume(_builder.getSurveyVolume(SupportPlateBottom.class), lcdd, baseSurveyVolume);
 		add(supportPlateBottomGeometry);
-		LCDDSurveyVolume supportTopGeometry = new LCDDGhostSurveyVolume(_builder.getBaseGeometry(SupportTop.class), baseSurveyVolume);
+		LCDDSurveyVolume supportTopGeometry = new LCDDGhostSurveyVolume(_builder.getSurveyVolume(SupportTop.class), baseSurveyVolume);
 		add(supportTopGeometry);
-		LCDDSurveyVolume supportPlateTopGeometry = new LCDDSurveyVolume(_builder.getBaseGeometry(SupportPlateTop.class), lcdd, baseSurveyVolume);
+		LCDDSurveyVolume supportPlateTopGeometry = new LCDDSurveyVolume(_builder.getSurveyVolume(SupportPlateTop.class), lcdd, baseSurveyVolume);
 		add(supportPlateTopGeometry);
 
 		// build modules	
@@ -123,14 +128,18 @@
 	 * @param bundle - module to be added
 	 * @param mother - mother LCDD geometry object
 	 */
-	private void addModule(ModuleBundle bundle, LCDDSurveyVolume mother) {
+	protected void addModule(ModuleBundle bundle, LCDDSurveyVolume mother) {
 		// This could perhaps be fixed if there is a relation with daughters in geometry definition?
 		// create the module
 		LCDDSurveyVolume lcddM = new LCDDSurveyVolume(bundle.module, lcdd, mother);
 		add(lcddM);
-		if(bundle.halfModuleAxial!=null)  addHalfModule((TestRunHalfModuleBundle)bundle.halfModuleAxial,lcddM);
+		if(bundle.halfModuleAxial!=null)  addHalfModule(bundle.halfModuleAxial,lcddM);
 		if(bundle.coldBlock!=null)        add(new LCDDSurveyVolume(bundle.coldBlock, lcdd, lcddM));		
 		if(bundle.halfModuleStereo!=null) addHalfModule((TestRunHalfModuleBundle)bundle.halfModuleStereo,lcddM);
+//        if(bundle.halfModuleAxial!=null)  addHalfModule((TestRunHalfModuleBundle)bundle.halfModuleAxial,lcddM);
+//        if(bundle.coldBlock!=null)        add(new LCDDSurveyVolume(bundle.coldBlock, lcdd, lcddM));     
+//        if(bundle.halfModuleStereo!=null) addHalfModule((TestRunHalfModuleBundle)bundle.halfModuleStereo,lcddM);
+
 	}
 
 	/**
@@ -138,9 +147,11 @@
 	 * @param bundle - module to be added
 	 * @param mother - mother LCDD geometry object
 	 */
-	private void addHalfModule(TestRunHalfModuleBundle bundle, LCDDSurveyVolume mother) {
+	private void addHalfModule(HalfModuleBundle bundle2, LCDDSurveyVolume mother) {
 		// This could perhaps be fixed if there is a relation with daughters in geometry definition?
-		// create the half-module
+	    TestRunHalfModuleBundle bundle = (TestRunHalfModuleBundle) bundle2;
+	    
+	    // create the half-module
 		LCDDSurveyVolume lcddHM = new LCDDSurveyVolume(bundle.halfModule, lcdd, mother);
 		add(lcddHM);
 		// create the sensor

Added: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java	(added)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java	Mon Nov  3 18:26:47 2014
@@ -0,0 +1,382 @@
+/**
+ * 
+ */
+package org.lcsim.geometry.compact.converter;
+
+import java.util.ArrayList;
+
+import org.jdom.Element;
+
+
+/**
+ * 
+ * Geometry information for the HPS tracker 2014
+ * 
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+public class HPSTracker2014GeometryDefinition extends HPSTrackerGeometryDefinition {
+
+
+
+    //steering
+    public final boolean doAxial = false;
+    public final boolean doStereo = false;
+    public final boolean doColdBlock = false;
+    public final boolean doBottom = true;
+    public final boolean doTop = false;
+    public final int layerBitMask =  0x7;    //0x1;//
+    
+
+
+    public HPSTracker2014GeometryDefinition(boolean debug, Element node) {
+        super(debug, node);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.lcsim.geometry.compact.converter.HPSTrackerBuilder#build()
+     */
+    public void build() {
+
+        if(isDebug()) System.out.printf("%s: constructing the geometry objects\n", this.getClass().getSimpleName());
+
+        // Build the geometry from the basic building blocks in the geometry definition class
+        // Keep the order correct.
+        // Each item has knowledge of its mother but not its daughters
+        HPSTrackerGeometryDefinition.TrackingVolume tracking = new HPSTrackerGeometryDefinition.TrackingVolume("trackingVolume",null);
+        surveyVolumes.add(tracking);
+
+        
+        TrackerEnvelope base = new TrackerEnvelope("base",tracking);
+        surveyVolumes.add(base);
+
+        AlignmentCorrection alignmentCorrectionRingSupport = null;
+        SupportRing supportRing = new SupportRing("c_support", base, alignmentCorrectionRingSupport, node); 
+        surveyVolumes.add(supportRing);
+
+        // The uChannel is referenced at the kinematic mount on the downstream side
+        // For L1-3 this basically handles tilt angle of support plate
+        AlignmentCorrection alignmentCorrectionUChannelBottomL13 = null;
+        UChannelL13Bottom uChannelL13Bottom = new UChannelL13Bottom("support_bottom_L13", base, alignmentCorrectionUChannelBottomL13, supportRing, node); 
+        surveyVolumes.add(uChannelL13Bottom);
+        
+        // build the uChannel plate
+        AlignmentCorrection alignmentCorrectionUChannelBottomL13Plate = null;
+        UChannelL13BottomPlate uChannelL13BottomPlate = new UChannelL13BottomPlate("support_plate_bottom_L13", base , alignmentCorrectionUChannelBottomL13Plate, uChannelL13Bottom, node); 
+        surveyVolumes.add(uChannelL13BottomPlate);
+        
+     // Modules are built using an encapsulating class that keeps tracks of all components
+        modules = new ArrayList<ModuleBundle>();
+
+        for(int l=1; l<=6;++l) {
+            if(doLayer(l)) {
+                if(doBottom) makeModuleBundle(l,"bottom");
+                if(doTop)    makeModuleBundle(l,"top");
+            }
+        }       
+
+        /*
+
+        BasePlate basePlate = new BasePlate("baseplate",base, "Aluminum");
+        geometries.add(basePlate);
+        
+        CSupport cSupport = new CSupport("c_support", base);
+        geometries.add(cSupport);        
+        
+        AlignmentCorrection alignmentCorrectionSupportBottom = getSupportAlignmentCorrection(false);
+        SupportBottom supportBottom = new SupportBottom("support_bottom", base, alignmentCorrectionSupportBottom, cSupport);
+        geometries.add(supportBottom);
+        // The support survey positions are now with respect to its mother and not the reference coord. system.
+        // So to get the reference for the support plate I don't need to apply that extra transformation
+        
+        SupportPlateBottom supportPlateBottom = new SupportPlateBottom("support_plate_bottom", base, supportBottom, "Aluminum");
+        geometries.add(supportPlateBottom);        
+        
+        AlignmentCorrection alignmentCorrectionSupportTop = getSupportAlignmentCorrection(true);
+        SupportTop supportTop = new SupportTop("support_top", base, alignmentCorrectionSupportTop, cSupport);
+        geometries.add(supportTop);
+        
+        SupportPlateTop supportPlateTop = new SupportPlateTop("support_plate_top", base, supportTop, "Aluminum");
+        geometries.add(supportPlateTop);
+
+        // Modules are built using an encapsulating class that keeps tracks of all components
+        modules = new ArrayList<ModuleBundle>();
+
+        for(int l=1; l<=5;++l) {
+            if(doLayer(l)) {
+                if(doBottom) makeModuleBundle(l,"bottom");
+                if(doTop)    makeModuleBundle(l,"top");
+            }
+        }       
+
+*/
+
+        if(isDebug()) {
+            System.out.printf("%s: DONE constructing the geometry objects\n", this.getClass().getSimpleName());
+            System.out.printf("%s: List of all the geometry objects built\n", this.getClass().getSimpleName());
+            for(SurveyVolume bg : surveyVolumes) {
+                System.out.printf("-------\n%s\n", bg.toString());
+            }
+        }
+
+    }
+
+    
+    
+    /**
+     * @SurveyVolume volume defining the envelope corresponding to inner volume of PS magnet system. 
+     * It is referenced to the tracking coordinate system.
+     * 
+     * @author Per Hansson Adrian <[log in to unmask]>
+     *
+     */
+    public static class TrackerEnvelope extends SurveyVolume {
+        public static final double height = PS_vac_box_inner_height - HPSTestRunTracker2014GeometryDefinition.BasePlate.base_plate_offset_height; 
+        public static final double width = HPSTestRunTracker2014GeometryDefinition.BasePlate.base_plate_width;
+        public static final double length = HPSTestRunTracker2014GeometryDefinition.BasePlate.base_plate_length;
+
+        public TrackerEnvelope(String name, SurveyVolume mother) {
+            super(name,mother, null);
+            init();
+        }
+        protected void setPos() {
+            final double ball_pos_x = -1.0*target_pos_wrt_base_plate_x;
+            final double ball_pos_base_y = -1.0*target_pos_wrt_base_plate_y;
+            final double ball_pos_base_z = target_pos_wrt_base_plate_z;     
+            setBallPos(ball_pos_x,ball_pos_base_y,ball_pos_base_z);
+            setVeePos(ball_pos_x + width,ball_pos_base_y,ball_pos_base_z);
+            setFlatPos(ball_pos_x,ball_pos_base_y,ball_pos_base_z - length);
+//            setBallPos(0,0,0);
+//            setVeePos(width,0,0);
+//            setFlatPos(0,0,-1.0*length);
+        }
+        protected void setCenter() {
+            setCenter(width/2.0, length/2.0, height/2.0);
+        }
+        protected void setBoxDim() {
+            setBoxDim(width,length,height);
+        }
+    }
+    
+    
+    
+    
+    
+    /**
+     * @SurveyVolume volume defining the coordinate system of the support ring in the SVT box coordinate system
+     *
+     * @author Per Hansson Adrian <[log in to unmask]>
+     *
+     */
+    public static class SupportRing extends CompactSurveyVolume {
+
+        public SupportRing(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, Element node) {
+           super(name, mother, alignmentCorrection, node);
+           init();
+        }
+        protected void setCenter() {
+            setCenter(null); //dummy
+        }
+        protected void setBoxDim() {
+            // do nothing
+        }
+        
+    }
+   
+    /**
+     * @SurveyVolume volume defining the coordinate system of the u-channel in the @SupportRing coordinate system
+     *
+     * @author Per Hansson Adrian <[log in to unmask]>
+     *
+     */
+    public static class UChannelL13Bottom extends CompactSurveyVolume {
+        public final static double width = UChannelL13BottomPlate.width;
+        public final static double length = UChannelL13BottomPlate.length;
+        public final static double height = 50.0;
+        
+        public UChannelL13Bottom(String name, SurveyVolume m,
+                AlignmentCorrection alignmentCorrection,
+                SurveyVolume ref, Element node2) {
+            super(name, m, alignmentCorrection, ref, node2);
+            init();
+        }
+        protected void setCenter() {
+            //TODO set UChannelL13Bottom position properly
+            setCenter(width/2.0, length/2.0, height/2.0);
+        }
+        protected void setBoxDim() {
+            setBoxDim(width,length,height);
+        }
+    }
+
+    /**
+     * @SurveyVolume volume defining the coordinate system of the u-channel plate in the @UChannelL13Bottom coordinate system
+     *
+     * @author Per Hansson Adrian <[log in to unmask]>
+     *
+     */
+    public static class UChannelL13BottomPlate extends CompactSurveyVolume {
+        public final static double width = 200.0;
+        public final static double length = 400.0;
+        public final static double height = 0.5*inch;
+
+        public UChannelL13BottomPlate(String name, SurveyVolume m,
+                AlignmentCorrection alignmentCorrection,
+                SurveyVolume ref, Element node2) {
+            super(name, m, alignmentCorrection, ref, node2);
+            init();
+        }
+
+        protected void setCenter() {
+            //TODO set UChannelL13Bottom position properly
+            setCenter(0, 0, 0);
+        }
+        protected void setBoxDim() {
+            setBoxDim(width,length,height);
+        }
+
+    }
+
+    
+    public static abstract class BaseModule extends CompactSurveyVolume {
+        private int layer;
+        private String half;
+        protected final static double box_extra_length = 10.0;// random at this point
+        protected final static double box_extra_width = 15.0;// random at this point
+        protected final static double box_extra_height = 1.0;// random at this point
+
+        public BaseModule(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref, Element node2) {
+            super(name, mother, alignmentCorrection, ref, node2);
+            setLayer(getLayerFromVolumeName(name));
+            setHalf(getHalfFromName(name));
+            isValid();
+        }
+        private void isValid() {
+            if(half!="bottom" && half!="top") {
+                System.out.printf("ERROR invalid half %s for BaseModule\n",half);
+                System.exit(1);
+            }
+        }
+        public int getLayer() {
+            return layer;
+        }
+        public void setLayer(int layer) {
+            this.layer = layer;
+        }
+
+        public String getHalf() {
+            return half;
+        }
+
+        public void setHalf(String half) {
+            this.half = half;
+        }
+
+        public boolean isBottom() {
+            return getHalf() == "bottom" ? true : false;
+        }
+
+    }
+    
+    
+    
+
+    
+    public static class ModuleL13 extends BaseModule {
+        
+        protected static final double length = 205.2 + box_extra_length; // includes lexan spacer and cold block
+        protected static final double height = 12.5 + box_extra_height; // includes screws height
+        protected static final double width = 71.3 - 13.0 + box_extra_width; // height from cold block to encapsulate the whole module
+       
+        public ModuleL13(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref, Element node2) {
+            super(name, mother, alignmentCorrection, ref, node2);
+            init();
+        }
+        protected void setCenter() {
+            setCenter(0.0, 0.0, 0.0);
+        }
+        protected void setBoxDim() {
+            setBoxDim(width, length, height);
+        }
+
+    }
+    
+    
+    public static class SVTModuleBundle extends ModuleBundle {
+        SVTModuleBundle(BaseModule m) {
+            module = m;
+        }   
+        public void print() {
+            if(module!=null) System.out.printf("%s: %s\n", this.getClass().getSimpleName(),module.getName());
+//            if(halfModuleAxial!=null) halfModuleAxial.print();
+//            if(coldBlock!=null)System.out.printf("%s: %s\n", this.getClass().getSimpleName(),coldBlock.getName());
+//            if(halfModuleStereo!=null) halfModuleStereo.print();
+        }
+    }
+    
+    
+    /**
+     * Create the module. 
+     * @param layer - of the module
+     * @param half - top or bottom half of the tracker
+     */
+    private void makeModuleBundle(int layer, String half) 
+    {
+
+        if(isDebug()) System.out.printf("%s: makeModule for layer %d %s \n", this.getClass().getSimpleName(), layer, half);
+
+
+        // build the module name
+        String volName = "module_L"+ layer + (half=="bottom"?"b":"t");      
+
+        boolean isL13 = ( layer >=1 && layer <=3 ) ? true : false;          
+
+        // find the mother and reference geometry
+        // Note that the reference geometry is the support plate and since that is assumed to be 
+        // created through it's references we don't need more than one reference to reach the mother coordinate system
+        final SurveyVolume mother;
+        final SurveyVolume ref;
+        AlignmentCorrection alignmentCorrection = null;
+        if(half == "bottom") {
+            mother = getSurveyVolume(TrackerEnvelope.class);
+            ref = getSurveyVolume(UChannelL13BottomPlate.class);
+        } else {
+            throw new UnsupportedOperationException("top not implemented yet");
+            //            mother= getSurveyVolume(TrackerEnvelope.class);
+//            ref = getSurveyVolume(UChannelL13TopPlate.class);
+        }
+
+        //Create the module
+        BaseModule module;
+        if(isL13) {
+            module = new ModuleL13(volName, mother, alignmentCorrection, ref, node); 
+                   
+        } else {
+            throw new UnsupportedOperationException("L4-6 not implemented yet");
+            //module = new TestRunModuleL45(volName, mother, ref, layer, half);
+        }
+
+
+        // create the bundle for this module
+        SVTModuleBundle bundle = new SVTModuleBundle(module);
+        addModuleBundle(bundle);
+
+//        if(doAxial) makeHalfModule("axial", module);
+//        if(doColdBlock) makeColdBlock(module);
+//        if(doStereo) makeHalfModule("stereo", module);
+
+
+        if(isDebug()) {
+            System.out.printf("%s: created module bundle:\n", this.getClass().getSimpleName());
+            bundle.print();
+        }
+
+    }
+    
+
+}
+
+
+
+

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014LCDDBuilder.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014LCDDBuilder.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014LCDDBuilder.java	Mon Nov  3 18:26:47 2014
@@ -1,8 +1,14 @@
 package org.lcsim.geometry.compact.converter;
 
 import org.jdom.Element;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.TrackerEnvelope;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL13Bottom;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL13BottomPlate;
+import org.lcsim.geometry.compact.converter.HPSTrackerBuilder.ModuleBundle;
+import org.lcsim.geometry.compact.converter.HPSTrackerGeometryDefinition.TrackingVolume;
 import org.lcsim.geometry.compact.converter.lcdd.util.LCDD;
 import org.lcsim.geometry.compact.converter.lcdd.util.SensitiveDetector;
+import org.lcsim.geometry.compact.converter.lcdd.util.Volume;
 
 public class HPSTracker2014LCDDBuilder extends HPSTestRunTracker2014LCDDBuilder {
 
@@ -14,6 +20,98 @@
     }
     
     
+    /* (non-Javadoc)
+     * @see org.lcsim.geometry.compact.converter.HPSTestRunTracker2014LCDDBuilder#setBuilder()
+     */
+    public void setBuilder() {
+        setBuilder(new HPSTracker2014GeometryDefinition(_debug, node));
+    }
     
+    /* (non-Javadoc)
+     * @see org.lcsim.geometry.compact.converter.HPSTestRunTracker2014LCDDBuilder#build(org.lcsim.geometry.compact.converter.lcdd.util.Volume)
+     */
+    public void build(Volume worldVolume) {
+
+        // set and build geometry
+        setBuilder();
+
+        if(_builder==null) throw new RuntimeException("need to set builder class before calling build!");
+
+        if(isDebug()) System.out.printf("%s: build the base geometry objects\n", getClass().getSimpleName());
+
+        _builder.build();
+
+        if(isDebug()) System.out.printf("%s: DONE build the base geometry objects\n", getClass().getSimpleName());
+
+
+        if(isDebug()) System.out.printf("%s: build the LCDD geometry objects\n", getClass().getSimpleName());
+
+
+        LCDDSurveyVolume trackingGeometry = new LCDDSurveyVolume(_builder.getSurveyVolume(TrackingVolume.class), worldVolume);
+        add(trackingGeometry);
+
+        baseSurveyVolume = new LCDDSurveyVolume(_builder.getSurveyVolume(TrackerEnvelope.class), lcdd, trackingGeometry);
+        add(baseSurveyVolume); 
+        
+        LCDDSurveyVolume uSupportBottomL13 = new LCDDGhostSurveyVolume(_builder.getSurveyVolume(UChannelL13Bottom.class), baseSurveyVolume);
+        add(uSupportBottomL13);
+
+        LCDDSurveyVolume uSupportPlateBottomL13 = new LCDDSurveyVolume(_builder.getSurveyVolume(UChannelL13BottomPlate.class), lcdd, baseSurveyVolume);
+        add(uSupportPlateBottomL13);
+        
+        
+        // build modules    
+
+        if(isDebug()) System.out.printf("%s: build modules\n", getClass().getSimpleName());
+
+        // Loop over all modules created
+        for(ModuleBundle mod : _builder.modules) {
+            //SVTModuleBundle m = (SVTModuleBundle) mod;
+            ModuleBundle m = mod;
+            if(isDebug()) { 
+                System.out.printf("%s: module layer %d half %s\n", getClass().getSimpleName(),m.getLayer(),m.getHalf());
+                m.print();
+            }
+
+            // Find the mother among the LCDD objects using its name, should probably have a better way...
+            String name_mother = m.getMother().getName();
+            LCDDSurveyVolume mother = null;
+            for(LCDDSurveyVolume g : lcddSurveyVolumes) {
+                if(g.getName().equals(name_mother)) {
+                    mother = g;
+                    break;
+                }
+            }
+            // Check that it had a mother
+            if(mother==null) throw new RuntimeException("Cound't find mother to module layer " + m.getLayer() + " half "+ m.getHalf());
+
+            if(isDebug()) System.out.printf("%s: found mother %s for module layer %d half %s\n", getClass().getSimpleName(),mother.getName(),m.getLayer(),m.getHalf());
+
+            // add the module to the list of objects that will be added to LCDD
+            addModule(m, mother);
+
+        }
+
+
+       
+        
+        
+        //if(isDebug()) {
+        System.out.printf("%s: DONE building the LCDD geometry objects\n", getClass().getSimpleName());
+        System.out.printf("%s: List of all %d LCDD geometry objects built\n", this.getClass().getSimpleName(), lcddSurveyVolumes.size());
+        for(SurveyVolumeImpl bg : lcddSurveyVolumes) {
+            System.out.printf("-------\n%s\n", bg.toString());
+        }
+        //}
+
+
+
+        // Set visualization features
+        setVisualization();
+
+    }    
+    
+  
+
 
 }

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerBuilder.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerBuilder.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerBuilder.java	Mon Nov  3 18:26:47 2014
@@ -16,7 +16,7 @@
 
 	private boolean debug = true;
 	public List<ModuleBundle> modules;
-	protected List<SurveyVolume> geometries = new ArrayList<SurveyVolume>();
+	protected List<SurveyVolume> surveyVolumes = new ArrayList<SurveyVolume>();
     protected Element node;
     protected List<MilleParameter> milleparameters = new ArrayList<MilleParameter>();
 	
@@ -33,6 +33,9 @@
         initAlignmentParameters();
     }
 	
+	/**
+	 * Extract alignment constants from xml description
+	 */
 	private void initAlignmentParameters() {
        
         if(debug) System.out.printf("%s: initAlignmentParameters from %s\n",this.getClass().getSimpleName(),node.getAttributeValue("name"));
@@ -153,10 +156,19 @@
         public HalfModuleBundle halfModuleAxial = null;
         public HalfModuleBundle halfModuleStereo = null;
         protected SurveyVolume coldBlock = null;
-        abstract public int getLayer();
-        abstract public String getHalf();
-        abstract public SurveyVolume getMother();
         abstract public void print();
+        public int getLayer() {
+            if(module==null) throw new RuntimeException("Need to add module to bundle first!");
+            return HPSTrackerBuilder.getLayerFromVolumeName(module.getName());
+        }
+        public String getHalf() {
+            if(module==null) throw new RuntimeException("Need to add module to bundle first!");
+            return HPSTrackerBuilder.getHalfFromName(module.getName()); 
+        }
+        public SurveyVolume getMother() {
+            if(module==null) throw new RuntimeException("Need to add module to bundle first!");
+            return module.getMother();
+        }
      }
     
     /**
@@ -270,16 +282,16 @@
 	 * @param c - class type to be found
 	 * @return the found type.
 	 */
-	public <T> T getBaseGeometry(Class<T> c) {
+	public <T> T getSurveyVolume(Class<T> c) {
 		//if(isDebug()) System.out.printf("%s: get Item %s\n", this.getClass().getSimpleName(),c.getName());
 		
-		for(SurveyVolume item : geometries) {
+		for(SurveyVolume item : surveyVolumes) {
 			//if(isDebug()) System.out.printf("%s: item %s\n", getClass().getSimpleName(),item.getClass().getName());
 			if(c.isInstance(item)) {
 				return (T)item;
 			}
 		}
-		throw new RuntimeException("Coulnd't find instance of " + c.getSimpleName() + " among the " + geometries.size() + " tracker items!");
+		throw new RuntimeException("Coulnd't find instance of " + c.getSimpleName() + " among the " + surveyVolumes.size() + " tracker items!");
 	}
 
 	protected List<ModuleBundle> getModules() {

Added: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerGeometryDefinition.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerGeometryDefinition.java	(added)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerGeometryDefinition.java	Mon Nov  3 18:26:47 2014
@@ -0,0 +1,92 @@
+/**
+ * 
+ */
+package org.lcsim.geometry.compact.converter;
+
+import hep.physics.vec.BasicHep3Vector;
+
+import org.jdom.Element;
+
+/**
+ * 
+ * Common geometry information for the HPS trackers
+ * 
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+abstract public class HPSTrackerGeometryDefinition extends HPSTrackerBuilder {
+
+
+
+    //steering
+    public final boolean doAxial = true;
+    public final boolean doStereo = true;
+    public final boolean doColdBlock = false;
+    public final boolean doBottom = true;
+    public final boolean doTop = true;
+    public final int layerBitMask =  0x1;    //0x1;//
+
+
+    //General
+    static final double inch = 25.4; //mm
+    protected static final boolean useSiStripsConvention = true;
+    protected static final boolean use30mradRotation = true;
+    protected static final boolean useFakeHalfModuleAxialPos = false;
+
+    // Global position references	
+    protected static final double target_pos_wrt_base_plate_x = 162.3; //from Marco's 3D model
+    protected static final double target_pos_wrt_base_plate_y = 80.55; //from Tim's sketchup //68.75; //from Marco's 3D model
+    protected static final double target_pos_wrt_base_plate_z = 926.59; //from Marco's 3D model
+    protected static final double PS_vac_box_inner_height = 7.0*inch;
+
+
+
+    public HPSTrackerGeometryDefinition(boolean debug, Element node) {
+        super(debug, node);
+    }
+
+    protected boolean doLayer(int layer) {
+        int a = (1<<(layer-1)) & layerBitMask;
+        return a!=0?true:false;
+    }
+
+
+    /**
+     * Tracking volume geometry definition. 
+     */
+    public static class TrackingVolume extends SurveyVolume {
+        public TrackingVolume(String name, SurveyVolume mother) {
+            super(name,mother, null);
+            init();
+        }
+        protected void setPos() {
+            // Dummy survey positions to setup a coordinate system
+            ballPos = new BasicHep3Vector(0,0,0);
+            veePos = new BasicHep3Vector(1,0,0);
+            flatPos = new BasicHep3Vector(0,1,0);
+        }
+        protected void setCenter() {
+            // at the origin
+            setCenter(new BasicHep3Vector(0,0,0));
+        }
+        protected void setBoxDim() {
+            // do nothing since we are not building a tracking volume
+        }
+    }
+
+   
+
+   
+
+
+
+
+
+
+
+
+}
+
+
+
+

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerLCDDBuilder.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerLCDDBuilder.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerLCDDBuilder.java	Mon Nov  3 18:26:47 2014
@@ -26,6 +26,16 @@
 		setSensitiveDetector(sens);
 		setNode(node);
 	}
+	
+	/**
+     * Build the LCDD geometry objects.
+     * @param worldVolume - the reference volume.
+     */
+    public abstract void build(Volume worldVolume);
+
+    
+    public abstract void setBuilder();
+	
 
 	public void setNode(Element node) {
         this.node = node;
@@ -63,12 +73,7 @@
 		lcddSurveyVolumes.add(geom);
 	}
 
-	/**
-	 * Build the LCDD geometry objects.
-	 * @param worldVolume - the reference volume.
-	 */
-	public abstract void build(Volume worldVolume);
-
+	
 	
 
 	public void setLCDD(LCDD lcdd) {

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/LCDDSurveyVolume.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/LCDDSurveyVolume.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/LCDDSurveyVolume.java	Mon Nov  3 18:26:47 2014
@@ -47,7 +47,7 @@
 	 */
 	public LCDDSurveyVolume(SurveyVolume base, Volume volume) {
 		super();
-		if(isDebug()) System.out.printf("%s: constructing LCDD object %s with given volume name %s\n", this.getClass().getSimpleName(),base.getName(),volume.getName());
+		if(isDebug()) System.out.printf("%s: constructing LCDD object %s with volume name %s\n", this.getClass().getSimpleName(),base.getName(),volume.getName());
 		setName(base.getName());
 		setVolume(volume);
 		if(isDebug()) System.out.printf("%s: DONE constructing LCDD object %s\n", this.getClass().getSimpleName(),base.getName());

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyCoordinateSystem.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyCoordinateSystem.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyCoordinateSystem.java	Mon Nov  3 18:26:47 2014
@@ -24,13 +24,14 @@
 		private Hep3Vector v;
 		private Hep3Vector w;
 
-		public SurveyCoordinateSystem(Hep3Vector org, Hep3Vector unit_x, Hep3Vector unit_y, Hep3Vector unit_z) {
-			origin = org;
-			u = unit_x;
-			v = unit_y;
-			w = unit_z;
-		}
+//		public SurveyCoordinateSystem(Hep3Vector org, Hep3Vector unit_x, Hep3Vector unit_y, Hep3Vector unit_z) {
+//			origin = org;
+//			u = unit_x;
+//			v = unit_y;
+//			w = unit_z;
+//		}
 
+		
 		public SurveyCoordinateSystem(Hep3Vector ball, Hep3Vector vee, Hep3Vector flat) {
             origin = ball;
             Hep3Vector ball_to_vee = VecOp.sub(vee, ball);

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java	Mon Nov  3 18:26:47 2014
@@ -53,7 +53,6 @@
 	}
 	
 	protected abstract void setPos();
-	protected abstract void setCoord();
 	protected abstract void setCenter();
 	protected abstract void setBoxDim();
 
@@ -223,14 +222,15 @@
 	public  Hep3Vector getFlatPos() {
 		return flatPos;
 	}
-	public void setCoord(Hep3Vector origin) {
+	public void setCoord() {
 		if(ballPos==null || veePos==null || flatPos==null) {
 			throw new RuntimeException("Need to set ball, vee and flat before building coord system!");
 		}
-		if(origin!=null) {
-			coord = new SurveyCoordinateSystem(origin, ballPos, veePos, flatPos);
-		} else {
-			coord = new SurveyCoordinateSystem(ballPos, veePos, flatPos);					
+		
+		coord = new SurveyCoordinateSystem(ballPos, veePos, flatPos);					
+		
+		if(this.debug) {
+		    System.out.printf("%s: setCoord \n%s\n", this.getClass().getSimpleName(), coord.toString());
 		}
 	}
 	public SurveyCoordinateSystem getCoord() {

Added: projects/lcsim/trunk/detector-framework/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014LCDDTest.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014LCDDTest.java	(added)
+++ projects/lcsim/trunk/detector-framework/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014LCDDTest.java	Mon Nov  3 18:26:47 2014
@@ -0,0 +1,35 @@
+package org.lcsim.geometry.compact.converter.lcdd;
+
+import java.io.BufferedOutputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.lcsim.util.test.TestUtil.TestOutputFile;
+
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+*
+* @author Per Hansson Adrian <[log in to unmask]>
+*/
+public class HPSTracker2014LCDDTest extends TestCase
+{    
+   public HPSTracker2014LCDDTest(String name)
+   {
+   	super(name);
+   }
+   
+   public static TestSuite suite()
+   {
+       return new TestSuite(HPSTracker2014LCDDTest.class);
+   }
+   
+   public void test_converter() throws Exception
+   {
+       InputStream in = HPSTestRunTracker2014.class.getResourceAsStream("/org/lcsim/geometry/subdetector/HPSTracker2014.xml");
+       OutputStream out = new BufferedOutputStream(new FileOutputStream(new TestOutputFile("HPSTracker2014.lcdd")));
+       new Main().convert("HPSTracker2014",in,out);
+   }
+}

Modified: projects/lcsim/trunk/detector-framework/src/test/resources/org/lcsim/geometry/subdetector/HPSTracker2014.xml
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/test/resources/org/lcsim/geometry/subdetector/HPSTracker2014.xml	(original)
+++ projects/lcsim/trunk/detector-framework/src/test/resources/org/lcsim/geometry/subdetector/HPSTracker2014.xml	Mon Nov  3 18:26:47 2014
@@ -2,22 +2,28 @@
   xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
   xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/compact/1.0/compact.xsd">
   
-  <info name="HPSTrackerProposal2014">
-    <comment>new SVT test geometry</comment>
+  <info name="HPSTracker2014">
+    <comment>SVT survey-based geometry for 2014 proposal</comment>
   </info>
   
   <define>
+    <!-- units -->
+    <constant name="mm" value="0.1*cm"/>
+    <constant name="inch" value="25.4*mm"/>
+
     <!-- world -->
     <constant name="world_side" value="500.0*cm" />
     <constant name="world_x" value="world_side" />
     <constant name="world_y" value="world_side" />
     <constant name="world_z" value="world_side" />
   
- 	 <!-- tracking region -->
- 	<constant name="tracking_region_radius" value="200.0*cm"/>
+     <!-- tracking region -->
+    <constant name="tracking_region_radius" value="200.0*cm"/>
     <constant name="tracking_region_min" value="5.0*cm"/>
     <constant name="tracking_region_zmax" value="131.8*cm"/>
-   </define>
+ 
+ 
+  </define>
   
   <materials>
     <!-- Set tracking material to vacuum. -->
@@ -28,69 +34,218 @@
   </materials>
   
   <display>
-	
+    
     <vis name="SensorVis" alpha="1.0" r="1.0" g="0.0" b="0.0" drawingStyle="wireframe" lineStyle="unbroken" showDaughters="true" visible="true"/>
-    <vis name="CarbonFiberVis" alpha="1.0" r="0.88" g="0.88" b="0.88" drawingStyle="wireframe" lineStyle="unbroken" showDaughters="true" visible="true"/>
-    <vis name="KaptonVis" alpha="1.0" r="0.91" g="0.77" b="0.06" drawingStyle="wireframe" lineStyle="unbroken" showDaughters="true" visible="true"/>
-    <vis name="HybridVis" alpha="1.0" r="0.0" g="1.0" b="0" drawingStyle="wireframe" lineStyle="unbroken" showDaughters="true" visible="true"/>
+    <vis name="ActiveSensorVis" alpha="1.0" r="1.0" g="0.0" b="0.0" drawingStyle="solid" lineStyle="unbroken" showDaughters="true" visible="true"/>
+    <vis name="CarbonFiberVis" alpha="1.0" r="0.88" g="0.88" b="0.88" drawingStyle="solid" lineStyle="unbroken" showDaughters="true" visible="true"/>
+    <vis name="KaptonVis" alpha="1.0" r="0.91" g="0.77" b="0.06" drawingStyle="solid" lineStyle="unbroken" showDaughters="true" visible="true"/>
+    <vis name="HybridVis" alpha="1.0" r="0.0" g="1.0" b="0" drawingStyle="solid" lineStyle="unbroken" showDaughters="true" visible="true"/>
     <vis name="HalfModuleVis" alpha="1.0" r="1.0" g="1.0" b="1.0" drawingStyle="wireframe" lineStyle="dashed" showDaughters="true" visible="true"/>
+    <vis name="ColdBlockVis" alpha="1.0" r="0.75" g="0.73" b="0.75" drawingStyle="solid" lineStyle="dashed" showDaughters="true" visible="true"/>
     <vis name="ModuleVis" alpha="1.0" r="1.0" g="1.0" b="1.0" drawingStyle="wireframe" lineStyle="dotted" showDaughters="true" visible="true"/>
-    <vis name="SupportPlateVis" alpha="1.0" r="0.75" g="0.73" b="0.75" drawingStyle="solid" lineStyle="dashed" showDaughters="true" visible="true"/>
+    <vis name="SupportPlateVis" alpha="1.0" r="0.45" g="0.45" b="0.45" drawingStyle="solid" lineStyle="dashed" showDaughters="true" visible="true"/>
+    <vis name="SupportVolumeVis" alpha="1.0" r="0.75" g="0.73" b="0.75" drawingStyle="wireframe" lineStyle="dashed" showDaughters="true" visible="true"/>
+    <vis name="BasePlateVis" alpha="1.0" r="0.35" g="0.35" b="0.35" drawingStyle="solid" lineStyle="dashed" showDaughters="true" visible="true"/>
     <vis name="LayerVis" alpha="0.0" r="0.0" g="0.0" b="1.0" drawingStyle="wireframe" showDaughters="true" visible="false"/>
     <vis name="ComponentVis" alpha="0.0" r="0.0" g="0.2" b="0.4" drawingStyle="solid" showDaughters="false" visible="false"/>
-	
+    <vis name="BeamPlaneVis" alpha="1.0" r="1.0" g="1.0" b="1.0" drawingStyle="solid" lineStyle="unbroken" showDaughters="false" visible="true"/>
+    
   </display>
   
   <detectors>
     <detector id="1" name="Tracker" type="HPSTracker2014" readout="TrackerHits">
-
-      <!-- Definition of half module logical volume. -->
-      <half_modules>
-        <half_module name="SvtHalfModuleLayers1-3">
-          <component x="50.0" y="100.0" z="0.0" material="Silicon" sensitive="true" />
-        </half_module>
-      </half_modules>
-      
-      <!-- Alignment of entire tracker box. -->
-      <alignment x="0.0" y="0.0" z="0.0" />
-      <support_plate name="SupportPlateL1-3bot">
-        <position name="ball" x="0.0" y="0.0" z="0.0"/>
-        <position name="vee" x="0.0" y="0.0" z="0.0"/>
-        <position name="flat" x="0.0" y="0.0" z="0.0"/>
-        <alignment x="5.0" y="5.0" z="5.0" rx="0.1" ry="0.1" rz="0.1"/>
-        <modules>
-          <module layer="1" ref="SvtModule">
-            <position name="ball" x="0.0" y="0.0" z="0.0"/>
-        	<position name="vee" x="0.0" y="0.0" z="0.0"/>
-        	<position name="flat" x="0.0" y="0.0" z="0.0"/>
-        	<alignment x="4.0" y="4.0" z="4.0" rx="0.1" ry="0.1" rz="0.1"/>
-        	<half_module type="axial" ref="SvtHalfModuleLayers1-3">
-	        	<position name="ball" x="0.0" y="0.0" z="0.0"/>
-    	    	<position name="vee" x="0.0" y="0.0" z="0.0"/>
-        		<position name="flat" x="0.0" y="0.0" z="0.0"/>
-            	<alignment x="3.0" y="3.0" z="3.0" rx="0.1" ry="0.1" rz="0.1" />
-            </half_module>
-	<!-- 
-            <half_module type="stereo" ref="SvtHalfModuleLayers1-3">
-	       		<position name="ball" x="0.0" y="0.0" z="0.0"/>
-    	    	<position name="vee" x="0.0" y="0.0" z="0.0"/>
-        		<position name="flat" x="0.0" y="0.0" z="0.0"/>
-            	<alignment x="2.0" y="2.0" z="2.0" rx="0.1" ry="0.1" rz="0.1" />
-            </half_module>
-            -->
-          </module>
-          <!-- 
-          <module layer="2" ref="SvtModule">
-            <alignment x="0.0" y="0.0" z="" rx="0.0" ry="0.0"
-              rz="0.0" />
-          </module>
-          <module layer="3" ref="SvtModule">
-            <alignment x="0.0" y="0.0" z="" rx="0.0" ry="0.0"
-              rz="0.0" />
-          </module>
-           -->
-        </modules>
-      </support_plate>
+        <SurveyVolumes>
+            <SurveyVolume name="c_support">
+                <SurveyPos>
+                    <point name="ball"  x="192.5" y="608.0" z="0.0"/>
+                    <point name="vee"   x="193.5" y="608.0" z="0.0"/>
+                    <point name="flat"  x="192.5" y="609.0" z="0.0"/>                    
+                </SurveyPos>
+                <!-- 
+                <SurveyCoord>
+                    <origin x="" y="" z=""/>
+                    <unitVec name="u"  x="1.0" y="0.0" z="0.0"/>
+                    <unitVec name="v"  x="1.0" y="0.0" z="0.0"/>
+                    <unitVec name="w"  x="0.0" y="1.0" z="0.0"/>                    
+                </SurveyCoord>
+                 -->
+            </SurveyVolume>
+            <SurveyVolume name="support_bottom_L13">
+                <SurveyPos>
+                    <point name="ball"  x="0.0" y="0.0" z="0.0"/>
+                    <point name="vee"   x="-1.0" y="0.0" z="0.0"/>
+                    <point name="flat"  x="0.0" y="-1.0" z="0.0"/>                    
+                </SurveyPos>               
+            </SurveyVolume>
+            <SurveyVolume name="support_plate_bottom_L13">
+                <SurveyPos>
+                    <point name="ball"  x="0.0" y="0.0" z="0.0"/>
+                    <point name="vee"   x="1.0" y="0.0" z="0.0"/>
+                    <point name="flat"  x="0.0" y="1.0" z="0.0"/>                    
+                </SurveyPos>               
+            </SurveyVolume>
+            <SurveyVolume name="module_L1b">
+                <SurveyPos>
+                    <point name="ball"  x="0.0" y="0.0" z="0.0"/>
+                    <point name="vee"   x="0.0" y="0.0" z="1.0"/>
+                    <point name="flat"  x="1.0" y="0.0" z="0.0"/>                    
+                </SurveyPos>               
+            </SurveyVolume>
+        </SurveyVolumes>
+    
+        <millepede_constants>
+        
+            <!-- top half-module translations -->
+            <millepede_constant name="11101" value="0.0"/>
+            <millepede_constant name="11102" value="0.0"/>
+            <millepede_constant name="11103" value="0.0"/>
+            <millepede_constant name="11104" value="0.0"/>
+            <millepede_constant name="11105" value="0.0"/>
+            <millepede_constant name="11106" value="0.0"/>
+            <millepede_constant name="11107" value="0.0"/>
+            <millepede_constant name="11108" value="0.0"/>
+            <millepede_constant name="11109" value="0.0"/>
+            <millepede_constant name="11110" value="0.0"/>
+
+            <millepede_constant name="11201" value="0.0"/>
+            <millepede_constant name="11202" value="0.0"/>
+            <millepede_constant name="11203" value="0.0"/>
+            <millepede_constant name="11204" value="0.0"/>
+            <millepede_constant name="11205" value="0.0"/>
+            <millepede_constant name="11206" value="0.0"/>
+            <millepede_constant name="11207" value="0.0"/>
+            <millepede_constant name="11208" value="0.0"/>
+            <millepede_constant name="11209" value="0.0"/>
+            <millepede_constant name="11210" value="0.0"/>
+
+            <millepede_constant name="11301" value="0.0"/>
+            <millepede_constant name="11302" value="0.0"/>
+            <millepede_constant name="11303" value="0.0"/>
+            <millepede_constant name="11304" value="0.0"/>
+            <millepede_constant name="11305" value="0.0"/>
+            <millepede_constant name="11306" value="0.0"/>
+            <millepede_constant name="11307" value="0.0"/>
+            <millepede_constant name="11308" value="0.0"/>
+            <millepede_constant name="11309" value="0.0"/>
+            <millepede_constant name="11310" value="0.0"/>
+            
+            <!-- top half-module rotations -->
+            
+            <millepede_constant name="12101" value="0.0"/>
+            <millepede_constant name="12102" value="0.0"/>
+            <millepede_constant name="12103" value="0.0"/>
+            <millepede_constant name="12104" value="0.0"/>
+            <millepede_constant name="12105" value="0.0"/>
+            <millepede_constant name="12106" value="0.0"/>
+            <millepede_constant name="12107" value="0.0"/>
+            <millepede_constant name="12108" value="0.0"/>
+            <millepede_constant name="12109" value="0.0"/>
+            <millepede_constant name="12110" value="0.0"/>
+
+            <millepede_constant name="12201" value="0.0"/>
+            <millepede_constant name="12202" value="0.0"/>
+            <millepede_constant name="12203" value="0.0"/>
+            <millepede_constant name="12204" value="0.0"/>
+            <millepede_constant name="12205" value="0.0"/>
+            <millepede_constant name="12206" value="0.0"/>
+            <millepede_constant name="12207" value="0.0"/>
+            <millepede_constant name="12208" value="0.0"/>
+            <millepede_constant name="12209" value="0.0"/>
+            <millepede_constant name="12210" value="0.0"/>
+
+            <millepede_constant name="12301" value="0.0"/>
+            <millepede_constant name="12302" value="0.0"/>
+            <millepede_constant name="12303" value="0.0"/>
+            <millepede_constant name="12304" value="0.0"/>
+            <millepede_constant name="12305" value="0.0"/>
+            <millepede_constant name="12306" value="0.0"/>
+            <millepede_constant name="12307" value="0.0"/>
+            <millepede_constant name="12308" value="0.0"/>
+            <millepede_constant name="12309" value="0.0"/>
+            <millepede_constant name="12310" value="0.0"/>
+            
+            <!-- bottom half-module translations -->
+            
+            <millepede_constant name="21101" value="0.0"/>
+            <millepede_constant name="21102" value="0.0"/>
+            <millepede_constant name="21103" value="0.0"/>
+            <millepede_constant name="21104" value="0.0"/>
+            <millepede_constant name="21105" value="0.0"/>
+            <millepede_constant name="21106" value="0.0"/>
+            <millepede_constant name="21107" value="0.0"/>
+            <millepede_constant name="21108" value="0.0"/>
+            <millepede_constant name="21109" value="0.0"/>
+            <millepede_constant name="21110" value="0.0"/>
+
+            <millepede_constant name="21201" value="0.0"/>
+            <millepede_constant name="21202" value="0.0"/>
+            <millepede_constant name="21203" value="0.0"/>
+            <millepede_constant name="21204" value="0.0"/>
+            <millepede_constant name="21205" value="0.0"/>
+            <millepede_constant name="21206" value="0.0"/>
+            <millepede_constant name="21207" value="0.0"/>
+            <millepede_constant name="21208" value="0.0"/>
+            <millepede_constant name="21209" value="0.0"/>
+            <millepede_constant name="21210" value="0.0"/>
+
+            <millepede_constant name="21301" value="0.0"/>
+            <millepede_constant name="21302" value="0.0"/>
+            <millepede_constant name="21303" value="0.0"/>
+            <millepede_constant name="21304" value="0.0"/>
+            <millepede_constant name="21305" value="0.0"/>
+            <millepede_constant name="21306" value="0.0"/>
+            <millepede_constant name="21307" value="0.0"/>
+            <millepede_constant name="21308" value="0.0"/>
+            <millepede_constant name="21309" value="0.0"/>
+            <millepede_constant name="21310" value="0.0"/>
+            
+            <!-- bottom half-module rotations -->
+            
+            <millepede_constant name="22101" value="0.0"/>
+            <millepede_constant name="22102" value="0.0"/>
+            <millepede_constant name="22103" value="0.0"/>
+            <millepede_constant name="22104" value="0.0"/>
+            <millepede_constant name="22105" value="0.0"/>
+            <millepede_constant name="22106" value="0.0"/>
+            <millepede_constant name="22107" value="0.0"/>
+            <millepede_constant name="22108" value="0.0"/>
+            <millepede_constant name="22109" value="0.0"/>
+            <millepede_constant name="22110" value="0.0"/>
+
+            <millepede_constant name="22201" value="0.0"/>
+            <millepede_constant name="22202" value="0.0"/>
+            <millepede_constant name="22203" value="0.0"/>
+            <millepede_constant name="22204" value="0.0"/>
+            <millepede_constant name="22205" value="0.0"/>
+            <millepede_constant name="22206" value="0.0"/>
+            <millepede_constant name="22207" value="0.0"/>
+            <millepede_constant name="22208" value="0.0"/>
+            <millepede_constant name="22209" value="0.0"/>
+            <millepede_constant name="22210" value="0.0"/>
+
+            <millepede_constant name="22301" value="0.0"/>
+            <millepede_constant name="22302" value="0.0"/>
+            <millepede_constant name="22303" value="0.0"/>
+            <millepede_constant name="22304" value="0.0"/>
+            <millepede_constant name="22305" value="0.0"/>
+            <millepede_constant name="22306" value="0.0"/>
+            <millepede_constant name="22307" value="0.0"/>
+            <millepede_constant name="22308" value="0.0"/>
+            <millepede_constant name="22309" value="0.0"/>
+            <millepede_constant name="22310" value="0.0"/>
+            
+            
+            <!-- top support tilt angles -->
+            <millepede_constant name="13100" value="0.0"/> <!-- + means opening -->
+            <millepede_constant name="13200" value="0.0"/>
+            <millepede_constant name="13300" value="0.0"/>
+            
+            <!-- bottom support tilt angles -->
+            <millepede_constant name="23100" value="0.0"/> <!-- + means closing -->
+            <millepede_constant name="23200" value="0.0"/>
+            <millepede_constant name="23300" value="0.0"/>
+            
+        </millepede_constants>
     </detector>
   </detectors>
   <readouts>

########################################################################
Use REPLY-ALL to reply to list

To unsubscribe from the LCDET-SVN list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCDET-SVN&A=1