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  October 2014

LCDET-SVN October 2014

Subject:

r3388 - in /projects/lcsim/trunk/detector-framework: ./ src/main/java/org/lcsim/detector/converter/compact/ src/main/java/org/lcsim/geometry/compact/converter/ src/main/java/org/lcsim/geometry/compact/converter/lcdd/ src/test/java/org/lcsim/geometry/subdetector/ src/test/resources/org/lcsim/geometry/subdetector/

From:

[log in to unmask]

Reply-To:

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

Date:

Mon, 27 Oct 2014 17:09:42 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (1448 lines)

Author: phansson
Date: Mon Oct 27 10:09:38 2014
New Revision: 3388

Log:
First version of the geometry that is built using millepede alignment corrections from the compact.

Added:
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/MilleParameter.java
Removed:
    projects/lcsim/trunk/detector-framework/src/test/resources/org/lcsim/geometry/subdetector/HPSTestRun2014-v0.xml
Modified:
    projects/lcsim/trunk/detector-framework/pom.xml
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact/HPSTestRunTracker2014Converter.java
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/AlignmentCorrection.java
    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/HPSTrackerBuilder.java
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerJavaBuilder.java
    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/SurveyCoordinateSystem.java
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java
    projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014.java
    projects/lcsim/trunk/detector-framework/src/test/java/org/lcsim/geometry/subdetector/HPSTestRunTracker2014Test.java
    projects/lcsim/trunk/detector-framework/src/test/resources/org/lcsim/geometry/subdetector/HPSTestRunTracker2014.xml

Modified: projects/lcsim/trunk/detector-framework/pom.xml
 =============================================================================
--- projects/lcsim/trunk/detector-framework/pom.xml	(original)
+++ projects/lcsim/trunk/detector-framework/pom.xml	Mon Oct 27 10:09:38 2014
@@ -98,7 +98,12 @@
             <groupId>org.apache.commons</groupId>
 	    <artifactId>commons-math3</artifactId>
 	    <version>3.1</version>
-	</dependency>
+	   </dependency>
+       <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.3.2</version>
+        </dependency>
     </dependencies>
     
 </project>

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact/HPSTestRunTracker2014Converter.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact/HPSTestRunTracker2014Converter.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact/HPSTestRunTracker2014Converter.java	Mon Oct 27 10:09:38 2014
@@ -40,7 +40,7 @@
  */
 public class HPSTestRunTracker2014Converter extends AbstractSubdetectorConverter {
 
-	private boolean _debug = false; 
+	private boolean _debug = true; 
 	private IMaterial trackingMaterial = null;
 	private static HPSTrackerJavaBuilder builder;
 	

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/AlignmentCorrection.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/AlignmentCorrection.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/AlignmentCorrection.java	Mon Oct 27 10:09:38 2014
@@ -1,5 +1,6 @@
 package org.lcsim.geometry.compact.converter;
 
+import hep.physics.vec.BasicHep3Vector;
 import hep.physics.vec.Hep3Vector;
 
 import org.apache.commons.math3.geometry.euclidean.threed.Rotation;
@@ -14,6 +15,10 @@
 public class AlignmentCorrection {
     private Rotation rotation = null;
     private Hep3Vector translation = null;
+    public AlignmentCorrection(double x, double y, double z, double rot_x, double rot_y, double rot_z) {
+        setTranslation(x, y, z);
+        setRotation(rot_x, rot_y, rot_z);
+    }
     public AlignmentCorrection() {
     }
     public Rotation getRotation() {
@@ -36,4 +41,8 @@
     public void setTranslation(Hep3Vector translation) {
         this.translation = translation;
     }
+    public void setTranslation(double x, double y, double z) {
+        setTranslation(new BasicHep3Vector(x,y,z));
+    }
+
 }

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	Mon Oct 27 10:09:38 2014
@@ -15,7 +15,7 @@
 
 /**
  * 
- * Class containing geometry information for HPS Test run tracker 2014
+ * Geometry information for the HPS Test run tracker
  * 
  * @author Per Hansson Adrian <[log in to unmask]>
  *
@@ -65,20 +65,29 @@
         // Each item has knowledge of its mother but not its daughters
         TrackingVolume tracking = new TrackingVolume("trackingVolume",null);
         geometries.add(tracking);
+
         TrackerEnvelope base = new TrackerEnvelope("base",tracking);
         geometries.add(base);
+        
         BasePlate basePlate = new BasePlate("baseplate",base, "Aluminum");
         geometries.add(basePlate);
+        
         CSupport cSupport = new CSupport("c_support", base);
-        geometries.add(cSupport);
-        SupportBottom supportBottom = new SupportBottom("support_bottom", base, cSupport);
+        geometries.add(cSupport);        
+        
+        AlignmentCorrection alignmentCorrectionSupportBottom = getSupportAlignmentCorrection(false);
+        SupportBottom supportBottom = new SupportBottom("support_bottom", base, alignmentCorrectionSupportBottom, cSupport);
         geometries.add(supportBottom);
         // The support survey positions are now with respect to its mother and not the reference coord. system.
         // So to get the reference for the support plate I don't need to apply that extra transformation
+        
         SupportPlateBottom supportPlateBottom = new SupportPlateBottom("support_plate_bottom", base, supportBottom, "Aluminum");
-        geometries.add(supportPlateBottom);
-        SupportTop supportTop = new SupportTop("support_top", base, cSupport);
+        geometries.add(supportPlateBottom);        
+        
+        AlignmentCorrection alignmentCorrectionSupportTop = getSupportAlignmentCorrection(true);
+        SupportTop supportTop = new SupportTop("support_top", base, alignmentCorrectionSupportTop, cSupport);
         geometries.add(supportTop);
+        
         SupportPlateTop supportPlateTop = new SupportPlateTop("support_plate_top", base, supportTop, "Aluminum");
         geometries.add(supportPlateTop);
 
@@ -86,10 +95,10 @@
         modules = new ArrayList<ModuleBundle>();
 
         for(int l=1; l<=5;++l) {
-            if(!doLayer(l)) continue;
-            if(doBottom) makeModuleBundle(l,"bottom");
-            if(doTop) makeModuleBundle(l,"top");
-
+            if(doLayer(l)) {
+                if(doBottom) makeModuleBundle(l,"bottom");
+                if(doTop)    makeModuleBundle(l,"top");
+            }
         }       
 
         if(isDebug()) {
@@ -102,7 +111,9 @@
 
     }
 
-
+    
+    
+    
     /**
      * Create the module. 
      * @param layer - of the module
@@ -208,21 +219,26 @@
 
         // top or bottom?
         String half = mother.getHalf();
+        boolean isTopLayer = !mother.isBottom();
 
         // find layer
         int layer = mother.getLayer();
 
         TestRunModuleBundle bundle  = (TestRunModuleBundle)getModuleBundle(mother);
         TestRunHalfModuleBundle halfModuleBundle;
-
+        
+        
         // Build the half-module
         TestRunHalfModule halfModule;
+        AlignmentCorrection alignmentCorrection;
         if(side == "axial") {
-            halfModule = new TestRunHalfModuleAxial(volName, mother, null, layer, half);
+            alignmentCorrection =  getHalfModuleAlignmentCorrection(isTopLayer, getOldGeomDefLayerFromVolumeName(isTopLayer, layer, true));
+            halfModule = new TestRunHalfModuleAxial(volName, mother, alignmentCorrection, layer, half);
             halfModuleBundle = new TestRunHalfModuleBundle(halfModule);
             bundle.halfModuleAxial = halfModuleBundle;
         } else if(side == "stereo") {
-            halfModule = new TestRunHalfModuleStereo(volName, mother, null, layer, half);
+            alignmentCorrection =  getHalfModuleAlignmentCorrection(isTopLayer, getOldGeomDefLayerFromVolumeName(isTopLayer, layer, false));
+            halfModule = new TestRunHalfModuleStereo(volName, mother, alignmentCorrection, layer, half);
             halfModuleBundle = new TestRunHalfModuleBundle(halfModule);
             bundle.halfModuleStereo = halfModuleBundle;
         } else {
@@ -514,14 +530,17 @@
             }
         }
         protected void setPos() {
+            if(debug) System.out.printf("%s: setPos for %s\n",this.getClass().getSimpleName(),getName());
             calcAndSetFlatPos();
             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);
-            if(debug) System.out.println("setPos for csupport: \n" + getFlatPos().toString());
+            if(debug) {
+                System.out.printf("%s: survey positions for %s\n",this.getClass().getSimpleName(),getName());
+                printSurveyPos();
+            }
         }
         protected void setCoord() {
             setCoord(null);
-            if(debug) System.out.println("coord for csupport: \n" + this.getCoord().toString());
         }
         protected void setCenter() {
             // this is never used since it's only a reference volume
@@ -543,21 +562,21 @@
         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, SurveyVolume mother) {
-            super(name,mother, null);
-            init();
-        }
-        public SupportTop(String name, SurveyVolume mother, SurveyVolume referenceGeom) {
-            super(name,mother,null, referenceGeom);
-            init();
-        }
-        public SupportTop(String name, SurveyVolume mother, List<SurveyVolume> referenceGeom) {
-            super(name,mother,null, referenceGeom);
+        public SupportTop(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection) {
+            super(name,mother, alignmentCorrection);
+            init();
+        }
+        public SupportTop(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume referenceGeom) {
+            super(name,mother,alignmentCorrection, referenceGeom);
+            init();
+        }
+        public SupportTop(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, List<SurveyVolume> referenceGeom) {
+            super(name,mother,alignmentCorrection, referenceGeom);
             init();
         }
 
         protected void setPos() {
-            if(debug) System.out.printf("%s: setPos support top\n",this.getClass().getSimpleName());
+            if(debug) System.out.printf("%s: setPos for %s\n",this.getClass().getSimpleName(),getName());
             // 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.
             setBallPos(SupportBottom.ball_pos_csup_bearings_bottom_x, SupportBottom.ball_pos_csup_bearings_bottom_y, ball_pos_csup_bearings_top_z);
@@ -567,7 +586,7 @@
                     new Rotation(RotationOrder.XYZ, 
                             SupportPlateTop.support_plate_top_tilt_angle, 0.0, 0.0 );
 
-            // apply to flat local position (as for bottom it is arbitrary offset)
+            // apply to flat local position (as for bottom it is an arbitrary offset)
             Vector3D flat_pos_csup_bearings_top_3D_rot = 
                     rot_csup_top.applyTo(new Vector3D(0.0,10.0,0.0));
 
@@ -582,7 +601,7 @@
             if(referenceGeom==null) {
                 throw new RuntimeException("No ref found for " + getName());
             }
-
+            /*
             for(SurveyVolume ref : referenceGeom) {
 
                 if(debug) {
@@ -601,6 +620,11 @@
                     printSurveyPos();
                 }
             }
+            */
+            if(debug) {
+                System.out.printf("%s: survey positions for %s\n",this.getClass().getSimpleName(),getName());
+                printSurveyPos();
+            }
         }
         protected void setCoord() {
             setCoord(null);
@@ -611,6 +635,43 @@
         protected void setBoxDim() {
             setBoxDim(support_top_width,support_top_length,support_top_height);
         }
+        /*
+        protected void applyReferenceTransformation() {
+         
+            if(debug) {
+                System.out.printf("%s: coord system before ref transformations:\n%s\n",this.getClass().getSimpleName(),getCoord().toString());
+            }
+
+            for(SurveyVolume ref : referenceGeom) {
+
+                if(debug) {
+                    //System.out.printf("%s: survey positions before ref %s transform\n",this.getClass().getSimpleName(),ref.getName());
+                    //printSurveyPos();
+                    System.out.printf("%s: coord system before ref %s transform:\n%s\n",this.getClass().getSimpleName(),ref.getName(),getCoord().toString());
+                }
+
+                if(debug) System.out.printf("%s: Ref %s coord\n%s\n",this.getClass().getSimpleName(), ref.getName(),ref.getCoord().toString());
+                
+                getCoord().transform(ref.getCoord().getTransformation());
+                
+                //ref.getCoord().getTransformation().transform(ballPos);
+                //ref.getCoord().getTransformation().transform(veePos);
+                //ref.getCoord().getTransformation().transform(flatPos);
+
+                if(debug) {
+                    //System.out.printf("%s: survey positions after ref %s transform\n",this.getClass().getSimpleName(),ref.getName());
+                    //printSurveyPos();
+                    System.out.printf("%s: coord system after ref %s transform:\n%s\n",this.getClass().getSimpleName(),ref.getName(),getCoord().toString());
+                }
+            }
+            
+            if(debug) {
+                System.out.printf("%s: coord system after ref transformations:\n%s\n",this.getClass().getSimpleName(),getCoord().toString());
+            }
+            
+            
+        }
+         */
     }
 
 
@@ -631,15 +692,15 @@
         protected static final double support_bottom_height = SupportPlateBottom.support_plate_bottom_height - SupportPlateBottom.support_plate_pocket_depth + TestRunModuleL13.module_box_L13_width + SupportPlateBottom.pedestal_height_L1;
 
 
-        public SupportBottom(String name, SurveyVolume mother, SurveyVolume referenceGeom) {
-            super(name,mother,null, referenceGeom);
+        public SupportBottom(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume referenceGeom) {
+            super(name,mother,alignmentCorrection, referenceGeom);
             init();
         }
 
         protected void setPos() {
 
-            if(debug) System.out.printf("%s: setPos support bottom\n",this.getClass().getSimpleName());
-
+            if(debug) System.out.printf("%s: setPos for %s\n",this.getClass().getSimpleName(),getName());
+            
             // 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
 
@@ -669,7 +730,7 @@
             if(referenceGeom==null) {
                 throw new RuntimeException("No ref found for " + getName());
             }
-
+            /*
             for(SurveyVolume ref : referenceGeom) {
 
                 if(debug) {
@@ -687,6 +748,11 @@
                     System.out.printf("%s: survey positions after ref %s transform\n",this.getClass().getSimpleName(),ref.getName());
                     printSurveyPos();
                 }
+            }
+            */
+            if(debug) {
+                System.out.printf("%s: survey positions for %s\n",this.getClass().getSimpleName(),getName());
+                printSurveyPos();
             }
 
         }
@@ -742,8 +808,8 @@
             init();				
         }
         protected void setPos() {
-            if(debug) System.out.printf("%s: set survey positions \n",this.getClass().getSimpleName());
-
+            if(debug) System.out.printf("%s: setPos for %s\n",this.getClass().getSimpleName(),getName());
+            
             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());
@@ -751,7 +817,7 @@
             if(referenceGeom==null) {
                 throw new RuntimeException("No ref found for " + getName());
             }
-
+            /*
             for(SurveyVolume ref : referenceGeom) {
 
                 if(debug) {
@@ -769,6 +835,11 @@
                     System.out.printf("%s: survey positions after ref %s transform\n",this.getClass().getSimpleName(),ref.getName());
                     printSurveyPos();
                 }
+            }
+            */
+            if(debug) {
+                System.out.printf("%s: survey positions for %s\n",this.getClass().getSimpleName(),getName());
+                printSurveyPos();
             }
         }
         protected void setCoord() {
@@ -797,8 +868,8 @@
             init();
         }
         protected void setPos() {
-            if(debug) System.out.printf("%s: set survey positions \n",this.getClass().getSimpleName());
-
+            if(debug) System.out.printf("%s: setPos for %s\n",this.getClass().getSimpleName(),getName());
+            
             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());
@@ -806,7 +877,7 @@
             if(referenceGeom==null) {
                 throw new RuntimeException("No ref found for " + getName());
             }
-
+            /*
             for(SurveyVolume ref : referenceGeom) {
 
                 if(debug) System.out.printf("%s: survey positions before ref %s transform\n",this.getClass().getSimpleName(),ref.getName());
@@ -820,6 +891,11 @@
 
                 if(debug) System.out.printf("%s: survey positions after ref %s transform\n",this.getClass().getSimpleName(),ref.getName());
                 if(debug) printSurveyPos();
+            }
+            */
+            if(debug) {
+                System.out.printf("%s: survey positions for %s\n",this.getClass().getSimpleName(),getName());
+                printSurveyPos();
             }
         }
         protected void setCoord() {
@@ -932,7 +1008,8 @@
         }			
         protected void setPos() {
 
-            if(debug) System.out.printf("%s: setPos\n",this.getClass().getSimpleName());
+            if(debug) System.out.printf("%s: setPos for %s\n",this.getClass().getSimpleName(),getName());
+            
 
             if(isBottom()) {
                 switch (getLayer()) {
@@ -1006,10 +1083,11 @@
             }
 
             if(debug) {
-                System.out.printf("%s: survey positions\n",this.getClass().getSimpleName());
+                System.out.printf("%s: survey positions for %s\n",this.getClass().getSimpleName(),getName());
                 printSurveyPos();
             }
 
+            /*
             // walk through the reference volumes
             if(referenceGeom!=null) {
                 for(SurveyVolume ref : referenceGeom) {
@@ -1031,6 +1109,7 @@
                     }
                 }
             }
+            */
 
         }
 
@@ -1166,6 +1245,8 @@
         }
 
         protected void setPos() {
+            if(debug) System.out.printf("%s: setPos for %s\n",this.getClass().getSimpleName(),getName());
+            
             final double coldBlockThick = getLayer() <=3 ? TestRunColdBlockL13.coldblock_L13_thickness : TestRunColdBlockL45.coldblock_L45_thickness;
             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;
 
@@ -1185,6 +1266,11 @@
             ballPos = new BasicHep3Vector(ball_pos_halfmod_local_x, ball_pos_halfmod_local_y, ball_pos_halfmod_local_z);
             veePos = new BasicHep3Vector(vee_pos_halfmod_local_x, vee_pos_halfmod_local_y,vee_pos_halfmod_local_z);
             flatPos = new BasicHep3Vector(flat_pos_halfmod_local_x, flat_pos_halfmod_local_y,flat_pos_halfmod_local_z);
+            
+            if(debug) {
+                System.out.printf("%s: survey positions for %s\n",this.getClass().getSimpleName(),getName());
+                printSurveyPos();
+            }
 
         }
     }
@@ -1202,7 +1288,9 @@
         }
 
         protected void setPos() {
-
+            
+            if(debug) System.out.printf("%s: setPos for %s\n",this.getClass().getSimpleName(),getName());
+            
             //very similar to axial, see note below
 
             final double coldBlockThick = getLayer() <=3 ? TestRunColdBlockL13.coldblock_L13_thickness : TestRunColdBlockL45.coldblock_L45_thickness;
@@ -1221,7 +1309,12 @@
             ballPos = new BasicHep3Vector(ball_pos_halfmod_local_x, ball_pos_halfmod_local_y, ball_pos_halfmod_local_z);
             veePos = new BasicHep3Vector(vee_pos_halfmod_local_x, vee_pos_halfmod_local_y,vee_pos_halfmod_local_z);
             flatPos = new BasicHep3Vector(flat_pos_halfmod_local_x, flat_pos_halfmod_local_y,flat_pos_halfmod_local_z);
-
+            
+            if(debug) {
+                System.out.printf("%s: survey positions for %s\n",this.getClass().getSimpleName(),getName());
+                printSurveyPos();
+            }
+        
         }
 
 
@@ -1281,6 +1374,8 @@
             setCenter(getLength()/2.0, 0.0, getWidth()/2.0); 
         }
         protected void setPos() {
+            if(debug) System.out.printf("%s: setPos for %s\n",this.getClass().getSimpleName(),getName());
+            
             // cold block position w.r.t. module box coordinate system
             // this is a dummy coordinate system, make it simple
             // edge of cold block on the mounting surface
@@ -1296,6 +1391,12 @@
             setBallPos(ball_pos_coldblock_local_x, ball_pos_coldblock_local_y, ball_pos_coldblock_local_z);
             setVeePos(vee_pos_coldblock_local_x, vee_pos_coldblock_local_y,vee_pos_coldblock_local_z);
             setFlatPos(flat_pos_coldblock_local_x, flat_pos_coldblock_local_y,flat_pos_coldblock_local_z);
+            
+            if(debug) {
+                System.out.printf("%s: survey positions for %s\n",this.getClass().getSimpleName(),getName());
+                printSurveyPos();
+            }
+            
         }
         protected void setBoxDim() {
             setBoxDim(getLength(), getHeight(), getWidth());
@@ -1368,6 +1469,9 @@
             return getSensorHeight();
         }
         protected void setPos() {
+            
+            if(debug) System.out.printf("%s: setPos for %s\n",this.getClass().getSimpleName(),getName());
+            
             if(useSiStripsConvention) {
                 setBallPos(0,0,0);
                 setVeePos(ballPos.x(), ballPos.y(), ballPos.z() + getSensorWidth()/2.0);
@@ -1377,6 +1481,12 @@
                 setVeePos(ballPos.x() + getSensorLength()/2.0, ballPos.y(), ballPos.z());
                 setFlatPos(ballPos.x(),ballPos.y() + getSensorThickness()/2.0, ballPos.z());
             }
+
+            if(debug) {
+                System.out.printf("%s: survey positions for %s\n",this.getClass().getSimpleName(),getName());
+                printSurveyPos();
+            }
+            
         }
         protected void setCoord() {
             setCoord(null);
@@ -1426,6 +1536,9 @@
             return getActiveSensorHeight();
         }
         protected void setPos() {
+            
+            if(debug) System.out.printf("%s: setPos for %s\n",this.getClass().getSimpleName(),getName());
+            
             if(useSiStripsConvention) {
                 ballPos = new BasicHep3Vector(0,0,0);
                 veePos = new BasicHep3Vector(getActiveSensorWidth()/2.0,0,0);
@@ -1435,6 +1548,11 @@
                 veePos = new BasicHep3Vector(getActiveSensorWidth()/2.0,0,0);
                 flatPos = new BasicHep3Vector(0,getActiveSensorLength()/2.0,0);
             }
+            
+            if(debug) {
+                System.out.printf("%s: survey positions for %s\n",this.getClass().getSimpleName(),getName());
+                printSurveyPos();
+            }
         }
         protected void setCoord() {
             setCoord(null);
@@ -1479,6 +1597,9 @@
             init();
         }
         protected void setPos() {
+            
+            if(debug) System.out.printf("%s: setPos for %s\n",this.getClass().getSimpleName(),getName());
+            
             final double ball_pos_kapton_local_x =  -1 * (180.0 - Sensor.getSensorLength()/2.0) + 8.5;
             final double ball_pos_kapton_local_y =  (Sensor.getSensorThickness()/2.0 + HalfModuleLamination.kapton_thickness/2.0);
             final double ball_pos_kapton_local_z = -1 * (Sensor.getSensorWidth()/2.0 + 12.66) + 8.83 - 3.00 + 6.00 ;
@@ -1493,6 +1614,10 @@
             veePos = new BasicHep3Vector(vee_pos_kapton_local_x,vee_pos_kapton_local_y,vee_pos_kapton_local_z);
             flatPos = new BasicHep3Vector(flat_pos_kapton_local_x,flat_pos_kapton_local_y,flat_pos_kapton_local_z);
 
+            if(debug) {
+                System.out.printf("%s: survey positions for %s\n",this.getClass().getSimpleName(),getName());
+                printSurveyPos();
+            }
         }
         protected void setCenter() {
             setCenter(getLength()/2.0, 0.0, getWidth()/2.0);
@@ -1523,6 +1648,9 @@
             init();
         }
         protected void setPos() {
+            
+            if(debug) System.out.printf("%s: setPos for %s\n",this.getClass().getSimpleName(),getName());
+            
             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;
@@ -1535,6 +1663,12 @@
             setBallPos(ball_pos_cf_local_x,ball_pos_cf_local_y,ball_pos_cf_local_z);
             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);
+            
+            if(debug) {
+                System.out.printf("%s: survey positions for %s\n",this.getClass().getSimpleName(),getName());
+                printSurveyPos();
+            }
+            
         }
         protected void setCenter() {
             setCenter(getLength()/2.0, 0.0, getWidth()/2.0);
@@ -1566,6 +1700,9 @@
             init();
         }
         protected void setPos() {
+            
+            if(debug) System.out.printf("%s: setPos for %s\n",this.getClass().getSimpleName(),getName());
+            
             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);
@@ -1578,7 +1715,11 @@
             setBallPos(ball_pos_hybrid_local_x,ball_pos_hybrid_local_y,ball_pos_hybrid_local_z);
             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);
-
+            
+            if(debug) {
+                System.out.printf("%s: survey positions for %s\n",this.getClass().getSimpleName(),getName());
+                printSurveyPos();
+            }
         }
         protected void setCenter() {
             setCenter(getLength()/2.0, 0.0, getWidth()/2.0);

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerBuilder.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerBuilder.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerBuilder.java	Mon Oct 27 10:09:38 2014
@@ -1,18 +1,15 @@
 package org.lcsim.geometry.compact.converter;
 
+import hep.physics.vec.BasicHep3Vector;
 import hep.physics.vec.Hep3Vector;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
+import org.jdom.DataConversionException;
 import org.jdom.Element;
 import org.lcsim.detector.Transform3D;
-import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.ActiveSensor;
-import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.CarbonFiber;
-import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.HalfModuleLamination;
-import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.Hybrid;
-import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.Sensor;
-import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunHalfModule;
 import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunModule;
 
 public abstract class HPSTrackerBuilder {
@@ -21,6 +18,7 @@
 	public List<ModuleBundle> modules;
 	protected List<SurveyVolume> geometries = new ArrayList<SurveyVolume>();
     protected Element node;
+    protected List<MilleParameter> milleparameters = new ArrayList<MilleParameter>();
 	
 	
 
@@ -32,9 +30,111 @@
 	public HPSTrackerBuilder(boolean debug, Element node) {
         this.debug = debug;
         this.node = node;
-    }
-	
-	/**
+        initAlignmentParameters();
+    }
+	
+	private void initAlignmentParameters() {
+       
+        if(debug) System.out.printf("%s: initAlignmentParameters from %s\n",this.getClass().getSimpleName(),node.getAttributeValue("name"));
+        
+	 // Get alignment parameters.
+        int detId=-1;
+        try {
+            detId = node.getAttribute("id").getIntValue();
+        } catch (DataConversionException e) {
+            e.printStackTrace();
+        }
+        String detName = node.getAttributeValue("name");
+        String detType = node.getAttributeValue("type");
+        
+        Element constantsElement = node.getChild("millepede_constants");
+        if(constantsElement==null) {
+            throw new RuntimeException("no millepede constants found in compact file");
+        } 
+        
+        if(debug) System.out.printf("%s: %d alignment corrections for detId=%d detName=%s detType=%s\n",this.getClass().getSimpleName(),constantsElement.getChildren("millepede_constant").size(),detId,detName,detType);
+        
+        int id = -99999;
+        double value=-99999;
+        for(Iterator iConstant = constantsElement.getChildren("millepede_constant").iterator(); iConstant.hasNext();) {
+            Element constantElement = (Element)iConstant.next();
+            try {
+                id = constantElement.getAttribute("name").getIntValue();
+                value = constantElement.getAttribute("value").getDoubleValue();
+            } catch (DataConversionException e) {
+                e.printStackTrace();
+            }
+            //System.out.printf("%s: constant %d value %f\n",this.getClass().getSimpleName(),id,value);
+            
+            MilleParameter p = new MilleParameter(id,value,0.0);
+            //System.out.printf("%s: Milleparameter: %s\n", this.getClass().getSimpleName(),p.toString());
+            milleparameters.add(p);
+            
+        }
+        
+        if(debug) {
+            System.out.printf("%s: Initialized %d alignment parameters:\n",this.getClass().getSimpleName(),milleparameters.size());
+            for(MilleParameter p: milleparameters) {
+                System.out.printf("%s: %s \n",this.getClass().getSimpleName(),p.toString());                
+            }
+        }
+	    
+    }
+	
+	
+	/**
+	 * Extract @AlignmentCorrection for a half-module
+	 * @param isTopLayer - top or bottom layer
+	 * @param layer - to identify which sensor it is.
+	 * @return the alignment correction for this half-module
+	 */
+	protected AlignmentCorrection getHalfModuleAlignmentCorrection(boolean isTopLayer, int layer) {
+        double r[] = {0,0,0};
+        double t[] = {0,0,0};
+        for(MilleParameter p_loop: milleparameters) {
+            boolean paramIsTop = p_loop.getHalf()==1?true:false;
+            int paramLayer = p_loop.getSensor();
+            if(paramIsTop==isTopLayer && paramLayer==layer) {
+                if(p_loop.getType()==1) {
+                    t[p_loop.getDim()-1] = p_loop.getValue();
+                } else if(p_loop.getType()==2) {
+                    r[p_loop.getDim()-1] = p_loop.getValue();
+                } 
+            }
+        }
+        AlignmentCorrection c = new AlignmentCorrection();
+        c.setTranslation(new BasicHep3Vector(t));
+        c.setRotation(r[0],r[1],r[2]);
+        return c;
+    }
+	
+	/**
+     * Extract @AlignmentCorrection for the support
+     * @param isTopLayer - top or bottom layer
+     * @return the alignment correction
+     */
+    protected AlignmentCorrection getSupportAlignmentCorrection(boolean isTopLayer) {
+        double r[] = {0,0,0};
+        double t[] = {0,0,0};
+        for(MilleParameter p_loop: milleparameters) {
+            boolean paramIsTop = p_loop.getHalf()==1?true:false;
+            int paramType = p_loop.getType();
+            if(paramIsTop==isTopLayer && paramType==3) {
+                //xcheck
+                if(p_loop.getSensor()!=0) throw new RuntimeException("sensor name is not zero for support plate param! " + p_loop.getSensor());
+                // get the correction
+                r[p_loop.getDim()-1] = p_loop.getValue();
+            }
+        }
+        AlignmentCorrection c = new AlignmentCorrection();
+        c.setTranslation(new BasicHep3Vector(t));
+        c.setRotation(r[0],r[1],r[2]);
+        return c;
+    }
+	
+	
+
+    /**
 	 * Build the local geometry
 	 * 
 	 */
@@ -333,7 +433,9 @@
 	 * @return the layer.
 	 */
 	public static int getOldGeomDefLayerFromVolumeName(String name) {
+	    
 		String half = getHalfFromName(name);
+		int l = getLayerFromVolumeName(name);
 		boolean isTopLayer = false;
 		if(half=="top") isTopLayer=true;
 		else if(half=="bottom") isTopLayer = false;
@@ -342,25 +444,32 @@
 		if(name.contains("axial")) isAxial=true;
 		else if(name.contains("stereo")) isAxial=false;
 		else throw new RuntimeException("no axial or stereo name found from " + name);
-		int l = getLayerFromVolumeName(name);
-		int layer=-1;
-		// convert to old definition
-		if(isAxial) {
-			if(isTopLayer) {
-				layer = 2*l-1;
-			}
-			else {
-				layer = 2*l;
-			}
-		} else {
-			if(isTopLayer) {
-				layer = 2*l;
-			} else {
-				layer = 2*l-1;
-			}
-		}
-		return layer;
-	}
+		
+		return getOldGeomDefLayerFromVolumeName(isTopLayer, l, isAxial);
+	}
+	
+	
+	public static int getOldGeomDefLayerFromVolumeName(boolean isTopLayer, int l, boolean isAxial) {
+        int layer=-1;
+        // convert to old definition
+        if(isAxial) {
+            if(isTopLayer) {
+                layer = 2*l-1;
+            }
+            else {
+                layer = 2*l;
+            }
+        } else {
+            if(isTopLayer) {
+                layer = 2*l;
+            } else {
+                layer = 2*l-1;
+            }
+        }
+        return layer;
+    }
+    
+
 
 
 }

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerJavaBuilder.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerJavaBuilder.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerJavaBuilder.java	Mon Oct 27 10:09:38 2014
@@ -31,7 +31,7 @@
 
 public abstract class HPSTrackerJavaBuilder implements IHPSTrackerJavaBuilder {
 
-	protected boolean _debug = false;
+	protected boolean _debug = true;
 	private JavaBaseGeometry baseTrackerGeometry;
 	protected List<JavaBaseGeometry> java_objects = new ArrayList<JavaBaseGeometry>();
 	protected DetectorIdentifierHelper detectorIdentifierHelper;

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	Mon Oct 27 10:09:38 2014
@@ -74,7 +74,7 @@
 	 * @author Per Hansson Adrian <[log in to unmask]>
 	 */
 	public static class LCDDBaseGeometry extends LCDDBaseGeometryVisualization {
-		private boolean debug = false;
+		private boolean debug = true;
 		private String name;
 		private Box box= null;
 		private Volume volume = null;

Added: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/MilleParameter.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/MilleParameter.java	(added)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/MilleParameter.java	Mon Oct 27 10:09:38 2014
@@ -0,0 +1,110 @@
+package org.lcsim.geometry.compact.converter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+
+
+
+public class MilleParameter {
+    private static double corrScaleFactor = -1.;
+	private int id;
+	private double value; 
+	private double presigma;
+	private static final Map<Integer,String> dMap;
+	private static final Map<Integer,String> tMap;
+	private static final Map<Integer,String> hMap;
+	static {
+		dMap = new HashMap<Integer,String>();
+		dMap.put(1, "x");dMap.put(2, "y"); dMap.put(3, "z");
+		tMap = new HashMap<Integer,String>();
+		tMap.put(1, "");tMap.put(2, "r");
+		hMap = new HashMap<Integer,String>();
+		hMap.put(1, "t");hMap.put(2, "b");
+		}
+	
+	public MilleParameter(String line) {
+		String[] vals = StringUtils.split(line);// line.split("\\s+");
+		if(vals.length <3) {
+			System.out.println("this line is ill-formatted (" + vals.length + ")");
+			System.out.println(line);
+			System.exit(1);
+		}
+		try {
+		//for(String v : vals) System.out.println("\"" + v + "\"");
+		setId(Integer.parseInt(vals[0]));
+		setValue( corrScaleFactor * Double.parseDouble(vals[1]) );
+		setPresigma(Double.parseDouble(vals[2]));
+		
+		} catch (NumberFormatException e) {
+			System.out.println(vals[0] + " " + vals[1] + " " + vals[2]);
+			throw new RuntimeException("problem parsing string ", e);
+		}
+	}
+	
+	public MilleParameter(int id, double value, double presigma) {
+	    setId(id);
+	    setValue(value);
+	    setPresigma(presigma);
+	}
+	
+	public String getXMLName() {
+		String d = dMap.get(getDim());
+		String t = tMap.get(getType());
+		String h = hMap.get(getHalf());
+		int s = getSensor();
+		return String.format("%s%s%d%s_align", t,d,s,h);
+		
+	}
+
+	public int getDim() {
+		int h = (int) (getHalf() * 1e4);
+		int t = (int) (getType() * 1e3);
+		return (int) Math.floor((id- h -t)/1e2);
+	}
+	
+	public int getSensor() {
+		int h = (int) (getHalf() * 1e4);
+		int t = (int) (getType() * 1e3);
+		int d = (int) (getDim() * 1e2);
+		return (id - h - t -d);
+	}
+
+	public int getType() {
+		int h = (int) (getHalf() * 1e4);
+		return (int) Math.floor((id -h)/1e3);
+	}
+
+	public int getHalf() {
+		return (int)Math.floor(id/1e4);
+	}
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public double getValue() {
+		return value;
+	}
+
+	public void setValue(double value) {
+		this.value = value;
+	}
+
+	public double getPresigma() {
+		return presigma;
+	}
+
+	public void setPresigma(double presigma) {
+		this.presigma = presigma;
+	}
+	
+	public String toString() {
+	    return String.format("Milleparameter id=%d half=%d type=%d dim=%d sensor=%d value=%f", this.getId(), this.getHalf(), this.getType(), this.getDim(), this.getSensor(), this.getValue());
+	}
+}

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyCoordinateSystem.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyCoordinateSystem.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyCoordinateSystem.java	Mon Oct 27 10:09:38 2014
@@ -7,6 +7,7 @@
 
 import org.apache.commons.math3.geometry.euclidean.threed.Rotation;
 import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
+import org.lcsim.detector.IRotation3D;
 import org.lcsim.detector.Rotation3D;
 import org.lcsim.detector.Transform3D;
 import org.lcsim.detector.Translation3D;
@@ -57,28 +58,51 @@
 		    }
 		}
 		
-		public void rotateApache(Rotation r) {
-		    if(debug) System.out.printf("%s: apply apache rotation to this coord system\n%s\n", getClass().getSimpleName(),toString());
-		    this.u = new BasicHep3Vector(r.applyTo(new Vector3D(u.v())).toArray());
-		    this.v = new BasicHep3Vector(r.applyTo(new Vector3D(v.v())).toArray());
-		    this.w = new BasicHep3Vector(r.applyTo(new Vector3D(w.v())).toArray());
-		    if(debug) System.out.printf("%s: new coord system after apache rotation to this coord system\n%s\n", getClass().getSimpleName(),toString());                
+		
+		/**
+		 * Transform this coordinate system to another one.
+		 * @param t
+		 */
+		public void transform(Transform3D t) {
+		    Transform3D t_this = getTransformation();
+		    Hep3Vector v = t_this.getTranslation().getTranslationVector();
+		    Hep3Vector vrot = t.rotated(v);
+		    Hep3Vector vrottrans = t.translated(vrot);
+		    origin = vrottrans;
+            rotate(t.getRotation());
+            //System.out.printf("monkey transform\n"); 
+            //System.out.printf("v %s\n",v.toString());
+            //System.out.printf("vrot %s\n",vrot.toString());
+            //System.out.printf("vrottrans %s\n",vrottrans.toString());
+		    check();
+		}
+		
+		public void rotate(IRotation3D r) {
+			r.rotate(u);
+			r.rotate(v);
+			r.rotate(w);
+		}
+
+		public void translate(Hep3Vector translation) {
+			// update origin with local translation in u,v,w
+		    //origin = VecOp.add(origin, translation);
+		    translate(new Translation3D(translation));
+		}
+
+		public void translate(Translation3D t) {
+		    origin = t.translated(getTransformation().getTranslation().getTranslationVector());
 		}
 
 		
-/*
-		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() {
+		public void rotateApache(Rotation r) {
+            if(debug) System.out.printf("%s: apply apache rotation to this coord system\n%s\n", getClass().getSimpleName(),toString());
+            this.u = new BasicHep3Vector(r.applyTo(new Vector3D(u.v())).toArray());
+            this.v = new BasicHep3Vector(r.applyTo(new Vector3D(v.v())).toArray());
+            this.w = new BasicHep3Vector(r.applyTo(new Vector3D(w.v())).toArray());
+            if(debug) System.out.printf("%s: new coord system after apache rotation to this coord system\n%s\n", getClass().getSimpleName(),toString());                
+        }
+        
+        public Hep3Vector origin() {
 			return origin;
 		}
 		public Hep3Vector u() {

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java	Mon Oct 27 10:09:38 2014
@@ -15,13 +15,10 @@
  * 
  */
 public abstract class SurveyVolume {
-	protected boolean debug = false;
+	protected boolean debug = true;
 	private String name;
 	private String material = "Vacuum";
 	private SurveyVolume mother;
-	// The reference geometry is used when the survey points are w.r.t. to 
-	// a different/intermediate coord system. So that transformation has to be used when 
-	// transforming to the mother system
 	protected List<SurveyVolume> referenceGeom = null;
 	private SurveyCoordinateSystem coord;
 	protected  Hep3Vector ballPos;
@@ -47,6 +44,7 @@
 	public SurveyVolume(String name, SurveyVolume m, AlignmentCorrection alignmentCorrection, List<SurveyVolume> ref) {
 		setName(name);
 		setMother(m);
+		setAlignmentCorrection(alignmentCorrection);
 		addReferenceGeom(ref);
 	}
 	
@@ -58,6 +56,7 @@
 	protected void init() {
 		setPos();
 		setCoord();
+		applyReferenceTransformation();
 		setCenter();
 		setBoxDim();
 		applyGenericCoordinateSystemCorrections();
@@ -66,32 +65,64 @@
 
 	protected void applyGenericCoordinateSystemCorrections() {
 	    //do nothing here unless overridden
+	   
+	}
+	protected void applyReferenceTransformation() {
+
+	    if(debug) System.out.printf("%s: applyReferenceTransformation for %s\n",this.getClass().getSimpleName(),getName());
+            	    
+	    if(referenceGeom!=null) {
+
+
+	        if(debug) System.out.printf("%s: coord system before %d ref transformations:\n%s\n",this.getClass().getSimpleName(),referenceGeom.size(),getCoord().toString());
+	        
+	        for(SurveyVolume ref : referenceGeom) {
+
+	            if(debug) {
+	                System.out.printf("%s: coord system before ref %s transform:\n%s\n",this.getClass().getSimpleName(),ref.getName(),getCoord().toString());
+	                System.out.printf("%s: Ref %s coord\n%s\n",this.getClass().getSimpleName(), ref.getName(),ref.getCoord().toString());
+	            }
+	            
+	            getCoord().transform(ref.getCoord().getTransformation());
+
+	            if(debug) System.out.printf("%s: coord system after ref %s transform:\n%s\n",this.getClass().getSimpleName(),ref.getName(),getCoord().toString());
+	            
+	        }
+
+	        if(debug) System.out.printf("%s: coord system after ref transformations:\n%s\n",this.getClass().getSimpleName(),getCoord().toString());
+	        
+	    } else {
+	        
+	        if(debug) System.out.printf("%s: no ref geom for this volume\n",this.getClass().getSimpleName());
+	        
+	    }
+
 	}
 	
 	private void applyAlignmentCorrections() {
 	    // Apply alignment corrections to local coordinate system that is already built
-
+	    boolean debug_local = true;
 	    if(this.coord==null) throw new RuntimeException("no coordinate system was set before trying to apply alignment corrections.");
 
 	    if(alignmentCorrections!=null) {
 
-	        if(debug) System.out.printf("%s: Apply alignment corrections to this coord system:\n%s\n",this.getClass().getSimpleName(),getCoord().toString());
+	        if(debug_local) System.out.printf("%s: Apply alignment corrections to this coord system:\n%s\n",this.getClass().getSimpleName(),getCoord().toString());
 
 	        // translate
 	        if(alignmentCorrections.getTranslation()!=null) {			    
 
-	            if(debug) System.out.printf("%s: Apply translation %s to coordinate system\n", this.getClass().getSimpleName(),alignmentCorrections.getTranslation().toString());			    
+	            if(debug_local) System.out.printf("%s: Apply translation %s to coordinate system\n", this.getClass().getSimpleName(),alignmentCorrections.getTranslation().toString());			    
 
 	            getCoord().translate(alignmentCorrections.getTranslation());
 
 	        } else {
-	            if(debug) System.out.printf("%s: No translation to coordinate system\n", this.getClass().getSimpleName());
+	            if(debug_local) System.out.printf("%s: No translation to coordinate system\n", this.getClass().getSimpleName());
 	        }
 
 	        // rotate
 	        if(alignmentCorrections.getRotation()!=null) {                
 
-	            if(debug) {
+	            if(debug_local) {
 	                System.out.printf("%s: Apply rotation to coordinate system. Matrix:\n", this.getClass().getSimpleName());             
 	                double mat[][] = alignmentCorrections.getRotation().getMatrix();
 	                TransformationUtils.printMatrix(mat);
@@ -100,19 +131,19 @@
 	                // Since the rotation was created based on active transformations convert to passive right here. 
 	                // This conversion is simply to reverse the order of rotations.
 	                Hep3Vector res_passive = new BasicHep3Vector(res[2],res[1],res[0]);
-	                System.out.printf("%s: Corresponding LCDD Cardan angles:\n", this.getClass().getSimpleName(), res_passive.toString());             
+	                System.out.printf("%s: Corresponding LCDD Cardan angles: %s\n", this.getClass().getSimpleName(), res_passive.toString());             
 	            }
 
 	            getCoord().rotateApache(alignmentCorrections.getRotation());
 
 	        } else {
-	            if(debug) System.out.printf("%s: No rotation to coordinate system\n", this.getClass().getSimpleName());
-	        }
-
-	        if(debug) System.out.printf("%s: coordinate system after alignment corrections:\n%s\n",this.getClass().getSimpleName(),getCoord().toString());
+	            if(debug_local) System.out.printf("%s: No rotation to coordinate system\n", this.getClass().getSimpleName());
+	        }
+
+	        if(debug_local) System.out.printf("%s: coordinate system after alignment corrections:\n%s\n",this.getClass().getSimpleName(),getCoord().toString());
 
 	    } else {
-	        if(debug) System.out.printf("%s: No aligment corrections to coordinate system\n", this.getClass().getSimpleName());
+	        if(debug_local) System.out.printf("%s: No aligment corrections to coordinate system\n", this.getClass().getSimpleName());
 	    }
 
 	}

Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014.java	Mon Oct 27 10:09:38 2014
@@ -36,7 +36,7 @@
  */
 public class HPSTestRunTracker2014 extends LCDDSubdetector
 {
-	private boolean _debug = false; 
+	private boolean _debug = true; 
 	private final boolean buildBeamPlane = false;
 	// Builder class to handle all geometry information
 	private static HPSTrackerLCDDBuilder builder;

Modified: projects/lcsim/trunk/detector-framework/src/test/java/org/lcsim/geometry/subdetector/HPSTestRunTracker2014Test.java
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/test/java/org/lcsim/geometry/subdetector/HPSTestRunTracker2014Test.java	(original)
+++ projects/lcsim/trunk/detector-framework/src/test/java/org/lcsim/geometry/subdetector/HPSTestRunTracker2014Test.java	Mon Oct 27 10:09:38 2014
@@ -8,6 +8,7 @@
 import org.lcsim.detector.PhysicalVolumePath;
 import org.lcsim.geometry.Detector;
 import org.lcsim.geometry.GeometryReader;
+import org.lcsim.geometry.compact.converter.lcdd.HPSTestRunTracker2014;
 
 import junit.framework.Test;
 import junit.framework.TestCase;
@@ -28,7 +29,9 @@
 	protected void setUp() throws Exception {
 		GeometryReader geometryReader = new GeometryReader();
 		geometryReader.setBuildDetailed(true);
-		String pathToCompactFile = "/org/lcsim/geometry/subdetector/HPSTestRun2014-v0.xml";
+		//String pathToCompactFile = "/org/lcsim/geometry/subdetector/HPSTestRun2014-v0.xml";
+		String pathToCompactFile = "/org/lcsim/geometry/subdetector/HPSTestRunTracker2014.xml";
+
 		InputStream in = HPSTestRunTracker2014Test.class.getResourceAsStream(pathToCompactFile);
 		det = geometryReader.read(in);
 		

Modified: projects/lcsim/trunk/detector-framework/src/test/resources/org/lcsim/geometry/subdetector/HPSTestRunTracker2014.xml
 =============================================================================
--- projects/lcsim/trunk/detector-framework/src/test/resources/org/lcsim/geometry/subdetector/HPSTestRunTracker2014.xml	(original)
+++ projects/lcsim/trunk/detector-framework/src/test/resources/org/lcsim/geometry/subdetector/HPSTestRunTracker2014.xml	Mon Oct 27 10:09:38 2014
@@ -54,36 +54,159 @@
   
   <detectors>
     <detector id="1" name="Tracker" type="HPSTestRunTracker2014" readout="TrackerHits">
-	  
-      <!-- Definition of half module logical volume. -->
-      <half_modules>
-        <half_module name="SvtHalfModuleLayers1-3">
-          <component x="50.0" y="100.0" z="0.0" material="Silicon" sensitive="true" />
-        </half_module>
-      </half_modules>
-      
-      <!-- Alignment of entire tracker box. -->
-      <alignment x="0.0" y="0.0" z="0.0" />
-      <support_plate name="SupportPlateL1-3bot">
-        <position name="ball" x="0.0" y="0.0" z="0.0"/>
-        <position name="vee" x="0.0" y="0.0" z="0.0"/>
-        <position name="flat" x="0.0" y="0.0" z="0.0"/>
-        <alignment x="5.0" y="5.0" z="5.0" rx="0.1" ry="0.1" rz="0.1"/>
-        <modules>
-          <module layer="1" ref="SvtModule">
-            <position name="ball" x="0.0" y="0.0" z="0.0"/>
-        	<position name="vee" x="0.0" y="0.0" z="0.0"/>
-        	<position name="flat" x="0.0" y="0.0" z="0.0"/>
-        	<alignment x="4.0" y="4.0" z="4.0" rx="0.1" ry="0.1" rz="0.1"/>
-        	<half_module type="axial" ref="SvtHalfModuleLayers1-3">
-	        	<position name="ball" x="0.0" y="0.0" z="0.0"/>
-    	    	<position name="vee" x="0.0" y="0.0" z="0.0"/>
-        		<position name="flat" x="0.0" y="0.0" z="0.0"/>
-            	<alignment x="3.0" y="3.0" z="3.0" rx="0.1" ry="0.1" rz="0.1" />
-            </half_module>
-          </module>
-        </modules>
-      </support_plate>
+        <millepede_constants>
+        
+            <!-- top half-module translations -->
+            <millepede_constant name="11101" value="0.0"/>
+            <millepede_constant name="11102" value="0.0"/>
+            <millepede_constant name="11103" value="0.0"/>
+            <millepede_constant name="11104" value="0.0"/>
+            <millepede_constant name="11105" value="0.0"/>
+            <millepede_constant name="11106" value="0.0"/>
+            <millepede_constant name="11107" value="0.0"/>
+            <millepede_constant name="11108" value="0.0"/>
+            <millepede_constant name="11109" value="0.0"/>
+            <millepede_constant name="11110" value="0.0"/>
+
+            <millepede_constant name="11201" value="0.0"/>
+            <millepede_constant name="11202" value="0.0"/>
+            <millepede_constant name="11203" value="0.0"/>
+            <millepede_constant name="11204" value="0.0"/>
+            <millepede_constant name="11205" value="0.0"/>
+            <millepede_constant name="11206" value="0.0"/>
+            <millepede_constant name="11207" value="0.0"/>
+            <millepede_constant name="11208" value="0.0"/>
+            <millepede_constant name="11209" value="0.0"/>
+            <millepede_constant name="11210" value="0.0"/>
+
+            <millepede_constant name="11301" value="0.0"/>
+            <millepede_constant name="11302" value="0.0"/>
+            <millepede_constant name="11303" value="0.0"/>
+            <millepede_constant name="11304" value="0.0"/>
+            <millepede_constant name="11305" value="0.0"/>
+            <millepede_constant name="11306" value="0.0"/>
+            <millepede_constant name="11307" value="0.0"/>
+            <millepede_constant name="11308" value="0.0"/>
+            <millepede_constant name="11309" value="0.0"/>
+            <millepede_constant name="11310" value="0.0"/>
+            
+            <!-- top half-module rotations -->
+            
+            <millepede_constant name="12101" value="0.0"/>
+            <millepede_constant name="12102" value="0.0"/>
+            <millepede_constant name="12103" value="0.0"/>
+            <millepede_constant name="12104" value="0.0"/>
+            <millepede_constant name="12105" value="0.0"/>
+            <millepede_constant name="12106" value="0.0"/>
+            <millepede_constant name="12107" value="0.0"/>
+            <millepede_constant name="12108" value="0.0"/>
+            <millepede_constant name="12109" value="0.0"/>
+            <millepede_constant name="12110" value="0.0"/>
+
+            <millepede_constant name="12201" value="0.0"/>
+            <millepede_constant name="12202" value="0.0"/>
+            <millepede_constant name="12203" value="0.0"/>
+            <millepede_constant name="12204" value="0.0"/>
+            <millepede_constant name="12205" value="0.0"/>
+            <millepede_constant name="12206" value="0.0"/>
+            <millepede_constant name="12207" value="0.0"/>
+            <millepede_constant name="12208" value="0.0"/>
+            <millepede_constant name="12209" value="0.0"/>
+            <millepede_constant name="12210" value="0.0"/>
+
+            <millepede_constant name="12301" value="0.0"/>
+            <millepede_constant name="12302" value="0.0"/>
+            <millepede_constant name="12303" value="0.0"/>
+            <millepede_constant name="12304" value="0.0"/>
+            <millepede_constant name="12305" value="0.0"/>
+            <millepede_constant name="12306" value="0.0"/>
+            <millepede_constant name="12307" value="0.0"/>
+            <millepede_constant name="12308" value="0.0"/>
+            <millepede_constant name="12309" value="0.0"/>
+            <millepede_constant name="12310" value="0.0"/>
+            
+            <!-- bottom half-module translations -->
+            
+            <millepede_constant name="21101" value="0.0"/>
+            <millepede_constant name="21102" value="0.0"/>
+            <millepede_constant name="21103" value="0.0"/>
+            <millepede_constant name="21104" value="0.0"/>
+            <millepede_constant name="21105" value="0.0"/>
+            <millepede_constant name="21106" value="0.0"/>
+            <millepede_constant name="21107" value="0.0"/>
+            <millepede_constant name="21108" value="0.0"/>
+            <millepede_constant name="21109" value="0.0"/>
+            <millepede_constant name="21110" value="0.0"/>
+
+            <millepede_constant name="21201" value="0.0"/>
+            <millepede_constant name="21202" value="0.0"/>
+            <millepede_constant name="21203" value="0.0"/>
+            <millepede_constant name="21204" value="0.0"/>
+            <millepede_constant name="21205" value="0.0"/>
+            <millepede_constant name="21206" value="0.0"/>
+            <millepede_constant name="21207" value="0.0"/>
+            <millepede_constant name="21208" value="0.0"/>
+            <millepede_constant name="21209" value="0.0"/>
+            <millepede_constant name="21210" value="0.0"/>
+
+            <millepede_constant name="21301" value="0.0"/>
+            <millepede_constant name="21302" value="0.0"/>
+            <millepede_constant name="21303" value="0.0"/>
+            <millepede_constant name="21304" value="0.0"/>
+            <millepede_constant name="21305" value="0.0"/>
+            <millepede_constant name="21306" value="0.0"/>
+            <millepede_constant name="21307" value="0.0"/>
+            <millepede_constant name="21308" value="0.0"/>
+            <millepede_constant name="21309" value="0.0"/>
+            <millepede_constant name="21310" value="0.0"/>
+            
+            <!-- bottom half-module rotations -->
+            
+            <millepede_constant name="22101" value="0.0"/>
+            <millepede_constant name="22102" value="0.0"/>
+            <millepede_constant name="22103" value="0.0"/>
+            <millepede_constant name="22104" value="0.0"/>
+            <millepede_constant name="22105" value="0.0"/>
+            <millepede_constant name="22106" value="0.0"/>
+            <millepede_constant name="22107" value="0.0"/>
+            <millepede_constant name="22108" value="0.0"/>
+            <millepede_constant name="22109" value="0.0"/>
+            <millepede_constant name="22110" value="0.0"/>
+
+            <millepede_constant name="22201" value="0.0"/>
+            <millepede_constant name="22202" value="0.0"/>
+            <millepede_constant name="22203" value="0.0"/>
+            <millepede_constant name="22204" value="0.0"/>
+            <millepede_constant name="22205" value="0.0"/>
+            <millepede_constant name="22206" value="0.0"/>
+            <millepede_constant name="22207" value="0.0"/>
+            <millepede_constant name="22208" value="0.0"/>
+            <millepede_constant name="22209" value="0.0"/>
+            <millepede_constant name="22210" value="0.0"/>
+
+            <millepede_constant name="22301" value="0.0"/>
+            <millepede_constant name="22302" value="0.0"/>
+            <millepede_constant name="22303" value="0.0"/>
+            <millepede_constant name="22304" value="0.0"/>
+            <millepede_constant name="22305" value="0.0"/>
+            <millepede_constant name="22306" value="0.0"/>
+            <millepede_constant name="22307" value="0.0"/>
+            <millepede_constant name="22308" value="0.0"/>
+            <millepede_constant name="22309" value="0.0"/>
+            <millepede_constant name="22310" value="0.0"/>
+            
+            
+            <!-- top support tilt angles -->
+            <millepede_constant name="13100" value="0.0"/> <!-- + means opening -->
+            <millepede_constant name="13200" value="0.0"/>
+            <millepede_constant name="13300" value="0.0"/>
+            
+            <!-- bottom support tilt angles -->
+            <millepede_constant name="23100" value="0.0"/> <!-- + means closing -->
+            <millepede_constant name="23200" value="0.0"/>
+            <millepede_constant name="23300" value="0.0"/>
+            
+        </millepede_constants>
     </detector>
   </detectors>
   <readouts>

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