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