Commit in projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim on MAIN | |||
detector/converter/compact/HPSTestRunTracker2014Converter.java | +19 | -12 | 3367 -> 3368 |
geometry/compact/converter/HPSTestRunTracker2014Builder.java | +4 | -2 | 3367 -> 3368 |
/HPSTestRunTracker2014Dev1Builder.java | -156 | 3367 removed | |
/HPSTestRunTracker2014Dev1GeometryDefinition.java | -209 | 3367 removed | |
/HPSTestRunTracker2014Dev1JavaBuilder.java | -113 | 3367 removed | |
/HPSTestRunTracker2014Dev1LCDDBuilder.java | -138 | 3367 removed | |
/HPSTestRunTracker2014GeometryDefinition.java | +332 | -47 | 3367 -> 3368 |
/HPSTestRunTracker2014JavaBuilder.java | +7 | -4 | 3367 -> 3368 |
/HPSTestRunTracker2014LCDDBuilder.java | +6 | -3 | 3367 -> 3368 |
/HPSTrackerBuilder.java | +7 | -4 | 3367 -> 3368 |
/HPSTrackerJavaBuilder.java | +5 | -34 | 3367 -> 3368 |
/HPSTrackerLCDDBuilder.java | +13 | -22 | 3367 -> 3368 |
geometry/compact/converter/lcdd/HPSTestRunTracker2014.java | +7 | -6 | 3367 -> 3368 |
+400 | -750 |
Factorize in non-generic builder class information into the geometry definition instead. Make LCDD and JAVA builders aware of the xml node.
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact/HPSTestRunTracker2014Converter.java 2014-10-16 23:48:30 UTC (rev 3367) +++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact/HPSTestRunTracker2014Converter.java 2014-10-17 19:26:21 UTC (rev 3368) @@ -28,6 +28,7 @@
import org.lcsim.geometry.compact.Subdetector; import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014Builder; import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014JavaBuilder;
+import org.lcsim.geometry.compact.converter.HPSTrackerBuilder;
import org.lcsim.geometry.compact.converter.HPSTrackerJavaBuilder; import org.lcsim.geometry.compact.converter.HPSTrackerJavaBuilder.GhostJavaBaseGeom; import org.lcsim.geometry.compact.converter.HPSTrackerJavaBuilder.JavaBaseGeometry;
@@ -64,7 +65,6 @@
if(_debug) System.out.printf("%s: convert %s \n", getClass().getSimpleName(), subdet.getName());
- builder = new HPSTestRunTracker2014JavaBuilder(_debug);
// check tracking material trackingMaterial = MaterialStore.getInstance().get("Vacuum");
@@ -73,10 +73,19 @@
System.exit(1); }
+ // Get XML node for this subdetector. + Element node = subdet.getNode(); +
// Get the tracking volume for module placement. ILogicalVolume trackingVolume = detector.getTrackingVolume().getLogicalVolume();
- // Set subdetector
+ + + // build the local geometry + builder = new HPSTestRunTracker2014JavaBuilder(_debug,node); + + + // Set subdetector for later reference
builder.setSubdetector(subdet); // Get ID helper and dictionary for subdetector.
@@ -84,8 +93,6 @@
builder.setIdentifierDictionary(subdet.getDetectorElement().getIdentifierHelper().getIdentifierDictionary());
- // Get XML node for this subdetector. - Element node = subdet.getNode();
// Build the detector here // setup and build the LCDD geometry
@@ -168,7 +175,7 @@
// create detector element // create detector element
- if(HPSTestRunTracker2014Builder.isBase(geometryObject.getName())) {
+ if(HPSTrackerBuilder.isBase(geometryObject.getName())) {
if(_debug) System.out.printf("%s: create the base detector element\n", getClass().getSimpleName());
@@ -195,7 +202,7 @@
- } else if(HPSTestRunTracker2014Builder.isHalfModule(geometryObject.getName())) {
+ } else if(HPSTrackerBuilder.isHalfModule(geometryObject.getName())) {
if(_debug) System.out.printf("%s: create the layer detector element\n", getClass().getSimpleName());
@@ -210,7 +217,7 @@
layerPosId.setValue(builder.getDetectorIdentifierHelper().getFieldIndex("barrel"), builder.getDetectorIdentifierHelper().getBarrelValue()); //use the old definition of layer number to be consistent //int layer = HPSTestRunTracker2014Builder.getLayerFromVolumeName(geometryObject.getName());
- int layer = HPSTestRunTracker2014Builder.getOldGeomDefLayerFromVolumeName(geometryObject.getName());
+ int layer = HPSTrackerBuilder.getOldGeomDefLayerFromVolumeName(geometryObject.getName());
layerPosId.setValue(builder.getDetectorIdentifierHelper().getFieldIndex("layer"), layer); if(_debug) System.out.printf("%s: layerPosId layer = %d (compare with new layer %d)\n", getClass().getSimpleName(),layer, HPSTestRunTracker2014Builder.getLayerFromVolumeName(geometryObject.getName()));
@@ -241,7 +248,7 @@
// create the "module" detector element // it's under the base element
- String half = HPSTestRunTracker2014Builder.getHalfFromName(geometryObject.getName());
+ String half = HPSTrackerBuilder.getHalfFromName(geometryObject.getName());
if(half.equals("")) throw new RuntimeException("No half found for " + geometryObject.getName()); int moduleNumber = half.equals("top") ? 0 : 1; //String modulePlacementName = builder.getSubdetector().getName() + "_" + moduleName + "_layer" + layer + "_module" + moduleNumber;
@@ -282,7 +289,7 @@
- } else if(HPSTestRunTracker2014Builder.isSensor(geometryObject.getName())) {
+ } else if(HPSTrackerBuilder.isSensor(geometryObject.getName())) {
if(_debug) System.out.printf("%s: this is where I would create a detector element for the sensor %s if needed\n", getClass().getSimpleName(),geometryObject.getName());
@@ -290,7 +297,7 @@
// TODO this should go into the geometry definition?! physVol.setSensitive(true);
- } else if(HPSTestRunTracker2014Builder.isActiveSensor(geometryObject.getName())) {
+ } else if(HPSTrackerBuilder.isActiveSensor(geometryObject.getName())) {
// Setup the active sensor element // to be consistent with old converter I also add the sensor
@@ -322,9 +329,9 @@
layerExpId.setValue(iddict.getFieldIndex("barrel"), builder.getDetectorIdentifierHelper().getBarrelValue()); //use the old definition of layer number to be consistent //int layer = HPSTestRunTracker2014Builder.getLayerFromVolumeName(geometryObject.getName());
- int layer = HPSTestRunTracker2014Builder.getOldGeomDefLayerFromVolumeName(geometryObject.getName());
+ int layer = HPSTrackerBuilder.getOldGeomDefLayerFromVolumeName(geometryObject.getName());
layerExpId.setValue(iddict.getFieldIndex("layer"), layer);
- String half = HPSTestRunTracker2014Builder.getHalfFromName(geometryObject.getName());
+ String half = HPSTrackerBuilder.getHalfFromName(geometryObject.getName());
if(half.equals("")) throw new RuntimeException("No half found for " + geometryObject.getName()); int moduleNumber = half.equals("top") ? 0 : 1;
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014Builder.java 2014-10-16 23:48:30 UTC (rev 3367) +++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014Builder.java 2014-10-17 19:26:21 UTC (rev 3368) @@ -5,6 +5,7 @@
import java.util.ArrayList;
+import org.jdom.Element;
import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.ActiveSensor; import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.Base; import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.BaseGeometry;
@@ -51,11 +52,12 @@
/** * Default constructor. */
- public HPSTestRunTracker2014Builder(boolean debugFlag) { - setDebug(debugFlag);
+ public HPSTestRunTracker2014Builder(boolean debugFlag, Element node) { + super(debugFlag,node);
}
+
public void build() { if(isDebug()) System.out.printf("%s: constructing the geometry objects\n", this.getClass().getSimpleName());
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014Dev1Builder.java 2014-10-16 23:48:30 UTC (rev 3367) +++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014Dev1Builder.java 2014-10-17 19:26:21 UTC (rev 3368) @@ -1,156 +0,0 @@
-/** - * - */ -package org.lcsim.geometry.compact.converter; - -import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.BaseGeometry; - - - -/** - * - * Class used to encapsulate the rules for building geometry based building blocks defined in {@link HPSTestRunTracker2014GeometryDefinition} - * - * @author Per Hansson Adrian <[log in to unmask]> - * - */ -public class HPSTestRunTracker2014Dev1Builder extends HPSTrackerBuilder { - - - - /** - * Default constructor. - */ - public HPSTestRunTracker2014Dev1Builder(boolean debugFlag) { - setDebug(debugFlag); - } - - - - public void build() { - if(isDebug()) System.out.printf("%s: constructing the geometry objects\n", this.getClass().getSimpleName()); - - // Build the geometry from the basic building blocks in the geometry definition class - // Keep the order correct. - // Each item has knowledge of its mother but not its daughters - HPSTestRunTracker2014Dev1GeometryDefinition.TrackingBase tracking = new HPSTestRunTracker2014Dev1GeometryDefinition.TrackingBase("trackingVolume",null); - geometries.add(tracking); - HPSTestRunTracker2014Dev1GeometryDefinition.Base base = new HPSTestRunTracker2014Dev1GeometryDefinition.Base("base",tracking); - geometries.add(base); - HPSTestRunTracker2014Dev1GeometryDefinition.CSupport cSupport = new HPSTestRunTracker2014Dev1GeometryDefinition.CSupport("c_support", base); - geometries.add(cSupport); - - - - if(isDebug()) System.out.printf("%s: build modules\n", getClass().getSimpleName()); - - - - int layer = 1; - String half = "bottom"; - if(isDebug()) System.out.printf("%s: makeModule for layer %d %s \n", this.getClass().getSimpleName(), layer, half); - - String moduleName = "module_L"+ layer + (half=="bottom"?"b":"t"); - BaseGeometry ref = cSupport; - BaseGeometry mother = base; - - //Create the module - HPSTestRunTracker2014GeometryDefinition.TestRunModule module = new HPSTestRunTracker2014Dev1GeometryDefinition.TestRunModuleL13(moduleName, mother, ref, layer, half); - - geometries.add(module); - - if(isDebug()) System.out.printf("%s: build half-modules\n", getClass().getSimpleName()); - - - - // Build the half-module - String side = "axial"; - String volName = moduleName + "_halfmodule_" + side; - mother = module; - - if(isDebug()) System.out.printf("%s: makeHalfModule with name %s\n", this.getClass().getSimpleName(), volName); - - HPSTestRunTracker2014Dev1GeometryDefinition.TestRunHalfModule halfModule = new HPSTestRunTracker2014Dev1GeometryDefinition.TestRunHalfModuleAxial(volName, mother, layer, half); - - if(isDebug()) System.out.printf("%s: %s\n", this.getClass().getSimpleName(), halfModule.toString()); - - geometries.add(halfModule); - - // create the half module components - - mother = halfModule; - - if(isDebug()) System.out.printf("%s: makeHalfModuleComponentSensor for %s \n", this.getClass().getSimpleName(), mother.getName()); - - volName = mother.getName() + "_sensor"; - - // sensor id is hard coded in old geometry to be zero by counting over the components of the module - int component_number = 0; - - // - HPSTestRunTracker2014Dev1GeometryDefinition.Sensor sensor = new HPSTestRunTracker2014Dev1GeometryDefinition.Sensor(volName, mother, component_number); - sensor.setMaterial("Silicon"); - - geometries.add(sensor); - - mother = sensor; - - if(isDebug()) System.out.printf("%s: makeHalfModuleComponentActiveSensor for %s \n", this.getClass().getSimpleName(), mother.getName()); - - volName = mother.getName() + "_active"; - - HPSTestRunTracker2014GeometryDefinition.ActiveSensor active_sensor = new HPSTestRunTracker2014GeometryDefinition.ActiveSensor(volName, mother); - active_sensor.setMaterial("Silicon"); - - geometries.add(active_sensor); - - - if(isDebug()) { - System.out.printf("%s: DONE constructing the geometry objects\n", this.getClass().getSimpleName()); - System.out.printf("%s: List of all the geometry objects built\n", this.getClass().getSimpleName()); - for(HPSTestRunTracker2014GeometryDefinition.BaseGeometry bg : geometries) { - System.out.printf("-------\n%s\n", bg.toString()); - } - } - - } - - - - - - - - - - - - - - - /* - public static Hep3Vector transformToMotherCoord(Hep3Vector vec, BaseGeometry mother, String targetMotherName) { - int debug =1; - if(debug>0) System.out.printf("transformToMotherCoord vec %s mother %s target %s\n", vec.toString(), mother.getName(), targetMotherName); - if(mother.name.equals(targetMotherName)) { - if(debug>0) System.out.printf(String.format("found the transformed vec %s\n", vec.toString())); - return vec; - } else { - if(mother.name.equals("trackingVolume")) { - if(debug>0) System.out.print("reached tracking volume. return null?!\n"); - return null; - } - - Transform3D trans = new Transform3D(mother.pos, mother.rot); - Hep3Vector vec_t = trans.transformed(vec); - if(debug>0) System.out.print("continue searching\n"); - return transformToMotherCoord(vec_t, mother.mother, targetMotherName); - } - - } - */ - - - - -}
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014Dev1GeometryDefinition.java 2014-10-16 23:48:30 UTC (rev 3367) +++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014Dev1GeometryDefinition.java 2014-10-17 19:26:21 UTC (rev 3368) @@ -1,209 +0,0 @@
-/** - * - */ -package org.lcsim.geometry.compact.converter; - - -/** - * - * Class containing geometry information for HPS Test run tracker 2014 - * - * @author Per Hansson Adrian <[log in to unmask]> - * - */ - -public class HPSTestRunTracker2014Dev1GeometryDefinition extends HPSTestRunTracker2014GeometryDefinition { - - - - -/* - public static class Base extends HPSTestRunTracker2014GeometryDefinition.BaseGeometry { - // height of the dummy box holding the entire SVT: - // this means the bottom of the base plate to the the inner surface of of the PS vac box for now - protected static final double base_height = PS_vac_box_inner_height - BasePlate.base_plate_offset_height; - protected static final double base_width = BasePlate.base_plate_width; - protected static final double base_length = BasePlate.base_plate_length; - - public Base(String name, HPSTestRunTracker2014GeometryDefinition.BaseGeometry mother) { - super(name,mother); - init(); - } - protected void setPos() { - //Default position - final double ball_pos_base_x = -1.0*target_pos_wrt_base_plate_x; - final double ball_pos_base_y = -1.0*target_pos_wrt_base_plate_y; - final double ball_pos_base_z = target_pos_wrt_base_plate_z; - final double vee_pos_base_x = ball_pos_base_x + BasePlate.base_plate_width; - final double vee_pos_base_y = ball_pos_base_y; - final double vee_pos_base_z = ball_pos_base_z; - final double flat_pos_base_x = ball_pos_base_x; - final double flat_pos_base_y = ball_pos_base_y; - final double flat_pos_base_z = ball_pos_base_z - BasePlate.base_plate_length; - - //Unrotated compared to tracking coordinates position -// final double ball_pos_base_x = 100; -// final double ball_pos_base_y = 0; -// final double ball_pos_base_z = 0; -// final double vee_pos_base_x = ball_pos_base_x + BasePlate.base_plate_width; -// final double vee_pos_base_y = ball_pos_base_y; -// final double vee_pos_base_z = ball_pos_base_z; -// final double flat_pos_base_x = ball_pos_base_x; -// final double flat_pos_base_y = ball_pos_base_y + BasePlate.base_plate_length; -// final double flat_pos_base_z = ball_pos_base_z; - - - setBallPos(ball_pos_base_x,ball_pos_base_y,ball_pos_base_z); - setVeePos(vee_pos_base_x,vee_pos_base_y,vee_pos_base_z); - setFlatPos(flat_pos_base_x, flat_pos_base_y, flat_pos_base_z); - -// Rotation r = new Rotation(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ, Math.PI/4, 0, 0); -// Vector3D b = r.applyTo(new Vector3D(this.ballPos.v())); -// Vector3D v = r.applyTo(new Vector3D(this.veePos.v())); -// Vector3D f = r.applyTo(new Vector3D(this.flatPos.v())); -// setBallPos(b.getX(), b.getY(), b.getZ()); -// setVeePos(v.getX(), v.getY(), v.getZ()); -// setFlatPos(f.getX(), f.getY(), f.getZ()); - - - - } - protected void setCoord() { - setCoord(null); - } - protected void setCenter() { - setCenter(base_width/2.0, base_length/2.0, base_height/2.0 - BasePlate.base_plate_thickness); - //setCenter(0,0,0); - } - protected void setBoxDim() { - setBoxDim(base_width,base_length,base_height); - } - } - - */ - - - - - - - - /* - public static class TestRunHalfModuleAxial extends HPSTestRunTracker2014GeometryDefinition.TestRunHalfModuleAxial { - - public TestRunHalfModuleAxial(String name, HPSTestRunTracker2014GeometryDefinition.BaseGeometry mother, int layer, String half) { - super(name, mother, layer, half); - init(); - } - - protected void setPos() { - 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; - - final double ball_pos_halfmod_local_x = 0; - final double ball_pos_halfmod_local_y = 0; - final double ball_pos_halfmod_local_z = 0; - final double vee_pos_halfmod_local_x = ball_pos_halfmod_local_x + Sensor.getSensorLength()/2.0; - final double vee_pos_halfmod_local_y = ball_pos_halfmod_local_y; - final double vee_pos_halfmod_local_z = ball_pos_halfmod_local_z; - final double flat_pos_halfmod_local_x = ball_pos_halfmod_local_x; - final double flat_pos_halfmod_local_y = ball_pos_halfmod_local_y + Sensor.getSensorThickness()/2.0; - final double flat_pos_halfmod_local_z = ball_pos_halfmod_local_z; - 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); - - } - - protected void setCenter() { - // Find distance to center in the local coordinate system - // Note that this can be different between axial and stereo since the survey positions determine the local coordinate - // system now. - // I'm not sure this feels good but this has to be done somewhere - double box_center_local_x = 0; - double box_center_local_y = 0; - double box_center_local_z = 0; - setCenter(box_center_local_x, box_center_local_y, box_center_local_z); - } - - } - */ - - /* - public static class Sensor extends HPSTestRunTracker2014GeometryDefinition.Sensor { - - public Sensor(String name, BaseGeometry m, int id) { - super(name, m, id); - init(); - } - - protected void setPos() { - // using SiStrips convention -// setBallPos(0,0,0); -// setVeePos(ballPos.x(), ballPos.y(), ballPos.z() + getSensorWidth()/2.0); -// setFlatPos(ballPos.x() + getSensorLength()/2.0,ballPos.y(), ballPos.z()); -// Rotation r = new Rotation(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ, Math.PI/4, 0, 0); -// Vector3D b = r.applyTo(new Vector3D(this.ballPos.v())); -// Vector3D v = r.applyTo(new Vector3D(this.veePos.v())); -// Vector3D f = r.applyTo(new Vector3D(this.flatPos.v())); -// setBallPos(b.getX(), b.getY(), b.getZ()); -// setVeePos(v.getX(), v.getY(), v.getZ()); -// setFlatPos(f.getX(), f.getY(), f.getZ()); -// - // default convention - setBallPos(0,0,0); - setVeePos(ballPos.x() + getSensorLength()/2.0, ballPos.y(), ballPos.z()); - setFlatPos(ballPos.x(),ballPos.y() + getSensorThickness()/2.0, ballPos.z()); - - } - - protected void setBoxDim() { - // using SiStrips convention - //setBoxDim(getSensorWidth(),getSensorLength(),getSensorThickness()); - // default convention - setBoxDim(getSensorLength(),getSensorThickness(),getSensorWidth()); - - } - - } - - - public static class ActiveSensor extends HPSTestRunTracker2014GeometryDefinition.ActiveSensor { - public ActiveSensor(String name, BaseGeometry m) { - super(name, m); - init(); - } - protected void setPos() { - if(HPSTestRunTracker2014GeometryDefinition.useSiStripsConvention) { - ballPos = new BasicHep3Vector(0,0,0); - veePos = new BasicHep3Vector(getActiveSensorWidth()/2.0,0,0); - flatPos = new BasicHep3Vector(0,getActiveSensorLength()/2.0,0); - } else { - ballPos = new BasicHep3Vector(0,0,0); - veePos = new BasicHep3Vector(getActiveSensorWidth()/2.0,0,0); - flatPos = new BasicHep3Vector(0,getActiveSensorLength()/2.0,0); - } - } - protected void setCoord() { - setCoord(null); - } - protected void setCenter() { - setCenter(0,0,0); - } - @Override - protected void setBoxDim() { - if(HPSTestRunTracker2014GeometryDefinition.useSiStripsConvention) { - setBoxDim(getActiveSensorWidth(), getActiveSensorLength(), getActiveSensorThickness()); - } else { - setBoxDim(getActiveSensorLength(),getActiveSensorThickness(),getActiveSensorWidth()); - } - } - } - */ - - -} - - - -
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014Dev1JavaBuilder.java 2014-10-16 23:48:30 UTC (rev 3367) +++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014Dev1JavaBuilder.java 2014-10-17 19:26:21 UTC (rev 3368) @@ -1,113 +0,0 @@
-/** - * - */ -package org.lcsim.geometry.compact.converter; - -import org.lcsim.detector.ILogicalVolume; - - -/** - * Class used by java converter to build java run time objects for the detector - * It encapsulates and adds the LCDD specific information to the generic @HPSTestRunTracker2014Builder. - * - * @author Per Hansson Adrian <[log in to unmask]> - * - */ -public class HPSTestRunTracker2014Dev1JavaBuilder extends HPSTrackerJavaBuilder { - - - - /** - * Default constructor - */ - public HPSTestRunTracker2014Dev1JavaBuilder(boolean debugFlag) { - super(debugFlag); - } - - - - /** - * Build the JAVA geometry objects from the geometry definition. - * @param trackingVolume - the reference volume. - */ - public void build(ILogicalVolume trackingVolume) { - - // build geometry - setBuilder(new HPSTestRunTracker2014Dev1Builder(this._debug)); - - if(_builder==null) throw new RuntimeException("need to set builder class before calling build!"); - - if(isDebug()) System.out.printf("%s: build the base geometry objects\n", getClass().getSimpleName()); - - _builder.build(); - - if(isDebug()) System.out.printf("%s: DONE build the base geometry objects\n", getClass().getSimpleName()); - - if(isDebug()) System.out.printf("%s: build the JAVA geometry objects\n", getClass().getSimpleName()); - - - // Go through the list of volumes to build that is created in the generic builder class - JavaBaseGeometry trackingGeometry = new JavaBaseGeometry(_builder.getBaseGeometry(HPSTestRunTracker2014GeometryDefinition.TrackingBase.class), trackingVolume); - add(trackingGeometry); - //setBaseTrackerGeometry(trackingGeometry); - //setBaseTrackerGeometry(new GhostJavaBaseGeom(_builder.getBaseGeometry(HPSTestRunTracker2014Dev1GeometryDefinition.Base.class), trackingGeometry)); - //add(getBaseTrackerGeometry()); - setBaseTrackerGeometry(new JavaBaseGeometry(_builder.getBaseGeometry(HPSTestRunTracker2014Dev1GeometryDefinition.Base.class), trackingGeometry,1)); - add(getBaseTrackerGeometry()); - - - // build modules - - if(isDebug()) System.out.printf("%s: build JAVA modules\n", getClass().getSimpleName()); - - - JavaBaseGeometry mother = getBaseTrackerGeometry(); - - // Create the module - JavaBaseGeometry lcddM = new GhostJavaBaseGeom(_builder.getBaseGeometry(HPSTestRunTracker2014Dev1GeometryDefinition.TestRunModule.class), mother); - add(lcddM); - - - if(isDebug()) System.out.printf("%s: build JAVA half-modules\n", getClass().getSimpleName()); - - int oldCompactModuleId = 0; - JavaBaseGeometry lcddHM = new JavaBaseGeometry(_builder.getBaseGeometry(HPSTestRunTracker2014Dev1GeometryDefinition.TestRunHalfModuleAxial.class),lcddM,oldCompactModuleId); - add(lcddHM); - - // ComponentNumber is taken from old geometry where it is simply a counter when adding the xml daughters to the TestRunModule. - // It is simply 0 for sensor and 1 for carbon fiber in the old geometry - HPSTestRunTracker2014GeometryDefinition.Sensor sensor = _builder.getBaseGeometry(HPSTestRunTracker2014GeometryDefinition.Sensor.class); - int componentNumber = sensor.getId(); - - // create the sensor - JavaBaseGeometry lcddS = new JavaBaseGeometry(sensor, lcddHM, componentNumber); - add(lcddS); - - // create the active sensor - JavaBaseGeometry lcddAS = new JavaBaseGeometry(_builder.getBaseGeometry(HPSTestRunTracker2014GeometryDefinition.ActiveSensor.class), lcddS, componentNumber); - add(lcddAS); - - - - if(isDebug()) System.out.printf("%s: DONE build JAVA modules\n", getClass().getSimpleName()); - - - if(isDebug()) System.out.printf("%s: DONE building the JAVA geometry objects\n", getClass().getSimpleName()); - //if(isDebug()) { - System.out.printf("%s: DONE building the JAVA geometry objects\n", getClass().getSimpleName()); - System.out.printf("%s: List of all the JAVA geometry objects built\n", this.getClass().getSimpleName()); - for(JavaBaseGeometry bg : java_objects) { - System.out.printf("-------\n%s\n", bg.toString()); - } - //} - - - // Set visualization features - //setVis(); - - - } - - - -}
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014Dev1LCDDBuilder.java 2014-10-16 23:48:30 UTC (rev 3367) +++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014Dev1LCDDBuilder.java 2014-10-17 19:26:21 UTC (rev 3368) @@ -1,138 +0,0 @@
-package org.lcsim.geometry.compact.converter; - -import org.lcsim.geometry.compact.converter.lcdd.util.Volume; - - -/** - * Class used by LCDD converter to build detector for SLIC. - * - * @author Per Hansson Adrian <[log in to unmask]> - * - */ -public class HPSTestRunTracker2014Dev1LCDDBuilder extends HPSTrackerLCDDBuilder { - - - public HPSTestRunTracker2014Dev1LCDDBuilder(boolean debugFlag) { - super(debugFlag); - } - - public void build(Volume worldVolume) { - - // build geometry - setBuilder(new HPSTestRunTracker2014Dev1Builder(this._debug)); - - if(_builder==null) throw new RuntimeException("need to set builder class before calling build!"); - - if(isDebug()) System.out.printf("%s: build the base geometry objects\n", getClass().getSimpleName()); - - _builder.build(); - - if(isDebug()) System.out.printf("%s: DONE build the base geometry objects\n", getClass().getSimpleName()); - - - if(isDebug()) System.out.printf("%s: build the LCDD geometry objects\n", getClass().getSimpleName()); - - - // Go through the list of volumes to build that is created in the generic builder class - // TODO this is manual now since I don't have a way of knowing in the generic builder class what is a ghost volume at this point. - LCDDBaseGeometry trackingGeometry = new LCDDBaseGeometry(_builder.getBaseGeometry(HPSTestRunTracker2014GeometryDefinition.TrackingBase.class), worldVolume); - add(trackingGeometry); - //baseTrackerGeometry = trackingGeometry; - baseTrackerGeometry = new LCDDBaseGeometry(_builder.getBaseGeometry(HPSTestRunTracker2014Dev1GeometryDefinition.Base.class), lcdd, trackingGeometry); - add(baseTrackerGeometry); - - - - // build modules - - - - if(isDebug()) System.out.printf("%s: build modules\n", getClass().getSimpleName()); - - int layer = 1; - String half = "bottom"; - if(isDebug()) System.out.printf("%s: makeModule for layer %d %s \n", this.getClass().getSimpleName(), layer, half); - - LCDDBaseGeometry mother = baseTrackerGeometry; - - //Create the module - LCDDBaseGeometry lcddM = new LCDDBaseGeometry(_builder.getBaseGeometry(HPSTestRunTracker2014Dev1GeometryDefinition.TestRunModule.class), lcdd, mother); - add(lcddM); - - - - - if(isDebug()) System.out.printf("%s: build half-modules\n", getClass().getSimpleName()); - - - - - LCDDBaseGeometry lcddHM = new LCDDBaseGeometry(_builder.getBaseGeometry(HPSTestRunTracker2014Dev1GeometryDefinition.TestRunHalfModuleAxial.class),lcdd, lcddM); - add(lcddHM); - - // create the sensor - LCDDBaseGeometry lcddS = new LCDDBaseGeometry(_builder.getBaseGeometry(HPSTestRunTracker2014GeometryDefinition.Sensor.class), lcdd, lcddHM); - add(lcddS); - // create the active sensor - LCDDBaseGeometry lcddAS = new LCDDBaseGeometry(_builder.getBaseGeometry(HPSTestRunTracker2014GeometryDefinition.ActiveSensor.class), lcdd, lcddS); - add(lcddAS); - /* - // create the lamination - LCDDBaseGeometry lcddL = new LCDDBaseGeometry(bundle.lamination, lcdd, lcddHM); - add(lcddL); - // create the carbon fiber frame - LCDDBaseGeometry lcddCF = new LCDDBaseGeometry(bundle.carbonFiber, lcdd, lcddHM); - add(lcddCF); - // create the hybrid frame - LCDDBaseGeometry lcddH = new LCDDBaseGeometry(bundle.hybrid, lcdd, lcddHM); - add(lcddH); - */ - - - - - //if(isDebug()) { - System.out.printf("%s: DONE building the LCDD geometry objects\n", getClass().getSimpleName()); - System.out.printf("%s: List of all %d LCDD geometry objects built\n", this.getClass().getSimpleName(), lcddGeometries.size()); - for(LCDDBaseGeometry bg : lcddGeometries) { - System.out.printf("-------\n%s\n", bg.toString()); - } - //} - - - - // Set visualization features - setVisualization(); - - - } - - - - public void setVisualization() { - - if(isDebug()) System.out.printf("%s: Set LCDD visualization for %d LCDD geometry objects \n", getClass().getSimpleName(), lcddGeometries.size()); - for(LCDDBaseGeometry g : lcddGeometries) { - if(isDebug()) System.out.printf("%s: Set LCDD vis for %s \n", getClass().getSimpleName(), g.getName()); - if(g.getName().endsWith("baseplate")) g.setVisName("BasePlateVis"); - //else if(g.getName().contains("base")) g.setVisName("BaseVis"); - else if(g.getName().endsWith("support_bottom") || g.getName().contains("support_top")) g.setVisName("SupportVolumeVis"); - else if(g.getName().endsWith("support_plate_bottom") || g.getName().contains("support_plate_top")) g.setVisName("SupportPlateVis"); - else if(g.getName().endsWith("halfmodule_axial")) g.setVisName("HalfModuleVis"); - else if(g.getName().endsWith("halfmodule_stereo")) g.setVisName("HalfModuleVis"); - else if(g.getName().endsWith("module")) g.setVisName("ModuleVis"); - else if(g.getName().endsWith("cold")) g.setVisName("ColdBlockVis"); - else if(g.getName().endsWith("lamination")) g.setVisName("KaptonVis"); - else if(g.getName().endsWith("sensor")) g.setVisName("SensorVis"); - else if(g.getName().endsWith("sensor_active")) g.setVisName("SensorVis"); - else if(g.getName().endsWith("cf")) g.setVisName("CarbonFiberVis"); - else if(g.getName().endsWith("hybrid")) g.setVisName("HybridVis"); - else { - if(isDebug()) System.out.printf("%s: No LCDD vis for %s \n", getClass().getSimpleName(), g.getName()); - } - } - if(isDebug()) System.out.printf("%s: DONE Set LCDD vis \n", getClass().getSimpleName()); - } - - -}
\ No newline at end of file
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java 2014-10-16 23:48:30 UTC (rev 3367) +++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java 2014-10-17 19:26:21 UTC (rev 3368) @@ -3,21 +3,22 @@
*/ package org.lcsim.geometry.compact.converter;
+import hep.physics.vec.BasicHep3Matrix; +import hep.physics.vec.BasicHep3Vector; +import hep.physics.vec.Hep3Vector; +import hep.physics.vec.VecOp; +
import java.util.ArrayList; import java.util.List; import org.apache.commons.math3.geometry.euclidean.threed.Rotation; import org.apache.commons.math3.geometry.euclidean.threed.RotationOrder; import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
+import org.jdom.Element;
import org.lcsim.detector.Rotation3D; import org.lcsim.detector.Transform3D; import org.lcsim.detector.Translation3D;
-import hep.physics.vec.BasicHep3Matrix; -import hep.physics.vec.BasicHep3Vector; -import hep.physics.vec.Hep3Vector; -import hep.physics.vec.VecOp; -
/** * * Class containing geometry information for HPS Test run tracker 2014
@@ -26,8 +27,19 @@
* */
-public class HPSTestRunTracker2014GeometryDefinition { -
+public class HPSTestRunTracker2014GeometryDefinition extends HPSTrackerBuilder { + + + + //steering + public final boolean doAxial = true; + public final boolean doStereo = true; + public final boolean doColdBlock = false; + public final boolean doBottom = true; + public final boolean doTop = true; + public final int layerBitMask = 0x1F; + +
//General static final double inch = 25.4; //mm protected static final boolean useSiStripsConvention = true;
@@ -39,8 +51,316 @@
protected static final double target_pos_wrt_base_plate_y = 80.55; //from Tim's sketchup //68.75; //from Marco's 3D model protected static final double target_pos_wrt_base_plate_z = 926.59; //from Marco's 3D model protected static final double PS_vac_box_inner_height = 7.0*inch;
+ +
+ public HPSTestRunTracker2014GeometryDefinition(boolean debug, Element node) { + super(debug, node); + } + + + public void build() { + + if(isDebug()) System.out.printf("%s: constructing the geometry objects\n", this.getClass().getSimpleName()); + + // Build the geometry from the basic building blocks in the geometry definition class + // Keep the order correct. + // Each item has knowledge of its mother but not its daughters + HPSTestRunTracker2014GeometryDefinition.TrackingBase tracking = new HPSTestRunTracker2014GeometryDefinition.TrackingBase("trackingVolume",null); + geometries.add(tracking); + HPSTestRunTracker2014GeometryDefinition.Base base = new HPSTestRunTracker2014GeometryDefinition.Base("base",tracking); + geometries.add(base); + HPSTestRunTracker2014GeometryDefinition.BasePlate basePlate = new HPSTestRunTracker2014GeometryDefinition.BasePlate("baseplate",base, "Aluminum"); + geometries.add(basePlate); + HPSTestRunTracker2014GeometryDefinition.CSupport cSupport = new HPSTestRunTracker2014GeometryDefinition.CSupport("c_support", base); + geometries.add(cSupport); + HPSTestRunTracker2014GeometryDefinition.SupportBottom supportBottom = new HPSTestRunTracker2014GeometryDefinition.SupportBottom("support_bottom", base, 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 + HPSTestRunTracker2014GeometryDefinition.SupportPlateBottom supportPlateBottom = new HPSTestRunTracker2014GeometryDefinition.SupportPlateBottom("support_plate_bottom", base, supportBottom, "Aluminum"); + geometries.add(supportPlateBottom); + HPSTestRunTracker2014GeometryDefinition.SupportTop supportTop = new HPSTestRunTracker2014GeometryDefinition.SupportTop("support_top", base, cSupport); + geometries.add(supportTop); + HPSTestRunTracker2014GeometryDefinition.SupportPlateTop supportPlateTop = new HPSTestRunTracker2014GeometryDefinition.SupportPlateTop("support_plate_top", base, supportTop, "Aluminum"); + geometries.add(supportPlateTop); + + // Modules are built using an encapsulating class that keeps tracks of all components + 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(isDebug()) { + System.out.printf("%s: DONE constructing the geometry objects\n", this.getClass().getSimpleName()); + System.out.printf("%s: List of all the geometry objects built\n", this.getClass().getSimpleName()); + for(BaseGeometry bg : geometries) { + System.out.printf("-------\n%s\n", bg.toString()); + } + } + + }
+ + /** + * Create the module. + * @param layer - of the module + * @param half - top or bottom half of the tracker + */ + private 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"); + + boolean isL13 = ( layer >=1 && layer <=3 ) ? true : false; + + // 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 + final HPSTestRunTracker2014GeometryDefinition.BaseGeometry mother; + final HPSTestRunTracker2014GeometryDefinition.BaseGeometry ref; + if(half == "bottom") { + mother = getBaseGeometry(HPSTestRunTracker2014GeometryDefinition.Base.class); + ref = getBaseGeometry(HPSTestRunTracker2014GeometryDefinition.SupportPlateBottom.class); + } else { + mother= getBaseGeometry(HPSTestRunTracker2014GeometryDefinition.Base.class); + ref = getBaseGeometry(HPSTestRunTracker2014GeometryDefinition.SupportPlateTop.class); + } + + //Create the module + HPSTestRunTracker2014GeometryDefinition.TestRunModule module; + if(isL13) { + module = new HPSTestRunTracker2014GeometryDefinition.TestRunModuleL13(volName, mother, ref, layer, half); + } else { + module = new HPSTestRunTracker2014GeometryDefinition.TestRunModuleL45(volName, mother, ref, layer, half); + } + + + // create the bundle for this module + ModuleBundle bundle = new ModuleBundle(module); + addModuleBundle(bundle); + + if(doAxial) makeHalfModule("axial", module); + if(doColdBlock) makeColdBlock(module); + if(doStereo) makeHalfModule("stereo", module); + + + if(isDebug()) { + System.out.printf("%s: created module bundle:\n", this.getClass().getSimpleName()); + bundle.print(); + } + + } + + + + /** + * Create the cold block object. + * @param mother to the cold block + */ + private void makeColdBlock(HPSTestRunTracker2014GeometryDefinition.TestRunModule mother) { + + + String moduleName = mother.getName(); + + if(isDebug()) System.out.printf("%s: makeColdBlock for %s \n", this.getClass().getSimpleName(), moduleName); + + + String volName = moduleName + "_coldblock"; + + // find layer + int layer = getLayerFromVolumeName(moduleName); + + // Build the half-module + HPSTestRunTracker2014GeometryDefinition.TestRunColdBlock coldBlock; + + if(layer >= 1 && layer <=3) { + coldBlock = new HPSTestRunTracker2014GeometryDefinition.TestRunColdBlockL13(volName, mother, layer); + } else if(layer >= 4 && layer <=5) { + coldBlock = new HPSTestRunTracker2014GeometryDefinition.TestRunColdBlockL45(volName, mother, layer); + } else { + throw new RuntimeException("wrong layer for " + volName); + } + + ModuleBundle bundle = getModuleBundle(mother); + bundle.coldBlock = coldBlock; + } + + + + /** + * Create the half-module. + * @param side - stereo or axial + * @param mother to the half-module + */ + private void makeHalfModule(String side, HPSTestRunTracker2014GeometryDefinition.TestRunModule mother) { + + String moduleName = mother.getName(); + + if(isDebug()) System.out.printf("%s: makeHalfModule for %s %s \n", this.getClass().getSimpleName(), moduleName, side); + + String volName = moduleName + "_halfmodule_" + side; + + // top or bottom? + String half = mother.getHalf(); + + // find layer + int layer = mother.getLayer(); + + ModuleBundle bundle = getModuleBundle(mother); + HalfModuleBundle halfModuleBundle; + + // Build the half-module + HPSTestRunTracker2014GeometryDefinition.TestRunHalfModule halfModule; + if(side == "axial") { + halfModule = new HPSTestRunTracker2014GeometryDefinition.TestRunHalfModuleAxial(volName, mother, layer, half); + halfModuleBundle = new HalfModuleBundle(halfModule); + bundle.halfModuleAxial = halfModuleBundle; + } else if(side == "stereo") { + halfModule = new HPSTestRunTracker2014GeometryDefinition.TestRunHalfModuleStereo(volName, mother, layer, half); + halfModuleBundle = new HalfModuleBundle(halfModule); + bundle.halfModuleStereo = halfModuleBundle; + } else { + throw new IllegalArgumentException("not a valid half-module side " + side); + } + + + // create the half module components + + makeHalfModuleComponentSensor(halfModule); + + makeHalfModuleComponentKapton(halfModule); + + makeHalfModuleComponentCF(halfModule); + + makeHalfModuleComponentHybrid(halfModule); + + + + + } + + + + private void makeHalfModuleComponentHybrid(HPSTestRunTracker2014GeometryDefinition.TestRunHalfModule mother) { + + if(isDebug()) System.out.printf("%s: makeHalfModuleComponentHybrid for %s \n", this.getClass().getSimpleName(), mother.getName()); + + String volName = mother.getName() + "_hybrid"; + + // Build the half-module + + // id is hard coded + int component_number = 3; + + HPSTestRunTracker2014GeometryDefinition.Hybrid hybrid = new HPSTestRunTracker2014GeometryDefinition.Hybrid(volName,mother,component_number); + hybrid.setMaterial("G10"); + + HalfModuleBundle hm = getHalfModuleBundle((HPSTestRunTracker2014GeometryDefinition.TestRunModule) mother.getMother(), mother.getName()); + hm.hybrid = hybrid; + + if(isDebug()) System.out.printf("%s: added hybrid to half-module with name %s \n", this.getClass().getSimpleName(), hm.halfModule.getName()); + + + } + + + + private void makeHalfModuleComponentCF(HPSTestRunTracker2014GeometryDefinition.TestRunHalfModule mother) { + + if(isDebug()) System.out.printf("%s: makeHalfModuleComponentCF for %s \n", this.getClass().getSimpleName(), mother.getName()); + + + String volName = mother.getName() + "_cf"; + + // Build the half-module + + // id is hard coded + int component_number = 1; + + HPSTestRunTracker2014GeometryDefinition.CarbonFiber cf = new HPSTestRunTracker2014GeometryDefinition.CarbonFiber(volName,mother,component_number); + cf.setMaterial("CarbonFiber"); + + HalfModuleBundle hm = getHalfModuleBundle((HPSTestRunTracker2014GeometryDefinition.TestRunModule) mother.getMother(), mother.getName()); + hm.carbonFiber = cf; + + } + + + + + private void makeHalfModuleComponentKapton(HPSTestRunTracker2014GeometryDefinition.TestRunHalfModule mother) { + + if(isDebug()) System.out.printf("%s: makeHalfModuleComponentKapton for %s \n", this.getClass().getSimpleName(), mother.getName()); + + String volName = mother.getName() + "_lamination"; + + // Build the half-module + + // id is hard coded + int component_number = 2; + + HPSTestRunTracker2014GeometryDefinition.HalfModuleLamination lamination = new HPSTestRunTracker2014GeometryDefinition.HalfModuleLamination(volName,mother,component_number); + lamination.setMaterial("Kapton"); + + + HalfModuleBundle hm = getHalfModuleBundle((HPSTestRunTracker2014GeometryDefinition.TestRunModule) mother.getMother(), mother.getName()); + hm.lamination = lamination; + + } + + + private void makeHalfModuleComponentSensor(HPSTestRunTracker2014GeometryDefinition.TestRunHalfModule mother) { + + if(isDebug()) System.out.printf("%s: makeHalfModuleComponentSensor for %s \n", this.getClass().getSimpleName(), mother.getName()); + + String volName = mother.getName() + "_sensor"; + + // sensor id is hard coded in old geometry to be zero by counting over the components of the module + int component_number = 0; + + // + HPSTestRunTracker2014GeometryDefinition.Sensor sensor = new HPSTestRunTracker2014GeometryDefinition.Sensor(volName, mother, component_number); + sensor.setMaterial("Silicon"); + + HalfModuleBundle hm = getHalfModuleBundle((HPSTestRunTracker2014GeometryDefinition.TestRunModule) mother.getMother(), mother.getName()); + hm.sensor = sensor; + + + makeHalfModuleComponentActiveSensor(sensor); + + + } + + + private void makeHalfModuleComponentActiveSensor(HPSTestRunTracker2014GeometryDefinition.Sensor mother) { + + if(isDebug()) System.out.printf("%s: makeHalfModuleComponentActiveSensor for %s \n", this.getClass().getSimpleName(), mother.getName()); + + String volName = mother.getName() + "_active"; + + HPSTestRunTracker2014GeometryDefinition.ActiveSensor active_sensor = new HPSTestRunTracker2014GeometryDefinition.ActiveSensor(volName, mother); + active_sensor.setMaterial("Silicon"); + + HalfModuleBundle hm = getHalfModuleBundle((HPSTestRunTracker2014GeometryDefinition.TestRunModule) mother.getMother().getMother(), mother.getMother().getName()); + hm.activeSensor = active_sensor; + + } + + public boolean doLayer(int layer) { + int a = (1<<(layer-1)) & layerBitMask; + return a!=0?true:false; + } + +
/** *
@@ -62,9 +382,6 @@
protected Hep3Vector flatPos; private Hep3Vector center; private Hep3Vector boxDim;
- //store explicit rotations - if exist should be used instead of those extracted from coord - // TODO This is a workaround as I should really rotate the local coord system to make things consistent. Figure this out later. - public Hep3Vector explicit_rot_angles = null;
public BaseGeometry(String name, BaseGeometry m) { setName(name);
@@ -1058,46 +1375,9 @@
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);
- - // I should set the coordiantes from the the drawing without explicit roations - // TODO FIX THIS! - calcAndSetPos();
}
- private void calcAndSetPos() { - /* - // find the rotation to place the flat point - Rotation rot1_csup = - new Rotation( - new Vector3D(vee_pos_csup_pin_bottom_x-ball_pos_csup_pin_bottom_x, - vee_pos_csup_pin_bottom_y-ball_pos_csup_pin_bottom_y, - vee_pos_csup_pin_bottom_z-ball_pos_csup_pin_bottom_z), - new Vector3D(1,0,0)); - - Vector3D flat_pos_csup_pin_bottom_3D_rot = rot1_csup.applyTo(new Vector3D(0,10.0,0)); - // translate - double flat_pos_csup_pin_bottom_x = ball_pos_csup_pin_bottom_x + flat_pos_csup_pin_bottom_3D_rot.getX(); - double flat_pos_csup_pin_bottom_y = ball_pos_csup_pin_bottom_y + flat_pos_csup_pin_bottom_3D_rot.getY(); - double flat_pos_csup_pin_bottom_z = ball_pos_csup_pin_bottom_z + flat_pos_csup_pin_bottom_3D_rot.getZ(); - setFlatPos(flat_pos_csup_pin_bottom_x,flat_pos_csup_pin_bottom_y,flat_pos_csup_pin_bottom_z); - */ - } -
- /** - * Set rotations explicitly. - * TODO Should be included in the coord system? Workaround!? - */ - protected void setExplicitRotation() { - if(getLayer()<4) { - stereo_angle = -0.1; - } else { - stereo_angle = -0.05; - } - Rotation rot_stereo = new Rotation(RotationOrder.XYZ, Math.PI, stereo_angle,0); - double res[] = rot_stereo.getAngles(RotationOrder.XYZ); - explicit_rot_angles = new BasicHep3Vector(res); - }
@@ -1582,6 +1862,11 @@
}
+ + + + +
}
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014JavaBuilder.java 2014-10-16 23:48:30 UTC (rev 3367) +++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014JavaBuilder.java 2014-10-17 19:26:21 UTC (rev 3368) @@ -5,7 +5,9 @@
import java.util.ArrayList;
+import org.jdom.Element;
import org.lcsim.detector.ILogicalVolume;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.Base;
import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.BasePlate; import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.SupportBottom; import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.SupportPlateBottom;
@@ -29,9 +31,10 @@
/** * Default constructor
+ * @param node
*/
- public HPSTestRunTracker2014JavaBuilder(boolean debugFlag) { - super(debugFlag);
+ public HPSTestRunTracker2014JavaBuilder(boolean debugFlag, Element node) { + super(debugFlag, node);
}
@@ -43,7 +46,7 @@
public void build(ILogicalVolume trackingVolume) { // build geometry
- setBuilder(new HPSTestRunTracker2014Builder(this._debug));
+ setBuilder(new HPSTestRunTracker2014GeometryDefinition(this._debug, node));
if(_builder==null) throw new RuntimeException("need to set builder class before calling build!");
@@ -62,7 +65,7 @@
JavaBaseGeometry trackingGeometry = new JavaBaseGeometry(_builder.getBaseGeometry(TrackingBase.class), trackingVolume); add(trackingGeometry); //setBaseTrackerGeometry(new GhostJavaBaseGeom(_builder.getBaseGeometry(Base.class), trackingGeometry));
- setBaseTrackerGeometry(new JavaBaseGeometry(_builder.getBaseGeometry(HPSTestRunTracker2014Dev1GeometryDefinition.Base.class), trackingGeometry,1));
+ setBaseTrackerGeometry(new JavaBaseGeometry(_builder.getBaseGeometry(Base.class), trackingGeometry,1));
add(getBaseTrackerGeometry()); JavaBaseGeometry basePlateGeometry = new GhostJavaBaseGeom(_builder.getBaseGeometry(BasePlate.class), getBaseTrackerGeometry()); add(basePlateGeometry);
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014LCDDBuilder.java 2014-10-16 23:48:30 UTC (rev 3367) +++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014LCDDBuilder.java 2014-10-17 19:26:21 UTC (rev 3368) @@ -1,5 +1,6 @@
package org.lcsim.geometry.compact.converter;
+import org.jdom.Element;
import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.Base; import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.BasePlate; import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.CSupport;
@@ -10,6 +11,8 @@
import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TrackingBase; import org.lcsim.geometry.compact.converter.HPSTrackerBuilder.HalfModuleBundle; import org.lcsim.geometry.compact.converter.HPSTrackerBuilder.ModuleBundle;
+import org.lcsim.geometry.compact.converter.lcdd.util.LCDD; +import org.lcsim.geometry.compact.converter.lcdd.util.SensitiveDetector;
import org.lcsim.geometry.compact.converter.lcdd.util.Volume;
@@ -22,14 +25,14 @@
public class HPSTestRunTracker2014LCDDBuilder extends HPSTrackerLCDDBuilder {
- public HPSTestRunTracker2014LCDDBuilder(boolean debugFlag) { - super(debugFlag);
+ public HPSTestRunTracker2014LCDDBuilder(boolean debugFlag, Element node, LCDD lcdd, SensitiveDetector sens) { + super(debugFlag, node, lcdd, sens);
} public void build(Volume worldVolume) { // build geometry
- setBuilder(new HPSTestRunTracker2014Builder(this._debug));
+ setBuilder(new HPSTestRunTracker2014GeometryDefinition(this._debug, this.node));
if(_builder==null) throw new RuntimeException("need to set builder class before calling build!");
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerBuilder.java 2014-10-16 23:48:30 UTC (rev 3367) +++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerBuilder.java 2014-10-17 19:26:21 UTC (rev 3368) @@ -5,6 +5,7 @@
import java.util.ArrayList; import java.util.List;
+import org.jdom.Element;
import org.lcsim.detector.Transform3D; import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.BaseGeometry; import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunColdBlock;
@@ -15,12 +16,14 @@
private boolean debug = true; public List<ModuleBundle> modules; protected List<HPSTestRunTracker2014GeometryDefinition.BaseGeometry> geometries = new ArrayList<HPSTestRunTracker2014GeometryDefinition.BaseGeometry>();
-
+ protected Element node;
+
- public HPSTrackerBuilder() { - super(); - }
+ public HPSTrackerBuilder(boolean debug, Element node) { + this.debug = debug; + this.node = node; + }
public abstract void build();
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerJavaBuilder.java 2014-10-16 23:48:30 UTC (rev 3367) +++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerJavaBuilder.java 2014-10-17 19:26:21 UTC (rev 3368) @@ -7,6 +7,7 @@
import java.util.ArrayList; import java.util.List;
+import org.jdom.Element;
import org.lcsim.detector.DetectorIdentifierHelper; import org.lcsim.detector.IDetectorElement; import org.lcsim.detector.ILogicalVolume;
@@ -41,9 +42,11 @@
protected List<IDetectorElement> moduleDetectorElements = new ArrayList<IDetectorElement>(); protected IDetectorElement baseDetectorElement = null; public HPSTrackerBuilder _builder = null;
+ protected Element node = null;
- public HPSTrackerJavaBuilder(boolean debugFlag) { - setDebug(debugFlag);
+ public HPSTrackerJavaBuilder(boolean debugFlag, Element node) { + this._debug=debugFlag; + this.node = node;
} public abstract void build(ILogicalVolume trackingVolume);
@@ -360,40 +363,8 @@
//System.out.printf("%s: unit vectors u %s v %s w %s\n", this.getClass().getSimpleName(),base.getCoord().u().toString(),base.getCoord().v().toString(),base.getCoord().w().toString()); }
- //Hep3Vector lcdd_rot_angles = HPSTestRunTracker2014.getEulerAngles(unit_u,unit_v,base.getCoord().u(), base.getCoord().v()); - //Hep3Vector lcdd_rot_angles = HPSTestRunTracker2014.getEulerAngles(base.getCoord().u(), base.getCoord().v(), unit_u,unit_v);
Hep3Vector lcdd_rot_angles = TransformationUtils.getCardanAngles(base_u, base_v, base_w, unit_u, unit_v, unit_w);
- /* - - // Check if there are explicit rotations built into the object itself which overrides - // TODO this should be included in the definition of the coordinate system. Fix this for the affected components. - if (base.explicit_rot_angles!=null) { - if(isDebug()) System.out.printf("%s: explicit angles to be applied %s\n", this.getClass().getSimpleName(),base.explicit_rot_angles.toString()); - // there are explicit rotations I need to apply. - // Find the displacement of the box center due to rotation about different origin - // Find the origin in the physical mother coord - if(isDebug()) System.out.printf("%s: transform origin %s to physical mother %s\n", this.getClass().getSimpleName(),base.getCoord().origin(),physMother.getName()); - Transform3D tpm = - getTransform(base.getMother().getCoord().getTransformation(),base.getMother().getMother(),physMother.getName()); - if(isDebug()) System.out.printf("%s: found transform to physical mother \n%s\n\n", this.getClass().getSimpleName(),tpm.toString()); - Hep3Vector origin_mother = tpm.transformed(base.getCoord().origin()); - if(isDebug()) System.out.printf("%s: origin in physical mother coord is %s\n", this.getClass().getSimpleName(),origin_mother.toString()); - Hep3Vector box_center_base_rot = HPSTestRunTracker2014.getRotationDisplacement(origin_mother, box_center_base, base.explicit_rot_angles); - if(isDebug()) { - System.out.printf("%s: explicit_rot_angles %s\n", this.getClass().getSimpleName(),lcdd_rot_angles); - System.out.printf("%s: explicit_rot_angles_2 %s\n", this.getClass().getSimpleName(),base.explicit_rot_angles); - System.out.printf("%s: origin %s\n", this.getClass().getSimpleName(), base.getCoord().origin().toString()); - System.out.printf("%s: origin_mother %s\n", this.getClass().getSimpleName(), origin_mother.toString()); - System.out.printf("%s: box_center_base %s\n", this.getClass().getSimpleName(), box_center_base.toString()); - System.out.printf("%s: box_center_base_rot %s\n", this.getClass().getSimpleName(), box_center_base_rot.toString()); - } - // update the rotation angles - lcdd_rot_angles = base.explicit_rot_angles; - // update the position of the center in the mother coord - box_center = VecOp.sub(box_center_base_rot, mother_center); - } - */
// Create the LCDD position setPos(new Translation3D(box_center.x(), box_center.y(), box_center.z()));
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerLCDDBuilder.java 2014-10-16 23:48:30 UTC (rev 3367) +++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerLCDDBuilder.java 2014-10-17 19:26:21 UTC (rev 3368) @@ -8,6 +8,7 @@
import java.util.List; import java.util.Map;
+import org.jdom.Element;
import org.jdom.JDOMException; import org.lcsim.detector.Transform3D; import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.BaseGeometry;
@@ -24,19 +25,27 @@
public abstract class HPSTrackerLCDDBuilder implements IHPSTrackerLCDDBuilder { public boolean _debug = false;
- protected LCDD lcdd;
+ protected LCDD lcdd = null;
protected LCDDBaseGeometry baseTrackerGeometry; protected List<LCDDBaseGeometry> lcddGeometries = new ArrayList<LCDDBaseGeometry>(); private SensitiveDetector sensitiveDetector; public HPSTrackerBuilder _builder = null;
+ protected Element node;
- public HPSTrackerLCDDBuilder(boolean debugFlag) {
+ public HPSTrackerLCDDBuilder(boolean debugFlag, Element node, LCDD lcdd2, SensitiveDetector sens) {
setDebug(debugFlag);
+ setLCDD(lcdd2); + setSensitiveDetector(sens); + setNode(node);
}
- public void setSensitiveDetector(SensitiveDetector sens) {
+ public void setNode(Element node) { + this.node = node; + } + + public void setSensitiveDetector(SensitiveDetector sens) {
this.sensitiveDetector = sens; }
@@ -211,25 +220,7 @@
} Hep3Vector lcdd_rot_angles = TransformationUtils.getCardanAngles(base_u, base_v, base_w, unit_u, unit_v, unit_w);
- // Check if there are explicit rotations built into the object itself which overrides - // TODO this should be included in the definition of the coordinate system. Fix this for the affected components. - /* - if (base.explicit_rot_angles!=null) { - // there are explicit rotations I need to apply. - // Find the displacement of the box center due to rotation about different origin - Hep3Vector box_center_base_rot = HPSTestRunTracker2014.getRotationDisplacement(base.getCoord().origin(), box_center_base, base.explicit_rot_angles); - if(isDebug()) { - System.out.printf("%s: lcdd_rot_angles %s\n", this.getClass().getSimpleName(),lcdd_rot_angles); - System.out.printf("%s: lcdd_rot_angles_2 %s\n", this.getClass().getSimpleName(),base.explicit_rot_angles); - System.out.printf("%s: box_center_base %s\n", this.getClass().getSimpleName(), box_center_base.toString()); - System.out.printf("%s: box_center_base_rot %s\n", this.getClass().getSimpleName(), box_center_base_rot.toString()); - } - // update the rotation angles - lcdd_rot_angles = base.explicit_rot_angles; - // update the position of the center in the mother coord - box_center = VecOp.sub(box_center_base_rot, base.getMother().getCenter()); - } - */
+
// Create the LCDD position setPos(new Position(getName() + "_position",box_center.x(), box_center.y(), box_center.z()));
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014.java 2014-10-16 23:48:30 UTC (rev 3367) +++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014.java 2014-10-17 19:26:21 UTC (rev 3368) @@ -13,6 +13,7 @@
import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014Builder; import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition; import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014LCDDBuilder;
+import org.lcsim.geometry.compact.converter.HPSTrackerBuilder;
import org.lcsim.geometry.compact.converter.HPSTrackerLCDDBuilder; import org.lcsim.geometry.compact.converter.HPSTrackerLCDDBuilder.GhostLCDDBaseGeometry; import org.lcsim.geometry.compact.converter.HPSTrackerLCDDBuilder.LCDDBaseGeometry;
@@ -99,10 +100,10 @@
// setup and build the LCDD geometry if(_debug) System.out.printf("%s: setup and build the LCDD geometry\n", getClass().getSimpleName());
- builder = new HPSTestRunTracker2014LCDDBuilder(_debug);
+ builder = new HPSTestRunTracker2014LCDDBuilder(_debug,node,lcdd,sens);
- builder.setLCDD(lcdd); - builder.setSensitiveDetector(sens);
+ //builder.setLCDD(lcdd); + //builder.setSensitiveDetector(sens);
builder.build(trackingVolume); if(_debug) System.out.printf("%s: DONE setup and build the LCDD geometry\n", getClass().getSimpleName());
@@ -240,12 +241,12 @@
//use the old definition of layer number to be consistent //int layer = HPSTestRunTracker2014Builder.getLayerFromVolumeName(geometryObject.getName());
- int layer = HPSTestRunTracker2014Builder.getOldGeomDefLayerFromVolumeName(geometryObject.getName()); - if(_debug) System.out.printf("%s: physVolId layer = %d (compare with new layer %d)\n", getClass().getSimpleName(),layer, HPSTestRunTracker2014Builder.getLayerFromVolumeName(geometryObject.getName()));
+ int layer = HPSTrackerBuilder.getOldGeomDefLayerFromVolumeName(geometryObject.getName()); + if(_debug) System.out.printf("%s: physVolId layer = %d (compare with new layer %d)\n", getClass().getSimpleName(),layer, HPSTrackerBuilder.getLayerFromVolumeName(geometryObject.getName()));
geometryObject.getPhysVolume().addPhysVolID("layer", layer);
- String half = HPSTestRunTracker2014Builder.getHalfFromName(geometryObject.getName());
+ String half = HPSTrackerBuilder.getHalfFromName(geometryObject.getName());
if(half.equals("")) throw new RuntimeException("no half was found for name " + geometryObject.getName()); int moduleId = half.equals("top") ? 0 : 1; geometryObject.getPhysVolume().addPhysVolID("module", moduleId);
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