Print

Print


Author: [log in to unmask]
Date: Wed Jun 24 16:15:02 2015
New Revision: 3197

Log:
Added U-channel to box survey

Modified:
    java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java
    java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java
    java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerBuilder.java
    java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerGeometryDefinition.java
    java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java
    java/trunk/detector-model/src/test/resources/org/lcsim/geometry/subdetector/HPSTracker2014v1Survey.xml

Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java
 =============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java	(original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java	Wed Jun 24 16:15:02 2015
@@ -69,7 +69,7 @@
         CSupport cSupport = new CSupport("c_support", base);
         surveyVolumes.add(cSupport);        
         
-        AlignmentCorrection alignmentCorrectionSupportBottom = getSupportAlignmentCorrection(false);
+        AlignmentCorrection alignmentCorrectionSupportBottom = getL13UChannelAlignmentCorrection(false);
         SupportBottom supportBottom = new SupportBottom("support_bottom", base, alignmentCorrectionSupportBottom, cSupport);
         surveyVolumes.add(supportBottom);
         // The support survey positions are now with respect to its mother and not the reference coord. system.
@@ -78,7 +78,7 @@
         SupportPlateBottom supportPlateBottom = new SupportPlateBottom("support_plate_bottom", base, supportBottom, "Aluminum");
         surveyVolumes.add(supportPlateBottom);        
         
-        AlignmentCorrection alignmentCorrectionSupportTop = getSupportAlignmentCorrection(true);
+        AlignmentCorrection alignmentCorrectionSupportTop = getL13UChannelAlignmentCorrection(true);
         SupportTop supportTop = new SupportTop("support_top", base, alignmentCorrectionSupportTop, cSupport);
         surveyVolumes.add(supportTop);
         

Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java
 =============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java	(original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java	Wed Jun 24 16:15:02 2015
@@ -46,6 +46,18 @@
 
         if(isDebug()) System.out.printf("%s: constructing the geometry objects\n", this.getClass().getSimpleName());
 
+        
+        // Create alignment correction objects
+        // THis is really a ugly approach with MP corrections initialized before and 
+        // the survey corrections based on the XML node
+        // FIX THIS! //TODO
+        AlignmentCorrection alignmentCorrections = new AlignmentCorrection();
+        alignmentCorrections.setNode(node);
+        AlignmentCorrection supBotCorr = getL13UChannelAlignmentCorrection(false);
+        supBotCorr.setNode(node);
+        AlignmentCorrection supTopCorr = this.getL13UChannelAlignmentCorrection(true);
+        supTopCorr.setNode(node);
+        
         // 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
@@ -60,51 +72,38 @@
 
         SvtBoxBasePlate svtBoxBasePlate = new SvtBoxBasePlate("base_plate",svtBox,null);
         surveyVolumes.add(svtBoxBasePlate);
-        
-        //SupportRing supportRing = new SupportRing("c_support", svtBox, null, svtBoxBasePlate); 
-        //surveyVolumes.add(supportRing);
-       
-//        AlignmentCorrection supBotCorr = this.getSupportAlignmentCorrection(false);
-//        SupportRingL13BottomKinMount supportRingKinL13Bottom = new SupportRingL13BottomKinMount("c_support_kin_L13b", svtBox, supBotCorr, supportRing); 
-//        surveyVolumes.add(supportRingKinL13Bottom);
-        
-        AlignmentCorrection supBotCorr = this.getSupportAlignmentCorrection(false);
+                
+        
+        
         SupportRingL13BottomKinMount supportRingKinL13Bottom = new SupportRingL13BottomKinMount("c_support_kin_L13b", svtBox, supBotCorr); 
         surveyVolumes.add(supportRingKinL13Bottom);
         
         
-        UChannelL13 uChannelL13Bottom = new UChannelL13Bottom("support_bottom_L13", svtBox, null, supportRingKinL13Bottom); 
+        UChannelL13 uChannelL13Bottom = new UChannelL13Bottom("support_bottom_L13", svtBox, alignmentCorrections, supportRingKinL13Bottom); 
         surveyVolumes.add(uChannelL13Bottom);
         
         UChannelL13Plate uChannelL13BottomPlate = new UChannelL13BottomPlate("support_plate_bottom_L13", svtBox, null, uChannelL13Bottom); 
         surveyVolumes.add(uChannelL13BottomPlate);
 
-//        AlignmentCorrection supTopCorr = this.getSupportAlignmentCorrection(true);
-//        SupportRingL13TopKinMount supportRingKinL13Top = new SupportRingL13TopKinMount("c_support_kin_L13t", svtBox, supTopCorr, supportRing); 
-//        surveyVolumes.add(supportRingKinL13Top);
-
-        AlignmentCorrection supTopCorr = this.getSupportAlignmentCorrection(true);
+        
         SupportRingL13TopKinMount supportRingKinL13Top = new SupportRingL13TopKinMount("c_support_kin_L13t", svtBox, supTopCorr); 
         surveyVolumes.add(supportRingKinL13Top);
 
-        // Create an alignment correction object for the U-channels -> this is really ugly. FIX THIS!
-        AlignmentCorrection alignmentCorrectionUChannels = new AlignmentCorrection();
-        alignmentCorrectionUChannels.setNode(node);
-        
-        
-        UChannelL13Top uChannelL13Top = new UChannelL13Top("support_top_L13", svtBox, null, supportRingKinL13Top); 
+        
+        
+        UChannelL13Top uChannelL13Top = new UChannelL13Top("support_top_L13", svtBox, alignmentCorrections, supportRingKinL13Top); 
         surveyVolumes.add(uChannelL13Top);
         
         UChannelL13Plate uChannelL13TopPlate = new UChannelL13TopPlate("support_plate_top_L13", svtBox, null, uChannelL13Top); 
         surveyVolumes.add(uChannelL13TopPlate);
         
-        UChannelL46 uChannelL46Bottom = new UChannelL46Bottom("support_bottom_L46", svtBox, alignmentCorrectionUChannels);
+        UChannelL46 uChannelL46Bottom = new UChannelL46Bottom("support_bottom_L46", svtBox, alignmentCorrections);
         surveyVolumes.add(uChannelL46Bottom);
         
         UChannelL46Plate uChannelL46BottomPlate = new UChannelL46BottomPlate("support_plate_bottom_L46", svtBox, null, uChannelL46Bottom);
         surveyVolumes.add(uChannelL46BottomPlate);
 
-        UChannelL46 uChannelL46Top = new UChannelL46Top("support_top_L46", svtBox, alignmentCorrectionUChannels);
+        UChannelL46 uChannelL46Top = new UChannelL46Top("support_top_L46", svtBox, alignmentCorrections);
         surveyVolumes.add(uChannelL46Top);
         
         UChannelL46Plate uChannelL46TopPlate = new UChannelL46TopPlate("support_plate_top_L46", svtBox, null, uChannelL46Top);
@@ -356,9 +355,9 @@
     
     /**
      * {@link SurveyVolume} volume defining a coordinate system from the kinematic mount positions for support channels
-     *  Reference: {@SvtBox} coordinate system
+     *  Reference: {@link SvtBox} coordinate system
      *  Origin: cone mount (it's on the electron side)
-     *  Orientation: ball is cone mount, slot mount is vee position and flat is along beamline pointing upstream
+     *  Orientation: ball is cone mount, slot mount is vee position and flat is along beam line pointing upstream
      *  
      * @author Per Hansson Adrian <[log in to unmask]>
      *
@@ -376,23 +375,6 @@
         protected double getKinMountVerticalPos() {
             return kin_mount_pos_z;
         }
-
-//        protected void setPos() {
-//            final double ball_pos_x = (7.0 - 5.444) *inch;
-//            final double ball_pos_y = 0.574*inch;
-//            final double ball_pos_z = SupportRing.plateThickness + kin_mount_offset_vertically;
-//            ballPos = new BasicHep3Vector(ball_pos_x, ball_pos_y, ball_pos_z);
-//            
-//            final double vee_pos_x = (2*7.0)*inch;
-//            final double vee_pos_y = ball_pos_y;
-//            final double vee_pos_z = ball_pos_z;
-//            veePos = new BasicHep3Vector(vee_pos_x, vee_pos_y, vee_pos_z);
-//            
-//            final double flat_pos_x = ball_pos_x;
-//            final double flat_pos_y = ball_pos_y + 1.0; // random distance
-//            final double flat_pos_z = ball_pos_z;
-//            flatPos = new BasicHep3Vector(flat_pos_x,flat_pos_y,flat_pos_z);
-//        }
         
     }
     
@@ -470,7 +452,7 @@
     
     /**
      * {@link SurveyVolume} volume defining the coordinate system of the bottom L1-3 u-channel 
-     *  Reference: SupportRingL13BottomKinMount coordinate system
+     *  Reference: {@link SupportRingL13BottomKinMount} coordinate system
      *  Origin: midpoint between upstream survey cones
      *  Orientation: u - width pointing towards electron side, v - pointing along the U-channel in the beam direction
      *  

Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerBuilder.java
 =============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerBuilder.java	(original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerBuilder.java	Wed Jun 24 16:15:02 2015
@@ -174,7 +174,7 @@
      * @param isTopLayer - top or bottom layer
      * @return the alignment correction
      */
-    protected AlignmentCorrection getSupportAlignmentCorrection(boolean isTopLayer) {
+    protected AlignmentCorrection getL13UChannelAlignmentCorrection(boolean isTopLayer) {
         double r[] = {0, 0, 0};
         double t[] = {0, 0, 0};
         for (MilleParameter p_loop : milleparameters) {
@@ -278,18 +278,13 @@
         }
         // check for other signatures
         if (half.isEmpty()) {
-            // 6 layers is arbitrary here
-            for (int layer = 1; layer <= 6; ++layer) {
-                if (name.contains(String.format("L%db", layer))) {
+            Pattern pattern = Pattern.compile(".*_L[1-6][1-6]?([a-z]).*");
+            Matcher matcher = pattern.matcher(name);
+            if(matcher.matches()) {
+                if(matcher.group(1).equals("t")) {
+                    half = "top";
+                } else if(matcher.group(1).equals("b")) {
                     half = "bottom";
-                    break;
-                }
-                if (name.contains(String.format("L%dt", layer))) {
-                    if (half.equals("bottom")) {
-                        throw new RuntimeException("found both halfs from name  " + name);
-                    }
-                    half = "top";
-                    break;
                 }
             }
         }
@@ -336,25 +331,41 @@
         Pattern pattern = Pattern.compile("module_L[1-6][bt]$");
         Matcher matcher = pattern.matcher(name);
         boolean found = false;
-        while(matcher.find()) {
+        while(matcher.matches()) {
             //System.out.printf("isModule: found %s\n", matcher.group());
             found = true;
         }
         return found?true:false;
     }
     
+    public static int getUChannelSupportLayer(String name) {
+        if(isUChannelSupport(name)) {
+            Pattern patter = Pattern.compile("^support_[a-z]*_L([1-6])[1-6]$");
+            Matcher matcher = patter.matcher(name);
+            if(matcher.matches() ) {
+                int layer = Integer.parseInt(matcher.group(1));
+                return layer;
+            } else {
+                throw new RuntimeException("this is not a valid u-channel name: " + name);
+            }
+        } else {
+            throw new RuntimeException("this is not a valid u-channel name: " + name);
+        }
+    }
+    
+    
     public static boolean isUChannelSupport(String name) {
-        Pattern patter = Pattern.compile("^support_[a-z]+_L1|3$4|6");
+        Pattern patter = Pattern.compile("^support_[a-z]*_L(4|1)(6|3)$");
         Matcher matcher = patter.matcher(name);
-        boolean found = false;
-        if(matcher.find() ) {
-            found = true;
-            System.out.printf("isUChannelSupport: found U-channel: %s\n", name);
-        } else {
-           System.out.printf("isUChannelSupport: this is not a U-channel: %s\n", name);
-        }
-        return found;
-    }
+        return matcher.matches();
+    }
+
+    public static boolean isSupportRingKinMount(String name) {
+        Pattern patter = Pattern.compile("^c_support_kin_L13(b|t)$");
+        Matcher matcher = patter.matcher(name);
+        return matcher.matches();
+    }    
+    
     
     public static boolean isSensor(String name) {
         if (name.endsWith("sensor")) {

Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerGeometryDefinition.java
 =============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerGeometryDefinition.java	(original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerGeometryDefinition.java	Wed Jun 24 16:15:02 2015
@@ -36,7 +36,7 @@
 
 
     //General
-    static final double inch = 25.4; //mm
+    protected 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;

Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java
 =============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java	(original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java	Wed Jun 24 16:15:02 2015
@@ -171,44 +171,143 @@
 
                     if(debug) System.out.printf("%s: updated found survey results: \n%s \n", this.getClass().getSimpleName(), surveyResult.toString());
                 
-                } else if(HPSTrackerBuilder.isUChannelSupport(name)) {
-
-                    if(debug) System.out.printf("%s: treating it as a U-channel\n", this.getClass().getSimpleName());
-                   
-                    // Survey coordinates at upstream end of box need to be translated to the center of the Svt Box used here
+                    
+                    
+                    
+                    
+                } else if(HPSTrackerBuilder.isSupportRingKinMount(name)) {
+
+                    if(debug) System.out.printf("%s: treating it as support ring kinematic mount\n", this.getClass().getSimpleName());
+
+
+
+                    // Survey SVT box origin  translated to the edge of the SVT box
+                    surveyResult.setOrigin(VecOp.sub(surveyResult.getOrigin(), new BasicHep3Vector(0, 0, -0.375*HPSTrackerGeometryDefinition.inch)));
+
+                    if(debug) System.out.printf("%s: UPDATE1 found survey results: \n%s \n", this.getClass().getSimpleName(), surveyResult.toString());
+
+
+                    // Survey SVT box origin translated to the center of the Svt Box used in the geometry
                     surveyResult.setOrigin(VecOp.sub(surveyResult.getOrigin(),new BasicHep3Vector(0, 0, SvtBox.length/2.0)));
 
-                    if(debug) System.out.printf("%s: UPDATE1 found survey results: \n%s \n", this.getClass().getSimpleName(), surveyResult.toString());
-                    
+
+                    if(debug) System.out.printf("%s: UPDATE2 found survey results: \n%s \n", this.getClass().getSimpleName(), surveyResult.toString());
+
                     // rotate origin into the SVT box coordinates
                     Rotation r1 = new Rotation(new Vector3D(1, 0, 0), Math.PI/2.0);
                     surveyResult.rotateOrigin(r1);
                     surveyResult.rotateUnitVectors(r1);
-                    
-                    if(debug) System.out.printf("%s: UPDATE2 found survey results: \n%s \n", this.getClass().getSimpleName(), surveyResult.toString());
-                   
+
+                    if(debug) System.out.printf("%s: UPDATE3 found survey results: \n%s \n", this.getClass().getSimpleName(), surveyResult.toString());
+
+
+
                     // Swap definition of unit axis to the one used in the U-channels
                     if(HPSTrackerBuilder.isTopFromName(name)) {
-                     
-                        Hep3Vector y = new BasicHep3Vector( surveyResult.getZ().v() );
-                        Hep3Vector z = new BasicHep3Vector( VecOp.mult(-1, surveyResult.getY()).v() );
+
+                      //Hep3Vector x = new BasicHep3Vector( VecOp.mult(-1,surveyResult.getX()).v() );
+                        Hep3Vector y = new BasicHep3Vector( VecOp.mult(-1,surveyResult.getZ()).v() );
+                        Hep3Vector z = new BasicHep3Vector( surveyResult.getY().v() );
+                        //surveyResult.setX(x);
                         surveyResult.setY(y);
                         surveyResult.setZ(z);
-                    
+
                     } else {
-                        
-                        Hep3Vector x = new BasicHep3Vector( VecOp.mult(-1,surveyResult.getX()).v() );
-                        Hep3Vector y = new BasicHep3Vector( surveyResult.getZ().v() );
+
+                        //Hep3Vector x = new BasicHep3Vector( VecOp.mult(-1,surveyResult.getX()).v() );
+                        Hep3Vector y = new BasicHep3Vector( VecOp.mult(-1,surveyResult.getZ()).v() );
                         Hep3Vector z = new BasicHep3Vector( surveyResult.getY().v() );
-                        surveyResult.setX(x);
+                        //surveyResult.setX(x);
                         surveyResult.setY(y);
                         surveyResult.setZ(z);
-                        
+
                     }
-                    
-                    
-                    if(debug) System.out.printf("%s: UPDATE3 found survey results: \n%s \n", this.getClass().getSimpleName(), surveyResult.toString());
-                    
+
+
+
+
+                } else if(HPSTrackerBuilder.isUChannelSupport(name) ) {
+
+                   
+                    
+                    int layer = HPSTrackerBuilder.getUChannelSupportLayer(name);
+
+                    if(layer >= 4 ) {
+                        if(debug) System.out.printf("%s: treating it as a L4-6 U-channel (%d)\n", this.getClass().getSimpleName(), layer);
+
+
+                        // Survey SVT box origin  translated to the edge of the SVT box
+                        surveyResult.setOrigin(VecOp.sub(surveyResult.getOrigin(), new BasicHep3Vector(0, 0, -0.375*HPSTrackerGeometryDefinition.inch)));
+
+                        if(debug) System.out.printf("%s: UPDATE1 found survey results: \n%s \n", this.getClass().getSimpleName(), surveyResult.toString());
+
+                        // Survey SVT box origin translated to the center of the Svt Box used in the geometry
+                        surveyResult.setOrigin(VecOp.sub(surveyResult.getOrigin(),new BasicHep3Vector(0, 0, SvtBox.length/2.0)));
+
+
+                        if(debug) System.out.printf("%s: UPDATE2 found survey results: \n%s \n", this.getClass().getSimpleName(), surveyResult.toString());
+
+                        // rotate origin into the SVT box coordinates
+                        Rotation r1 = new Rotation(new Vector3D(1, 0, 0), Math.PI/2.0);
+                        surveyResult.rotateOrigin(r1);
+                        surveyResult.rotateUnitVectors(r1);
+
+                        if(debug) System.out.printf("%s: UPDATE3 found survey results: \n%s \n", this.getClass().getSimpleName(), surveyResult.toString());
+
+                        // Swap definition of unit axis to the one used in the U-channels
+                        if(HPSTrackerBuilder.isTopFromName(name)) {
+
+                            Hep3Vector y = new BasicHep3Vector( surveyResult.getZ().v() );
+                            Hep3Vector z = new BasicHep3Vector( VecOp.mult(-1, surveyResult.getY()).v() );
+                            surveyResult.setY(y);
+                            surveyResult.setZ(z);
+
+                        } else {
+
+                            Hep3Vector x = new BasicHep3Vector( VecOp.mult(-1,surveyResult.getX()).v() );
+                            Hep3Vector y = new BasicHep3Vector( surveyResult.getZ().v() );
+                            Hep3Vector z = new BasicHep3Vector( surveyResult.getY().v() );
+                            surveyResult.setX(x);
+                            surveyResult.setY(y);
+                            surveyResult.setZ(z);
+
+                        }
+                        
+
+                    } else {
+                        
+                        if(debug) System.out.printf("%s: treating it as a L1-3 U-channel (%d)\n", this.getClass().getSimpleName(), layer);
+                        
+                        // Rotate the survey origin into the kinematic mount coordinate frame used here
+                        Rotation r = new Rotation(new Vector3D(1,0,0), Math.PI/2.0);
+                        surveyResult.rotateOrigin(r);
+                        surveyResult.rotateUnitVectors(r);
+                        
+                        if(debug) System.out.printf("%s: UPDATE1 found survey results: \n%s \n", this.getClass().getSimpleName(), surveyResult.toString());
+
+                        
+                        // Swap definition of unit axis to the one used in the U-channels
+                        if(HPSTrackerBuilder.isTopFromName(name)) {
+
+                            Hep3Vector y = new BasicHep3Vector( surveyResult.getZ().v() );
+                            Hep3Vector z = new BasicHep3Vector( VecOp.mult(-1, surveyResult.getY()).v() );
+                            surveyResult.setY(y);
+                            surveyResult.setZ(z);
+
+                        } else {
+
+                            Hep3Vector y = new BasicHep3Vector( surveyResult.getZ().v() );
+                            Hep3Vector z = new BasicHep3Vector( surveyResult.getY().v() );
+                            Hep3Vector x = new BasicHep3Vector( VecOp.mult(-1,surveyResult.getX()).v() );
+                            surveyResult.setX(x);
+                            surveyResult.setY(y);
+                            surveyResult.setZ(z);
+
+                        }
+                        
+                    }
+
+
                     
                     
                 } else {
@@ -216,6 +315,10 @@
                     throw new RuntimeException("I don't think there is a surveyresult defined for this type from " + name);
                     
                 }
+                
+                if(debug) System.out.printf("%s:  survey results after corrections: \n%s \n", this.getClass().getSimpleName(), surveyResult.toString());
+
+                
                 
                 // Need to go through the reference/ghost geometries if they exist
                 

Modified: java/trunk/detector-model/src/test/resources/org/lcsim/geometry/subdetector/HPSTracker2014v1Survey.xml
 =============================================================================
--- java/trunk/detector-model/src/test/resources/org/lcsim/geometry/subdetector/HPSTracker2014v1Survey.xml	(original)
+++ java/trunk/detector-model/src/test/resources/org/lcsim/geometry/subdetector/HPSTracker2014v1Survey.xml	Wed Jun 24 16:15:02 2015
@@ -57,56 +57,46 @@
 
         <SurveyVolumes>
  
-  <!-- Module support surface survey  -->
- <SurveyVolume name="support_bottom_L46" desc="B46 ball basis in box fiducial frame:">
-    <origin x="-5.9779" y="-8.4112" z="789.6352"/>
-    <unitvec name="X" x="9.9955e-01" y="-7.7349e-05" z="-3.0082e-02"/>
-    <unitvec name="Y" x="7.6453e-05" y="1.0000e+00" z="-3.0945e-05"/>
-    <unitvec name="Z" x="3.0082e-02" y="2.8631e-05" z="9.9955e-01"/>
-</SurveyVolume>
-
-<SurveyVolume name="support_top_L46" desc="T46 ball basis in box fiducial frame:">
-    <origin x="-6.3106" y="8.462" z="773.7906"/>
-    <unitvec name="X" x="9.9954e-01" y="7.3687e-05" z="-3.0209e-02"/>
-    <unitvec name="Y" x="-7.2695e-05" y="1.0000e+00" z="3.3946e-05"/>
-    <unitvec name="Z" x="3.0209e-02" y="-3.1734e-05" z="9.9954e-01"/>
-</SurveyVolume>
-
-<!-- 
-<SurveyVolume name="" desc="B13 ball basis in pivot frame:">
-    <origin x="0." y="59.9476" z="-304.9173"/>
-    <unitvec name="X" x="1." y="0." z="0."/>
-    <unitvec name="Y" x="0." y="1." z="0."/>
-    <unitvec name="Z" x="0." y="0." z="1."/>
-</SurveyVolume>
-
-<SurveyVolume name="" desc="B13 pivot basis in box frame:">
-    <origin x="-37.3429" y="-68.3632" z="695.2994"/>
-    <unitvec name="X" x="9.9954e-01" y="1.3427e-04" z="-3.0350e-02"/>
-    <unitvec name="Y" x="-1.3440e-04" y="1.0000e+00" z="-2.1271e-06"/>
-    <unitvec name="Z" x="3.0350e-02" y="6.2051e-06" z="9.9954e-01"/>
-</SurveyVolume>
-
-<SurveyVolume name="" desc="T13 ball basis in pivot frame:">
-    <origin x="0." y="-50.9272" z="-319.7481"/>
-    <unitvec name="X" x="1." y="0." z="0."/>
-    <unitvec name="Y" x="0." y="1." z="0."/>
-    <unitvec name="Z" x="0." y="0." z="1."/>
-</SurveyVolume>
-
-<SurveyVolume name="" desc="T13 pivot basis in box frame:">
-    <origin x="-36.9837" y="59.4777" z="694.2924"/>
-    <unitvec name="X" x="9.9952e-01" y="4.2882e-05" z="-3.1132e-02"/>
-    <unitvec name="Y" x="-5.2348e-05" y="1.0000e+00" z="-3.0325e-04"/>
-    <unitvec name="Z" x="3.1132e-02" y="3.0473e-04" z="9.9952e-01"/>
-</SurveyVolume>
--->
- 
- 
- 
- 
- 
- 
+                 <!-- U-channel in Svt box survey survey  -->
+                <SurveyVolume name="support_bottom_L46" desc="B46 ball basis in box fiducial frame:">
+                    <origin x="-5.9779" y="-8.4112" z="789.6352"/>
+                    <unitvec name="X" x="9.9955e-01" y="-7.7349e-05" z="-3.0082e-02"/>
+                    <unitvec name="Y" x="7.6453e-05" y="1.0000e+00" z="-3.0945e-05"/>
+                    <unitvec name="Z" x="3.0082e-02" y="2.8631e-05" z="9.9955e-01"/>
+                </SurveyVolume>
+                <SurveyVolume name="support_top_L46" desc="T46 ball basis in box fiducial frame:">
+                    <origin x="-6.3106" y="8.462" z="773.7906"/>
+                    <unitvec name="X" x="9.9954e-01" y="7.3687e-05" z="-3.0209e-02"/>
+                    <unitvec name="Y" x="-7.2695e-05" y="1.0000e+00" z="3.3946e-05"/>
+                    <unitvec name="Z" x="3.0209e-02" y="-3.1734e-05" z="9.9954e-01"/>
+                </SurveyVolume>
+                <SurveyVolume name="support_bottom_L13" desc="B13 ball basis in pivot frame:">
+                    <origin x="0." y="59.9476" z="-304.9173"/>
+                    <unitvec name="X" x="1." y="0." z="0."/>
+                    <unitvec name="Y" x="0." y="1." z="0."/>
+                    <unitvec name="Z" x="0." y="0." z="1."/>
+                </SurveyVolume>
+                <SurveyVolume name="c_support_kin_L13b" desc="B13 pivot basis in box frame:">
+                    <origin x="-37.3429" y="-68.3632" z="695.2994"/>
+                    <unitvec name="X" x="9.9954e-01" y="1.3427e-04" z="-3.0350e-02"/>
+                    <unitvec name="Y" x="-1.3440e-04" y="1.0000e+00" z="-2.1271e-06"/>
+                    <unitvec name="Z" x="3.0350e-02" y="6.2051e-06" z="9.9954e-01"/>
+                </SurveyVolume>
+                <SurveyVolume name="support_top_L13" desc="T13 ball basis in pivot frame:">
+                    <origin x="0." y="-50.9272" z="-319.7481"/>
+                    <unitvec name="X" x="1." y="0." z="0."/>
+                    <unitvec name="Y" x="0." y="1." z="0."/>
+                    <unitvec name="Z" x="0." y="0." z="1."/>
+                </SurveyVolume>
+                <SurveyVolume name="c_support_kin_L13t" desc="T13 pivot basis in box frame:">
+                    <origin x="-36.9837" y="59.4777" z="694.2924"/>
+                    <unitvec name="X" x="9.9952e-01" y="4.2882e-05" z="-3.1132e-02"/>
+                    <unitvec name="Y" x="-5.2348e-05" y="1.0000e+00" z="-3.0325e-04"/>
+                    <unitvec name="Z" x="3.1132e-02" y="3.0473e-04" z="9.9952e-01"/>
+                </SurveyVolume>
+
+
+
  
                 <!-- Module support surface survey  -->
                 <!--