Author: [log in to unmask] Date: Mon Jan 25 10:53:05 2016 New Revision: 4132 Log: Cleanup and refactor to help creating new detectors overriding objects in this detector. Modified: java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014LCDDBuilder.java Modified: java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java ============================================================================= --- java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java (original) +++ java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java Mon Jan 25 10:53:05 2016 @@ -428,10 +428,10 @@ * @author Per Hansson Adrian <[log in to unmask]> */ public abstract static class UChannelL13 extends SurveyVolume { - public final static double length = UChannelL13Plate.length; - public static final double width = UChannelL13Plate.width; + protected final static double length = UChannelL13Plate.length; + private static final double width = UChannelL13Plate.width; public static final double height = 2.575*inch; - public static final double kin_mount_to_edge_of_plate_x = width/2.0-4.0*inch; + //private static final double kin_mount_to_edge_of_plate_x = width/2.0-4.0*inch; public static final double side_plate_cone_y = 2.0*inch; public UChannelL13(String name, SurveyVolume m, AlignmentCorrection alignmentCorrection, SurveyVolume ref) { @@ -442,6 +442,8 @@ setBoxDim(getWidth(),getLength(),getHeight()); } protected double getLength() { + System.out.println("UChannelL13 getLength"); + return length; } protected double getWidth() { @@ -462,7 +464,7 @@ * */ public static class UChannelL13Bottom extends UChannelL13 { - private final static double cone_to_edge_of_plate_y = 12.25*inch; + protected final static double cone_to_edge_of_plate_y = 12.25*inch; private final static Hep3Vector ball_kinMount = new BasicHep3Vector(SupportRingL13BottomKinMount.kin_mount_pos_x,SupportRingL13BottomKinMount.kin_mount_pos_y,SupportRingL13BottomKinMount.kin_mount_pos_z); public UChannelL13Bottom(String name, SurveyVolume m, @@ -471,12 +473,14 @@ init(); } protected void setCenter() { + System.out.println("UChannelL13Bottom setCenter"); final double x = 0.0; final double y = cone_to_edge_of_plate_y - length/2.0; final double z = -side_plate_cone_y - UChannelL13Plate.height + height/2.0; setCenter(x,y,z); } protected void setPos() { + System.out.println("UChannelL13Bottom setPos"); ballPos = VecOp.sub(UChannelL13BottomSurveyBalls.ball_pos, ball_kinMount); Hep3Vector veeOffset = UChannelL13BottomSurveyBalls.getVeeOffset(); veePos = VecOp.add(ballPos, veeOffset); @@ -539,10 +543,9 @@ public static class UChannelL13Top extends UChannelL13 { private final static Hep3Vector ball_kinMount = new BasicHep3Vector(SupportRingL13TopKinMount.kin_mount_pos_x,SupportRingL13TopKinMount.kin_mount_pos_y,SupportRingL13TopKinMount.kin_mount_pos_z); - private final static double length = UChannelL13.length; private final static double cone_to_side_plate_pin_y = (14.5-3.125)*inch; private final static double side_plate_pin_to_edge_of_plate_y = (16.0-14.5)*inch; - private final static double cone_to_edge_of_plate_y = cone_to_side_plate_pin_y + side_plate_pin_to_edge_of_plate_y; + protected final static double cone_to_edge_of_plate_y = cone_to_side_plate_pin_y + side_plate_pin_to_edge_of_plate_y; public UChannelL13Top(String name, SurveyVolume m, AlignmentCorrection alignmentCorrection, SurveyVolume ref) { @@ -635,7 +638,7 @@ private final static double pocket_depth_L2 = pocket_depth_L1 + 0.059; private final static double pocket_depth_L3 = pocket_depth_L2 + 0.059; //private final static double module_mounting_hole_to_hole_x =3.937*inch; - private static final double width = 9.25*inch; + protected static final double width = 9.25*inch; protected static final double height = 0.375*inch; protected final static double length = 16.0*inch; @@ -704,8 +707,8 @@ protected void setCenter() { final double x = 0.0; - final double y = UChannelL13Bottom.cone_to_edge_of_plate_y - length/2.0; - final double z = -UChannelL13.side_plate_cone_y - height/2.0; + final double y = UChannelL13Bottom.cone_to_edge_of_plate_y - getLength()/2.0; + final double z = -UChannelL13.side_plate_cone_y - getHeight()/2.0; setCenter(x,y,z); } @@ -731,8 +734,8 @@ protected void setCenter() { final double x = 0.0; - final double y = UChannelL13Top.cone_to_edge_of_plate_y - length/2.0; - final double z = -UChannelL13.side_plate_cone_y - height/2.0; + final double y = UChannelL13Top.cone_to_edge_of_plate_y - getLength()/2.0; + final double z = -UChannelL13.side_plate_cone_y - getHeight()/2.0; setCenter(x,y,z); } @@ -1069,7 +1072,6 @@ //private static final double hole_to_module_edge_height_dir = height - 0.875*inch; protected static final double hole_to_center_of_plate_width_dir = 3.75*inch; private static final double hole_to_module_edge_length_dir = 0.25*inch; - public ModuleL13(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) { super(name, mother, alignmentCorrection, ref, getLayerFromVolumeName(name), getHalfFromName(name)); @@ -1091,6 +1093,7 @@ } public abstract static class ModuleL13Top extends ModuleL13 { + protected static final double cone_to_hole_across_uchannel = -95.25; public ModuleL13Top(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) { super(name, mother, alignmentCorrection, ref); @@ -1107,6 +1110,7 @@ } public abstract static class ModuleL13Bot extends ModuleL13 { + protected static final double cone_to_hole_across_uchannel = 95.25; public ModuleL13Bot(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) { super(name, mother, alignmentCorrection, ref); @@ -1123,6 +1127,8 @@ public static class ModuleL1Bot extends ModuleL13Bot { + protected final static double cone_to_hole_along_uchannel = 9.525; + protected final static double cone_to_hole_vertical_from_uchannel = -51.435; public ModuleL1Bot(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) { @@ -1130,9 +1136,9 @@ init(); } protected Hep3Vector getHolePosition() { - double x = 95.25; - double y = 9.525; - double z = -51.435; + double x = cone_to_hole_across_uchannel; + double y = cone_to_hole_along_uchannel; + double z = cone_to_hole_vertical_from_uchannel; return new BasicHep3Vector(x, y, z); } @@ -1140,6 +1146,9 @@ public static class ModuleL1Top extends ModuleL13Top { + + protected final static double cone_to_hole_along_uchannel = -9.525; + protected final static double cone_to_hole_vertical_from_uchannel = -51.435; public ModuleL1Top(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) { @@ -1148,9 +1157,9 @@ } protected Hep3Vector getHolePosition() { - double x = -95.25; // note minus sign compared to bottom - double y = -9.525; - double z = -51.435; + double x = cone_to_hole_across_uchannel; // note minus sign compared to bottom + double y = cone_to_hole_along_uchannel; + double z = cone_to_hole_vertical_from_uchannel; return new BasicHep3Vector(x, y, z); } @@ -1160,21 +1169,26 @@ public static class ModuleL2Bot extends ModuleL13Bot { + protected final static double cone_to_hole_along_uchannel = 109.525; + protected final static double cone_to_hole_vertical_from_uchannel = ModuleL1Bot.cone_to_hole_vertical_from_uchannel - 1.5; + public ModuleL2Bot(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) { super(name, mother, alignmentCorrection, ref); init(); } protected Hep3Vector getHolePosition() { - double x = 95.25; - double y = 109.525; - double z = -51.435 - 1.5; + double x = cone_to_hole_across_uchannel; + double y = cone_to_hole_along_uchannel; + double z = cone_to_hole_vertical_from_uchannel; return new BasicHep3Vector(x, y, z); } } public static class ModuleL2Top extends ModuleL13Top { + protected final static double cone_to_hole_along_uchannel = 90.475; + protected final static double cone_to_hole_vertical_from_uchannel = ModuleL1Top.cone_to_hole_vertical_from_uchannel - 1.5; public ModuleL2Top(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) { @@ -1183,9 +1197,9 @@ } protected Hep3Vector getHolePosition() { - double x = -95.25; // note minus sign compared to bottom - double y = 90.475; - double z = -51.435 - 1.5; + double x = cone_to_hole_across_uchannel; // note minus sign compared to bottom + double y = cone_to_hole_along_uchannel; + double z = cone_to_hole_vertical_from_uchannel; return new BasicHep3Vector(x, y, z); } @@ -1195,6 +1209,8 @@ public static class ModuleL3Bot extends ModuleL13Bot { + protected final static double cone_to_hole_along_uchannel = 209.525; + protected final static double cone_to_hole_vertical_from_uchannel = ModuleL1Bot.cone_to_hole_vertical_from_uchannel - 2*1.5; public ModuleL3Bot(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) { @@ -1202,15 +1218,17 @@ init(); } protected Hep3Vector getHolePosition() { - double x = 95.25; - double y = 209.525; - double z = -51.435 - 2*1.5; + double x = cone_to_hole_across_uchannel; + double y = cone_to_hole_along_uchannel; + double z = cone_to_hole_vertical_from_uchannel; return new BasicHep3Vector(x, y, z); } } public static class ModuleL3Top extends ModuleL13Top { + protected final static double cone_to_hole_along_uchannel = 190.475; + protected final static double cone_to_hole_vertical_from_uchannel = ModuleL1Top.cone_to_hole_vertical_from_uchannel - 2*1.5; public ModuleL3Top(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) { @@ -1219,9 +1237,9 @@ } protected Hep3Vector getHolePosition() { - double x = -95.25; // note minus sign compared to bottom - double y = 190.475; - double z = -51.435 - 2*1.5; + double x = cone_to_hole_across_uchannel; // note minus sign compared to bottom + double y = cone_to_hole_along_uchannel; + double z = cone_to_hole_vertical_from_uchannel; return new BasicHep3Vector(x, y, z); } @@ -1281,7 +1299,11 @@ * */ public static abstract class ModuleL46Bot extends ModuleL46 { - + // positions are in the mother (U-channel) coord. systtem as usual + protected final static double x = 149.225; // distance from survey ball to hole mounting surface + protected final static double y = 9.525; // distance along U-channel + protected final static double z = -53.34; // distance normal to the U-channel plate + public ModuleL46Bot(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) { super(name, mother, alignmentCorrection, ref); @@ -1306,7 +1328,11 @@ * */ public static abstract class ModuleL46Top extends ModuleL46 { - + // positions are in the mother (U-channel) coord. systtem as usual + protected final static double x = -149.225; // distance from survey ball to hole mounting surface + protected final static double y = -9.525; // distance along U-channel + protected final static double z = -53.34; // distance normal to the U-channel plate + public ModuleL46Top(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) { super(name, mother, alignmentCorrection, ref); @@ -1332,12 +1358,6 @@ } protected Hep3Vector getHole() { - double x = 149.225; - double y = 9.525; - double z = -53.34; - //double x = hole_to_center_of_plate_width_dir; - //double y = -getHoleModuleCenterOffset(); //Note minus sign compared to top - //double z = -UChannelL46.side_plate_cone_y - UChannelL46Plate.pocket_depth_L4; return new BasicHep3Vector(x, y, z); } @@ -1352,12 +1372,6 @@ } protected Hep3Vector getHole() { - double x = -149.225; - double y = -9.525; - double z = -53.34; -// double x = -1*hole_to_center_of_plate_width_dir; -// double y = -getHoleModuleCenterOffset(); -// double z = -UChannelL46.side_plate_cone_y - UChannelL46Plate.pocket_depth_L4; return new BasicHep3Vector(x, y, z); } @@ -1373,10 +1387,9 @@ } protected Hep3Vector getHole() { - double x = 149.225; - double y = 209.525; - double z = -53.34 - 3.0; - return new BasicHep3Vector(x, y, z); + double y_local = y + 200.0; + double z_local = z - 3.0; + return new BasicHep3Vector(x, y_local, z_local); } } @@ -1390,10 +1403,9 @@ } protected Hep3Vector getHole() { - double x = -149.225; - double y = 190.475; - double z = -53.34 - 3.0; - return new BasicHep3Vector(x, y, z); + double y_local = y + 200.0; + double z_local = z - 3.0; + return new BasicHep3Vector(x, y_local, z_local); } } @@ -1407,10 +1419,9 @@ } protected Hep3Vector getHole() { - double x = 149.225; - double y = 409.525; - double z = -53.34 - 2*3.0; - return new BasicHep3Vector(x, y, z); + double y_local = y + 200.0*2; + double z_local = z - 2*3.0; + return new BasicHep3Vector(x, y_local, z_local); } } @@ -1424,10 +1435,9 @@ } protected Hep3Vector getHole() { - double x = -149.225; - double y = 390.475; - double z = -53.34 - 2*3.0; - return new BasicHep3Vector(x, y, z); + double y_local = y + 2*200.0; + double z_local = z - 2*3.0; + return new BasicHep3Vector(x, y_local, z_local); } } @@ -1657,6 +1667,10 @@ double z = -Sensor.getSensorThickness()/2.0 - HPSTestRunTracker2014GeometryDefinition.HalfModuleLamination.thickness - CarbonFiber.thickness + half_module_thickness/2.0; setCenter(x, y, z); } + @Override + protected void setStereoAngle() { + // do nothing here + } } @@ -1675,12 +1689,12 @@ public static class HalfModuleStereo extends HPSTestRunTracker2014GeometryDefinition.TestRunHalfModule { public static final double sensor_z = -0.52*inch; + protected static final double stereo_angle_value = 0.1; public HalfModuleStereo(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, int layer, String half) { super(name, mother, alignmentCorrection, layer, half); - if(layer>=1 && layer<=3) stereo_angle = 0.1; - else throw new RuntimeException("Layer " + layer + " is ill-defined for test run modules"); + setStereoAngle(); init(); } protected void setPos() { @@ -1721,6 +1735,9 @@ if(debug) System.out.printf("%s: box center after corrections\n%s\n", getClass().getSimpleName(),getBoxDim().toString()); } + protected void setStereoAngle() { + stereo_angle = stereo_angle_value; + } } @@ -1763,24 +1780,13 @@ } - /** * Create the module. * @param layer - of the module * @param half - top or bottom half of the tracker */ - protected void makeModuleBundle(int layer, String half) - { - - if(isDebug()) System.out.printf("%s: makeModule for layer %d %s \n", this.getClass().getSimpleName(), layer, half); - - - // build the module name - String volName = "module_L"+ layer + (half=="bottom"?"b":"t"); - - // find the mother and reference geometry - // Note that the reference geometry is the support plate and since that is assumed to be - // created through it's references we don't need more than one reference to reach the mother coordinate system + protected void makeModuleBundle(int layer, String half) { + final SurveyVolume mother = getSurveyVolume(SvtBox.class); final SurveyVolume ref; AlignmentCorrection alignmentCorrection = new AlignmentCorrection(); @@ -1798,8 +1804,85 @@ ref = getSurveyVolume(UChannelL46Top.class); } } - + + makeModuleBundle(layer, half, mother, ref); + + } + + + + /** + * Create the module. + * @param layer - of the module + * @param half - top or bottom half of the tracker + * @param mother - mother volume + * @param ref - reference volume + */ + protected void makeModuleBundle(int layer, String half, SurveyVolume mother, SurveyVolume ref) + { + + if(isDebug()) System.out.printf("%s: makeModule for layer %d %s \n", this.getClass().getSimpleName(), layer, half); + //Create the module + BaseModule module = createModule(half, layer, mother, ref); + + // create the bundle for this module + // need to create it and add to list before half-module is created + // as it uses the list to find the bundle. Ugly. TODO fix this. + BaseModuleBundle bundle; + + if(layer<=3) { + bundle = new TestRunModuleBundle(module); + addModuleBundle(bundle); + if(doAxial) makeHalfModule("axial", module); + // if(doColdBlock) makeColdBlock(module); + if(doStereo) makeHalfModule("stereo", module); + } else { + bundle = new LongModuleBundle(module); + addModuleBundle(bundle); + if(doAxial) { + makeLongHalfModule("axial","hole", module); + makeLongHalfModule("axial","slot", module); + } + // if(doColdBlock) makeColdBlock(module); + if(doStereo) { + makeLongHalfModule("stereo","hole", module); + makeLongHalfModule("stereo","slot", module); + } + } + + + + if(isDebug()) { + System.out.printf("%s: created module bundle:\n", this.getClass().getSimpleName()); + bundle.print(); + System.out.printf("%s: Now there are %d modules\n", this.getClass().getSimpleName(),modules.size()); + } + + + + } + + + + + /** + * Create a {@link BaseModule} object. + * @param half - top or bottom string + * @param layer - layer integer + * @param mother - mother {@link SurveyVolume} + * @param ref - reference {@link SurveyVolume} + * @return the created {@link BaseModule} + */ + protected BaseModule createModule(String half, int layer, SurveyVolume mother, SurveyVolume ref) { + + // build the module name + String volName = "module_L"+ layer + (half=="bottom"?"b":"t"); + + // find alignment corrections + AlignmentCorrection alignmentCorrection = new AlignmentCorrection(); + alignmentCorrection.setNode(node); + BaseModule module; if(half == "bottom") { if(layer==1) { @@ -1834,47 +1917,8 @@ throw new UnsupportedOperationException("Layer " + layer + " not implemented yet for top"); } } - - - // create the bundle for this module - // need to create it and add to list before half-module is created - // as it uses the list to find the bundle. Ugly. TODO fix this. - BaseModuleBundle bundle; - - if(layer<=3) { - bundle = new TestRunModuleBundle(module); - addModuleBundle(bundle); - if(doAxial) makeHalfModule("axial", module); - // if(doColdBlock) makeColdBlock(module); - if(doStereo) makeHalfModule("stereo", module); - } else { - bundle = new LongModuleBundle(module); - addModuleBundle(bundle); - if(doAxial) { - makeLongHalfModule("axial","hole", module); - makeLongHalfModule("axial","slot", module); - } - // if(doColdBlock) makeColdBlock(module); - if(doStereo) { - makeLongHalfModule("stereo","hole", module); - makeLongHalfModule("stereo","slot", module); - } - } - - - - if(isDebug()) { - System.out.printf("%s: created module bundle:\n", this.getClass().getSimpleName()); - bundle.print(); - System.out.printf("%s: Now there are %d modules\n", this.getClass().getSimpleName(),modules.size()); - } - - - - } - - - + return module; + } /** Modified: java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014LCDDBuilder.java ============================================================================= --- java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014LCDDBuilder.java (original) +++ java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014LCDDBuilder.java Mon Jan 25 10:53:05 2016 @@ -109,7 +109,30 @@ if(isDebug()) System.out.printf("%s: build modules\n", getClass().getSimpleName()); - // Loop over all modules created + addModules(); + + System.out.printf("%s: Built %d LCDD geometry objects\n", getClass().getSimpleName(), lcddSurveyVolumes.size()); + + if(isDebug()) { + System.out.printf("%s: List of all %d LCDD geometry objects built\n", this.getClass().getSimpleName(), lcddSurveyVolumes.size()); + for(SurveyVolumeImpl bg : lcddSurveyVolumes) { + System.out.printf("-------\n%s\n", bg.toString()); + } + } + + + + // Set visualization features + setVisualization(); + + } + + + /** + * Rules for adding the LCDD modules. + */ + protected void addModules() { + // Loop over all modules created for(BaseModuleBundle mod : _builder.modules) { //SVTModuleBundle m = (SVTModuleBundle) mod; BaseModuleBundle m = mod; @@ -136,25 +159,8 @@ addModule(m, mother); } - - - - - System.out.printf("%s: Built %d LCDD geometry objects\n", getClass().getSimpleName(), lcddSurveyVolumes.size()); - - if(isDebug()) { - System.out.printf("%s: List of all %d LCDD geometry objects built\n", this.getClass().getSimpleName(), lcddSurveyVolumes.size()); - for(SurveyVolumeImpl bg : lcddSurveyVolumes) { - System.out.printf("-------\n%s\n", bg.toString()); - } - } - - - - // Set visualization features - setVisualization(); - - } + } + /** * Rules for adding the LCDD module geometry.