Author: phansson
Date: Thu Nov 6 17:24:26 2014
New Revision: 3414
Log:
Add 1st version of chamber, svt box, L1-3 uchannel and L1-3 modules.
Modified:
projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact/DetectorConverter.java
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/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/HPSTrackerGeometryDefinition.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/util/TransformationUtils.java
projects/lcsim/trunk/detector-framework/src/test/resources/org/lcsim/geometry/subdetector/HPSTracker2014.xml
Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact/DetectorConverter.java
=============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact/DetectorConverter.java (original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact/DetectorConverter.java Thu Nov 6 17:24:26 2014
@@ -115,6 +115,7 @@
addSubdetectorConverter(new HPSEcal3Converter());
addSubdetectorConverter(new HPSMuonCalorimeterConverter());
addSubdetectorConverter(new HPSTestRunTracker2014Converter());
+ //addSubdetectorConverter(new HPSTracker2014Converter());
// Support structures.
addSubdetectorConverter(new PolyconeSupportConverter());
Modified: 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 (original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/CompactSurveyVolume.java Thu Nov 6 17:24:26 2014
@@ -55,11 +55,11 @@
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");
- }
+// Element eOrigin = eCoord.getChild("origin");
+//
+// if(eOrigin==null) {
+// throw new RuntimeException("no eOrigin for " + getName() + " found in compact file");
+// }
// origin = null;
// try {
Modified: 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 (original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java Thu Nov 6 17:24:26 2014
@@ -3,8 +3,12 @@
*/
package org.lcsim.geometry.compact.converter;
-import java.util.ArrayList;
-
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.VecOp;
+
+import org.apache.commons.math3.geometry.euclidean.threed.Rotation;
+import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
import org.jdom.Element;
@@ -43,28 +47,27 @@
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);
+ PSVacuumChamber chamber = new PSVacuumChamber("chamber", tracking, null);
+ surveyVolumes.add(chamber);
+
+ SvtBox svtBox = new SvtBox("base",chamber, null);
+ surveyVolumes.add(svtBox);
+
+ SvtBoxBasePlate svtBoxBasePlate = new SvtBoxBasePlate("base_plate",svtBox,null);
+ surveyVolumes.add(svtBoxBasePlate);
+
+ SupportRing supportRing = new SupportRing("c_support", svtBox, null, svtBoxBasePlate);
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);
+
+ SupportRingL13BottomKinMount supportRingKinL13Bottom = new SupportRingL13BottomKinMount("c_support_kin_L13b", svtBox, null, supportRing);
+ surveyVolumes.add(supportRingKinL13Bottom);
+
+ UChannelL13Bottom uChannelL13Bottom = new UChannelL13Bottom("support_bottom_L13", svtBox, null, supportRingKinL13Bottom);
surveyVolumes.add(uChannelL13Bottom);
- // build the uChannel plate
- AlignmentCorrection alignmentCorrectionUChannelBottomL13Plate = null;
- UChannelL13BottomPlate uChannelL13BottomPlate = new UChannelL13BottomPlate("support_plate_bottom_L13", base , alignmentCorrectionUChannelBottomL13Plate, uChannelL13Bottom, node);
+ UChannelL13BottomPlate uChannelL13BottomPlate = new UChannelL13BottomPlate("support_plate_bottom_L13", uChannelL13Bottom, null);
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");
@@ -119,56 +122,141 @@
}
-
- /**
- * @SurveyVolume volume defining the envelope corresponding to inner volume of PS magnet system.
- * It is referenced to the tracking coordinate system.
+ /**
+ * @SurveyVolume volume defining the pair spectrometer (PS) vacuum chamber
+ * Reference: tracking volume coordinate system
+ * Origin: same as reference
+ * Orientation: same as reference
*
* @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);
+ public static class PSVacuumChamber extends SurveyVolume {
+ public static final double height = PS_vac_box_inner_height;
+ public static final double width = PS_vac_box_inner_width;
+ public static final double length = PS_vac_box_inner_length;
+
+
+
+ public PSVacuumChamber(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection) {
+ super(name, mother, alignmentCorrection);
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 setCenter() {
+ setCenter(0, 0, 0);
}
protected void setBoxDim() {
setBoxDim(width,length,height);
}
- }
-
+ protected void setPos() {
+ ballPos = new BasicHep3Vector(0, 0, 500.0); //TODO fix this random offset
+ veePos = new BasicHep3Vector(ballPos.x() + 1, ballPos.y(), ballPos.z());
+ flatPos = new BasicHep3Vector(ballPos.x(), ballPos.y(), ballPos.z()-1);
+
+ }
+ }
+
+
+ /**
+ * @SurveyVolume volume defining the SVT box envelope
+ * Reference: PS vacuum chamber coordinate system.
+ * Origin: intersection of midplanes vertically and horizontally
+ * Orientation: u - width towards positron side, v - length towards upstream
+ *
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+ public static class SvtBox extends SurveyVolume {
+ public static final double height = 6.740*inch;
+ public static final double width = SvtBoxBasePlate.width;
+ public static final double length = SvtBoxBasePlate.length;
+
+
+
+ public SvtBox(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection) {
+ super(name, mother, alignmentCorrection);
+ init();
+ }
+
+ protected void setCenter() {
+ setCenter(0,0,0);
+ }
+ protected void setBoxDim() {
+ setBoxDim(width,length,height);
+ }
+ protected void setPos() {
+
+ ballPos = new BasicHep3Vector(0, 0, 0);
+ veePos = new BasicHep3Vector(ballPos.x()+1, ballPos.y(), ballPos.z());
+ flatPos = new BasicHep3Vector(ballPos.x(), ballPos.y()+1, ballPos.z());
+
+ }
+ }
+
+
+ /**
+ * @SurveyVolume volume defining the base plate of the SVT box.
+ * Reference: @SvtBox coordinate system.
+ * Origin: surface of base plate intersection with center of hole for adjustment screw on positron side
+ * Orientation: same as reference
+ *
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+ public static class SvtBoxBasePlate extends SurveyVolume {
+ public static final double length = 50.5*inch;
+ public static final double width = 16.0*inch;
+ public static final double height = 0.25*inch;
+ public static final double kin_mount_to_edge_of_plate_x = (8.0-5.0)*inch;
+ public static final double kin_mount_to_edge_of_plate_y = 0.375*inch;
+ public static final double adj_screw_height = 0.13*inch; // amount screw sticks out from plate
+ public static final double adj_screw_width = 0.13*inch; // amount screw sticks out on side
+
+
+ public SvtBoxBasePlate(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection) {
+ super(name, mother, alignmentCorrection);
+ setMaterial("Aluminum");
+ init();
+ }
+
+ protected void setCenter() {
+ final double x = -kin_mount_to_edge_of_plate_x + SvtBoxBasePlate.width/2.0;
+ final double y = -kin_mount_to_edge_of_plate_y + SvtBoxBasePlate.length/2.0;
+ final double z = -SvtBoxBasePlate.height/2.0;
+ setCenter(new BasicHep3Vector(x, y, z));
+ }
+ protected void setBoxDim() {
+ setBoxDim(width, length, height);
+ }
+ protected void setPos() {
+ final double x = -width/2.0 + kin_mount_to_edge_of_plate_x;
+ final double y = -length/2.0 + kin_mount_to_edge_of_plate_y;
+ final double z = -SvtBox.height/2.0 + height;
+ ballPos = new BasicHep3Vector(x, y, z);
+ veePos = new BasicHep3Vector(ballPos.x()+1, ballPos.y(), ballPos.z());
+ flatPos = new BasicHep3Vector(ballPos.x(), ballPos.y()+1, ballPos.z());
+ }
+
+ }
/**
* @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);
+ * Reference: tracker envelope coordinate system.
+ * Origin: pin position of support ring (it's on the electron side)
+ * Orientation: hole position is vee position (it's on the positron side).
+ *
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+ public static class SupportRing extends SurveyVolume {
+ private static final double plate_thickness = 0.25*inch; // TODO not sure if this is correct
+
+ public SupportRing(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
init();
}
protected void setCenter() {
@@ -177,73 +265,222 @@
protected void setBoxDim() {
// do nothing
}
+ protected void setPos() {
+
+ //if(debug)
+ //System.out.printf("%s: setPos\n", this.getClass().getSimpleName());
+
+ final double ball_pos_x = -SvtBoxBasePlate.kin_mount_to_edge_of_plate_x + SvtBoxBasePlate.width/2.0 - 6.622*inch;
+ final double ball_pos_y = -SvtBoxBasePlate.kin_mount_to_edge_of_plate_y + SvtBoxBasePlate.length -28.531*inch;
+ final double ball_pos_z = 0.0;
+
+
+ final double vee_pos_x = -SvtBoxBasePlate.kin_mount_to_edge_of_plate_x + SvtBoxBasePlate.width/2.0 + 6.622*inch;
+ final double vee_pos_y = -SvtBoxBasePlate.kin_mount_to_edge_of_plate_y + SvtBoxBasePlate.length - 28.127*inch;
+ final double vee_pos_z = 0.0;
+
+
+ ballPos = new BasicHep3Vector(ball_pos_x, ball_pos_y, ball_pos_z);
+ veePos = new BasicHep3Vector(vee_pos_x, vee_pos_y, vee_pos_z);
+ flatPos = new BasicHep3Vector(0,0,0);
+ //if(debug) {
+ //System.out.printf("%s: before setting flat:\n", this.getClass().getSimpleName());
+ //printSurveyPos();
+ //}
+ Hep3Vector uPrime = VecOp.unit(VecOp.sub(veePos, ballPos));
+ //TransformationUtils.getCardanAngles(new BasicHep3Vector(1,0,0), uPrime, u_prime, v_prime)
+ Rotation r = new Rotation(new Vector3D(1,0,0),new Vector3D(0,0,1), new Vector3D(uPrime.v()), new Vector3D(0,0,1));
+ Hep3Vector vPrime = new BasicHep3Vector(r.applyTo(new Vector3D(0, 1, 0)).toArray());
+ flatPos = VecOp.add(ballPos, vPrime);
+ //if(debug) {
+ //System.out.printf("%s: after setting flat:\n", this.getClass().getSimpleName());
+ //printSurveyPos();
+ //}
+
+
+ }
}
- /**
- * @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 {
+
+
+ /**
+ * @SurveyVolume volume defining the coordinate system from the kinematic mount positions
+ * Reference: @SupportRing coordinate system
+ * Origin: cone mount (it's on the electron side)
+ * Orientation: slot mount is vee position.
+ *
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+ public static class SupportRingL13BottomKinMount extends SurveyVolume {
+
+ public static final double kin_mount_offset_vertically = 0.113*inch; // TODO fix this offset
+
+ public SupportRingL13BottomKinMount(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
+ init();
+ }
+ protected void setCenter() {
+ setCenter(null); //dummy
+ }
+ protected void setBoxDim() {
+ // do nothing
+ }
+ protected void setPos() {
+
+ //if(debug)
+ //System.out.printf("%s: setPos\n", this.getClass().getSimpleName());
+
+ final double ball_pos_x = (7.0 - 5.444) *inch;
+ final double ball_pos_y = 0.574*inch;
+ final double ball_pos_z = SupportRing.plate_thickness + 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);
+ }
+
+ }
+
+
+
+ /**
+ * @SurveyVolume volume defining the coordinate system of the u-channel
+ * Reference: 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
+ *
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+ public static class UChannelL13Bottom extends SurveyVolume {
public final static double width = UChannelL13BottomPlate.width;
public final static double length = UChannelL13BottomPlate.length;
- public final static double height = 50.0;
+ public final static double height = 2.575*inch;
+ public static final double kin_mount_to_edge_of_plate_x = width/2.0-4.0*inch;
+ public static final double kin_mount_to_edge_of_plate_y = length-15.8*inch;
+ public final static double cone_to_edge_of_plate_y = 12.25*inch;
+ public final static double cone_to_L1_hole_y = cone_to_edge_of_plate_y - kin_mount_to_edge_of_plate_y;
+ public final static double side_plate_cone_y = 2.0*inch;
+
+
+
public UChannelL13Bottom(String name, SurveyVolume m,
AlignmentCorrection alignmentCorrection,
- SurveyVolume ref, Element node2) {
- super(name, m, alignmentCorrection, ref, node2);
+ SurveyVolume ref) {
+ super(name, m, alignmentCorrection, ref);
init();
}
protected void setCenter() {
- //TODO set UChannelL13Bottom position properly
- setCenter(width/2.0, length/2.0, height/2.0);
+ final double x = 0.0;
+ final double y = cone_to_L1_hole_y + kin_mount_to_edge_of_plate_y - length/2.0;
+ final double z = -side_plate_cone_y - UChannelL13BottomPlate.height + height/2.0;
+ setCenter(x,y,z);
}
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;
-
+ protected void setPos() {
+ //locate cone from pin hole
+ final double ball_pos_x = 4*inch;
+ final double ball_pos_y = (4.175 + 2*3.937) * inch;
+ final double ball_pos_z = side_plate_cone_y; // TODO need to find distance to surface from kin mount
+
+ ballPos = new BasicHep3Vector(ball_pos_x, ball_pos_y, ball_pos_z);
+ veePos = new BasicHep3Vector(ballPos.x()-1, ballPos.y(), ballPos.z());
+ flatPos = new BasicHep3Vector(ballPos.x(), ballPos.y()-1, ballPos.z());
+ }
+ }
+
+
+
+ public abstract static class UChannelL13Plate extends SurveyVolume {
+ public final static double pocket_depth_L1 = 0.025;
+ public final static double pocket_depth_L2 = pocket_depth_L1 + 0.059;
+ public final static double pocket_depth_L3 = pocket_depth_L2 + 0.059;
+ public final static double hole_to_hole_x =3.937*inch;
+
+ public UChannelL13Plate(String name, SurveyVolume m,
+ AlignmentCorrection alignmentCorrection) {
+ super(name, m, alignmentCorrection);
+ }
+
+ /**
+ * Get pocket depth for this plate
+ * @param layer
+ * @return pocket depth
+ */
+ public static double getPocketDepth(int layer) {
+ if(layer==1) return pocket_depth_L1;
+ else if(layer==2) return pocket_depth_L2;
+ else if(layer==3) return pocket_depth_L3;
+ else {
+ throw new RuntimeException("Trying to create a L1-3 module with invalid layer nr: " + layer);
+ }
+ }
+
+ }
+
+
+ /**
+ * @SurveyVolume volume defining the coordinate system of the u-channel plate
+ * Reference: @UChannelL13Bottom coordinate system
+ * Origin: same as reference
+ * Orientation: same as reference
+ *
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+ public static class UChannelL13BottomPlate extends UChannelL13Plate {
+ public final static double width = 9.25*inch;
+ public final static double length = 16.0*inch;
+ public final static double height = 0.375*inch;
+
+
public UChannelL13BottomPlate(String name, SurveyVolume m,
- AlignmentCorrection alignmentCorrection,
- SurveyVolume ref, Element node2) {
- super(name, m, alignmentCorrection, ref, node2);
+ AlignmentCorrection alignmentCorrection) {
+ super(name, m, alignmentCorrection);
+ setMaterial("Aluminum");
init();
}
protected void setCenter() {
- //TODO set UChannelL13Bottom position properly
- setCenter(0, 0, 0);
+ final double x = 0.0;
+ final double y = UChannelL13Bottom.cone_to_edge_of_plate_y - length/2.0;
+ final double z = -UChannelL13Bottom.side_plate_cone_y - height/2.0;
+ setCenter(x,y,z);
}
protected void setBoxDim() {
setBoxDim(width,length,height);
}
-
- }
-
-
- public static abstract class BaseModule extends CompactSurveyVolume {
+ protected void setPos() {
+ ballPos = new BasicHep3Vector(0, 0, 0);
+ veePos = new BasicHep3Vector(1, 0, 0);
+ flatPos = new BasicHep3Vector(0, 1, 0);
+ }
+
+
+
+ }
+
+ public static abstract class BaseModule extends SurveyVolume {
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);
+ public BaseModule(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
setLayer(getLayerFromVolumeName(name));
setHalf(getHalfFromName(name));
isValid();
@@ -276,29 +513,104 @@
}
-
-
-
- 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);
+
+ /**
+ * @SurveyVolume volume defining the coordinate system of module L1-3
+ * Reference: @UChannelL13Bottom coordinate system
+ * Origin: hole position on mounting surface (sensor side)
+ * Orientation: u - is normal to the surface, v - points along module away from hybrid side.
+ *
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+ public abstract static class ModuleL13 extends BaseModule {
+ public static final double hole_to_center_of_plate_x = 3.75*inch;
+ private static final double tension_lever_y = 2.5*inch;
+ public static final double length = 8.0*inch;
+ public static final double height = 1.0*inch;
+ public static final double width = tension_lever_y;//TODO find the right length to encapsualte L1-3 module
+ public static final double hole_to_end_of_module_x = 7.750*inch;
+
+ public ModuleL13(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
+
+ }
+ protected void setCenter() {
+ //TODO the position of this module is not correct.
+ setCenter(width/2.0, -hole_to_center_of_plate_x, height/2.0);
+ }
+ protected void setBoxDim() {
+ setBoxDim(width, length, height);
+ }
+ protected void setPos() {
+ ballPos = getHole();
+ veePos = new BasicHep3Vector(ballPos.x(), ballPos.y(), ballPos.z()+1.0);
+ flatPos = new BasicHep3Vector(ballPos.x()-1, ballPos.y(), ballPos.z());
+ }
+ protected abstract Hep3Vector getHole();
+ }
+
+
+ public static class ModuleL1 extends ModuleL13 {
+
+ public ModuleL1(String name, SurveyVolume mother,
+ AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
init();
}
- protected void setCenter() {
- setCenter(0.0, 0.0, 0.0);
- }
- protected void setBoxDim() {
- setBoxDim(width, length, height);
- }
-
- }
-
-
+ protected Hep3Vector getHole() {
+ //hole position (sensor side)
+ double x = -hole_to_center_of_plate_x;
+ double y = 0.0; // TODO assume that cone and module mount pin hole is at same y. Check if true.
+ double z = -UChannelL13Bottom.side_plate_cone_y - UChannelL13Plate.pocket_depth_L1;
+ return new BasicHep3Vector(x, y, z);
+ }
+
+ }
+
+
+ public static class ModuleL2 extends ModuleL13 {
+
+ public ModuleL2(String name, SurveyVolume mother,
+ AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
+ init();
+ }
+ protected Hep3Vector getHole() {
+ //hole position (sensor side)
+ double x = -hole_to_center_of_plate_x;
+ double y = UChannelL13BottomPlate.hole_to_hole_x;
+ double z = -UChannelL13Bottom.side_plate_cone_y - UChannelL13Plate.pocket_depth_L2;
+ return new BasicHep3Vector(x, y, z);
+ }
+
+ }
+
+ public static class ModuleL3 extends ModuleL13 {
+
+ public ModuleL3(String name, SurveyVolume mother,
+ AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
+ init();
+ }
+ protected Hep3Vector getHole() {
+ //hole position (sensor side)
+ double x = -hole_to_center_of_plate_x;
+ double y = 2*UChannelL13BottomPlate.hole_to_hole_x;
+ double z = -UChannelL13Bottom.side_plate_cone_y - UChannelL13Plate.pocket_depth_L3;
+ return new BasicHep3Vector(x, y, z);
+ }
+
+ }
+
+
+
+ /**
+ * Bundle volumes into a module.
+ *
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
public static class SVTModuleBundle extends ModuleBundle {
SVTModuleBundle(BaseModule m) {
module = m;
@@ -326,31 +638,32 @@
// 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 mother = getSurveyVolume(SvtBox.class);
final SurveyVolume ref;
AlignmentCorrection alignmentCorrection = null;
if(half == "bottom") {
- mother = getSurveyVolume(TrackerEnvelope.class);
- ref = getSurveyVolume(UChannelL13BottomPlate.class);
+ if(layer < 4) {
+ ref = getSurveyVolume(UChannelL13Bottom.class);
+ } else {
+ throw new UnsupportedOperationException("L4-6 not implemented yet");
+ }
} 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);
-
+ if(layer==1) {
+ module = new ModuleL1(volName, mother, alignmentCorrection, ref);
+ } else if(layer==2) {
+ module = new ModuleL2(volName, mother, alignmentCorrection, ref);
+ } else if(layer==3) {
+ module = new ModuleL3(volName, mother, alignmentCorrection, ref);
} else {
- throw new UnsupportedOperationException("L4-6 not implemented yet");
- //module = new TestRunModuleL45(volName, mother, ref, layer, half);
+ throw new UnsupportedOperationException("Layer " + layer + " not implemented yet");
}
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 Thu Nov 6 17:24:26 2014
@@ -1,7 +1,11 @@
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.PSVacuumChamber;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.SupportRing;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.SupportRingL13BottomKinMount;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.SvtBoxBasePlate;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.SvtBox;
import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL13Bottom;
import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL13BottomPlate;
import org.lcsim.geometry.compact.converter.HPSTrackerBuilder.ModuleBundle;
@@ -50,14 +54,30 @@
LCDDSurveyVolume trackingGeometry = new LCDDSurveyVolume(_builder.getSurveyVolume(TrackingVolume.class), worldVolume);
add(trackingGeometry);
- baseSurveyVolume = new LCDDSurveyVolume(_builder.getSurveyVolume(TrackerEnvelope.class), lcdd, trackingGeometry);
+ baseSurveyVolume = new LCDDSurveyVolume(_builder.getSurveyVolume(PSVacuumChamber.class), lcdd, trackingGeometry);
add(baseSurveyVolume);
+
+ LCDDSurveyVolume svtBox = new LCDDSurveyVolume(_builder.getSurveyVolume(SvtBox.class), lcdd, baseSurveyVolume);
+ add(svtBox);
+
+
+ LCDDSurveyVolume svtBoxBasePlate = new LCDDSurveyVolume(_builder.getSurveyVolume(SvtBoxBasePlate.class), lcdd, svtBox);
+ add(svtBoxBasePlate);
+
+
+ // probably not needed?!
+ //LCDDSurveyVolume supportRing = new LCDDGhostSurveyVolume(_builder.getSurveyVolume(SupportRing.class), svtBox);
+ //add(supportRing);
+
+ // probably not needed?!
+ //LCDDSurveyVolume supportRingKinL13b = new LCDDGhostSurveyVolume(_builder.getSurveyVolume(SupportRingL13BottomKinMount.class), svtBox);
+ //add(supportRingKinL13b);
- LCDDSurveyVolume uSupportBottomL13 = new LCDDGhostSurveyVolume(_builder.getSurveyVolume(UChannelL13Bottom.class), baseSurveyVolume);
- add(uSupportBottomL13);
-
- LCDDSurveyVolume uSupportPlateBottomL13 = new LCDDSurveyVolume(_builder.getSurveyVolume(UChannelL13BottomPlate.class), lcdd, baseSurveyVolume);
- add(uSupportPlateBottomL13);
+ LCDDSurveyVolume uChannelL13Bottom = new LCDDSurveyVolume(_builder.getSurveyVolume(UChannelL13Bottom.class),lcdd, svtBox);
+ add(uChannelL13Bottom);
+
+ LCDDSurveyVolume uChannelL13BottomPlate = new LCDDSurveyVolume(_builder.getSurveyVolume(UChannelL13BottomPlate.class), lcdd, uChannelL13Bottom);
+ add(uChannelL13BottomPlate);
// build modules
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 Thu Nov 6 17:24:26 2014
@@ -15,7 +15,7 @@
public abstract class HPSTrackerBuilder {
private boolean debug = true;
- public List<ModuleBundle> modules;
+ public List<ModuleBundle> modules = new ArrayList<ModuleBundle>();
protected List<SurveyVolume> surveyVolumes = new ArrayList<SurveyVolume>();
protected Element node;
protected List<MilleParameter> milleparameters = new ArrayList<MilleParameter>();
@@ -146,7 +146,6 @@
/**
* Bundle volumes into a module.
- * TODO If the geometry definition has access to daughter information I could avoid this?
*
* @author Per Hansson Adrian <[log in to unmask]>
*
Modified: 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 (original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerGeometryDefinition.java Thu Nov 6 17:24:26 2014
@@ -38,6 +38,11 @@
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;
+ protected static final double PS_vac_box_inner_width = 16.38*inch;
+ // Inner length of the vacuum box is defined here until the horizontal fan-out.
+ // It's a little random as I'm actually not creating a volume for it here and thus
+ // it just needs to capture the SVT box.
+ protected static final double PS_vac_box_inner_length = 53.4*inch;
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 Thu Nov 6 17:24:26 2014
@@ -147,6 +147,8 @@
Transform3D envelopeToSupportTransform = new Transform3D(translation, rotation);
return envelopeToSupportTransform;
}
-
+
+
+
}
Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/util/TransformationUtils.java
=============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/util/TransformationUtils.java (original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/util/TransformationUtils.java Thu Nov 6 17:24:26 2014
@@ -172,6 +172,7 @@
return point_rot;
}
+
}
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 Thu Nov 6 17:24:26 2014
@@ -55,12 +55,21 @@
<detectors>
<detector id="1" name="Tracker" type="HPSTracker2014" readout="TrackerHits">
<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"/>
+ <SurveyVolume name="base">
+ <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="0.0" z="-1.0"/>
+ </SurveyPos>
+ </SurveyVolume>
+ <SurveyVolume name="base_plate">
+ <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>
+
<!--
<SurveyCoord>
<origin x="" y="" z=""/>
@@ -69,7 +78,6 @@
<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"/>
########################################################################
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
|