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 -->
<!--
|