projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/lcdd
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014.java 2014-07-10 18:47:19 UTC (rev 3175)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014.java 2014-07-12 01:27:46 UTC (rev 3176)
@@ -44,117 +44,128 @@
private boolean _debug = true;
private final boolean buildBeamPlane = true;
+
+ private static HPSTestRunTracker2014GeomDef.TrackingBase tracking;
+ private static HPSTestRunTracker2014GeomDef.Base base;
+ private static HPSTestRunTracker2014GeomDef.BasePlate basePlate;
+ private static HPSTestRunTracker2014GeomDef.SupportBottom supportBottom;
+ private static HPSTestRunTracker2014GeomDef.SupportPlateBottom supportPlateBottom;
+ private static HPSTestRunTracker2014GeomDef.SupportTop supportTop;
+ private static HPSTestRunTracker2014GeomDef.SupportPlateTop supportPlateTop;
+
+
+
+
//General
public final double inch = 25.4;
- // Global position references
- private final double target_pos_wrt_base_plate_x = 162.3; //from Marco's 3D model
- private final double target_pos_wrt_base_plate_y = 80.55; //from Tim's sketchup //68.75; //from Marco's 3D model
- private final double target_pos_wrt_base_plate_z = 926.59; //from Marco's 3D model
+ //private final double target_pos_wrt_base_plate_x = 162.3; //from Marco's 3D model
+ //private final double target_pos_wrt_base_plate_y = 80.55; //from Tim's sketchup //68.75; //from Marco's 3D model
+ //private final double target_pos_wrt_base_plate_z = 926.59; //from Marco's 3D model
// Base plate references
- private final double base_plate_thickness = 0.25*inch;
- private final double base_plate_width = 385.00;
- private final double base_plate_length = 1216.00;
- private final double base_plate_offset_height = 2.0; //from Marco's 3D model
- private final double PS_vac_box_inner_height = 7.0*inch;
+// private final double base_plate_thickness = 0.25*inch;
+// private final double base_plate_width = 385.00;
+// private final double base_plate_length = 1216.00;
+// private final double base_plate_offset_height = 2.0; //from Marco's 3D model
+// private final double PS_vac_box_inner_height = 7.0*inch;
// 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
- private final double base_height = PS_vac_box_inner_height - base_plate_offset_height;
- private final double base_width = base_plate_width;
- private final double base_length = base_plate_length;
+ //private final double base_height = PS_vac_box_inner_height - HPSTestRunTracker2014GeomDef.BasePlate.base_plate_offset_height;
+ //private final double base_width = HPSTestRunTracker2014GeomDef.BasePlate.base_plate_width;
+ //private final double base_length = HPSTestRunTracker2014GeomDef.BasePlate.base_plate_length;
private final double beamPlaneThickness = 0.00000001;
// c-support references
// pin position on base plate surface
- double ball_pos_csup_pin_bottom_x = 51.15;
- double ball_pos_csup_pin_bottom_y = 115.02;
- double ball_pos_csup_pin_bottom_z = 0.0;
- double vee_pos_csup_pin_bottom_x = 271.05;
- double vee_pos_csup_pin_bottom_y = 121.62;
- double vee_pos_csup_pin_bottom_z = 0.0;
+// double ball_pos_csup_pin_bottom_x = 51.15;
+// double ball_pos_csup_pin_bottom_y = 115.02;
+// double ball_pos_csup_pin_bottom_z = 0.0;
+// double vee_pos_csup_pin_bottom_x = 271.05;
+// double vee_pos_csup_pin_bottom_y = 121.62;
+// double vee_pos_csup_pin_bottom_z = 0.0;
// point on axis of rotation on the inside of the c-support frame where the insert get's attached
// this is referenced to the pin position coord system above
- private final double ball_pos_csup_bearings_bottom_x = 240.0 - 265.0 + 14.0;
- private final double ball_pos_csup_bearings_bottom_y = (-6.0 + 22.0);
- private final double ball_pos_csup_bearings_bottom_z = 14.7;
- private final double vee_pos_csup_bearings_bottom_x = 240.0- 129.0;
- private final double vee_pos_csup_bearings_bottom_y = (-6.0 + 22.0);
- private final double vee_pos_csup_bearings_bottom_z = 14.7;
- // Top only needs a vertical offset to be specified
- private final double ball_pos_csup_bearings_top_z = 146.4;
-
+// private final double ball_pos_csup_bearings_bottom_x = 240.0 - 265.0 + 14.0;
+// private final double ball_pos_csup_bearings_bottom_y = (-6.0 + 22.0);
+// private final double ball_pos_csup_bearings_bottom_z = 14.7;
+// private final double vee_pos_csup_bearings_bottom_x = 240.0- 129.0;
+// private final double vee_pos_csup_bearings_bottom_y = (-6.0 + 22.0);
+// private final double vee_pos_csup_bearings_bottom_z = 14.7;
+// // Top only needs a vertical offset to be specified
+// private final double ball_pos_csup_bearings_top_z = 146.4;
+//
// support plate references
// use a settable rotation to effectively determine the flat and therefore the tilt of the support
// 0.000723559 should put L1 sensor on beam plane
- private final double support_plate_bottom_tilt_angle = 0.0; //0.000723559;
- private final double support_plate_top_tilt_angle = 0.0; //-0.000723559;
- private final double support_plate_bottom_height = 12.7;
- private final double support_plate_bottom_length = 736.1;
- private final double support_plate_bottom_width = 120.0;
- private final double support_plate_top_length = support_plate_bottom_length;
- private final double support_plate_top_width = support_plate_bottom_width;
- private final double support_plate_pocket_depth = 6.65; // Tim's sketchup, drawing says 6.66mm?
- private final double pedestal_height_L1 = 11.00;
- private final double pedestal_height_L2 = 9.50;
- private final double pedestal_height_L3 = 8.00;
- private final double pedestal_height_L4 = 10.00;
- private final double pedestal_height_L5 = 7.00;
+// private final double support_plate_bottom_tilt_angle = 0.0; //0.000723559;
+// private final double support_plate_top_tilt_angle = 0.0; //-0.000723559;
+// private final double support_plate_bottom_height = 12.7;
+// private final double support_plate_bottom_length = 736.1;
+// private final double support_plate_bottom_width = 120.0;
+// private final double support_plate_top_length = support_plate_bottom_length;
+// private final double support_plate_top_width = support_plate_bottom_width;
+// private final double support_plate_pocket_depth = 6.65; // Tim's sketchup, drawing says 6.66mm?
+// private final double pedestal_height_L1 = 11.00;
+// private final double pedestal_height_L2 = 9.50;
+// private final double pedestal_height_L3 = 8.00;
+// private final double pedestal_height_L4 = 10.00;
+// private final double pedestal_height_L5 = 7.00;
//these are for the box surrounding the whole support including modules
- private final double support_bottom_length = support_plate_bottom_length;
- private final double support_bottom_width = (25.0-5.0) + this.module_box_L13_length;
- private final double support_bottom_height = support_plate_bottom_height - support_plate_pocket_depth + this.module_box_L13_width + this.pedestal_height_L1;
- private final double support_top_length = support_bottom_length;
- private final double support_top_width = support_bottom_width;
- private final double support_top_height = support_bottom_height;
+// private final double support_bottom_length = support_plate_bottom_length;
+// private final double support_bottom_width = (25.0-5.0) + HPSTestRunTracker2014GeomDef.Module.module_box_L13_length;
+// private final double support_bottom_height = support_plate_bottom_height - support_plate_pocket_depth + HPSTestRunTracker2014GeomDef.Module.module_box_L13_width + this.pedestal_height_L1;
+// private final double support_top_length = support_bottom_length;
+// private final double support_top_width = support_bottom_width;
+// private final double support_top_height = support_bottom_height;
// module references
- private final double module_box_L13_length = 205.2; // includes lexan spacer and cold block
- private final double module_box_L13_height = 12.5; // includes screws height
- private final double module_box_L13_width = 71.3 - 13.0; // height from cold block to encapsulate the whole module
- private final double module_box_L45_length = 205.2; // includes lexan spacer and cold block
- private final double module_box_L45_height = 12.5; // includes screws height
- private final double module_box_L45_width = 65.3-12.0;
+// private final double module_box_L13_length = 205.2; // includes lexan spacer and cold block
+// private final double module_box_L13_height = 12.5; // includes screws height
+// private final double module_box_L13_width = 71.3 - 13.0; // height from cold block to encapsulate the whole module
+// private final double module_box_L45_length = 205.2; // includes lexan spacer and cold block
+// private final double module_box_L45_height = 12.5; // includes screws height
+// private final double module_box_L45_width = 65.3-12.0;
// survey positions for each module is the pockets:
// ball: hole
// vee: slot
// flat: middle of pocket defining local w out of the pocket vertically
// bottom
- private final Hep3Vector ball_pos_module1_support_plate_bottom_local = new BasicHep3Vector(25.0, 661.1, pedestal_height_L1-support_plate_pocket_depth);
- private final Hep3Vector vee_pos_module1_support_plate_bottom_local = new BasicHep3Vector(95.0, 661.1, pedestal_height_L1-support_plate_pocket_depth);
- private final Hep3Vector flat_pos_module1_support_plate_bottom_local = new BasicHep3Vector(60.0, 667.10, pedestal_height_L1-support_plate_pocket_depth);
- private final Hep3Vector ball_pos_module2_support_plate_bottom_local = new BasicHep3Vector(25.0, 561.1, pedestal_height_L2-support_plate_pocket_depth);
- private final Hep3Vector vee_pos_module2_support_plate_bottom_local = new BasicHep3Vector(95.0, 561.1, pedestal_height_L2-support_plate_pocket_depth);
- private final Hep3Vector flat_pos_module2_support_plate_bottom_local = new BasicHep3Vector(60.0, 567.10, pedestal_height_L2-support_plate_pocket_depth);
- private final Hep3Vector ball_pos_module3_support_plate_bottom_local = new BasicHep3Vector(25.0, 461.1, pedestal_height_L3-support_plate_pocket_depth);
- private final Hep3Vector vee_pos_module3_support_plate_bottom_local = new BasicHep3Vector(95.0, 461.1, pedestal_height_L3-support_plate_pocket_depth);
- private final Hep3Vector flat_pos_module3_support_plate_bottom_local = new BasicHep3Vector(60.0, 467.10, pedestal_height_L3-support_plate_pocket_depth);
- private final Hep3Vector ball_pos_module4_support_plate_bottom_local = new BasicHep3Vector(25.0, 261.1, pedestal_height_L4-support_plate_pocket_depth);
- private final Hep3Vector vee_pos_module4_support_plate_bottom_local = new BasicHep3Vector(95.0, 261.1, pedestal_height_L4-support_plate_pocket_depth);
- private final Hep3Vector flat_pos_module4_support_plate_bottom_local = new BasicHep3Vector(60.0, 267.10, pedestal_height_L4-support_plate_pocket_depth);
- private final Hep3Vector ball_pos_module5_support_plate_bottom_local = new BasicHep3Vector(25.0, 61.1, pedestal_height_L5-support_plate_pocket_depth);
- private final Hep3Vector vee_pos_module5_support_plate_bottom_local = new BasicHep3Vector(95.0, 61.1, pedestal_height_L5-support_plate_pocket_depth);
- private final Hep3Vector flat_pos_module5_support_plate_bottom_local = new BasicHep3Vector(60.0, 67.10, pedestal_height_L5-support_plate_pocket_depth);
+ private final Hep3Vector ball_pos_module1_support_plate_bottom_local = new BasicHep3Vector(25.0, 661.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L1-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ private final Hep3Vector vee_pos_module1_support_plate_bottom_local = new BasicHep3Vector(95.0, 661.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L1-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ private final Hep3Vector flat_pos_module1_support_plate_bottom_local = new BasicHep3Vector(60.0, 667.10, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L1-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ private final Hep3Vector ball_pos_module2_support_plate_bottom_local = new BasicHep3Vector(25.0, 561.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L2-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ private final Hep3Vector vee_pos_module2_support_plate_bottom_local = new BasicHep3Vector(95.0, 561.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L2-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ private final Hep3Vector flat_pos_module2_support_plate_bottom_local = new BasicHep3Vector(60.0, 567.10, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L2-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ private final Hep3Vector ball_pos_module3_support_plate_bottom_local = new BasicHep3Vector(25.0, 461.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L3-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ private final Hep3Vector vee_pos_module3_support_plate_bottom_local = new BasicHep3Vector(95.0, 461.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L3-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ private final Hep3Vector flat_pos_module3_support_plate_bottom_local = new BasicHep3Vector(60.0, 467.10, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L3-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ private final Hep3Vector ball_pos_module4_support_plate_bottom_local = new BasicHep3Vector(25.0, 261.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L4-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ private final Hep3Vector vee_pos_module4_support_plate_bottom_local = new BasicHep3Vector(95.0, 261.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L4-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ private final Hep3Vector flat_pos_module4_support_plate_bottom_local = new BasicHep3Vector(60.0, 267.10, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L4-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ private final Hep3Vector ball_pos_module5_support_plate_bottom_local = new BasicHep3Vector(25.0, 61.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L5-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ private final Hep3Vector vee_pos_module5_support_plate_bottom_local = new BasicHep3Vector(95.0, 61.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L5-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ private final Hep3Vector flat_pos_module5_support_plate_bottom_local = new BasicHep3Vector(60.0, 67.10, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L5-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
// top
// top has a fixed offset of 15mm along plate on module pocket positions w.r.t. bottom
// top local coordinates is rotation pi around u-vec so need to adjust pocket depth coordinate
- private final Hep3Vector ball_pos_module1_support_plate_top_local = new BasicHep3Vector(25.0, 676.1, -1.0 * (pedestal_height_L1-support_plate_pocket_depth));
- private final Hep3Vector vee_pos_module1_support_plate_top_local = new BasicHep3Vector(95.0, 676.1, -1.0 * (pedestal_height_L1-support_plate_pocket_depth));
- private final Hep3Vector flat_pos_module1_support_plate_top_local = new BasicHep3Vector(60.0, 670.1, -1.0 * (pedestal_height_L1-support_plate_pocket_depth));
- private final Hep3Vector ball_pos_module2_support_plate_top_local = new BasicHep3Vector(25.0, 576.1, -1.0 * (pedestal_height_L2-support_plate_pocket_depth));
- private final Hep3Vector vee_pos_module2_support_plate_top_local = new BasicHep3Vector(95.0, 576.1, -1.0 * (pedestal_height_L2-support_plate_pocket_depth));
- private final Hep3Vector flat_pos_module2_support_plate_top_local = new BasicHep3Vector(60.0, 570.1, -1.0 * (pedestal_height_L2-support_plate_pocket_depth));
- private final Hep3Vector ball_pos_module3_support_plate_top_local = new BasicHep3Vector(25.0, 476.1, -1.0 * (pedestal_height_L3-support_plate_pocket_depth));
- private final Hep3Vector vee_pos_module3_support_plate_top_local = new BasicHep3Vector(95.0, 476.1, -1.0 * (pedestal_height_L3-support_plate_pocket_depth));
- private final Hep3Vector flat_pos_module3_support_plate_top_local = new BasicHep3Vector(60.0, 470.1, -1.0 * (pedestal_height_L3-support_plate_pocket_depth));
- private final Hep3Vector ball_pos_module4_support_plate_top_local = new BasicHep3Vector(25.0, 276.1, -1.0 * (pedestal_height_L4-support_plate_pocket_depth));
- private final Hep3Vector vee_pos_module4_support_plate_top_local = new BasicHep3Vector(95.0, 276.1, -1.0 * (pedestal_height_L4-support_plate_pocket_depth));
- private final Hep3Vector flat_pos_module4_support_plate_top_local = new BasicHep3Vector(60.0, 270.1, -1.0 * (pedestal_height_L4-support_plate_pocket_depth));
- private final Hep3Vector ball_pos_module5_support_plate_top_local = new BasicHep3Vector(25.0, 76.1, -1.0 * (pedestal_height_L5-support_plate_pocket_depth));
- private final Hep3Vector vee_pos_module5_support_plate_top_local = new BasicHep3Vector(95.0, 76.1, -1.0 * (pedestal_height_L5-support_plate_pocket_depth));
- private final Hep3Vector flat_pos_module5_support_plate_top_local = new BasicHep3Vector(60.0, 70.1, -1.0 * (pedestal_height_L5-support_plate_pocket_depth));
+ private final Hep3Vector ball_pos_module1_support_plate_top_local = new BasicHep3Vector(25.0, 676.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L1-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ private final Hep3Vector vee_pos_module1_support_plate_top_local = new BasicHep3Vector(95.0, 676.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L1-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ private final Hep3Vector flat_pos_module1_support_plate_top_local = new BasicHep3Vector(60.0, 670.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L1-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ private final Hep3Vector ball_pos_module2_support_plate_top_local = new BasicHep3Vector(25.0, 576.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L2-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ private final Hep3Vector vee_pos_module2_support_plate_top_local = new BasicHep3Vector(95.0, 576.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L2-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ private final Hep3Vector flat_pos_module2_support_plate_top_local = new BasicHep3Vector(60.0, 570.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L2-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ private final Hep3Vector ball_pos_module3_support_plate_top_local = new BasicHep3Vector(25.0, 476.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L3-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ private final Hep3Vector vee_pos_module3_support_plate_top_local = new BasicHep3Vector(95.0, 476.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L3-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ private final Hep3Vector flat_pos_module3_support_plate_top_local = new BasicHep3Vector(60.0, 470.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L3-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ private final Hep3Vector ball_pos_module4_support_plate_top_local = new BasicHep3Vector(25.0, 276.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L4-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ private final Hep3Vector vee_pos_module4_support_plate_top_local = new BasicHep3Vector(95.0, 276.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L4-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ private final Hep3Vector flat_pos_module4_support_plate_top_local = new BasicHep3Vector(60.0, 270.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L4-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ private final Hep3Vector ball_pos_module5_support_plate_top_local = new BasicHep3Vector(25.0, 76.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L5-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ private final Hep3Vector vee_pos_module5_support_plate_top_local = new BasicHep3Vector(95.0, 76.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L5-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ private final Hep3Vector flat_pos_module5_support_plate_top_local = new BasicHep3Vector(60.0, 70.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L5-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
//half-module references
@@ -175,12 +186,6 @@
private final double kapton_length = 184.0;
private final double kapton_width = 40.0;
private final double kapton_thickness = 0.050;
- private final double coldblock_L13_length = 82.00;
- private final double coldblock_L13_width = 52.50;
- private final double coldblock_L13_thickness = 6.00;
- private final double coldblock_L45_length = 82.00;
- private final double coldblock_L45_width = 51.00;
- private final double coldblock_L45_thickness = 6.00;
private final double half_module_thickness = this.hybrid_thickness + this.cf_thickness + this.kapton_thickness;
private final double half_module_length = this.cf_length;
private final double half_module_width = 6.83 + this.sensor_width;
@@ -190,6 +195,14 @@
public HPSTestRunTracker2014(Element node) throws JDOMException
{
super(node);
+ tracking = new HPSTestRunTracker2014GeomDef.TrackingBase("trackingVolume",null);
+ base = new HPSTestRunTracker2014GeomDef.Base("base",tracking);
+ basePlate = new HPSTestRunTracker2014GeomDef.BasePlate("baseplate",base);
+ //cSupportBottom = new HPSTestRunTracker2014GeomDef.CSupportBottom("c_support_bottom", base);
+ supportBottom = new HPSTestRunTracker2014GeomDef.SupportBottom("support_bottom", base);
+ supportPlateBottom = new HPSTestRunTracker2014GeomDef.SupportPlateBottom("support_plate_bottom", supportBottom);
+ supportTop = new HPSTestRunTracker2014GeomDef.SupportTop("support_top", base);
+ supportPlateTop= new HPSTestRunTracker2014GeomDef.SupportPlateTop("support_plate_top", supportTop);
}
@@ -231,59 +244,24 @@
// Pick the mother volume (tracking volume).
Volume trackingVolume = lcdd.pickMotherVolume(this);
-
- VolWrapper trackingWrap = new VolWrapper();
- trackingWrap.name = "trackingVolume";
- trackingWrap.vol = trackingVolume;
- CoordSysDef coord_tracking = new CoordSysDef(new BasicHep3Vector(0,0,0),new BasicHep3Vector(1,0,0),new BasicHep3Vector(0,1,0),new BasicHep3Vector(0,0,1));
- trackingWrap.coord = coord_tracking;
- trackingWrap.center = new BasicHep3Vector(0,0,0);
-
-
- if(_debug) {
- print(String.format("coord_tracking:\n%s", coord_tracking.toString()));
- }
-
//makeExample(lcdd,sens);
-
- // ball at the upper (vertically) downstream edge of the base plate on the electron side
- // vee at the upper (vertically) downstream edge of the base plate on the positron side
- // flat at the upper (vertically) upstream edge of the base plate on the electron side
-
- // The tracking coordinate system is located at the target position.
-
- final double ball_pos_base_plate_x = -1.0*target_pos_wrt_base_plate_x;
- final double ball_pos_base_plate_y = -1.0*target_pos_wrt_base_plate_y;
- final double ball_pos_base_plate_z = target_pos_wrt_base_plate_z;
- final double vee_pos_base_plate_x = ball_pos_base_plate_x + base_plate_width;
- final double vee_pos_base_plate_y = ball_pos_base_plate_y;
- final double vee_pos_base_plate_z = ball_pos_base_plate_z;
- final double flat_pos_base_plate_x = ball_pos_base_plate_x;
- final double flat_pos_base_plate_y = ball_pos_base_plate_y;
- final double flat_pos_base_plate_z = ball_pos_base_plate_z - base_plate_length;
- Hep3Vector ball_pos_base_plate = new BasicHep3Vector(ball_pos_base_plate_x, ball_pos_base_plate_y, ball_pos_base_plate_z);
- Hep3Vector vee_pos_base_plate = new BasicHep3Vector(vee_pos_base_plate_x,vee_pos_base_plate_y,vee_pos_base_plate_z);
- Hep3Vector flat_pos_base_plate = new BasicHep3Vector(flat_pos_base_plate_x, flat_pos_base_plate_y, flat_pos_base_plate_z);
-
- if(_debug) {
- print(String.format("ball_pos_base_plate: %s", ball_pos_base_plate.toString()));
- print(String.format("vee_pos_base_plate: %s", vee_pos_base_plate.toString()));
- print(String.format("flat_pos_base_plate: %s", flat_pos_base_plate.toString()));
- }
-
if(buildBeamPlane ) {
// beam plane at global z=0
- Hep3Vector ball_pos_beamplane = new BasicHep3Vector(-1.0*base_plate_width/2.0,0.0,base_plate_length/2.0);
- Hep3Vector vee_pos_beamplane = new BasicHep3Vector(ball_pos_beamplane.x()+base_plate_width,ball_pos_beamplane.y(),ball_pos_beamplane.z());
- Hep3Vector flat_pos_beamplane = new BasicHep3Vector(ball_pos_beamplane.x(), ball_pos_beamplane.y(), ball_pos_beamplane.z()-base_plate_length/2.0);
- makeBeamPlane(trackingWrap, ball_pos_beamplane, vee_pos_beamplane, flat_pos_beamplane, lcdd, sens);
+ Hep3Vector ball_pos_base_plate = basePlate.getBallPos();
+ Hep3Vector vee_pos_base_plate = basePlate.getVeePos();
+ Hep3Vector flat_pos_base_plate = basePlate.getFlatPos();
+ Hep3Vector ball_pos_beamplane = new BasicHep3Vector(-1.0*HPSTestRunTracker2014GeomDef.BasePlate.base_plate_width/2.0,0.0,HPSTestRunTracker2014GeomDef.BasePlate.base_plate_length/2.0);
+ Hep3Vector vee_pos_beamplane = new BasicHep3Vector(ball_pos_beamplane.x()+HPSTestRunTracker2014GeomDef.BasePlate.base_plate_width,ball_pos_beamplane.y(),ball_pos_beamplane.z());
+ Hep3Vector flat_pos_beamplane = new BasicHep3Vector(ball_pos_beamplane.x(), ball_pos_beamplane.y(), ball_pos_beamplane.z()-HPSTestRunTracker2014GeomDef.BasePlate.base_plate_length/2.0);
+ makeBeamPlane(trackingVolume, ball_pos_beamplane, vee_pos_beamplane, flat_pos_beamplane, lcdd, sens);
}
- makeBase(trackingWrap, ball_pos_base_plate, vee_pos_base_plate, flat_pos_base_plate, lcdd, sens );
+ //makeBase(trackingWrap, ball_pos_base_plate, vee_pos_base_plate, flat_pos_base_plate, lcdd, sens );
+ makeBase(trackingVolume,lcdd,sens);
@@ -291,13 +269,7 @@
-
-
-
-
- private void makeBase(VolWrapper trackingWrap,
- Hep3Vector ball_pos_base_plate, Hep3Vector vee_pos_base_plate, Hep3Vector flat_pos_base_plate,
- LCDD lcdd, SensitiveDetector sens) throws JDOMException {
+ private void makeBase(Volume motherVolume, LCDD lcdd, SensitiveDetector sens) throws JDOMException {
if(_debug) {
@@ -306,21 +278,15 @@
}
- // create the coordinate system of the SVT tracking box called "base" in the tracking volume
- // since this is a dummy volume it is based on the position of the base plate coordinate system
- // width - u
- // length - v
- // thickness - w
- Hep3Vector ball_pos_base = ball_pos_base_plate;
- Hep3Vector vee_pos_base = vee_pos_base_plate;
- Hep3Vector flat_pos_base = flat_pos_base_plate;
- CoordSysDef base_coord = new CoordSysDef(ball_pos_base_plate, vee_pos_base_plate, flat_pos_base_plate);
- Transform3D trans_base_to_tracking = getTransformation(base_coord);
-
- String volName = "base";
- Box box = new Box(volName + "Box", base_width, base_length, base_height);
+ Hep3Vector ball_pos_base = base.getBallPos();
+ Hep3Vector vee_pos_base = base.getVeePos();
+ Hep3Vector flat_pos_base = base.getFlatPos();
+ HPSTestRunTracker2014GeomDef.Coord base_coord = base.getCoord();
+
+ String volName = base.getName();
+ Box box = new Box(volName + "Box", base.getBoxDim().x(), base.getBoxDim().y(), base.getBoxDim().z());
lcdd.add(box);
- Volume baseVolume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
+ Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
if(_debug) {
print(String.format("ball_pos_base %s", ball_pos_base.toString()));
@@ -331,66 +297,44 @@
- Hep3Vector box_center_base_local = new BasicHep3Vector(base_width/2.0, base_length/2.0, base_height/2.0 - base_plate_thickness);
+ Hep3Vector box_center_base_local = base.getCenter();
//translate to the mother coordinate system
- Hep3Vector box_center_base = trans_base_to_tracking.transformed(box_center_base_local);
+ Hep3Vector box_center_base = base.getCoord().getTransformation().transformed(box_center_base_local);
+
+ // find the position of the center in the mother coord
+ Hep3Vector box_center = VecOp.sub(box_center_base, base.getMother().getCenter());
+
+
+
if(_debug) {
print(String.format("box_center_base_local %s", box_center_base_local.toString()));
print(String.format("box_center_base %s", box_center_base.toString()));
+ print(String.format("mother center %s", base.getMother().getCenter().toString()));
+ print(String.format("box_center %s", box_center.toString()));
}
// Create the LCDD position
- Position pos = new Position(volName + "_position",box_center_base.x(), box_center_base.y(), box_center_base.z());
+ Position pos = new Position(volName + "_position",box_center.x(), box_center.y(), box_center.z());
//Find LCDD Euler rotation angles from coordinate system unit vectors
- Hep3Vector lcdd_rot_angles = getEulerAngles(base_coord.v, base_coord.w, new BasicHep3Vector(0,1,0),new BasicHep3Vector(0,0,1));
+ Hep3Vector lcdd_rot_angles = getEulerAngles(base_coord.v(), base_coord.w(), new BasicHep3Vector(0,1,0),new BasicHep3Vector(0,0,1));
Rotation rot = new Rotation(volName + "_rotation",lcdd_rot_angles.x(), lcdd_rot_angles.y(), lcdd_rot_angles.z());
lcdd.add(pos);
lcdd.add(rot);
// Create the physical volume
- PhysVol basePV = new PhysVol(baseVolume, trackingWrap.vol, pos, rot);
+ PhysVol physVolume = new PhysVol(volume, motherVolume, pos, rot);
if(_debug) {
- print("Created physical vomume " + basePV.getName());
+ print("Created physical volume " + physVolume.getName());
}
+
- // Crate the wrapper for this volume
- VolWrapper baseWrap = new VolWrapper();
- baseWrap.vol = baseVolume;
- baseWrap.name = volName;
- baseWrap.pos_vol = pos;
- baseWrap.rot_vol = rot;
- baseWrap.coord = base_coord;
- baseWrap.mother = trackingWrap;
- baseWrap.center = box_center_base_local;
-
-
// create the base plate inside the base tracker box
- // need to create new local survey points since it's w.r.t. to the local coordinates of the base volume
+ makeBasePlate(volume, lcdd, sens );
- if(_debug) {
- print(String.format("ball_pos_base_plate %s", ball_pos_base_plate.toString()));
- print(String.format("vee_pos_base_plate %s", vee_pos_base_plate.toString()));
- print(String.format("flat_pos_base_plate %s", flat_pos_base_plate.toString()));
- }
-
- Hep3Vector ball_pos_base_plate_2 = new BasicHep3Vector(0,0,0);
- Hep3Vector vee_pos_base_plate_2 = new BasicHep3Vector(base_plate_width,ball_pos_base_plate_2.y(),ball_pos_base_plate_2.z());
- Hep3Vector flat_pos_base_plate_2 = new BasicHep3Vector(ball_pos_base_plate_2.x(),base_plate_length,ball_pos_base_plate_2.z());
-
- if(_debug) {
- print(String.format("ball_pos_base_plate_2 %s", ball_pos_base_plate_2.toString()));
- print(String.format("vee_pos_base_plate_2 %s", vee_pos_base_plate_2.toString()));
- print(String.format("flat_pos_base_plate_2 %s", flat_pos_base_plate_2.toString()));
- }
-
-
-
- makeBasePlate(baseWrap, ball_pos_base_plate_2, vee_pos_base_plate_2, flat_pos_base_plate_2, lcdd, sens );
-
// create the box around the support plates w.r.t. base plate survey positions
@@ -408,6 +352,7 @@
// flat position is a randomly chosen point perpendicular to ball to vee vector and offset 10mm along the plate.
// Note that the flat here sets the tilt angle of the support plates.
+/*
// find the rotation to place the flat point
org.apache.commons.math3.geometry.euclidean.threed.Rotation rot1_csup =
new org.apache.commons.math3.geometry.euclidean.threed.Rotation(
@@ -428,7 +373,7 @@
Hep3Vector flat_pos_csup_pin_bottom = new BasicHep3Vector(flat_pos_csup_pin_bottom_x,flat_pos_csup_pin_bottom_y,flat_pos_csup_pin_bottom_z);
// create the coordinate system of the c-support pin
- CoordSysDef csup_pin_coord = new CoordSysDef(ball_pos_csup_pin_bottom, vee_pos_csup_pin_bottom, flat_pos_csup_pin_bottom);
+ HPSTestRunTracker2014GeomDef.Coord csup_pin_coord = new HPSTestRunTracker2014GeomDef.Coord(ball_pos_csup_pin_bottom, vee_pos_csup_pin_bottom, flat_pos_csup_pin_bottom);
Transform3D trans_csup_pin_to_base = getTransformation(csup_pin_coord);
if(_debug) {
@@ -472,7 +417,7 @@
Hep3Vector flat_pos_csup_bearings_bottom = new BasicHep3Vector(flat_pos_csup_bearings_bottom_x,flat_pos_csup_bearings_bottom_y,flat_pos_csup_bearings_bottom_z);
// create the coordinate system of the c-support bearings
- CoordSysDef csup_bearings_bottom_coord = new CoordSysDef(ball_pos_csup_bearings_bottom, vee_pos_csup_bearings_bottom, flat_pos_csup_bearings_bottom);
+ HPSTestRunTracker2014GeomDef.Coord csup_bearings_bottom_coord = new HPSTestRunTracker2014GeomDef.Coord(ball_pos_csup_bearings_bottom, vee_pos_csup_bearings_bottom, flat_pos_csup_bearings_bottom);
@@ -503,10 +448,11 @@
print(String.format("flat_pos_csup_bottom %s", flat_pos_csup_bottom.toString()));
}
+ */
-
- makeSupport("bottom", baseWrap, ball_pos_csup_bottom, vee_pos_csup_bottom, flat_pos_csup_bottom, lcdd, sens );
+ //makeSupport("bottom", baseWrap, ball_pos_csup_bottom, vee_pos_csup_bottom, flat_pos_csup_bottom, lcdd, sens );
+ makeSupport("bottom",volume, lcdd, sens );
@@ -516,7 +462,7 @@
// the top has the same bearing positions as the bottom c-support except for the offset vertically from base plate
// the tilt angle is independent though.
-
+ /*
Hep3Vector ball_pos_csup_bearings_top = new BasicHep3Vector(ball_pos_csup_bearings_bottom.x(),
ball_pos_csup_bearings_bottom.y(),
ball_pos_csup_bearings_top_z);
@@ -539,7 +485,7 @@
Hep3Vector flat_pos_csup_bearings_top = new BasicHep3Vector(flat_pos_csup_bearings_top_x,flat_pos_csup_bearings_top_y,flat_pos_csup_bearings_top_z);
// create the coordinate system of the c-support bearings
- CoordSysDef csup_bearings_top_coord = new CoordSysDef(ball_pos_csup_bearings_top, vee_pos_csup_bearings_top, flat_pos_csup_bearings_top);
+ HPSTestRunTracker2014GeomDef.Coord csup_bearings_top_coord = new HPSTestRunTracker2014GeomDef.Coord(ball_pos_csup_bearings_top, vee_pos_csup_bearings_top, flat_pos_csup_bearings_top);
//Transform3D trans_csup_bearings_to_pin = getTransformation(csup_pin_coord);
@@ -565,8 +511,11 @@
print(String.format("vee_pos_csup_top %s", vee_pos_csup_top.toString()));
print(String.format("flat_pos_csup_top %s", flat_pos_csup_top.toString()));
}
+
+ */
- makeSupport("top", baseWrap, ball_pos_csup_top, vee_pos_csup_top, flat_pos_csup_top, lcdd, sens );
+ makeSupport("top", volume, lcdd, sens );
+ //makeSupport("top", baseWrap, ball_pos_csup_top, vee_pos_csup_top, flat_pos_csup_top, lcdd, sens );
@@ -618,7 +567,7 @@
//baseVolume.setVisAttributes(lcdd.getVisAttributes("BasePlateVis"));
- lcdd.add(baseVolume);
+ lcdd.add(volume);
@@ -628,27 +577,31 @@
- private void makeBasePlate(VolWrapper baseWrap,
- Hep3Vector ball_pos_base_plate,
- Hep3Vector vee_pos_base_plate,
- Hep3Vector flat_pos_base_plate, LCDD lcdd, SensitiveDetector sens) throws JDOMException {
+// private void makeBasePlate(VolWrapper baseWrap,
+// Hep3Vector ball_pos_base_plate,
+// Hep3Vector vee_pos_base_plate,
+// Hep3Vector flat_pos_base_plate, LCDD lcdd, SensitiveDetector sens) throws JDOMException {
+ private void makeBasePlate(Volume motherVolume, LCDD lcdd, SensitiveDetector sens) throws JDOMException {
if(_debug) {
print("--- makeBasePlate----");
}
-
+ Hep3Vector ball_pos_base_plate = basePlate.getBallPos();
+ Hep3Vector vee_pos_base_plate = basePlate.getVeePos();
+ Hep3Vector flat_pos_base_plate = basePlate.getFlatPos();
// create the coordinate system
// width - u
// length - v
// thickness - w
// create the coordinate system
- CoordSysDef base_plate_coord = new CoordSysDef(ball_pos_base_plate, vee_pos_base_plate, flat_pos_base_plate);
- Transform3D trans_base_plate_to_base = getTransformation(base_plate_coord);
-
- String volName = "baseplate";
- Box box = new Box(volName + "Box", base_plate_width,base_plate_length, base_plate_thickness);
+ HPSTestRunTracker2014GeomDef.Coord base_plate_coord = basePlate.getCoord();
+
+ //String volName = "baseplate";
+ //Box box = new Box(volName + "Box", base_plate_width,base_plate_length, base_plate_thickness);
+ String volName = basePlate.getName();
+ Box box = new Box(volName + "Box", basePlate.getBoxDim().x(),basePlate.getBoxDim().y(),basePlate.getBoxDim().z());
lcdd.add(box);
Volume basePlateVolume = new Volume(volName + "_volume", box, lcdd.getMaterial("Aluminum"));
@@ -658,64 +611,56 @@
print(String.format("vee_pos_base_plate %s", vee_pos_base_plate.toString()));
print(String.format("flat_pos_base_plate %s", flat_pos_base_plate.toString()));
print(String.format("base_plate_coord:\n%s", base_plate_coord.toString()));
- Hep3Vector ball_pos_base_plate_tmp1 = this.transformToMotherCoord(ball_pos_base_plate, baseWrap, "trackingVolume");
- print(String.format("ball_pos_base_plate tracking %s", ball_pos_base_plate_tmp1.toString()));
}
// Find distance to center in the local coordinate system
- Hep3Vector box_center_base_plate_local = new BasicHep3Vector(base_plate_width/2.0, base_plate_length/2.0, -base_plate_thickness/2.0);
-
+ Hep3Vector box_center_base_plate_local = basePlate.getCenter();
+
//translate to the mother coordinate system
- Hep3Vector box_center_base_plate = trans_base_plate_to_base.transformed(box_center_base_plate_local);
-
+ Hep3Vector box_center_base_plate = basePlate.getCoord().getTransformation().transformed(box_center_base_plate_local);
+
// find the displacement from the rotation around an arbitrary point in local coordinates
//Hep3Vector box_center_module_coord_rot = getRotationDisplacement(ball_pos_halfmod, box_center_module_coord, lcdd_rot_angles);
// find the position of the center in the mother coord
- Hep3Vector box_center = VecOp.sub(box_center_base_plate, baseWrap.center);
+ Hep3Vector box_center = VecOp.sub(box_center_base_plate, basePlate.getMother().getCenter());
- //Hep3Vector box_center_sub = VecOp.sub(box_center_module_coord_rot, moduleWrap.center);
- //Hep3Vector box_center = transModuleToSupportCoord.rotated(box_center_sub);
+ if(_debug) {
+ print(String.format("box_center_base_plate_local %s", box_center_base_plate_local.toString()));
+ print(String.format("box_center_base_plate %s", box_center_base_plate.toString()));
+ print(String.format("mother center %s", basePlate.getMother().getCenter().toString()));
+ print(String.format("box_center %s", box_center.toString()));
+ }
- // fix the rotation
- //Hep3Vector lcdd_rot_angles_support = transModuleToSupportCoord.rotated(lcdd_rot_angles);
-
-
-
- print(String.format("box_center_base_plate_local %s", box_center_base_plate_local.toString()));
- print(String.format("box_center_base_plate %s", box_center_base_plate.toString()));
- print(String.format("baseWrap.center %s", baseWrap.center.toString()));
- print(String.format("box_center %s", box_center.toString()));
-
// Create the LCDD position
Position pos = new Position(volName + "_position",box_center.x(), box_center.y(), box_center.z());
//Find LCDD Euler rotation angles from coordinate system unit vectors
- Hep3Vector lcdd_rot_angles = getEulerAngles(base_plate_coord.u, base_plate_coord.v, new BasicHep3Vector(1,0,0),new BasicHep3Vector(0,1,0));
+ Hep3Vector lcdd_rot_angles = getEulerAngles(base_plate_coord.u(), base_plate_coord.v(), new BasicHep3Vector(1,0,0),new BasicHep3Vector(0,1,0));
Rotation rot = new Rotation(volName + "_rotation",lcdd_rot_angles.x(), lcdd_rot_angles.y(), lcdd_rot_angles.z());
lcdd.add(pos);
lcdd.add(rot);
// Create the physical volume
- PhysVol basePlatePV = new PhysVol(basePlateVolume, baseWrap.vol, pos, rot);
+ PhysVol basePlatePV = new PhysVol(basePlateVolume, motherVolume, pos, rot);
if(_debug) {
print("Created physical vomume " + basePlatePV.getName());
}
// Crate the wrapper for this volume
- VolWrapper basePlateWrap = new VolWrapper();
- basePlateWrap.mother = baseWrap;
- basePlateWrap.vol = basePlateVolume;
- basePlateWrap.name = volName;
- basePlateWrap.coord = base_plate_coord;
- basePlateWrap.pos_vol = pos;
- basePlateWrap.rot_vol = rot;
- baseWrap.daughters.add(basePlateWrap);
+// VolWrapper basePlateWrap = new VolWrapper();
+// basePlateWrap.mother = baseWrap;
+// basePlateWrap.vol = basePlateVolume;
+// basePlateWrap.name = volName;
+// basePlateWrap.coord = base_plate_coord2;
+// basePlateWrap.pos_vol = pos;
+// basePlateWrap.rot_vol = rot;
+// baseWrap.daughters.add(basePlateWrap);
+//
-
// add volume to lcdd
basePlateVolume.setVisAttributes(lcdd.getVisAttributes("BasePlateVis"));
lcdd.add(basePlateVolume);
@@ -728,7 +673,284 @@
+
+
+ private void makeSupport(String half, Volume motherVolume, LCDD lcdd, SensitiveDetector sens) throws JDOMException {
+
+
+ if(_debug) {
+ print("--- makeSupport for " + half + " half ----");
+
+ }
+
+
+ double support_length = -99999.9;
+ double support_width = -99999.9;
+ double support_height = -99999.9;
+ double support_plate_length = -99999.9;
+ double support_plate_width = -99999.9;
+
+ if( half == "bottom" ) {
+ support_length = HPSTestRunTracker2014GeomDef.SupportBottom.support_bottom_length;
+ support_width = HPSTestRunTracker2014GeomDef.SupportBottom.support_bottom_width;
+ support_height = HPSTestRunTracker2014GeomDef.SupportBottom.support_bottom_height;
+ support_plate_length = HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_bottom_length;
+ support_plate_width = HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_bottom_width;
+ }
+ else if( half == "top" ) {
+ support_length = HPSTestRunTracker2014GeomDef.SupportTop.support_top_length;
+ support_width = HPSTestRunTracker2014GeomDef.SupportTop.support_top_width;
+ support_height = HPSTestRunTracker2014GeomDef.SupportTop.support_top_height;
+ support_plate_length = HPSTestRunTracker2014GeomDef.SupportPlateTop.support_plate_top_length;
+ support_plate_width = HPSTestRunTracker2014GeomDef.SupportPlateTop.support_plate_top_width;
+ } else {
+ print("Error: cannot make support for " + half);
+ System.exit(1);
+ }
+
+ String volName;
+ HPSTestRunTracker2014GeomDef.Coord csup_coord;
+ HPSTestRunTracker2014GeomDef.BaseGeom mother;
+ if(half == "bottom") {
+ csup_coord = supportBottom.getCoord();
+ volName = supportBottom.getName();
+ mother = supportBottom.getMother();
+ } else {
+ csup_coord = supportTop.getCoord();
+ volName = supportTop.getName();
+ mother = supportTop.getMother();
+ }
+ Transform3D trans_csup_to_base = getTransformation(csup_coord);
+
+
+
+ Box box = new Box(volName + "Box", support_width, support_length, support_height);
+ lcdd.add(box);
+ Volume supportVolume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
+
+
+ if(_debug) {
+ print(String.format("support_coord:\n%s", csup_coord.toString()));
+ }
+
+
+
+ // Find distance to center in the local coordinate system
+
+ // the support plate sits exactly in between the bearing positions
+ // it's offset along the local directions
+
+ Hep3Vector box_center_support_local;
+ if(half == "bottom") {
+ //box_center_support_local = new BasicHep3Vector(support_width/2.0+1.0, support_length/2.0 + (17.00-10.50/2.0), support_height/2.0 - (12.70-6.66-1.34));
+ box_center_support_local = supportBottom.getCenter();
+ } else {
+ //box_center_support_local = new BasicHep3Vector(support_width/2.0+1.0, support_length/2.0 + (17.00-10.50/2.0), -1.0 * (support_height/2.0 - (12.70-6.66-1.34)));
+ box_center_support_local = supportTop.getCenter();
+ }
+
+ //translate to the mother coordinate system
+ Hep3Vector box_center_support_base = trans_csup_to_base.transformed(box_center_support_local);
+
+ // find the position of the center in the mother coord
+
+ Hep3Vector box_center = VecOp.sub(box_center_support_base, mother.getCenter());
+
+ if(_debug) {
+ print(String.format("box_center_support_local %s", box_center_support_local.toString()));
+ print(String.format("box_center_support_base %s", box_center_support_base.toString()));
+ print(String.format("mother center %s", mother.getCenter().toString()));
+ print(String.format("box_center %s", box_center.toString()));
+ }
+ // Create the LCDD position
+ Position pos = new Position(volName + "_position",box_center.x(), box_center.y(), box_center.z());
+
+ //Find LCDD Euler rotation angles from coordinate system unit vectors
+ Hep3Vector lcdd_rot_angles = getEulerAngles(csup_coord.u(), csup_coord.v(), new BasicHep3Vector(1,0,0),new BasicHep3Vector(0,1,0));
+ Rotation rot = new Rotation(volName + "_rotation",lcdd_rot_angles.x(), lcdd_rot_angles.y(), lcdd_rot_angles.z());
+ lcdd.add(pos);
+ lcdd.add(rot);
+
+
+ // Create the physical volume
+ PhysVol supportPV = new PhysVol(supportVolume, motherVolume, pos, rot);
+ if(_debug) {
+ print("Created physical vomume " + supportPV.getName());
+ }
+
+
+
+ // create the support plate inside the support box coordinate system
+ // survey points on the support plate are:
+ // ball: corner of the hinge end at the surface on the side where module cold blocks are
+ // vee: corner of the hinge end at the surface on the side where sensors are
+ // flat: middle of plate at upstream end at the surface
+
+ /*
+ Hep3Vector ball_pos_support_plate;
+ Hep3Vector vee_pos_support_plate;
+ Hep3Vector flat_pos_support_plate;
+ if(half == "bottom") {
+ ball_pos_support_plate = new BasicHep3Vector(1.0, (17.0-5.0), 6.66+1.34);
+ vee_pos_support_plate = new BasicHep3Vector(ball_pos_support_plate.x() + support_plate_width, ball_pos_support_plate.y(),ball_pos_support_plate.z());
+ flat_pos_support_plate = new BasicHep3Vector(ball_pos_support_plate.x(), ball_pos_support_plate.y() + support_plate_length,ball_pos_support_plate.z());
+ //ball_pos_support_plate = new BasicHep3Vector(0.0, 0.0, support_plate_height); // TODO figure out what height this should be from the C-support drawings
+ //vee_pos_support_plate = new BasicHep3Vector(ball_pos_support_plate.x() + support_plate_width, ball_pos_support_plate.y(),ball_pos_support_plate.z());
+ //flat_pos_support_plate = new BasicHep3Vector(ball_pos_support_plate.x(), ball_pos_support_plate.y() + support_plate_length,ball_pos_support_plate.z());
+ } else {
+ ball_pos_support_plate = new BasicHep3Vector(1.0, (17.0-5.0), -1.0 * (6.66+1.34)); // TODO figure out what height this should be from the C-support drawings
+ vee_pos_support_plate = new BasicHep3Vector(ball_pos_support_plate.x() + support_plate_width, ball_pos_support_plate.y(),ball_pos_support_plate.z());
+ flat_pos_support_plate = new BasicHep3Vector(ball_pos_support_plate.x(), ball_pos_support_plate.y() + support_plate_length,ball_pos_support_plate.z());
+ }
+ */
+
+
+ //makeSupportPlate(supportWrap, ball_pos_support_plate, vee_pos_support_plate, flat_pos_support_plate, lcdd, sens );
+
+ makeSupportPlate(half, supportVolume, lcdd, sens );
+
+
+
+
+
+
+ // create the module from positions of module ball, vee and flat w.r.t. support plate survey points
+ // ball: hole on the cold block mounting surface
+ // vee: slot on the cold block mounting surface
+ // flat: midpoint between line joining ball and vee and offset 90deg along plate going upstream
+
+ if(_debug) {
+ print("Make modules on support plate");
+ }
+
+ for(int ilayer = 1; ilayer <=5; ++ilayer) {
+
+ String layerName = String.format("L%d%s", ilayer,half=="bottom"?"b":"t");
+
+ print(layerName);
+
+ Hep3Vector ball_pos_mod_local = null;
+ Hep3Vector vee_pos_mod_local = null;
+ Hep3Vector flat_pos_mod_local = null;
+ if(ilayer == 1) {
+ if(half == "bottom") {
+ ball_pos_mod_local = ball_pos_module1_support_plate_bottom_local;
+ vee_pos_mod_local = vee_pos_module1_support_plate_bottom_local;
+ flat_pos_mod_local = flat_pos_module1_support_plate_bottom_local;
+ } else {
+ ball_pos_mod_local = ball_pos_module1_support_plate_top_local;
+ vee_pos_mod_local = vee_pos_module1_support_plate_top_local;
+ flat_pos_mod_local = flat_pos_module1_support_plate_top_local;
+ }
+ }
+ else if (ilayer == 2) {
+ if(half == "bottom") {
+ ball_pos_mod_local = ball_pos_module2_support_plate_bottom_local;
+ vee_pos_mod_local = vee_pos_module2_support_plate_bottom_local;
+ flat_pos_mod_local = flat_pos_module2_support_plate_bottom_local;
+ } else {
+ ball_pos_mod_local = ball_pos_module2_support_plate_top_local;
+ vee_pos_mod_local = vee_pos_module2_support_plate_top_local;
+ flat_pos_mod_local = flat_pos_module2_support_plate_top_local;
+ }
+ }
+ else if (ilayer == 3) {
+ if(half == "bottom") {
+ ball_pos_mod_local = ball_pos_module3_support_plate_bottom_local;
+ vee_pos_mod_local = vee_pos_module3_support_plate_bottom_local;
+ flat_pos_mod_local = flat_pos_module3_support_plate_bottom_local;
+ } else {
+ ball_pos_mod_local = ball_pos_module3_support_plate_top_local;
+ vee_pos_mod_local = vee_pos_module3_support_plate_top_local;
+ flat_pos_mod_local = flat_pos_module3_support_plate_top_local;
+ }
+ }
+ else if (ilayer == 4) {
+ if(half == "bottom") {
+ ball_pos_mod_local = ball_pos_module4_support_plate_bottom_local;
+ vee_pos_mod_local = vee_pos_module4_support_plate_bottom_local;
+ flat_pos_mod_local = flat_pos_module4_support_plate_bottom_local;
+ } else {
+ ball_pos_mod_local = ball_pos_module4_support_plate_top_local;
+ vee_pos_mod_local = vee_pos_module4_support_plate_top_local;
+ flat_pos_mod_local = flat_pos_module4_support_plate_top_local;
+ }
+ } else if (ilayer == 5) {
+ if(half == "bottom") {
+ ball_pos_mod_local = ball_pos_module5_support_plate_bottom_local;
+ vee_pos_mod_local = vee_pos_module5_support_plate_bottom_local;
+ flat_pos_mod_local = flat_pos_module5_support_plate_bottom_local;
+ } else {
+ ball_pos_mod_local = ball_pos_module5_support_plate_top_local;
+ vee_pos_mod_local = vee_pos_module5_support_plate_top_local;
+ flat_pos_mod_local = flat_pos_module5_support_plate_top_local;
+ }
+ } else {
+ print("Not more than 5 layers!");
+ System.exit(1);
+ }
+
+ if(_debug) {
+ print(String.format("ball_pos_mod_local %s", ball_pos_mod_local.toString()));
+ print(String.format("vee_pos_mod_local %s", vee_pos_mod_local.toString()));
+ print(String.format("flat_pos_mod_local %s", flat_pos_mod_local.toString()));
+ }
+
+
+ //
+ // Note that the mother volume is the support wrap box which can be different than support plate coord system.
+ // Thus I need to take that into account when making the modules
+ // create the coordinate system of the support plate in the support box
+ //HPSTestRunTracker2014GeomDef.Coord support_plate_coord = new HPSTestRunTracker2014GeomDef.Coord(ball_pos_support_plate, vee_pos_support_plate, flat_pos_support_plate);
+ //Transform3D trans_support_plate_to_support = getTransformation(support_plate_coord);
+ //HPSTestRunTracker2014GeomDef.Coord support_plate_coord = new HPSTestRunTracker2014GeomDef.Coord(ball_pos_support_plate, vee_pos_support_plate, flat_pos_support_plate);
+ Transform3D trans_support_plate_to_support;
+ if(half == "bottom") {
+ trans_support_plate_to_support = supportBottom.getCoord().getTransformation();
+ } else {
+ trans_support_plate_to_support = supportTop.getCoord().getTransformation();
+ }
+
+
+ // transform module coordinates to support frame in case they are different
+ Hep3Vector ball_pos_mod = trans_support_plate_to_support.transformed(ball_pos_mod_local);
+ Hep3Vector ball_pos_mod_rot = trans_support_plate_to_support.rotated(ball_pos_mod_local);
+ Hep3Vector ball_pos_mod_tr = trans_support_plate_to_support.translated(ball_pos_mod_local);
+ Hep3Vector vee_pos_mod = trans_support_plate_to_support.transformed(vee_pos_mod_local);
+ Hep3Vector flat_pos_mod = trans_support_plate_to_support.transformed(flat_pos_mod_local);
+
+ if(_debug) {
+ print(String.format("ball_pos_mod_rot %s", ball_pos_mod_rot.toString()));
+ print(String.format("ball_pos_mod_tr %s", ball_pos_mod_tr.toString()));
+ print(String.format("ball_pos_mod %s", ball_pos_mod.toString()));
+ print(String.format("vee_pos_mod %s", vee_pos_mod.toString()));
+ print(String.format("flat_pos_mod %s", flat_pos_mod.toString()));
+ }
+
+ // make the module
+// makeModule(layerName,supportWrap, ball_pos_mod, vee_pos_mod, flat_pos_mod,lcdd, sens);
+ makeModule(half,layerName,supportVolume,lcdd, sens);
+ } // ilayer
+
+
+
+ // add support volume to lcdd
+ supportVolume.setVisAttributes(lcdd.getVisAttributes("SupportVolumeVis"));
+ lcdd.add(supportVolume);
+
+
+
+
+
+
+ }
+
+
+
+
+
+
private void makeSupport(String half, VolWrapper baseWrap,
Hep3Vector ball_pos_csup, Hep3Vector vee_pos_csup, Hep3Vector flat_pos_csup,
LCDD lcdd, SensitiveDetector sens) throws JDOMException {
@@ -747,18 +969,18 @@
double support_plate_width = -99999.9;
if( half == "bottom" ) {
- support_length = support_bottom_length;
- support_width = support_bottom_width;
- support_height = support_bottom_height;
- support_plate_length = support_plate_bottom_length;
- support_plate_width = support_plate_bottom_width;
+ support_length = HPSTestRunTracker2014GeomDef.SupportBottom.support_bottom_length;
+ support_width = HPSTestRunTracker2014GeomDef.SupportBottom.support_bottom_width;
+ support_height = HPSTestRunTracker2014GeomDef.SupportBottom.support_bottom_height;
+ support_plate_length = HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_bottom_length;
+ support_plate_width = HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_bottom_width;
}
else if( half == "top" ) {
- support_length = support_top_length;
- support_width = support_top_width;
- support_height = support_top_height;
- support_plate_length = support_plate_top_length;
- support_plate_width = support_plate_top_width;
+ support_length = HPSTestRunTracker2014GeomDef.SupportTop.support_top_length;
+ support_width = HPSTestRunTracker2014GeomDef.SupportTop.support_top_width;
+ support_height = HPSTestRunTracker2014GeomDef.SupportTop.support_top_height;
+ support_plate_length = HPSTestRunTracker2014GeomDef.SupportPlateTop.support_plate_top_length;
+ support_plate_width = HPSTestRunTracker2014GeomDef.SupportPlateTop.support_plate_top_width;
} else {
print("Error: cannot make support for " + half);
System.exit(1);
@@ -766,7 +988,7 @@
// create the coordinate system of the c-support
- CoordSysDef csup_coord = new CoordSysDef(ball_pos_csup, vee_pos_csup, flat_pos_csup);
+ HPSTestRunTracker2014GeomDef.Coord csup_coord = new HPSTestRunTracker2014GeomDef.Coord(ball_pos_csup, vee_pos_csup, flat_pos_csup);
Transform3D trans_csup_to_base = getTransformation(csup_coord);
@@ -818,7 +1040,7 @@
Position pos = new Position(volName + "_position",box_center.x(), box_center.y(), box_center.z());
//Find LCDD Euler rotation angles from coordinate system unit vectors
- Hep3Vector lcdd_rot_angles = getEulerAngles(csup_coord.u, csup_coord.v, new BasicHep3Vector(1,0,0),new BasicHep3Vector(0,1,0));
+ Hep3Vector lcdd_rot_angles = getEulerAngles(csup_coord.u(), csup_coord.v(), new BasicHep3Vector(1,0,0),new BasicHep3Vector(0,1,0));
Rotation rot = new Rotation(volName + "_rotation",lcdd_rot_angles.x(), lcdd_rot_angles.y(), lcdd_rot_angles.z());
lcdd.add(pos);
lcdd.add(rot);
@@ -866,12 +1088,16 @@
flat_pos_support_plate = new BasicHep3Vector(ball_pos_support_plate.x(), ball_pos_support_plate.y() + support_plate_length,ball_pos_support_plate.z());
}
- makeSupportPlate(supportWrap, ball_pos_support_plate, vee_pos_support_plate, flat_pos_support_plate, lcdd, sens );
+ //makeSupportPlate(supportWrap, ball_pos_support_plate, vee_pos_support_plate, flat_pos_support_plate, lcdd, sens );
+ if(half == "bottom") {
+ makeSupportPlate("bottom", supportVolume, lcdd, sens );
+ } else {
+ makeSupportPlate("Top", supportVolume, lcdd, sens );
+ }
-
// create the module from positions of module ball, vee and flat w.r.t. support plate survey points
@@ -961,7 +1187,7 @@
// Note that the mother volume is the support wrap box which can be different than support plate coord system.
[truncated at 1000 lines; 754 more skipped]
projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/lcdd
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014GeomDef.java (rev 0)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014GeomDef.java 2014-07-12 01:27:46 UTC (rev 3176)
@@ -0,0 +1,641 @@
+/**
+ *
+ */
+package org.lcsim.geometry.compact.converter.lcdd;
+
+import org.lcsim.detector.Rotation3D;
+import org.lcsim.detector.Transform3D;
+import org.lcsim.detector.Translation3D;
+
+import hep.physics.vec.BasicHep3Matrix;
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.VecOp;
+
+/**
+ *
+ * Class containing geometry information for HPS Test run tracker 2014
+ *
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+public final class HPSTestRunTracker2014GeomDef {
+
+ //General
+ private static final double inch = 25.4; //mm
+
+ // Global position references
+ private static final double target_pos_wrt_base_plate_x = 162.3; //from Marco's 3D model
+ private static final double target_pos_wrt_base_plate_y = 80.55; //from Tim's sketchup //68.75; //from Marco's 3D model
+ private 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 class BaseGeom {
+ private String name;
+ private BaseGeom mother;
+ private Coord coord;
+ protected Hep3Vector ballPos;
+ protected Hep3Vector veePos;
+ protected Hep3Vector flatPos;
+ private Hep3Vector center;
+ private Hep3Vector boxDim;
+ public BaseGeom(BaseGeom m, String name) {
+ setMother(m);
+ coord = null;
+ ballPos = null;
+ veePos = null;
+ flatPos = null;
+ setCenter(null);
+ setBoxDim(null);
+ setName(name);
+ }
+ public void setBallPos(double x, double y, double z) {
+ ballPos = new BasicHep3Vector(x,y,z);
+ }
+ public void setVeePos(double x, double y, double z) {
+ veePos = new BasicHep3Vector(x,y,z);
+ }
+ public void setFlatPos(double x, double y, double z) {
+ flatPos = new BasicHep3Vector(x,y,z);
+ }
+ public Hep3Vector getBallPos() {
+ return ballPos;
+ }
+ public Hep3Vector getVeePos() {
+ return veePos;
+ }
+ public Hep3Vector getFlatPos() {
+ return flatPos;
+ }
+ public void setCoord() {
+ setCoord(null);
+ }
+ public void setCoord(Hep3Vector origin) {
+ 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 Coord(origin, ballPos, veePos, flatPos);
+ } else {
+ coord = new Coord(ballPos, veePos, flatPos);
+ }
+ }
+ public Coord getCoord() {
+ if(coord == null) {
+ throw new RuntimeException("Need to setCoord!");
+ }
+ return coord;
+ }
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public Hep3Vector getCenter() {
+ return center;
+ }
+ public void setCenter(Hep3Vector center) {
+ this.center = center;
+ }
+ public void setCenter(double x, double y, double z) {
+ this.center = new BasicHep3Vector(x,y,z);
+ }
+ public Hep3Vector getBoxDim() {
+ return boxDim;
+ }
+ public void setBoxDim(Hep3Vector boxDim) {
+ this.boxDim = boxDim;
+ }
+ public void setBoxDim(double x, double y, double z) {
+ this.boxDim = new BasicHep3Vector(x,y,z);
+ }
+ public BaseGeom getMother() {
+ return mother;
+ }
+ public void setMother(BaseGeom mother) {
+ this.mother = mother;
+ }
+
+ }
+
+
+ public static class TrackingBase extends BaseGeom {
+ public TrackingBase(String name, BaseGeom mother) {
+ super(mother,name);
+ ballPos = new BasicHep3Vector(1,0,0);
+ veePos = new BasicHep3Vector(0,1,0);
+ flatPos = new BasicHep3Vector(0,0,1);
+ setCoord(new BasicHep3Vector(0,0,0));
+ setCenter(new BasicHep3Vector(0,0,0));
+ }
+ }
+
+ public static class Base extends BaseGeom {
+ // 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
+ protected static final double base_height = PS_vac_box_inner_height - BasePlate.base_plate_offset_height;
+ protected static final double base_width = BasePlate.base_plate_width;
+ protected static final double base_length = BasePlate.base_plate_length;
+
+ public Base(String name, BaseGeom mother) {
+ super(mother,name);
+ final double ball_pos_base_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;
+ final double vee_pos_base_x = ball_pos_base_x + BasePlate.base_plate_width;
+ final double vee_pos_base_y = ball_pos_base_y;
+ final double vee_pos_base_z = ball_pos_base_z;
+ final double flat_pos_base_x = ball_pos_base_x;
+ final double flat_pos_base_y = ball_pos_base_y;
+ final double flat_pos_base_z = ball_pos_base_z - BasePlate.base_plate_length;
+ setBallPos(ball_pos_base_x,ball_pos_base_y,ball_pos_base_z);
+ 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);
+ setCoord();
+ setBoxDim(base_width,base_length,base_height);
+ setCenter(base_width/2.0, base_length/2.0, base_height/2.0 - BasePlate.base_plate_thickness);
+ }
+ }
+
+
+
+ public static class BasePlate extends BaseGeom {
+ // Base plate references
+ protected static final double base_plate_thickness = 0.25*inch;
+ protected static final double base_plate_width = 385.00;
+ protected static final double base_plate_length = 1216.00;
+ //height from vacuum chamber surface
+ protected static final double base_plate_offset_height = 2.0; //from Marco's 3D model
+
+
+ public BasePlate(String name, BaseGeom mother) {
+ super(mother,name);
+ ballPos = new BasicHep3Vector(0,0,0);
+ setVeePos(base_plate_width,ballPos.y(),ballPos.z());
+ setFlatPos(ballPos.x(),base_plate_length,ballPos.z());
+ setCoord();
+ setBoxDim(base_plate_width,base_plate_length, base_plate_thickness);
+ setCenter(base_plate_width/2.0, base_plate_length/2.0, -base_plate_thickness/2.0);
+ }
+ }
+
+
+
+
+ public static class CSupport extends BaseGeom {
+ // c-support references
+ // pin position on base plate surface
+ private static final double ball_pos_csup_pin_bottom_x = 51.15;
+ private static final double ball_pos_csup_pin_bottom_y = 115.02;
+ private static final double ball_pos_csup_pin_bottom_z = 0.0;
+ private static final double vee_pos_csup_pin_bottom_x = 271.05;
+ private static final double vee_pos_csup_pin_bottom_y = 121.62;
+ private static final double vee_pos_csup_pin_bottom_z = 0.0;
+
+
+ public CSupport(String name, BaseGeom mother) {
+ super(mother,name);
+ setBallPos(ball_pos_csup_pin_bottom_x,ball_pos_csup_pin_bottom_y,ball_pos_csup_pin_bottom_z);
+ setVeePos(vee_pos_csup_pin_bottom_x,vee_pos_csup_pin_bottom_y,vee_pos_csup_pin_bottom_z);
+ calcAndSetFlatPos();
+ setCoord();
+ }
+ private void calcAndSetFlatPos() {
+ // find the rotation to place the flat point
+ org.apache.commons.math3.geometry.euclidean.threed.Rotation rot1_csup =
+ new org.apache.commons.math3.geometry.euclidean.threed.Rotation(
+ new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(vee_pos_csup_pin_bottom_x-ball_pos_csup_pin_bottom_x,
+ vee_pos_csup_pin_bottom_y-ball_pos_csup_pin_bottom_y,
+ vee_pos_csup_pin_bottom_z-ball_pos_csup_pin_bottom_z),
+ new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(1,0,0));
+
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D flat_pos_csup_pin_bottom_3D_rot = rot1_csup.applyTo(new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(0,10.0,0));
+ // translate
+ double flat_pos_csup_pin_bottom_x = ball_pos_csup_pin_bottom_x + flat_pos_csup_pin_bottom_3D_rot.getX();
+ double flat_pos_csup_pin_bottom_y = ball_pos_csup_pin_bottom_y + flat_pos_csup_pin_bottom_3D_rot.getY();
+ double flat_pos_csup_pin_bottom_z = ball_pos_csup_pin_bottom_z + flat_pos_csup_pin_bottom_3D_rot.getZ();
+ setFlatPos(flat_pos_csup_pin_bottom_x,flat_pos_csup_pin_bottom_y,flat_pos_csup_pin_bottom_z);
+ }
+
+ }
+
+
+
+
+ public static class SupportTop extends BaseGeom {
+ // Top only needs a vertical offset to be specified
+ private static final double ball_pos_csup_bearings_top_z = 146.4;
+
+ //these are for the box surrounding the whole support including modules
+ protected static final double support_top_length = SupportBottom.support_bottom_length;
+ protected static final double support_top_width = SupportBottom.support_bottom_width;
+ protected static final double support_top_height = SupportBottom.support_bottom_height;
+
+
+
+
+ public SupportTop(String name, BaseGeom mother) {
+ super(mother,name);
+ setPos();
+ setCoord();
+ setBoxDim(support_top_width,support_top_length,support_top_height);
+ 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)));
+
+
+
+ }
+ private void setPos() {
+
+ System.out.printf("setPos support top\n");
+
+
+ // the top has the same bearing positions as the bottom c-support except for the offset vertically from base plate
+ // the tilt angle is independent though.
+
+ Hep3Vector ball_pos_csup_bearings_top = new BasicHep3Vector(SupportBottom.ball_pos_csup_bearings_bottom_x,
+ SupportBottom.ball_pos_csup_bearings_bottom_y,
+ ball_pos_csup_bearings_top_z);
+ Hep3Vector vee_pos_csup_bearings_top = new BasicHep3Vector(SupportBottom.vee_pos_csup_bearings_bottom_x,
+ SupportBottom.vee_pos_csup_bearings_bottom_y,
+ ball_pos_csup_bearings_top_z);
+
+
+ // build the rotation to find the proper location of the flat
+ org.apache.commons.math3.geometry.euclidean.threed.Rotation rot_csup_top =
+ new org.apache.commons.math3.geometry.euclidean.threed.Rotation(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ,
+ SupportPlateTop.support_plate_top_tilt_angle, 0.0, 0.0 );
+ // apply to flat local position (as for bottom it is arbitrary offset)
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D flat_pos_csup_bearings_top_3D_rot =
+ rot_csup_top.applyTo(new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(0.0,10.0,0.0));
+ // translate the flat position
+ final double flat_pos_csup_bearings_top_x = ball_pos_csup_bearings_top.x() + flat_pos_csup_bearings_top_3D_rot.getX();
+ final double flat_pos_csup_bearings_top_y = ball_pos_csup_bearings_top.y() + flat_pos_csup_bearings_top_3D_rot.getY();
+ final double flat_pos_csup_bearings_top_z = ball_pos_csup_bearings_top.z() + flat_pos_csup_bearings_top_3D_rot.getZ();
+ Hep3Vector flat_pos_csup_bearings_top = new BasicHep3Vector(flat_pos_csup_bearings_top_x,flat_pos_csup_bearings_top_y,flat_pos_csup_bearings_top_z);
+
+
+ System.out.printf("ball_pos_csup_bearings_top %s\n",ball_pos_csup_bearings_top);
+ System.out.printf("vee_pos_csup_bearings_top %s\n",vee_pos_csup_bearings_top);
+ System.out.printf("flat_pos_csup_bearings_top %s\n",flat_pos_csup_bearings_top);
+
+
+ // create the coordinate system of the c-support bearings
+ //HPSTestRunTracker2014GeomDef.Coord csup_bearings_top_coord = new HPSTestRunTracker2014GeomDef.Coord(ball_pos_csup_bearings_top, vee_pos_csup_bearings_top, flat_pos_csup_bearings_top);
+ //Transform3D trans_csup_bearings_to_pin = getTransformation(csup_pin_coord);
+
+ HPSTestRunTracker2014GeomDef.CSupport csup = new HPSTestRunTracker2014GeomDef.CSupport("c_support_bottom", getMother());
+ Transform3D trans_csup_pin_to_base = csup.getCoord().getTransformation();
+
+ System.out.printf("csup coord \n%s\n",csup.getCoord().toString());
+
+ // similar to for bottom, find the bearing positions in the base coord directly
+ ballPos = trans_csup_pin_to_base.transformed(ball_pos_csup_bearings_top);
+ veePos = trans_csup_pin_to_base.transformed(vee_pos_csup_bearings_top);
+ flatPos = trans_csup_pin_to_base.transformed(flat_pos_csup_bearings_top);
+
+ System.out.printf("ballPos %s\n",ballPos);
+ System.out.printf("veePos %s\n",veePos);
+ System.out.printf("flatPos %s\n",flatPos);
+
+
+ }
+
+ }
+
+
+
+ public static class SupportBottom extends BaseGeom {
+ // point on axis of rotation on the inside of the c-support frame where the insert get's attached
+ // this is referenced to the pin position of the c-support
+ private static final double ball_pos_csup_bearings_bottom_x = 240.0 - 265.0 + 14.0;
+ private static final double ball_pos_csup_bearings_bottom_y = (-6.0 + 22.0);
+ private static final double ball_pos_csup_bearings_bottom_z = 14.7;
+ private static final double vee_pos_csup_bearings_bottom_x = 240.0- 129.0;
+ private static final double vee_pos_csup_bearings_bottom_y = (-6.0 + 22.0);
+ private static final double vee_pos_csup_bearings_bottom_z = 14.7;
+
+ //these are for the box surrounding the whole support including modules
+ protected static final double support_bottom_length = SupportPlateBottom.support_plate_bottom_length;
+ protected static final double support_bottom_width = (25.0-5.0) + Module.module_box_L13_length;
+ protected static final double support_bottom_height = SupportPlateBottom.support_plate_bottom_height - SupportPlateBottom.support_plate_pocket_depth + Module.module_box_L13_width + SupportPlateBottom.pedestal_height_L1;
+
+
+
+
+ public SupportBottom(String name, BaseGeom mother) {
+ super(mother,name);
+ setPos();
+ setCoord();
+ setBoxDim(support_bottom_width,support_bottom_length,support_bottom_height);
+ 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));
+
+
+ }
+ private void setPos() {
+
+ System.out.printf("setPos support bottom\n");
+
+ // now create the support box which will have it's coordinates at the rotation axis so that the flat determines the tilt of the plates
+ // it is referenced locally to the c-support pin coordinate system here
+
+ // build the rotation to find the proper location of the flat
+ org.apache.commons.math3.geometry.euclidean.threed.Rotation rot_csup =
+ new org.apache.commons.math3.geometry.euclidean.threed.Rotation(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ,
+ SupportPlateBottom.support_plate_bottom_tilt_angle, 0.0, 0.0 );
+ // apply to flat local position
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D flat_pos_csup_bearings_bottom_3D_rot =
+ rot_csup.applyTo(new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(0.0,10.0,0.0));
+ // translate
+ final double flat_pos_csup_bearings_bottom_x = ball_pos_csup_bearings_bottom_x + flat_pos_csup_bearings_bottom_3D_rot.getX();
+ final double flat_pos_csup_bearings_bottom_y = ball_pos_csup_bearings_bottom_y + flat_pos_csup_bearings_bottom_3D_rot.getY();
+ final double flat_pos_csup_bearings_bottom_z = ball_pos_csup_bearings_bottom_z + flat_pos_csup_bearings_bottom_3D_rot.getZ();
+
+ // make vectors
+ Hep3Vector ball_pos_csup_bearings_bottom = new BasicHep3Vector(ball_pos_csup_bearings_bottom_x,ball_pos_csup_bearings_bottom_y,ball_pos_csup_bearings_bottom_z);
+ Hep3Vector vee_pos_csup_bearings_bottom = new BasicHep3Vector(vee_pos_csup_bearings_bottom_x,vee_pos_csup_bearings_bottom_y,vee_pos_csup_bearings_bottom_z);
+ Hep3Vector flat_pos_csup_bearings_bottom = new BasicHep3Vector(flat_pos_csup_bearings_bottom_x,flat_pos_csup_bearings_bottom_y,flat_pos_csup_bearings_bottom_z);
+
+ System.out.printf("ball_pos_csup_bearings_bottom %s\n",ball_pos_csup_bearings_bottom);
+ System.out.printf("vee_pos_csup_bearings_bottom %s\n",vee_pos_csup_bearings_bottom);
+ System.out.printf("flat_pos_csup_bearings_bottom %s\n",flat_pos_csup_bearings_bottom);
+
+
+ // create the coordinate system of the c-support bearings
+ //HPSTestRunTracker2014GeomDef.Coord csup_bearings_bottom_coord = new HPSTestRunTracker2014GeomDef.Coord(ball_pos_csup_bearings_bottom, vee_pos_csup_bearings_bottom, flat_pos_csup_bearings_bottom);
+
+ // since we don't care (no volume is built) about the local position of the bearings in the pin coord system we'll get rid of it
+ // and find the bearings position in the base coordinate system directly
+ HPSTestRunTracker2014GeomDef.CSupport csup = new HPSTestRunTracker2014GeomDef.CSupport("c_support_bottom", getMother());
+ Transform3D trans_csup_pin_to_base = csup.getCoord().getTransformation();
+
+ System.out.printf("csup coord \n%s\n",csup.getCoord().toString());
+
+
+ ballPos = trans_csup_pin_to_base.transformed(ball_pos_csup_bearings_bottom);
+ veePos = trans_csup_pin_to_base.transformed(vee_pos_csup_bearings_bottom);
+ flatPos = trans_csup_pin_to_base.transformed(flat_pos_csup_bearings_bottom);
+
+ System.out.printf("ballPos %s\n",ballPos);
+ System.out.printf("veePos %s\n",veePos);
+ System.out.printf("flatPos %s\n",flatPos);
+
+
+ }
+
+ }
+
+
+ protected static class SupportPlate extends BaseGeom {
+ protected static final double support_plate_pocket_depth = 6.65; // Tim's sketchup, drawing says 6.66mm?
+ protected static final double pedestal_height_L1 = 11.00;
+ protected static final double pedestal_height_L2 = 9.50;
+ protected static final double pedestal_height_L3 = 8.00;
+ protected static final double pedestal_height_L4 = 10.00;
+ protected static final double pedestal_height_L5 = 7.00;
+ public SupportPlate(BaseGeom mother, String name) {
+ super(mother,name);
+ }
+
+ }
+
+
+
+
+
+ public static class SupportPlateBottom extends SupportPlate {
+ // support plate references
+ // use a settable rotation to effectively determine the flat and therefore the tilt of the support
+ protected static final double support_plate_bottom_tilt_angle = 0.0;
+ protected static final double support_plate_bottom_height = 12.7;
+ protected static final double support_plate_bottom_length = 736.1;
+ protected static final double support_plate_bottom_width = 120.0;
+
+
+ public SupportPlateBottom(String name, BaseGeom mother) {
+ super(mother,name);
+ ballPos = new BasicHep3Vector(1.0, (17.0-5.0), 6.66+1.34);
+ veePos = new BasicHep3Vector(ballPos.x() + support_plate_bottom_length, ballPos.y(),ballPos.z());
+ flatPos = new BasicHep3Vector(ballPos.x(), ballPos.y() + support_plate_bottom_length,ballPos.z());
+ setCoord();
+ setBoxDim(support_plate_bottom_width,support_plate_bottom_length,support_plate_bottom_height);
+ setCenter(support_plate_bottom_width/2.0, support_plate_bottom_length/2.0, -1.0 * support_plate_bottom_height/2.0);
+ }
+ }
+
+
+ public static class SupportPlateTop extends SupportPlate {
+ // support plate references
+ // use a settable rotation to effectively determine the flat and therefore the tilt of the support
+ protected static final double support_plate_top_tilt_angle = 0.0;
+ protected static final double support_plate_top_length = SupportPlateBottom.support_plate_bottom_length;
+ protected static final double support_plate_top_width = SupportPlateBottom.support_plate_bottom_width;
+ protected static final double support_plate_top_height = SupportPlateBottom.support_plate_bottom_height;
+
+ public SupportPlateTop(String name, BaseGeom mother) {
+ super(mother,name);
+ ballPos = new BasicHep3Vector(1.0, (17.0-5.0), -1.0 * (6.66+1.34));
+ veePos = new BasicHep3Vector(ballPos.x() + support_plate_top_width, ballPos.y(),ballPos.z());
+ flatPos = new BasicHep3Vector(ballPos.x(), ballPos.y() + support_plate_top_length,ballPos.z());
+ setCoord();
+ setBoxDim(support_plate_top_width, support_plate_top_length, support_plate_top_height);
+ setCenter(support_plate_top_width/2.0, support_plate_top_length/2.0, support_plate_top_height/2.0);
+
+ }
+ }
+
+
+
+
+
+
+ public static class Module extends BaseGeom {
+ // module references
+ protected static final double module_box_L13_length = 205.2; // includes lexan spacer and cold block
+ protected static final double module_box_L13_height = 12.5; // includes screws height
+ protected static final double module_box_L13_width = 71.3 - 13.0; // height from cold block to encapsulate the whole module
+ protected static final double module_box_L45_length = 205.2; // includes lexan spacer and cold block
+ protected static final double module_box_L45_height = 12.5; // includes screws height
+ protected static final double module_box_L45_width = 65.3-12.0;
+ protected static final double coldblock_L13_length = 82.00;
+ protected static final double coldblock_L13_width = 52.50;
+ protected static final double coldblock_L13_thickness = 6.00;
+ protected static final double coldblock_L45_length = 82.00;
+ protected static final double coldblock_L45_width = 51.00;
+ protected static final double coldblock_L45_thickness = 6.00;
+
+ public Module(String name, BaseGeom mother, int layer, String half) {
+ super(mother, name);
+ setPos(layer,half);
+ setCoord();
+ }
+
+ private void setPos(int layer, String half) {
+ // bottom
+ if(half=="bottom") {
+ switch (layer) {
+ case 1:
+ ballPos = new BasicHep3Vector(25.0, 661.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L1-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ veePos = new BasicHep3Vector(95.0, 661.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L1-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ flatPos = new BasicHep3Vector(60.0, 667.10, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L1-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ break;
+ case 2:
+ ballPos = new BasicHep3Vector(25.0, 561.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L2-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ veePos = new BasicHep3Vector(95.0, 561.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L2-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ flatPos = new BasicHep3Vector(60.0, 567.10, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L2-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ break;
+ case 3:
+ ballPos = new BasicHep3Vector(25.0, 461.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L3-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ veePos = new BasicHep3Vector(95.0, 461.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L3-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ flatPos = new BasicHep3Vector(60.0, 467.10, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L3-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ break;
+ case 4:
+ ballPos = new BasicHep3Vector(25.0, 261.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L4-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ veePos = new BasicHep3Vector(95.0, 261.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L4-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ flatPos = new BasicHep3Vector(60.0, 267.10, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L4-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ break;
+ case 5:
+ ballPos = new BasicHep3Vector(25.0, 61.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L5-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ veePos = new BasicHep3Vector(95.0, 61.1, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L5-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ flatPos = new BasicHep3Vector(60.0, 67.10, HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L5-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth);
+ break;
+ default:
+ System.out.printf("ERROR invalid layer %d for half %s\n",layer,half);
+ System.exit(1);
+ break;
+ }
+
+ } else if(half=="top") {
+ // top
+ // top has a fixed offset of 15mm along plate on module pocket positions w.r.t. bottom
+ // top local coordinates is rotation pi around u-vec so need to adjust pocket depth coordinate
+
+ switch (layer) {
+ case 1:
+ ballPos = new BasicHep3Vector(25.0, 676.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L1-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ veePos = new BasicHep3Vector(95.0, 676.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L1-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ flatPos = new BasicHep3Vector(60.0, 670.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L1-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ break;
+ case 2:
+ ballPos = new BasicHep3Vector(25.0, 576.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L2-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ veePos = new BasicHep3Vector(95.0, 576.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L2-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ flatPos = new BasicHep3Vector(60.0, 570.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L2-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ break;
+ case 3:
+ ballPos = new BasicHep3Vector(25.0, 476.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L3-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ veePos = new BasicHep3Vector(95.0, 476.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L3-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ flatPos =new BasicHep3Vector(60.0, 470.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L3-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ break;
+ case 4:
+ ballPos = new BasicHep3Vector(25.0, 276.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L4-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ veePos = new BasicHep3Vector(95.0, 276.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L4-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ flatPos = new BasicHep3Vector(60.0, 270.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L4-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ break;
+ case 5:
+ ballPos = new BasicHep3Vector(25.0, 76.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L5-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ veePos = new BasicHep3Vector(95.0, 76.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L5-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ flatPos = new BasicHep3Vector(60.0, 70.1, -1.0 * (HPSTestRunTracker2014GeomDef.SupportPlateBottom.pedestal_height_L5-HPSTestRunTracker2014GeomDef.SupportPlateBottom.support_plate_pocket_depth));
+ break;
+ default:
+ System.out.printf("ERROR invalid layer %d for half %s\n",layer,half);
+ System.exit(1);
+ break;
+ }
+
+
+ } else {
+ System.out.printf("ERROR invalid half %s\n",half);
+ System.exit(1);
+ }
+ }
+
+ }
+
+
+
+
+
+ public static class Coord {
+ private Hep3Vector origin;
+ private Hep3Vector u;
+ private Hep3Vector v;
+ private Hep3Vector w;
+
+ public Coord(Hep3Vector org, Hep3Vector unit_x, Hep3Vector unit_y, Hep3Vector unit_z) {
+ origin = org;
+ u = unit_x;
+ v = unit_y;
+ w = unit_z;
+ }
+
+ private void check() {
+ if(u.magnitude()-1>0.00001 || v.magnitude()-1>0.00001 || v.magnitude()-1>0.00001) {
+ System.out.printf("Error: this coordinate system is ill-defined\n%s\n",this.toString());
+ System.exit(1);
+ }
+ }
+
+ public Coord(Hep3Vector ball, Hep3Vector vee, Hep3Vector flat) {
+ origin = ball;
+ Hep3Vector ball_to_vee = VecOp.sub(vee, ball);
+ u = VecOp.unit(ball_to_vee);
+ Hep3Vector ball_to_flat = VecOp.sub(flat, ball);
+ w = VecOp.unit(VecOp.cross(ball_to_vee,ball_to_flat));
+ v = VecOp.cross(w, u);
+ }
+ /*
+ public void rotate(Hep3Vector euler_angles) {
+ RotationGeant rotation = new RotationGeant(euler_angles.x(), euler_angles.y(), euler_angles.z());
+ rotation.rotate(u);
+ rotation.rotate(v);
+ rotation.rotate(w);
+ }
+ */
+ public void translate(Hep3Vector translation) {
+ // update origin with local translation in u,v,w
+ origin = VecOp.add(origin, translation);
+ }
+ public Hep3Vector origin() {
+ return origin;
+ }
+ public Hep3Vector u() {
+ return u;
+ }
+ public Hep3Vector v() {
+ return v;
+ }
+ public Hep3Vector w() {
+ return w;
+ }
+ public String toString() {
+ return "Coordinate system: \norigin " + origin.toString() + "\nu " + u.toString() + "\nv " + v.toString() + "\nw " + w.toString();
+ }
+
+
+ /**
+ * Find @ITransform3D to the coordinate system defined by the input.
+ * @return resulting 3D transform
+ */
+ public Transform3D getTransformation() {
+ // Find the transform between the two frames - use transform classes here (not really needed)
+ Translation3D translation = new Translation3D(origin.x(), origin.y(), origin.z());
+ //RotationGeant trackingToEnvelopeRotation = new RotationGeant(0, 0, 0);
+ Rotation3D rotation = new Rotation3D(
+ new BasicHep3Matrix(
+ u.x(),v.x(),w.x(),
+ u.y(),v.y(),w.y(),
+ u.z(),v.z(),w.z()
+ ));
+ Transform3D envelopeToSupportTransform = new Transform3D(translation, rotation);
+ return envelopeToSupportTransform;
+ }
+
+
+ }
+
+
+}
+
+
+
+