LISTSERV mailing list manager LISTSERV 16.5

Help for LCDET-SVN Archives


LCDET-SVN Archives

LCDET-SVN Archives


LCDET-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

LCDET-SVN Home

LCDET-SVN Home

LCDET-SVN  November 2014

LCDET-SVN November 2014

Subject:

r3428 - /projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/

From:

[log in to unmask]

Reply-To:

Notification of commits to the lcdet svn repository <[log in to unmask]>

Date:

Sun, 23 Nov 2014 20:47:21 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (1355 lines)

Author: phansson
Date: Sun Nov 23 12:47:16 2014
New Revision: 3428

Log:
Adding top L1-3 and L4-6 plates and modules. Placeholders until I can look at the drawings to figure out how to make the mirror image correctly. Also started refactoring some of the code that's just not reasonable right now.

Modified:
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014LCDDBuilder.java
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014LCDDBuilder.java
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerLCDDBuilder.java

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java	Sun Nov 23 12:47:16 2014
@@ -938,10 +938,10 @@
         // Distance from CF edge to screw hole: 30mm
         // Distance from screw hole to edge of cold block: 33.75mm
         // Distance from edge of cold block to hole/ball position: 5mm
-        protected static final double dist_sensor_center_to_coldblock_hole_vdir = (180.0 - 30.0 + (33.75 - 5.0)) - Sensor.sensor_length/2.0;	
-        protected static final double half_module_thickness = TestRunHalfModule.getHybridThickness() + TestRunHalfModule.getCFThickness() + HalfModuleLamination.kapton_thickness;
+        protected static final double dist_sensor_center_to_coldblock_hole_vdir = (180.0 - 30.0 + (33.75 - 5.0)) - Sensor.length/2.0;	
+        protected static final double half_module_thickness = TestRunHalfModule.getHybridThickness() + TestRunHalfModule.getCFThickness() + HalfModuleLamination.thickness;
         protected static final double half_module_length = TestRunHalfModule.getCFLength();
-        protected static final double half_module_width = 6.83 + Sensor.getSensorWidth();
+        protected static final double half_module_width = 6.83 + Sensor.width;
 
         protected double stereo_angle = 0.0;
 
@@ -956,11 +956,11 @@
             // I'm not sure this feels good but this has to be done somewhere
 //            double box_center_local_x =  TestRunHalfModule.getLength()/2.0 - ( (170.00 + 10.00) - Sensor.getSensorLength()/2.0); 
 //            double box_center_local_y = -1.0*TestRunHalfModule.getThickness()/2.0 + (TestRunHalfModule.getCFThickness() + HalfModuleLamination.kapton_thickness + Sensor.getSensorThickness()/2.0);
-//            double box_center_local_z = TestRunHalfModule.getWidth()/2.0 - ( 12.66 - (8.83 -3.00) + Sensor.getSensorWidth()/2.0 ); 
-            
-            double box_center_local_x =  TestRunHalfModule.getLength()/2.0 - ( (170.00 + 10.00) - Sensor.getSensorLength()/2.0); 
-            double box_center_local_y = - Sensor.getSensorThickness()/2.0 - HalfModuleLamination.kapton_thickness - CarbonFiber.cf_thickness + half_module_thickness/2.0; 
-            double box_center_local_z = TestRunHalfModule.getWidth()/2.0 - ( 12.66 - (8.83 -3.00) + Sensor.getSensorWidth()/2.0 ); 
+//            double box_center_local_z = TestRunHalfModule.getWidth()/2.0 - ( 12.66 - (8.83 -3.00) + Sensor.width/2.0 ); 
+            
+            double box_center_local_x =  TestRunHalfModule.getLength()/2.0 - ( (170.00 + 10.00) - Sensor.length/2.0); 
+            double box_center_local_y = - Sensor.getSensorThickness()/2.0 - HalfModuleLamination.thickness - CarbonFiber.thickness + half_module_thickness/2.0; 
+            double box_center_local_z = TestRunHalfModule.getWidth()/2.0 - ( 12.66 - (8.83 -3.00) + Sensor.width/2.0 ); 
             
             
             if(useSiStripsConvention) {
@@ -989,13 +989,13 @@
             this.stereo_angle = stereo_angle;
         }
         public static double getCFThickness() {
-            return CarbonFiber.cf_thickness;
+            return CarbonFiber.thickness;
         }
         public static double getCFLength() {
-            return CarbonFiber.cf_length;
+            return CarbonFiber.length;
         }
         public static double getCFWidth() {
-            return CarbonFiber.cf_width;
+            return CarbonFiber.width;
         }
         public static double getHybridLength() {
             return Hybrid.hybrid_length;
@@ -1034,12 +1034,12 @@
             final double dist_lower_sensor_edge_to_cold_block_mounting_surface = getLayer() <=3 ? TestRunModuleL13.dist_lower_sensor_edge_to_cold_block_mounting_surface : TestRunModuleL45.dist_lower_sensor_edge_to_cold_block_mounting_surface;
 
             double ball_pos_halfmod_local_x =  dist_sensor_center_to_coldblock_hole_vdir;
-            double ball_pos_halfmod_local_y =  -1.0* (coldBlockThick/2.0 + TestRunHalfModule.getCFThickness() + HalfModuleLamination.kapton_thickness + Sensor.getSensorThickness()/2.0);
+            double ball_pos_halfmod_local_y =  -1.0* (coldBlockThick/2.0 + TestRunHalfModule.getCFThickness() + HalfModuleLamination.thickness + Sensor.getSensorThickness()/2.0);
             if(useFakeHalfModuleAxialPos) {
                 ball_pos_halfmod_local_x = ball_pos_halfmod_local_x*2.0;
                 ball_pos_halfmod_local_y = -2.0*ball_pos_halfmod_local_y;
             }				
-            final double ball_pos_halfmod_local_z =  dist_lower_sensor_edge_to_cold_block_mounting_surface + Sensor.getSensorWidth()/2.0;
+            final double ball_pos_halfmod_local_z =  dist_lower_sensor_edge_to_cold_block_mounting_surface + Sensor.width/2.0;
             
             
             double vee_pos_halfmod_local_x;
@@ -1053,19 +1053,19 @@
             if(useSiStripsConvention) {
 //                vee_pos_halfmod_local_x =  ball_pos_halfmod_local_x;
 //                vee_pos_halfmod_local_y =  ball_pos_halfmod_local_y;
-//                vee_pos_halfmod_local_z =  ball_pos_halfmod_local_z + Sensor.getSensorWidth()/2.0;
+//                vee_pos_halfmod_local_z =  ball_pos_halfmod_local_z + Sensor.width/2.0;
 //                flat_pos_halfmod_local_x =  ball_pos_halfmod_local_x + Sensor.getSensorLength()/2.0;
 //                flat_pos_halfmod_local_y =  ball_pos_halfmod_local_y;
 //                flat_pos_halfmod_local_z =  ball_pos_halfmod_local_z;        
                 vee_pos_halfmod_local_x =  ball_pos_halfmod_local_x;
                 vee_pos_halfmod_local_y =  ball_pos_halfmod_local_y;
-                vee_pos_halfmod_local_z =  ball_pos_halfmod_local_z - Sensor.getSensorWidth()/2.0;
-                flat_pos_halfmod_local_x =  ball_pos_halfmod_local_x + Sensor.getSensorLength()/2.0;
+                vee_pos_halfmod_local_z =  ball_pos_halfmod_local_z - Sensor.width/2.0;
+                flat_pos_halfmod_local_x =  ball_pos_halfmod_local_x + Sensor.length/2.0;
                 flat_pos_halfmod_local_y =  ball_pos_halfmod_local_y;
                 flat_pos_halfmod_local_z =  ball_pos_halfmod_local_z;        
 
             } else {
-                vee_pos_halfmod_local_x =  ball_pos_halfmod_local_x + Sensor.getSensorLength()/2.0;
+                vee_pos_halfmod_local_x =  ball_pos_halfmod_local_x + Sensor.length/2.0;
                 vee_pos_halfmod_local_y =  ball_pos_halfmod_local_y;
                 vee_pos_halfmod_local_z =  ball_pos_halfmod_local_z;
                 flat_pos_halfmod_local_x =  ball_pos_halfmod_local_x;
@@ -1112,7 +1112,7 @@
 //            final double ball_pos_halfmod_local_x =  dist_sensor_center_to_coldblock_hole_vdir;
 //            // note minus sign to separate from axial
 //            final double ball_pos_halfmod_local_y =  -1.0 * (-1.0* (coldBlockThick/2.0 + TestRunHalfModule.getCFThickness() + HalfModuleLamination.kapton_thickness + Sensor.getSensorThickness()/2.0));
-//            final double ball_pos_halfmod_local_z =  dist_lower_sensor_edge_to_cold_block_mounting_surface + Sensor.getSensorWidth()/2.0;
+//            final double ball_pos_halfmod_local_z =  dist_lower_sensor_edge_to_cold_block_mounting_surface + Sensor.width/2.0;
 //            final double vee_pos_halfmod_local_x =  ball_pos_halfmod_local_x + Sensor.getSensorLength()/2.0;
 //            final double vee_pos_halfmod_local_y =  ball_pos_halfmod_local_y;
 //            final double vee_pos_halfmod_local_z =  ball_pos_halfmod_local_z;
@@ -1135,14 +1135,14 @@
 
             ball_pos_halfmod_local_x =  dist_sensor_center_to_coldblock_hole_vdir;
             // note minus sign to separate from axial
-            ball_pos_halfmod_local_y =  -1.0 * (-1.0* (coldBlockThick/2.0 + TestRunHalfModule.getCFThickness() + HalfModuleLamination.kapton_thickness + Sensor.getSensorThickness()/2.0));
-            ball_pos_halfmod_local_z =  dist_lower_sensor_edge_to_cold_block_mounting_surface + Sensor.getSensorWidth()/2.0;
+            ball_pos_halfmod_local_y =  -1.0 * (-1.0* (coldBlockThick/2.0 + TestRunHalfModule.getCFThickness() + HalfModuleLamination.thickness + Sensor.getSensorThickness()/2.0));
+            ball_pos_halfmod_local_z =  dist_lower_sensor_edge_to_cold_block_mounting_surface + Sensor.width/2.0;
             
             if(useSiStripsConvention) {
 
 //                vee_pos_halfmod_local_x =  ball_pos_halfmod_local_x ;
 //                vee_pos_halfmod_local_y =  ball_pos_halfmod_local_y;
-//                vee_pos_halfmod_local_z =  ball_pos_halfmod_local_z + Sensor.getSensorWidth()/2.0;
+//                vee_pos_halfmod_local_z =  ball_pos_halfmod_local_z + Sensor.width/2.0;
 //                flat_pos_halfmod_local_x =  ball_pos_halfmod_local_x + Sensor.getSensorLength()/2.0;
 //                flat_pos_halfmod_local_y =  ball_pos_halfmod_local_y;
 //                flat_pos_halfmod_local_z =  ball_pos_halfmod_local_z;      
@@ -1151,7 +1151,7 @@
 
                 //                vee_pos_halfmod_local_x =  ball_pos_halfmod_local_x;
                 //                vee_pos_halfmod_local_y =  ball_pos_halfmod_local_y;
-                //                vee_pos_halfmod_local_z =  ball_pos_halfmod_local_z - Sensor.getSensorWidth()/2.0;
+                //                vee_pos_halfmod_local_z =  ball_pos_halfmod_local_z - Sensor.width/2.0;
                 //                flat_pos_halfmod_local_x =  ball_pos_halfmod_local_x + Sensor.getSensorLength()/2.0;
                 //                flat_pos_halfmod_local_y =  ball_pos_halfmod_local_y;
                 //                flat_pos_halfmod_local_z =  ball_pos_halfmod_local_z;            
@@ -1159,15 +1159,15 @@
                 
                 vee_pos_halfmod_local_x =  ball_pos_halfmod_local_x;
                 vee_pos_halfmod_local_y =  ball_pos_halfmod_local_y;
-                vee_pos_halfmod_local_z =  ball_pos_halfmod_local_z - Sensor.getSensorWidth()/2.0;
-                flat_pos_halfmod_local_x =  ball_pos_halfmod_local_x + Sensor.getSensorLength()/2.0;
+                vee_pos_halfmod_local_z =  ball_pos_halfmod_local_z - Sensor.width/2.0;
+                flat_pos_halfmod_local_x =  ball_pos_halfmod_local_x + Sensor.length/2.0;
                 flat_pos_halfmod_local_y =  ball_pos_halfmod_local_y;
                 flat_pos_halfmod_local_z =  ball_pos_halfmod_local_z;        
                 
 
             } else {
                 
-                 vee_pos_halfmod_local_x =  ball_pos_halfmod_local_x + Sensor.getSensorLength()/2.0;
+                 vee_pos_halfmod_local_x =  ball_pos_halfmod_local_x + Sensor.length/2.0;
                  vee_pos_halfmod_local_y =  ball_pos_halfmod_local_y;
                  vee_pos_halfmod_local_z =  ball_pos_halfmod_local_z;
                  flat_pos_halfmod_local_x =  ball_pos_halfmod_local_x;
@@ -1336,32 +1336,24 @@
      *
      */
     public static class Sensor extends HalfModuleComponent {
-        static final double sensor_length= 100.00; 
-        private static final double sensor_width = 40.34; 
-        private static final double sensor_thickness = 0.32;
+        static final double length= 100.00; 
+        static final double width = 40.34; 
+        static final double thickness = 0.32;
+        static final double height = thickness;
         public Sensor(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, int id) {
             super(name, mother, alignmentCorrection, id);
             init();
-        }			
-        public static double getSensorLength() {
-            return sensor_length;
-        }
-        public static double getSensorWidth() {
-            return sensor_width;
-        }
-        public static double getSensorHeight() {
-            return sensor_thickness;
         }
         public static double getSensorThickness() {
-            return getSensorHeight();
+            return height;
         }
         protected void setPos() {
             
             if(debug) System.out.printf("%s: setPos for %s\n",this.getClass().getSimpleName(),getName());
 
             setBallPos(0,0,0);
-            setVeePos(ballPos.x() + getSensorWidth()/2.0, ballPos.y(), ballPos.z());
-            setFlatPos(ballPos.x(),ballPos.y() + getSensorLength()/2.0, ballPos.z());                   
+            setVeePos(ballPos.x() + width/2.0, ballPos.y(), ballPos.z());
+            setFlatPos(ballPos.x(),ballPos.y() + length/2.0, ballPos.z());                   
             
 //            if(useSiStripsConvention) {
 //                setBallPos(0,0,0);
@@ -1384,22 +1376,22 @@
         }
         protected void setBoxDim() {
             if(useSiStripsConvention) {
-                setBoxDim(getSensorWidth(),getSensorLength(),getSensorThickness());
+                setBoxDim(width,length,thickness);
             } else {
-                setBoxDim(getSensorLength(),getSensorThickness(),getSensorWidth());
+                setBoxDim(length,thickness,width);
             }
         }
         protected double getThickness() {
-            return getSensorThickness();
+            return thickness;
         }
         protected double getHeigth() {
-            return getSensorHeight();
+            return thickness;
         }
         protected double getWidth() {
-            return getSensorWidth();
+            return width;
         }
         protected double getLength() {
-            return getSensorLength();
+            return length;
         }			
     }
 
@@ -1410,21 +1402,21 @@
      *
      */
     public static class ActiveSensor extends SurveyVolume {
-        private static final double sensor_active_length= 98.33;
-        private static final double sensor_active_width = 38.3399;
-        private static final double sensor_active_thickness = Sensor.sensor_thickness;
+        private static final double length= 98.33;
+        private static final double width = 38.3399;
+        private static final double thickness = Sensor.thickness;
         public ActiveSensor(String name, SurveyVolume m) {
             super(name, m, null);
             init();
         }
         public static double getActiveSensorLength() {
-            return sensor_active_length;
+            return length;
         }
         public static double getActiveSensorWidth() {
-            return sensor_active_width;
+            return width;
         }
         public static double getActiveSensorHeight() {
-            return sensor_active_thickness;
+            return thickness;
         }
         public static double getActiveSensorThickness() {
             return getActiveSensorHeight();
@@ -1475,9 +1467,9 @@
      *
      */
     public static class HalfModuleLamination extends HalfModuleComponent {
-        protected static final double kapton_length = 184.0;
-        protected static final double kapton_width = 40.0; // -2.0; // width under the sensor, 2mm wider under hybrid.
-        protected static final double kapton_thickness = 0.050;
+        protected static final double length = 184.0;
+        protected static final double width = 40.0; // -2.0; // width under the sensor, 2mm wider under hybrid.
+        protected static final double thickness = 0.050;
         public HalfModuleLamination(String name, SurveyVolume m, int id) {
             super(name, m, null, id);
             init();
@@ -1488,7 +1480,7 @@
 
             //             double ball_pos_kapton_local_x =  -1 * (180.0 - Sensor.getSensorLength()/2.0) + 8.5;
             //             double ball_pos_kapton_local_y =  (Sensor.getSensorThickness()/2.0 + HalfModuleLamination.kapton_thickness/2.0);
-            //             double ball_pos_kapton_local_z = -1 * (Sensor.getSensorWidth()/2.0 + 12.66) + 8.83 - 3.00 + 6.00 ;
+            //             double ball_pos_kapton_local_z = -1 * (Sensor.width/2.0 + 12.66) + 8.83 - 3.00 + 6.00 ;
             //             double vee_pos_kapton_local_x =  ball_pos_kapton_local_x + 1.0; // arbitrary distance
             //             double vee_pos_kapton_local_y =  ball_pos_kapton_local_y;
             //             double vee_pos_kapton_local_z =  ball_pos_kapton_local_z;
@@ -1496,19 +1488,19 @@
             //             double flat_pos_kapton_local_y =  ball_pos_kapton_local_y + HalfModuleLamination.kapton_thickness/2.0; // arbitrary distance
             //             double flat_pos_kapton_local_z =  ball_pos_kapton_local_z;
 
-//            double ball_pos_kapton_local_x =  -1 * (Sensor.getSensorWidth()/2.0 + 12.66) + 8.83 - 3.00 + 6.00;
+//            double ball_pos_kapton_local_x =  -1 * (Sensor.width/2.0 + 12.66) + 8.83 - 3.00 + 6.00;
 //            double ball_pos_kapton_local_y =  -1 * (180.0 - Sensor.getSensorLength()/2.0) + 8.5;
 //            double ball_pos_kapton_local_z = (Sensor.getSensorThickness()/2.0 + HalfModuleLamination.kapton_thickness/2.0);
-//            double vee_pos_kapton_local_x =  ball_pos_kapton_local_x + Sensor.getSensorWidth()/2.0; // arbitrary distance
+//            double vee_pos_kapton_local_x =  ball_pos_kapton_local_x + Sensor.width/2.0; // arbitrary distance
 //            double vee_pos_kapton_local_y =  ball_pos_kapton_local_y;
 //            double vee_pos_kapton_local_z =  ball_pos_kapton_local_z;
 //            double flat_pos_kapton_local_x =  ball_pos_kapton_local_x;
 //            double flat_pos_kapton_local_y =  ball_pos_kapton_local_y + Sensor.getSensorLength(); // arbitrary distance
 //            double flat_pos_kapton_local_z =  ball_pos_kapton_local_z;
 
-            double ball_pos_kapton_local_x =  Sensor.sensor_width/2.0 + 6.83 - 6.0 - kapton_width/2.0;
-            double ball_pos_kapton_local_y =  Sensor.getSensorLength()/2.0 - 170.0 - 10.0 + 8.5 + kapton_length/2.0;
-            double ball_pos_kapton_local_z = -1.0 * (Sensor.getSensorThickness()/2.0 + HalfModuleLamination.kapton_thickness/2.0);
+            double ball_pos_kapton_local_x =  Sensor.width/2.0 + 6.83 - 6.0 - width/2.0;
+            double ball_pos_kapton_local_y =  Sensor.length/2.0 - 170.0 - 10.0 + 8.5 + length/2.0;
+            double ball_pos_kapton_local_z = -1.0 * (Sensor.getSensorThickness()/2.0 + HalfModuleLamination.thickness/2.0);
             
             //ballPos = new BasicHep3Vector(ball_pos_kapton_local_x,ball_pos_kapton_local_y,ball_pos_kapton_local_z);
             //veePos = new BasicHep3Vector(vee_pos_kapton_local_x,vee_pos_kapton_local_y,vee_pos_kapton_local_z);
@@ -1530,16 +1522,16 @@
             //setCenter(getWidth()/2.0, getLength()/2.0,0.0);
         }
         protected  double getThickness() {
-            return kapton_thickness;
+            return thickness;
         }
         protected  double getHeigth() {
             return getThickness();
         }
         protected  double getWidth() {
-            return kapton_width;
+            return width;
         }
         protected  double getLength() {
-            return kapton_length;
+            return length;
         }
         protected void setBoxDim() {
             setBoxDim(getWidth(),getLength(),getThickness());
@@ -1554,9 +1546,9 @@
      *
      */
     public static class CarbonFiber extends HalfModuleComponent {
-        protected static  final double cf_length = 200.;
-        protected static  final double cf_width = 45.;
-        protected static  final double cf_thickness = 0.250;
+        protected static  final double length = 200.;
+        protected static  final double width = 45.;
+        protected static  final double thickness = 0.250;
         public CarbonFiber(String name, SurveyVolume m, int id) {
             super(name, m, null, id);
             init();
@@ -1567,7 +1559,7 @@
             
 //            final double ball_pos_cf_local_x =  -1 * (180.0 - Sensor.getSensorLength()/2.0);
 //            final double ball_pos_cf_local_y =  (Sensor.getSensorThickness()/2.0 + HalfModuleLamination.kapton_thickness + TestRunHalfModule.getCFThickness()/2.0);
-//            final double ball_pos_cf_local_z = -1 * (Sensor.getSensorWidth()/2.0 + 12.66) + 8.83 - 3.00;
+//            final double ball_pos_cf_local_z = -1 * (Sensor.width/2.0 + 12.66) + 8.83 - 3.00;
 //            final double vee_pos_cf_local_x =  ball_pos_cf_local_x + 1.0; // arbitrary distance
 //            final double vee_pos_cf_local_y =  ball_pos_cf_local_y;
 //            final double vee_pos_cf_local_z =  ball_pos_cf_local_z;
@@ -1578,10 +1570,10 @@
 //            setVeePos(vee_pos_cf_local_x,vee_pos_cf_local_y,vee_pos_cf_local_z);
 //            setFlatPos(flat_pos_cf_local_x,flat_pos_cf_local_y,flat_pos_cf_local_z);
            
-//            final double ball_pos_cf_local_x =  -1 * (Sensor.getSensorWidth()/2.0 + 12.66) + 8.83 - 3.00;
+//            final double ball_pos_cf_local_x =  -1 * (Sensor.width/2.0 + 12.66) + 8.83 - 3.00;
 //            final double ball_pos_cf_local_y =  -1 * (180.0 - Sensor.getSensorLength()/2.0);
 //            final double ball_pos_cf_local_z = (Sensor.getSensorThickness()/2.0 + HalfModuleLamination.kapton_thickness + TestRunHalfModule.getCFThickness()/2.0);
-//            final double vee_pos_cf_local_x =  ball_pos_cf_local_x + Sensor.getSensorWidth()/2.0; // arbitrary distance
+//            final double vee_pos_cf_local_x =  ball_pos_cf_local_x + Sensor.width/2.0; // arbitrary distance
 //            final double vee_pos_cf_local_y =  ball_pos_cf_local_y;
 //            final double vee_pos_cf_local_z =  ball_pos_cf_local_z;
 //            final double flat_pos_cf_local_x =  ball_pos_cf_local_x;
@@ -1592,9 +1584,9 @@
 //            setFlatPos(flat_pos_cf_local_x,flat_pos_cf_local_y,flat_pos_cf_local_z);
  
             
-            final double ball_pos_cf_local_x =  Sensor.getSensorWidth()/2.0 + 6.83 - cf_width/2.0;
-            final double ball_pos_cf_local_y =  Sensor.getSensorLength()/2.0 - 170.0 - 10.0 + cf_length/2.0;
-            final double ball_pos_cf_local_z =  -1 * ( Sensor.getSensorThickness()/2.0 + HalfModuleLamination.kapton_thickness + TestRunHalfModule.getCFThickness()/2.0 );
+            final double ball_pos_cf_local_x =  Sensor.width/2.0 + 6.83 - width/2.0;
+            final double ball_pos_cf_local_y =  Sensor.length/2.0 - 170.0 - 10.0 + length/2.0;
+            final double ball_pos_cf_local_z =  -1 * ( Sensor.getSensorThickness()/2.0 + HalfModuleLamination.thickness + TestRunHalfModule.getCFThickness()/2.0 );
             
             ballPos = new BasicHep3Vector(ball_pos_cf_local_x, ball_pos_cf_local_y, ball_pos_cf_local_z);
             veePos = new BasicHep3Vector(ballPos.x() + 1.0, ballPos.y(), ballPos.z());
@@ -1614,13 +1606,13 @@
             //setCenter(getLength()/2.0, 0.0, getWidth()/2.0);
         }
         protected double getThickness() {
-            return cf_thickness;
+            return thickness;
         }
         protected double getWidth() {
-            return cf_width;
+            return width;
         }
         protected double getLength() {
-            return cf_length;
+            return length;
         }
         protected double getHeigth() {
             return getThickness();
@@ -1638,8 +1630,8 @@
      *
      */
     public static class Hybrid extends HalfModuleComponent {
-        protected static final double hybrid_length = 170.0 - Sensor.getSensorLength(); // sensor b-to-b with hybrid
-        protected static final double hybrid_width  = Sensor.getSensorWidth();
+        protected static final double hybrid_length = 170.0 - Sensor.length; // sensor b-to-b with hybrid
+        protected static final double hybrid_width  = Sensor.width;
         protected static final double hybrid_thickness = 4.0/64.0*inch;
         public Hybrid(String name, SurveyVolume m, int id) {
             super(name, m, null, id);
@@ -1651,7 +1643,7 @@
             
 //            final double ball_pos_hybrid_local_x =  -1 * (170.0 - Sensor.getSensorLength()/2.0);
 //            final double ball_pos_hybrid_local_y =  (Sensor.getSensorThickness()/2.0 - TestRunHalfModule.getHybridThickness()/2.0);
-//            final double ball_pos_hybrid_local_z = -1 * (Sensor.getSensorWidth()/2.0);
+//            final double ball_pos_hybrid_local_z = -1 * (Sensor.width/2.0);
 //            final double vee_pos_hybrid_local_x =  ball_pos_hybrid_local_x + 1.0; // arbitrary distance
 //            final double vee_pos_hybrid_local_y =  ball_pos_hybrid_local_y;
 //            final double vee_pos_hybrid_local_z =  ball_pos_hybrid_local_z;
@@ -1662,10 +1654,10 @@
 //            setVeePos(vee_pos_hybrid_local_x,vee_pos_hybrid_local_y,vee_pos_hybrid_local_z);
 //            setFlatPos(flat_pos_hybrid_local_x,flat_pos_hybrid_local_y,flat_pos_hybrid_local_z);
             
-//            final double ball_pos_hybrid_local_x =  -1 * (Sensor.getSensorWidth()/2.0);
+//            final double ball_pos_hybrid_local_x =  -1 * (Sensor.width/2.0);
 //            final double ball_pos_hybrid_local_y =  -1 * (170.0 - Sensor.getSensorLength()/2.0);
 //            final double ball_pos_hybrid_local_z = (Sensor.getSensorThickness()/2.0 - TestRunHalfModule.getHybridThickness()/2.0);
-//            final double vee_pos_hybrid_local_x =  ball_pos_hybrid_local_x + Sensor.getSensorWidth()/2.0; // arbitrary distance
+//            final double vee_pos_hybrid_local_x =  ball_pos_hybrid_local_x + Sensor.width/2.0; // arbitrary distance
 //            final double vee_pos_hybrid_local_y =  ball_pos_hybrid_local_y;
 //            final double vee_pos_hybrid_local_z =  ball_pos_hybrid_local_z;
 //            final double flat_pos_hybrid_local_x =  ball_pos_hybrid_local_x;
@@ -1676,7 +1668,7 @@
 //            setFlatPos(flat_pos_hybrid_local_x,flat_pos_hybrid_local_y,flat_pos_hybrid_local_z);
             
             final double ball_pos_hybrid_local_x =  0.0;
-            final double ball_pos_hybrid_local_y =  Sensor.getSensorLength()/2.0 - 170.0 + hybrid_length/2.0;
+            final double ball_pos_hybrid_local_y =  Sensor.length/2.0 - 170.0 + hybrid_length/2.0;
             final double ball_pos_hybrid_local_z = -1.0*Sensor.getSensorThickness()/2.0 + hybrid_thickness/2.0;
             
             ballPos = new BasicHep3Vector(ball_pos_hybrid_local_x,ball_pos_hybrid_local_y, ball_pos_hybrid_local_z);

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014LCDDBuilder.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014LCDDBuilder.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014LCDDBuilder.java	Sun Nov 23 12:47:16 2014
@@ -171,7 +171,7 @@
 
 	}	
 
-
+/*
 	public void setVisualization() {
 
 		if(isDebug()) System.out.printf("%s: Set LCDD visualization for %d LCDD geometry objects \n", getClass().getSimpleName(), lcddSurveyVolumes.size());
@@ -196,6 +196,6 @@
 		}
 		if(isDebug()) System.out.printf("%s: DONE Set LCDD vis \n", getClass().getSimpleName());
 	}
-
+*/
 
 }

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java	Sun Nov 23 12:47:16 2014
@@ -36,7 +36,7 @@
         doStereo = true;
         doColdBlock = false;
         doBottom = true;
-        doTop = false;
+        doTop = true;
         layerBitMask = 0x3F;
     }
 
@@ -69,18 +69,33 @@
         SupportRingL13BottomKinMount supportRingKinL13Bottom = new SupportRingL13BottomKinMount("c_support_kin_L13b", svtBox, null, supportRing); 
         surveyVolumes.add(supportRingKinL13Bottom);
         
-        UChannelL13Bottom uChannelL13Bottom = new UChannelL13Bottom("support_bottom_L13", svtBox, null, supportRingKinL13Bottom); 
+        UChannelL13 uChannelL13Bottom = new UChannelL13Bottom("support_bottom_L13", svtBox, null, supportRingKinL13Bottom); 
         surveyVolumes.add(uChannelL13Bottom);
         
-        UChannelL13BottomPlate uChannelL13BottomPlate = new UChannelL13BottomPlate("support_plate_bottom_L13", uChannelL13Bottom, null); 
+        UChannelL13Plate uChannelL13BottomPlate = new UChannelL13BottomPlate("support_plate_bottom_L13", uChannelL13Bottom, null); 
         surveyVolumes.add(uChannelL13BottomPlate);
-        
-        UChannelL46Bottom uChannelL46Bottom = new UChannelL46Bottom("support_bottom_L46", svtBox, null);
+
+        SupportRingL13TopKinMount supportRingKinL13Top = new SupportRingL13TopKinMount("c_support_kin_L13t", svtBox, null, supportRing); 
+        surveyVolumes.add(supportRingKinL13Top);
+
+        UChannelL13Top uChannelL13Top = new UChannelL13Top("support_top_L13", svtBox, null, supportRingKinL13Top); 
+        surveyVolumes.add(uChannelL13Top);
+        
+        UChannelL13Plate uChannelL13TopPlate = new UChannelL13TopPlate("support_plate_top_L13", uChannelL13Top, null); 
+        surveyVolumes.add(uChannelL13TopPlate);
+        
+        UChannelL46 uChannelL46Bottom = new UChannelL46Bottom("support_bottom_L46", svtBox, null);
         surveyVolumes.add(uChannelL46Bottom);
         
-        UChannelL46BottomPlate uChannelL46BottomPlate = new UChannelL46BottomPlate("support_plate_bottom_L46", uChannelL46Bottom, null);
+        UChannelL46Plate uChannelL46BottomPlate = new UChannelL46BottomPlate("support_plate_bottom_L46", uChannelL46Bottom, null);
         surveyVolumes.add(uChannelL46BottomPlate);
-        
+
+        UChannelL46 uChannelL46Top = new UChannelL46Top("support_top_L46", svtBox, null);
+        surveyVolumes.add(uChannelL46Top);
+        
+        UChannelL46Plate uChannelL46TopPlate = new UChannelL46TopPlate("support_plate_top_L46", uChannelL46Top, null);
+        surveyVolumes.add(uChannelL46TopPlate);
+
         
         for(int l=1; l<=6;++l) {
             if(doLayer(l)) {
@@ -292,32 +307,42 @@
     
     
     /**
-     * @SurveyVolume volume defining the coordinate system from the kinematic mount positions
+     * Abstract @SurveyVolume volume defining a coordinate system from the kinematic mount positions for support channels
+     *  
+     * @author Per Hansson Adrian <[log in to unmask]>
+     *
+     */
+    public abstract static class SupportRingL13KinMount extends SurveyVolume {
+
+        public static final double kin_mount_offset_vertically = 0.113*inch; // TODO fix this offset
+        
+        public SupportRingL13KinMount(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+           super(name, mother, alignmentCorrection, ref);
+        }
+        protected void setCenter() {
+            setCenter(null); //dummy
+        }
+        protected void setBoxDim() {
+            // do nothing
+        }
+    }
+    
+    /**
+     * @SurveyVolume volume defining a coordinate system from the kinematic mount positions for support channels
      *  Reference: @SupportRing coordinate system
      *  Origin: cone mount (it's on the electron side)
-     *  Orientation: slot mount is vee position.
+     *  Orientation: ball is cone mount, slot mount is vee position and flat is along beamline pointing upstream
      *  
      * @author Per Hansson Adrian <[log in to unmask]>
      *
      */
-    public static class SupportRingL13BottomKinMount extends SurveyVolume {
-
-        public static final double kin_mount_offset_vertically = 0.113*inch; // TODO fix this offset
-        
+    public static class SupportRingL13BottomKinMount extends SupportRingL13KinMount {
+
         public SupportRingL13BottomKinMount(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
            super(name, mother, alignmentCorrection, ref);
            init();
         }
-        protected void setCenter() {
-            setCenter(null); //dummy
-        }
-        protected void setBoxDim() {
-            // do nothing
-        }
-        protected void setPos() {
-
-            //if(debug) 
-            //System.out.printf("%s: setPos\n", this.getClass().getSimpleName());
+        protected void setPos() {
 
             final double ball_pos_x = (7.0 - 5.444) *inch;
             final double ball_pos_y = 0.574*inch;
@@ -337,10 +362,81 @@
         
     }
     
-    
-    
-    /**
-     * @SurveyVolume volume defining the coordinate system of the u-channel 
+    /**
+     * @SurveyVolume volume defining a coordinate system from the kinematic mount positions for support channels
+     *  Reference: @SupportRing coordinate system
+     *  Origin: cone mount (it's on the electron side)
+     *  Orientation: ball is cone mount, slot mount is vee position and flat is along beamline pointing upstream
+     *  
+     * @author Per Hansson Adrian <[log in to unmask]>
+     *
+     */
+    public static class SupportRingL13TopKinMount extends SupportRingL13KinMount {
+        
+        // TODO Check this offset
+        public static final double offset_vertically_wrt_bottom = 200.0;
+
+        public SupportRingL13TopKinMount(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+           super(name, mother, alignmentCorrection, ref);
+           init();
+        }
+        protected void setPos() {
+
+            // These are the same as for the bottom kin mounts except for the vertical offset
+            final double ball_pos_x = (7.0 - 5.444) *inch;
+            final double ball_pos_y = 0.574*inch;
+            final double ball_pos_z = SupportRing.plate_thickness + kin_mount_offset_vertically + offset_vertically_wrt_bottom;
+            ballPos = new BasicHep3Vector(ball_pos_x, ball_pos_y, ball_pos_z);
+            
+            final double vee_pos_x = (2*7.0)*inch;
+            final double vee_pos_y = ball_pos_y;
+            final double vee_pos_z = ball_pos_z;
+            veePos = new BasicHep3Vector(vee_pos_x, vee_pos_y, vee_pos_z);
+            
+            final double flat_pos_x = ball_pos_x;
+            final double flat_pos_y = ball_pos_y + 1.0; // random distance
+            final double flat_pos_z = ball_pos_z;
+            flatPos = new BasicHep3Vector(flat_pos_x,flat_pos_y,flat_pos_z);
+        }
+        
+    }
+    
+    
+    /**
+     * Abstract @SurveyVolume volume defining the coordinate system of the L1-3 u-channels 
+     *  
+     *  @author Per Hansson Adrian <[log in to unmask]>
+     */
+    public abstract static class UChannelL13 extends SurveyVolume {
+
+        public static final double width = UChannelL13Plate.width;
+        public static final double height = 2.575*inch;
+        public static final double kin_mount_to_edge_of_plate_x = width/2.0-4.0*inch;
+        public static final double side_plate_cone_y = 2.0*inch;
+
+        public UChannelL13(String name, SurveyVolume m,
+                AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+            super(name, m, alignmentCorrection, ref);
+        }
+
+        protected void setBoxDim() {
+            setBoxDim(getWidth(),getLength(),getHeight());
+        }
+        
+        protected double getWidth() {
+            return width;
+        }
+        
+        protected abstract double getLength();
+        
+        protected double getHeight() {
+            return height;
+        }
+        
+    }
+    
+    /**
+     * @SurveyVolume volume defining the coordinate system of the bottom L1-3 u-channel 
      *  Reference: SupportRingL13BottomKinMount coordinate system
      *  Origin: midpoint between upstream survey cones
      *  Orientation: u - width pointing towards electron side, v - pointing along the U-channel in the beam direction
@@ -348,19 +444,11 @@
      *  @author Per Hansson Adrian <[log in to unmask]>
      *
      */
-    public static class UChannelL13Bottom extends SurveyVolume {
-        public final static double width = UChannelL13BottomPlate.width;
+    public static class UChannelL13Bottom extends UChannelL13 {
         public final static double length = UChannelL13BottomPlate.length;
-        public final static double height = 2.575*inch;
-        public static final double kin_mount_to_edge_of_plate_x = width/2.0-4.0*inch; 
         public static final double kin_mount_to_edge_of_plate_y = length-15.8*inch;
         public final static double cone_to_edge_of_plate_y = 12.25*inch; 
         public final static double cone_to_L1_hole_y = cone_to_edge_of_plate_y - kin_mount_to_edge_of_plate_y; 
-        public final static double side_plate_cone_y = 2.0*inch;
-        
-        
-        
-        
         public UChannelL13Bottom(String name, SurveyVolume m,
                 AlignmentCorrection alignmentCorrection,
                 SurveyVolume ref) {
@@ -370,11 +458,8 @@
         protected void setCenter() {
             final double x = 0.0;
             final double y = cone_to_L1_hole_y + kin_mount_to_edge_of_plate_y - length/2.0;
-            final double z = -side_plate_cone_y - UChannelL13BottomPlate.height + height/2.0;
+            final double z = -side_plate_cone_y - UChannelL13Plate.height + height/2.0;
             setCenter(x,y,z);
-        }
-        protected void setBoxDim() {
-            setBoxDim(width,length,height);
         }
         protected void setPos() {
             //locate cone from pin hole
@@ -386,19 +471,76 @@
             veePos = new BasicHep3Vector(ballPos.x()-1, ballPos.y(), ballPos.z());
             flatPos = new BasicHep3Vector(ballPos.x(), ballPos.y()-1, ballPos.z());
         }
-    }
-
-    
-    
+        
+        protected double getLength() {
+           return length;
+        }
+    }
+
+    
+    /**
+     * @SurveyVolume volume defining the coordinate system of the top L1-3 u-channel 
+     *  Reference: SupportRingL13TopKinMount coordinate system
+     *  Origin: midpoint between upstream survey cones
+     *  Orientation: u - width pointing towards electron side, v - pointing along the U-channel in the beam direction
+     *  
+     *  @author Per Hansson Adrian <[log in to unmask]>
+     *
+     */
+    public static class UChannelL13Top extends UChannelL13 {
+        public final static double length = UChannelL13TopPlate.length;
+        public static final double kin_mount_to_edge_of_plate_y = length-15.8*inch;
+        public final static double cone_to_edge_of_plate_y = 12.25*inch; 
+        public final static double cone_to_L1_hole_y = cone_to_edge_of_plate_y - kin_mount_to_edge_of_plate_y; 
+        public UChannelL13Top(String name, SurveyVolume m,
+                AlignmentCorrection alignmentCorrection,
+                SurveyVolume ref) {
+            super(name, m, alignmentCorrection, ref);
+            init();
+        }
+        protected void setCenter() {
+            final double x = 0.0;
+            final double y = cone_to_L1_hole_y + kin_mount_to_edge_of_plate_y - length/2.0;
+            final double z = -side_plate_cone_y - UChannelL13Plate.height + height/2.0;
+            setCenter(x,y,z);
+        }
+        protected void setPos() {
+            //locate cone from pin hole
+            final double ball_pos_x = 4*inch;
+            final double ball_pos_y = (4.175 + 2*3.937) * inch; 
+            final double ball_pos_z = side_plate_cone_y; // TODO need to find distance to surface from kin mount
+            
+            ballPos = new BasicHep3Vector(ball_pos_x, ball_pos_y, ball_pos_z);
+            veePos = new BasicHep3Vector(ballPos.x()-1, ballPos.y(), ballPos.z());
+            flatPos = new BasicHep3Vector(ballPos.x(), ballPos.y()-1, ballPos.z());
+        }
+        
+        protected double getLength() {
+           return length;
+        }
+    }
+
+    
+    
+    
+    /**
+     * Abstract @SurveyVolume volume defining the coordinate system of the u-channel plate
+
+     * @author Per Hansson Adrian <[log in to unmask]>
+     *
+     */
     public abstract static class UChannelL13Plate extends SurveyVolume {
         public final static double pocket_depth_L1 = 0.025;
         public final static double pocket_depth_L2 = pocket_depth_L1 + 0.059;
         public final static double pocket_depth_L3 = pocket_depth_L2 + 0.059;
         public final static double module_mounting_hole_to_hole_x =3.937*inch;
+        public static final double width = 9.25*inch;
+        public static final double height = 0.375*inch;
         
         public UChannelL13Plate(String name, SurveyVolume m,
                 AlignmentCorrection alignmentCorrection) {
             super(name, m, alignmentCorrection);
+            setMaterial("Aluminum");
         }
         
         /**
@@ -414,12 +556,30 @@
                  throw new RuntimeException("Trying to create a L1-3 module with invalid layer nr: " + layer);
              }
         }
-        
-    }
-        
-    
-    /**
-     * @SurveyVolume volume defining the coordinate system of the u-channel plate
+
+        protected void setBoxDim() {
+            setBoxDim(getWidth(), getLength(), getHeight());
+        }
+
+        protected void setPos() {
+           ballPos = new BasicHep3Vector(0, 0, 0);
+           veePos = new BasicHep3Vector(1, 0, 0);
+           flatPos = new BasicHep3Vector(0, 1, 0);
+        }
+        
+        public double getWidth() {
+            return width;
+        }
+        public abstract double getLength();
+        public double getHeight() {
+            return height;
+        }
+        
+    }
+        
+    
+    /**
+     * @SurveyVolume volume defining the coordinate system of the bottom u-channel plate
      * Reference:  @UChannelL13Bottom coordinate system
      * Origin:  same as reference
      * Orientation: same as reference
@@ -428,35 +588,82 @@
      *
      */
     public static class UChannelL13BottomPlate extends UChannelL13Plate {
-        public final static double width = 9.25*inch;
         public final static double length = 16.0*inch;
-        public final static double height = 0.375*inch;
-       
-        
         public UChannelL13BottomPlate(String name, SurveyVolume m,
                 AlignmentCorrection alignmentCorrection) {
             super(name, m, alignmentCorrection);
-            setMaterial("Aluminum");
             init();
         }
 
         protected void setCenter() {
             final double x = 0.0;
             final double y = UChannelL13Bottom.cone_to_edge_of_plate_y - length/2.0;
-            final double z = -UChannelL13Bottom.side_plate_cone_y - height/2.0;
+            final double z = -UChannelL13.side_plate_cone_y - height/2.0;
             setCenter(x,y,z);
         }
+
+        public double getLength() {
+            return length;
+        }
+       
+    }
+    
+    /**
+     * @SurveyVolume volume defining the coordinate system of the bottom u-channel plate
+     * Reference:  @UChannelL13Bottom coordinate system
+     * Origin:  same as reference
+     * Orientation: same as reference
+     *
+     * @author Per Hansson Adrian <[log in to unmask]>
+     *
+     */
+    public static class UChannelL13TopPlate extends UChannelL13Plate {
+        public final static double length = 16.0*inch;
+        public UChannelL13TopPlate(String name, SurveyVolume m,
+                AlignmentCorrection alignmentCorrection) {
+            super(name, m, alignmentCorrection);
+            init();
+        }
+
+        protected void setCenter() {
+            final double x = 0.0;
+            final double y = UChannelL13Bottom.cone_to_edge_of_plate_y - length/2.0;
+            final double z = -UChannelL13.side_plate_cone_y - height/2.0;
+            setCenter(x,y,z);
+        }
+
+        public double getLength() {
+            return length;
+        }
+       
+    }
+    
+    
+    /**
+     * Abstract @SurveyVolume volume defining the L4-6 u-channel volume
+     * 
+     *  @author Per Hansson Adrian <[log in to unmask]>
+     */
+    public abstract static class UChannelL46 extends SurveyVolume {
+
+        public static final double width = UChannelL46Plate.width;
+        public static final double length = UChannelL46Plate.length;
+        public static final double height = 2.575*inch;
+        public static final double kin_mount_to_edge_of_plate_x = width/2.0-5.75*inch;
+        public static final double kin_mount_to_edge_of_plate_y = 0.2*inch;
+        public static final double cone_to_edge_of_plate_y = 2.75*inch;
+        public static final double side_plate_cone_y = 2.0*inch;
+        public static final double cone_to_L1_hole_y = cone_to_edge_of_plate_y - kin_mount_to_edge_of_plate_y;
+
+        public UChannelL46(String name, SurveyVolume m,
+                AlignmentCorrection alignmentCorrection) {
+            super(name, m, alignmentCorrection);
+        }
+
         protected void setBoxDim() {
             setBoxDim(width,length,height);
         }
-        protected void setPos() {
-           ballPos = new BasicHep3Vector(0, 0, 0);
-           veePos = new BasicHep3Vector(1, 0, 0);
-           flatPos = new BasicHep3Vector(0, 1, 0);
-        }
-
-        
-       
+        
     }
     
     
@@ -470,25 +677,12 @@
      *  @author Per Hansson Adrian <[log in to unmask]>
      *
      */
-    public static class UChannelL46Bottom extends SurveyVolume {
-        public final static double width = UChannelL46BottomPlate.width;
-        public final static double length = UChannelL46BottomPlate.length;
-        public final static double height = 2.575*inch;
-        public static final double kin_mount_to_edge_of_plate_x = width/2.0-5.75*inch; 
-        public static final double kin_mount_to_edge_of_plate_y = 0.2*inch;
-        public final static double cone_to_edge_of_plate_y = 2.75*inch; 
-        public final static double side_plate_cone_y = 2.0*inch;
-        public final static double cone_to_L1_hole_y = cone_to_edge_of_plate_y - kin_mount_to_edge_of_plate_y; 
-        // position of positron side upstream cone surface/intercept with normal from center of cone
-        private final static double cone_x =  -6.977*inch;
-        private final static double cone_y = SvtBox.length/2.0 - 31.668*inch;
-        private final static double cone_z = -0.3316*inch;
-        
-        
-        
-        
-        
-        
+    public static class UChannelL46Bottom extends UChannelL46 {
+        // Coordinates taken from Shawn's 3D model
+        protected static final double cone_x = -6.977*inch;
+        protected static final double cone_y = SvtBox.length/2.0 - 31.668*inch;
+        protected static final double cone_z = -0.3316*inch;
+
         public UChannelL46Bottom(String name, SurveyVolume m,
                 AlignmentCorrection alignmentCorrection) {
             super(name, m, alignmentCorrection);
@@ -497,11 +691,8 @@
         protected void setCenter() {
             final double x = 0.0;
             final double y = -cone_to_edge_of_plate_y + length/2.0;
-            final double z = -side_plate_cone_y - UChannelL46BottomPlate.height + height/2.0;
+            final double z = -side_plate_cone_y - UChannelL46Plate.height + height/2.0;
             setCenter(x,y,z);
-        }
-        protected void setBoxDim() {
-            setBoxDim(width,length,height);
         }
         protected void setPos() {
             //locate coordinate system from cone in mother coordinate system
@@ -513,19 +704,66 @@
             flatPos = new BasicHep3Vector(ballPos.x(), ballPos.y()-1, ballPos.z());
         }
     }
-
-    
-    
-    
+    
+    
+    /**
+     * @SurveyVolume volume defining the coordinate system of the u-channel 
+     *  Reference: SVTBox coordinate system
+     *  Origin: midpoint between upstream survey cones
+     *  Orientation: u - width pointing towards electron side, v - pointing along the U-channel in the beam direction
+     *  
+     *  @author Per Hansson Adrian <[log in to unmask]>
+     *
+     */
+    public static class UChannelL46Top extends UChannelL46 {
+        // TODO change these to the top coordinates taken from Shawn's 3D model
+        protected static final double cone_x = UChannelL46Bottom.cone_x;
+        protected static final double cone_y = UChannelL46Bottom.cone_y;
+        protected static final double cone_z = UChannelL46Bottom.cone_z + 200.0;
+        
+        public UChannelL46Top(String name, SurveyVolume m,
+                AlignmentCorrection alignmentCorrection) {
+            super(name, m, alignmentCorrection);
+            init();
+        }
+        protected void setCenter() {
+            final double x = 0.0;
+            final double y = -cone_to_edge_of_plate_y + length/2.0;
+            final double z = -side_plate_cone_y - UChannelL46Plate.height + height/2.0;
+            setCenter(x,y,z);
+        }
+        protected void setPos() {
+            //locate coordinate system from cone in mother coordinate system
+            final double ball_pos_x = cone_x + width/2.0;
+            final double ball_pos_y = cone_y;
+            final double ball_pos_z = cone_z;
+            ballPos = new BasicHep3Vector(ball_pos_x, ball_pos_y, ball_pos_z);
+            veePos = new BasicHep3Vector(ballPos.x()-1, ballPos.y(), ballPos.z());
+            flatPos = new BasicHep3Vector(ballPos.x(), ballPos.y()-1, ballPos.z());
+        }
+    }
+
+    
+    
+    /**
+     * Abstract @SurveyVolume  defining the coordinate system of the u-channel plates
+
+     * @author Per Hansson Adrian <[log in to unmask]>
+     *
+     */
     public abstract static class UChannelL46Plate extends SurveyVolume {
         public final static double pocket_depth_L4 = 0.1;
         public final static double pocket_depth_L5 = pocket_depth_L4 + 0.118;
         public final static double pocket_depth_L6 = pocket_depth_L5 + 0.118;
         public final static double module_mounting_hole_to_hole_x =7.874*inch;
+        public static final double width = 13.5*inch;
+        public static final double length = 21.0*inch;
+        public static final double height = 0.5*inch;
         
         public UChannelL46Plate(String name, SurveyVolume m,
                 AlignmentCorrection alignmentCorrection) {
             super(name, m, alignmentCorrection);
+            setMaterial("Aluminum");
         }
         
         /**
@@ -541,11 +779,32 @@
                  throw new RuntimeException("Trying to create a L4-6 module with invalid layer nr: " + layer);
              }
         }
-        
-    }
-    
-    /**
-     * @SurveyVolume volume defining the coordinate system of the u-channel plate
+
+        protected void setBoxDim() {
+            setBoxDim(getWidth(),getLength(),getHeight());
+        }
+
+        protected void setPos() {
+           ballPos = new BasicHep3Vector(0, 0, 0);
+           veePos = new BasicHep3Vector(1, 0, 0);
+           flatPos = new BasicHep3Vector(0, 1, 0);
+        }
+        
+        public double getWidth() {
+            return width;
+        }
+        
+        public double getLength() {
+            return length;
+        }
+        
+        public double getHeight() {
+            return height;
+        }
+    }
+    
+    /**
+     * @SurveyVolume  defining the coordinate system of the bottom u-channel plate
      * Reference:  @UChannelL13Bottom coordinate system
      * Origin:  same as reference
      * Orientation: same as reference
@@ -554,36 +813,48 @@
      *
      */
     public static class UChannelL46BottomPlate extends UChannelL46Plate {
-        public final static double width = 13.5*inch;
-        public final static double length = 21.0*inch;
-        public final static double height = 0.5*inch;
-       
-        
         public UChannelL46BottomPlate(String name, SurveyVolume m,
                 AlignmentCorrection alignmentCorrection) {
             super(name, m, alignmentCorrection);
-            setMaterial("Aluminum");
             init();
         }
 
         protected void setCenter() {
             final double x = 0.0;
-            final double y = -UChannelL46Bottom.cone_to_edge_of_plate_y + length/2.0;
-            final double z = -UChannelL46Bottom.side_plate_cone_y - height/2.0;
+            final double y = -UChannelL46.cone_to_edge_of_plate_y + length/2.0;
+            final double z = -UChannelL46.side_plate_cone_y - height/2.0;
             setCenter(x,y,z);
         }
-        protected void setBoxDim() {
-            setBoxDim(width,length,height);
-        }
-        protected void setPos() {
-           ballPos = new BasicHep3Vector(0, 0, 0);
-           veePos = new BasicHep3Vector(1, 0, 0);
-           flatPos = new BasicHep3Vector(0, 1, 0);
-        }
-
-        
        
     }
+    
+    
+    /**
+     * @SurveyVolume defining the coordinate system of the top u-channel plate
+     * Reference:  @UChannelL13Top coordinate system
+     * Origin:  same as reference
+     * Orientation: same as reference
+     *
+     * @author Per Hansson Adrian <[log in to unmask]>
+     *
+     */
+    public static class UChannelL46TopPlate extends UChannelL46Plate {
+        public UChannelL46TopPlate(String name, SurveyVolume m,
+                AlignmentCorrection alignmentCorrection) {
+            super(name, m, alignmentCorrection);
+            init();
+        }
+
+        protected void setCenter() {
+            final double x = 0.0;
+            final double y = -UChannelL46.cone_to_edge_of_plate_y + length/2.0;
+            final double z = -UChannelL46.side_plate_cone_y - height/2.0;
+            setCenter(x,y,z);
+        }
+       
+    }
+
+    
 
     /**
      * @SurveyVolume volume defining the coordinate system of module L1-3
@@ -642,7 +913,7 @@
             //hole position (sensor side)
             double x = hole_to_center_of_plate_width_dir;
             double y = 0.0; // TODO assume that cone and module mount pin hole is at same y. Check if true.
-            double z = -UChannelL13Bottom.side_plate_cone_y - UChannelL13Plate.pocket_depth_L1;
+            double z = -UChannelL13.side_plate_cone_y - UChannelL13Plate.pocket_depth_L1;
             return new BasicHep3Vector(x, y, z);
         }
         
@@ -659,8 +930,8 @@
         protected Hep3Vector getHole() {
             //hole position (sensor side)
             double x = hole_to_center_of_plate_width_dir;
-            double y = UChannelL13BottomPlate.module_mounting_hole_to_hole_x;
-            double z = -UChannelL13Bottom.side_plate_cone_y - UChannelL13Plate.pocket_depth_L2;
+            double y = UChannelL13Plate.module_mounting_hole_to_hole_x;
+            double z = -UChannelL13.side_plate_cone_y - UChannelL13Plate.pocket_depth_L2;
             return new BasicHep3Vector(x, y, z);
         }
         
@@ -676,8 +947,8 @@
         protected Hep3Vector getHole() {
             //hole position (sensor side)
             double x = hole_to_center_of_plate_width_dir;
-            double y = 2*UChannelL13BottomPlate.module_mounting_hole_to_hole_x;
-            double z = -UChannelL13Bottom.side_plate_cone_y - UChannelL13Plate.pocket_depth_L3;
+            double y = 2*UChannelL13Plate.module_mounting_hole_to_hole_x;
+            double z = -UChannelL13.side_plate_cone_y - UChannelL13Plate.pocket_depth_L3;
             return new BasicHep3Vector(x, y, z);
         }
         
@@ -747,7 +1018,7 @@
         protected Hep3Vector getHole() {
             double x = hole_to_center_of_plate_width_dir;   
             double y = 0.0; // TODO assume that cone and module mount pin hole is at same y. Check if true.
-            double z = -UChannelL46Bottom.side_plate_cone_y - UChannelL46Plate.pocket_depth_L4;
+            double z = -UChannelL46.side_plate_cone_y - UChannelL46Plate.pocket_depth_L4;
             return new BasicHep3Vector(x, y, z);
         }
         
@@ -764,8 +1035,8 @@
 
         protected Hep3Vector getHole() {
             double x = hole_to_center_of_plate_width_dir;   
-            double y = UChannelL46BottomPlate.module_mounting_hole_to_hole_x; 
-            double z = -UChannelL46Bottom.side_plate_cone_y - UChannelL46Plate.pocket_depth_L5;
+            double y = UChannelL46Plate.module_mounting_hole_to_hole_x; 
+            double z = -UChannelL46.side_plate_cone_y - UChannelL46Plate.pocket_depth_L5;
             return new BasicHep3Vector(x, y, z);
         }
 
@@ -781,8 +1052,8 @@
 
         protected Hep3Vector getHole() {
             double x = hole_to_center_of_plate_width_dir;   
-            double y = 2.0*UChannelL46BottomPlate.module_mounting_hole_to_hole_x; 
-            double z = -UChannelL46Bottom.side_plate_cone_y - UChannelL46Plate.pocket_depth_L6;
+            double y = 2.0*UChannelL46Plate.module_mounting_hole_to_hole_x; 
+            double z = -UChannelL46.side_plate_cone_y - UChannelL46Plate.pocket_depth_L6;
             return new BasicHep3Vector(x, y, z);
         }
 
@@ -795,8 +1066,8 @@
     public abstract static class LongHalfModule extends BaseModule {
 
         private static final double randomoffset = 5.0; //TODO this will be replaced when I fix the size of the half-module
-        public static final double width = Sensor.getSensorWidth() + randomoffset;
-        public static final double length = Sensor.getSensorLength() + randomoffset/10.0;
+        public static final double width = Sensor.width + randomoffset;
+        public static final double length = Sensor.length + randomoffset/10.0;
         public static final double height = Sensor.getSensorThickness() + randomoffset/10.0;
 
 
@@ -984,9 +1255,9 @@
             flatPos  = new BasicHep3Vector(ballPos.x(), ballPos.y()+1, ballPos.z());
         }
         protected void setCenter() {
-            double x = -1.0 * (TestRunHalfModule.getWidth()/2.0 - ( 12.66 - (8.83 -3.00) + Sensor.getSensorWidth()/2.0 ) ); 
-            double y =  TestRunHalfModule.getLength()/2.0 - ( (170.00 + 10.00) - Sensor.getSensorLength()/2.0); 
-            double z = -Sensor.getSensorThickness()/2.0 - HalfModuleLamination.kapton_thickness - CarbonFiber.cf_thickness + half_module_thickness/2.0; 
+            double x = -1.0 * (TestRunHalfModule.getWidth()/2.0 - ( 12.66 - (8.83 -3.00) + Sensor.width/2.0 ) ); 
+            double y =  TestRunHalfModule.getLength()/2.0 - ( (170.00 + 10.00) - Sensor.length/2.0); 
+            double z = -Sensor.getSensorThickness()/2.0 - HalfModuleLamination.thickness - CarbonFiber.thickness + half_module_thickness/2.0; 
             setCenter(x, y, z); 
         }
         
@@ -1027,9 +1298,9 @@
             flatPos  = new BasicHep3Vector(ballPos.x(), ballPos.y()+1, ballPos.z());
         }
         protected void setCenter() {
-            double x = -1.0 * (TestRunHalfModule.getWidth()/2.0 - ( 12.66 - (8.83 -3.00) + Sensor.getSensorWidth()/2.0 ) ); 
-            double y =  TestRunHalfModule.getLength()/2.0 - ( (170.00 + 10.00) - Sensor.getSensorLength()/2.0); 
-            double z = -Sensor.getSensorThickness()/2.0 - HalfModuleLamination.kapton_thickness - CarbonFiber.cf_thickness + half_module_thickness/2.0; 
+            double x = -1.0 * (TestRunHalfModule.getWidth()/2.0 - ( 12.66 - (8.83 -3.00) + Sensor.width/2.0 ) ); 
+            double y =  TestRunHalfModule.getLength()/2.0 - ( (170.00 + 10.00) - Sensor.length/2.0); 
+            double z = -Sensor.getSensorThickness()/2.0 - HalfModuleLamination.thickness - CarbonFiber.thickness + half_module_thickness/2.0; 
             setCenter(x, y, z); 
         }
         protected void applyGenericCoordinateSystemCorrections() {
@@ -1061,8 +1332,8 @@
     
     
     public static class HalfLongModuleLamination extends HPSTestRunTracker2014GeometryDefinition.HalfModuleComponent {
-        protected static final double width = Sensor.getSensorWidth();
-        protected static final double length = Sensor.getSensorLength();
+        protected static final double width = Sensor.width;
+        protected static final double length = Sensor.length;
         protected static final double height = Sensor.getSensorThickness();
         
         public HalfLongModuleLamination(String name, SurveyVolume mother, int id) {
@@ -1130,7 +1401,11 @@
                 ref = getSurveyVolume(UChannelL46Bottom.class);
             }
         } else {
-            throw new UnsupportedOperationException("top not implemented yet");
+            if(layer < 4) {
+                ref = getSurveyVolume(UChannelL13Top.class);
+            } else {
+                ref = getSurveyVolume(UChannelL46Top.class);
+            }
         }
 
         //Create the module

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014LCDDBuilder.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014LCDDBuilder.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014LCDDBuilder.java	Sun Nov 23 12:47:16 2014
@@ -8,8 +8,12 @@
 import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.SvtBoxBasePlate;
 import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL13Bottom;
 import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL13BottomPlate;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL13Top;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL13TopPlate;
 import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL46Bottom;
 import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL46BottomPlate;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL46Top;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL46TopPlate;
 import org.lcsim.geometry.compact.converter.HPSTrackerBuilder.BaseModuleBundle;
 import org.lcsim.geometry.compact.converter.HPSTrackerBuilder.HalfModuleBundle;
 import org.lcsim.geometry.compact.converter.HPSTrackerGeometryDefinition.TestRunModuleBundle;
@@ -82,13 +86,25 @@
         
         LCDDSurveyVolume uChannelL13BottomPlate = new LCDDSurveyVolume(_builder.getSurveyVolume(UChannelL13BottomPlate.class), lcdd, uChannelL13Bottom);
         add(uChannelL13BottomPlate);
-        
+
+        LCDDSurveyVolume uChannelL13Top = new LCDDSurveyVolume(_builder.getSurveyVolume(UChannelL13Top.class),lcdd,  svtBox);
+        add(uChannelL13Top);
+        
+        LCDDSurveyVolume uChannelL13TopPlate = new LCDDSurveyVolume(_builder.getSurveyVolume(UChannelL13TopPlate.class), lcdd, uChannelL13Top);
+        add(uChannelL13TopPlate);
         
         LCDDSurveyVolume uChannelL46Bottom = new LCDDSurveyVolume(_builder.getSurveyVolume(UChannelL46Bottom.class), lcdd, svtBox);
         add(uChannelL46Bottom);        
         
         LCDDSurveyVolume uChannelL46BottomPlate = new LCDDSurveyVolume(_builder.getSurveyVolume(UChannelL46BottomPlate.class), lcdd, uChannelL46Bottom);
         add(uChannelL46BottomPlate);        
+
+        LCDDSurveyVolume uChannelL46Top = new LCDDSurveyVolume(_builder.getSurveyVolume(UChannelL46Top.class), lcdd, svtBox);
+        add(uChannelL46Top);        
+        
+        LCDDSurveyVolume uChannelL46TopPlate = new LCDDSurveyVolume(_builder.getSurveyVolume(UChannelL46TopPlate.class), lcdd, uChannelL46Top);
+        add(uChannelL46TopPlate);        
+
         
         // build modules    
 

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerLCDDBuilder.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerLCDDBuilder.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerLCDDBuilder.java	Sun Nov 23 12:47:16 2014
@@ -53,6 +53,10 @@
 		_builder = b;
 	}
 	
+	public HPSTrackerBuilder getBuilder() {
+	    return _builder;
+	}
+	
 	public void build() {
 		_builder.build();
 	}
@@ -92,22 +96,26 @@
 	
 		if(isDebug()) System.out.printf("%s: Set LCDD visualization for %d LCDD geometry objects \n", getClass().getSimpleName(), lcddSurveyVolumes.size());
 		for(SurveyVolumeImpl g : lcddSurveyVolumes) {
-			if(isDebug()) System.out.printf("%s: Set LCDD vis for %s \n", getClass().getSimpleName(), g.getName());			
-			if(g.getName().endsWith("baseplate")) g.setVisName("BasePlateVis");
-			//else if(g.getName().contains("base")) g.setVisName("BaseVis");
-			else if(g.getName().endsWith("support_bottom") || g.getName().contains("support_top")) g.setVisName("SupportVolumeVis");
-			else if(g.getName().endsWith("support_plate_bottom") || g.getName().contains("support_plate_top")) g.setVisName("SupportPlateVis");
-			else if(g.getName().endsWith("halfmodule_axial")) g.setVisName("HalfModuleVis");
-			else if(g.getName().endsWith("halfmodule_stereo")) g.setVisName("HalfModuleVis");
-			else if(g.getName().endsWith("module")) g.setVisName("ModuleVis");
-			else if(g.getName().endsWith("cold")) g.setVisName("ColdBlockVis");
-			else if(g.getName().endsWith("lamination")) g.setVisName("KaptonVis");
-			else if(g.getName().endsWith("sensor")) g.setVisName("SensorVis");
-			else if(g.getName().endsWith("sensor_active")) g.setVisName("SensorVis");
-			else if(g.getName().endsWith("cf")) g.setVisName("CarbonFiberVis");
-			else if(g.getName().endsWith("hybrid")) g.setVisName("HybridVis");
+		    String name = g.getName();
+			if(isDebug()) System.out.printf("%s: Set LCDD vis for %s \n", getClass().getSimpleName(), name);			
+			if(name.contains("base_plate")) g.setVisName("BasePlateVis");
+			else if(name.contains("support_bottom") || name.contains("support_top")) g.setVisName("SupportVolumeVis");
+			else if(name.contains("support_plate")) g.setVisName("SupportPlateVis");
+			else if(name.startsWith("module_")) {
+			    if(name.endsWith("halfmodule_axial") || name.endsWith("halfmodule_stereo")) g.setVisName("HalfModuleVis");
+			    else if(name.endsWith("cold")) g.setVisName("ColdBlockVis");
+			    else if(name.endsWith("lamination")) g.setVisName("KaptonVis");
+			    else if(name.endsWith("sensor")) g.setVisName("SensorVis");
+			    else if(name.endsWith("sensor_active")) g.setVisName("SensorVis");
+			    else if(name.endsWith("cf")) g.setVisName("CarbonFiberVis");
+			    else if(name.endsWith("hybrid")) g.setVisName("HybridVis");
+			    else {
+			        //this must be a module then?
+			        g.setVisName("ModuleVis");
+			    }
+			}
 			else {
-				if(isDebug()) System.out.printf("%s: No LCDD vis for %s \n", getClass().getSimpleName(), g.getName());
+				if(isDebug()) System.out.printf("%s: No LCDD vis for %s \n", getClass().getSimpleName(), name);
 			}
 		}
 		if(isDebug()) System.out.printf("%s: DONE Set LCDD vis \n", getClass().getSimpleName());

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

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use