Commit in projects/lcsim/trunk/detector-framework/src on MAIN
main/java/org/lcsim/detector/converter/compact/DetectorConverter.java+13175 -> 3176
main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014.java+908-3103175 -> 3176
                                                   /HPSTestRunTracker2014GeomDef.java+641added 3176
test/resources/org/lcsim/geometry/subdetector/HPSTestRunTracker2014.xml+30-23175 -> 3176
+1580-312
1 added + 3 modified, total 4 files
Pulling out geom volume definition from converter. Need still to change daughter volumes to module. Work in progress.

projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact
DetectorConverter.java 3175 -> 3176
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact/DetectorConverter.java	2014-07-10 18:47:19 UTC (rev 3175)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact/DetectorConverter.java	2014-07-12 01:27:46 UTC (rev 3176)
@@ -114,6 +114,7 @@
         addSubdetectorConverter(new HPSEcal2Converter());
         addSubdetectorConverter(new HPSEcal3Converter());
         addSubdetectorConverter(new HPSMuonCalorimeterConverter());
+        addSubdetectorConverter(new HPSTestRunTracker2014Converter());
 
         // Support structures.
         addSubdetectorConverter(new PolyconeSupportConverter());

projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/lcdd
HPSTestRunTracker2014.java 3175 -> 3176
--- 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
HPSTestRunTracker2014GeomDef.java added at 3176
--- 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;
+			}
+
+			
+		}
+		
+	
+}
+	
+	
+
+

projects/lcsim/trunk/detector-framework/src/test/resources/org/lcsim/geometry/subdetector
HPSTestRunTracker2014.xml 3175 -> 3176
--- projects/lcsim/trunk/detector-framework/src/test/resources/org/lcsim/geometry/subdetector/HPSTestRunTracker2014.xml	2014-07-10 18:47:19 UTC (rev 3175)
+++ projects/lcsim/trunk/detector-framework/src/test/resources/org/lcsim/geometry/subdetector/HPSTestRunTracker2014.xml	2014-07-12 01:27:46 UTC (rev 3176)
@@ -7,6 +7,10 @@
   </info>
   
   <define>
+	<!-- units -->
+	<constant name="mm" value="0.1*cm"/>
+	<constant name="inch" value="25.4*mm"/>
+
     <!-- world -->
     <constant name="world_side" value="500.0*cm" />
     <constant name="world_x" value="world_side" />
@@ -17,7 +21,22 @@
  	<constant name="tracking_region_radius" value="200.0*cm"/>
     <constant name="tracking_region_min" value="5.0*cm"/>
     <constant name="tracking_region_zmax" value="131.8*cm"/>
-   </define>
+ 
+ <!-- 
+	<constant name="target_pos_wrt_base_plate_x" value="16.23*cm" />
+	<constant name="target_pos_wrt_base_plate_y" value="8.055*cm" />
+	<constant name="target_pos_wrt_base_plate_z" value="92.659*cm" />
+
+	<constant name="base_plate_thickness" value="0.25*inch"/>
+	<constant name="base_plate_width" value="385.00*mm"/>
+	<constant name="base_plate_length" value="1216.00*mm"/>
+
+	<constant name="base_height" value="0.25*inch"/>
+	<constant name="base_width" value="base_plate_width"/>
+	<constant name="base_length" value="base_plate_length"/>
+ -->
+
+  </define>
   
   <materials>
     <!-- Set tracking material to vacuum. -->
@@ -48,7 +67,16 @@
   
   <detectors>
     <detector id="1" name="Tracker" type="HPSTestRunTracker2014" readout="TrackerHits">
-
+    <!-- 
+	  <base_plate>
+	  	<box x="base_plate_width" y="base_plate_length" z="base_plate_thickness"/>
+	  	<ball x="-1.0*target_pos_wrt_base_plate_x" y="-1.0*target_pos_wrt_base_plate_y" z="target_pos_wrt_base_plate_z" />
+	  </base_plate>
+	  <base>
+	  	<box x="base_width" y="base_length" z="base_height"/>
+	  </base>
+	-->
+	  
       <!-- Definition of half module logical volume. -->
       <half_modules>
         <half_module name="SvtHalfModuleLayers1-3">
SVNspam 0.1


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