LISTSERV mailing list manager LISTSERV 16.5

Help for LCDET-SVN Archives


LCDET-SVN Archives

LCDET-SVN Archives


LCDET-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

LCDET-SVN Home

LCDET-SVN Home

LCDET-SVN  November 2014

LCDET-SVN November 2014

Subject:

r3412 - in /projects/lcsim/trunk/detector-framework/src: main/java/org/lcsim/geometry/compact/converter/ test/java/org/lcsim/geometry/compact/converter/lcdd/ test/resources/org/lcsim/geometry/subdetector/

From:

[log in to unmask]

Reply-To:

Notification of commits to the lcdet svn repository <[log in to unmask]>

Date:

Tue, 4 Nov 2014 02:26:51 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (1843 lines)

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

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use