Author: phansson
Date: Fri Nov 7 17:13:07 2014
New Revision: 3415
Log:
Added first version with modules and re-used half-modules from TestRun implementation for L1-3 bottom U-channel.
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/HPSTestRunTracker2014JavaBuilder.java
projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014LCDDBuilder.java
projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java
projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerBuilder.java
projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerGeometryDefinition.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
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 Fri Nov 7 17:13:07 2014
@@ -114,7 +114,7 @@
* @param layer - of the module
* @param half - top or bottom half of the tracker
*/
- private void makeModuleBundle(int layer, String half)
+ protected void makeModuleBundle(int layer, String half)
{
if(isDebug()) System.out.printf("%s: makeModule for layer %d %s \n", this.getClass().getSimpleName(), layer, half);
@@ -148,7 +148,7 @@
// create the bundle for this module
- TestRunModuleBundle bundle = new TestRunModuleBundle(module);
+ ModuleBundle bundle = new ModuleBundle(module);
addModuleBundle(bundle);
if(doAxial) makeHalfModule("axial", module);
@@ -162,29 +162,27 @@
}
}
-
-
/**
* Create the cold block object.
* @param mother to the cold block
*/
- private void makeColdBlock(TestRunModule mother) {
-
-
+ protected void makeColdBlock(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
TestRunColdBlock coldBlock;
-
+
if(layer >= 1 && layer <=3) {
coldBlock = new TestRunColdBlockL13(volName, mother, layer);
} else if(layer >= 4 && layer <=5) {
@@ -192,215 +190,14 @@
} 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, 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();
- boolean isTopLayer = !mother.isBottom();
-
- // find layer
- int layer = mother.getLayer();
-
- // axial or stereo
- boolean isAxial = isAxialFromName(volName);
-
- // find layer according to old definition
- int oldLayer = getOldGeomDefLayerFromVolumeName(isTopLayer, layer, isAxial);
- //if(isDebug()) System.out.printf("%s: half? %s layer %d oldlayer %d axial? %s\n",
- // this.getClass().getSimpleName(), isTopLayer?"top":"bottom", layer,oldLayer,isAxial?"yes":"no");
-
- // find alignment correction to this volume
- AlignmentCorrection alignmentCorrection = getHalfModuleAlignmentCorrection(isTopLayer, oldLayer);
-
-
- // find the bundle that it will be added to
- TestRunModuleBundle bundle = (TestRunModuleBundle)getModuleBundle(mother);
- TestRunHalfModuleBundle halfModuleBundle;
-
-
- // Build the half-module
- TestRunHalfModule halfModule;
- if(isAxial) {
- halfModule = new TestRunHalfModuleAxial(volName, mother, alignmentCorrection, layer, half);
- halfModuleBundle = new TestRunHalfModuleBundle(halfModule);
- bundle.halfModuleAxial = halfModuleBundle;
- } else {
- halfModule = new TestRunHalfModuleStereo(volName, mother, alignmentCorrection, layer, half);
- halfModuleBundle = new TestRunHalfModuleBundle(halfModule);
- bundle.halfModuleStereo = halfModuleBundle;
- }
-
-
- // create the half module components
-
- makeHalfModuleComponentSensor(halfModule);
-
- makeHalfModuleComponentKapton(halfModule);
-
- makeHalfModuleComponentCF(halfModule);
-
- makeHalfModuleComponentHybrid(halfModule);
-
-
-
-
- }
-
-
-
- private void makeHalfModuleComponentHybrid(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;
-
- Hybrid hybrid = new Hybrid(volName,mother,component_number);
- hybrid.setMaterial("G10");
-
- TestRunHalfModuleBundle hm = (TestRunHalfModuleBundle) getHalfModuleBundle((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(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;
-
- CarbonFiber cf = new CarbonFiber(volName,mother,component_number);
- cf.setMaterial("CarbonFiber");
-
- TestRunHalfModuleBundle hm = (TestRunHalfModuleBundle) getHalfModuleBundle((TestRunModule) mother.getMother(), mother.getName());
- hm.carbonFiber = cf;
-
- }
-
-
-
-
- private void makeHalfModuleComponentKapton(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;
-
- HalfModuleLamination lamination = new HalfModuleLamination(volName,mother,component_number);
- lamination.setMaterial("Kapton");
-
-
- TestRunHalfModuleBundle hm = (TestRunHalfModuleBundle) getHalfModuleBundle((TestRunModule) mother.getMother(), mother.getName());
- hm.lamination = lamination;
-
- }
-
-
- private void makeHalfModuleComponentSensor(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;
-
- //
- Sensor sensor = new Sensor(volName, mother, null, component_number);
- sensor.setMaterial("Silicon");
-
- TestRunHalfModuleBundle hm = (TestRunHalfModuleBundle) getHalfModuleBundle((TestRunModule) mother.getMother(), mother.getName());
- hm.sensor = sensor;
-
-
- makeHalfModuleComponentActiveSensor(sensor);
-
-
- }
-
-
- private void makeHalfModuleComponentActiveSensor(Sensor mother) {
-
- if(isDebug()) System.out.printf("%s: makeHalfModuleComponentActiveSensor for %s \n", this.getClass().getSimpleName(), mother.getName());
-
- String volName = mother.getName() + "_active";
-
- ActiveSensor active_sensor = new ActiveSensor(volName, mother);
- active_sensor.setMaterial("Silicon");
-
- TestRunHalfModuleBundle hm = (TestRunHalfModuleBundle) getHalfModuleBundle((TestRunModule) mother.getMother().getMother(), mother.getMother().getName());
- hm.activeSensor = active_sensor;
-
- }
-
-
- /**
- * Tracking volume geometry definition.
- */
- /*
- public static class TrackingVolume extends SurveyVolume {
- public TrackingVolume(String name, SurveyVolume mother) {
- super(name,mother, null);
- init();
- }
- protected void setPos() {
- // Dummy survey positions to setup a coordinate system
- ballPos = new BasicHep3Vector(1,0,0);
- veePos = new BasicHep3Vector(0,1,0);
- flatPos = new BasicHep3Vector(0,0,1);
- }
- protected void setCoord() {
- // at the origin
- setCoord(new BasicHep3Vector(0,0,0));
- }
- protected void setCenter() {
- // at the origin
- setCenter(new BasicHep3Vector(0,0,0));
- }
- protected void setBoxDim() {
- // do nothing since we are not building a tracking volume
- }
- }
-
-*/
+
+
+
+
public static class TrackerEnvelope extends SurveyVolume {
// 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
@@ -1941,20 +1738,6 @@
}
}
-
-
- public static class TestRunModuleBundle extends ModuleBundle {
- TestRunModuleBundle(TestRunModule m) {
- module = m;
- }
- public void print() {
- if(module!=null) System.out.printf("%s: %s\n", this.getClass().getSimpleName(),module.getName());
- if(halfModuleAxial!=null) halfModuleAxial.print();
- if(coldBlock!=null)System.out.printf("%s: %s\n", this.getClass().getSimpleName(),coldBlock.getName());
- if(halfModuleStereo!=null) halfModuleStereo.print();
- }
- }
-
public static class TestRunHalfModuleBundle extends HalfModuleBundle {
public SurveyVolume sensor = null;
@@ -1971,6 +1754,21 @@
}
+ protected TestRunHalfModuleAxial createTestRunHalfModuleAxial(String volName,
+ BaseModule mother, AlignmentCorrection alignmentCorrection,
+ int layer, String half) {
+ return new TestRunHalfModuleAxial(volName, mother, alignmentCorrection, layer, half);
+
+ }
+
+
+ protected TestRunHalfModuleStereo createTestRunHalfModuleStereo(
+ String volName, BaseModule mother,
+ AlignmentCorrection alignmentCorrection, int layer, String half) {
+ return new TestRunHalfModuleStereo(volName, mother, alignmentCorrection, layer, half);
+ }
+
+
Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014JavaBuilder.java
=============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014JavaBuilder.java (original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014JavaBuilder.java Fri Nov 7 17:13:07 2014
@@ -14,7 +14,6 @@
import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.SupportPlateTop;
import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.SupportTop;
import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunHalfModuleBundle;
-import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunModuleBundle;
import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope;
import org.lcsim.geometry.compact.converter.HPSTrackerBuilder.ModuleBundle;
@@ -87,8 +86,7 @@
if(isDebug()) System.out.printf("%s: build JAVA modules\n", getClass().getSimpleName());
// Loop over all modules created
- for(ModuleBundle mod : _builder.modules) {
- TestRunModuleBundle m = (TestRunModuleBundle) mod;
+ for(ModuleBundle m : _builder.modules) {
if(isDebug()) {
System.out.printf("%s: build module %s (layer %d half %s)\n", getClass().getSimpleName(),m.module.getName(),m.getLayer(),m.getHalf());
m.print();
@@ -140,7 +138,7 @@
* @param bundle - module to be added
* @param mother - mother JAVA geometry object
*/
- private void addModule(TestRunModuleBundle bundle, JavaSurveyVolume mother) {
+ private void addModule(ModuleBundle bundle, JavaSurveyVolume mother) {
if(isDebug()) {
System.out.printf("%s: addModule %s containing:\n",this.getClass().getSimpleName(), bundle.module.getName());
Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014LCDDBuilder.java
=============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014LCDDBuilder.java (original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014LCDDBuilder.java Fri Nov 7 17:13:07 2014
@@ -8,7 +8,6 @@
import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.SupportPlateTop;
import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.SupportTop;
import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunHalfModuleBundle;
-import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunModuleBundle;
import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope;
import org.lcsim.geometry.compact.converter.HPSTrackerBuilder.HalfModuleBundle;
import org.lcsim.geometry.compact.converter.HPSTrackerBuilder.ModuleBundle;
@@ -77,9 +76,8 @@
if(isDebug()) System.out.printf("%s: build modules\n", getClass().getSimpleName());
// Loop over all modules created
- for(ModuleBundle mod : _builder.modules) {
- TestRunModuleBundle m = (TestRunModuleBundle) mod;
-
+ for(ModuleBundle m : _builder.modules) {
+
if(isDebug()) {
System.out.printf("%s: module layer %d half %s\n", getClass().getSimpleName(),m.getLayer(),m.getHalf());
m.print();
Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java
=============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java (original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014GeometryDefinition.java Fri Nov 7 17:13:07 2014
@@ -10,6 +10,11 @@
import org.apache.commons.math3.geometry.euclidean.threed.Rotation;
import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
import org.jdom.Element;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.BaseModule;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.CarbonFiber;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.HalfModuleLamination;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.Sensor;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunHalfModule;
/**
@@ -25,8 +30,8 @@
public HPSTracker2014GeometryDefinition(boolean debug, Element node) {
super(debug, node);
- doAxial = false;
- doStereo = false;
+ doAxial = true;
+ doStereo = true;
doColdBlock = false;
doBottom = true;
doTop = false;
@@ -75,41 +80,7 @@
}
}
- /*
-
- BasePlate basePlate = new BasePlate("baseplate",base, "Aluminum");
- geometries.add(basePlate);
-
- CSupport cSupport = new CSupport("c_support", base);
- 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);
-
- 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);
-
- // 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)) {
- 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());
@@ -150,7 +121,7 @@
setBoxDim(width,length,height);
}
protected void setPos() {
- ballPos = new BasicHep3Vector(0, 0, 500.0); //TODO fix this random offset
+ ballPos = new BasicHep3Vector(SvtBox.center_to_target_x, SvtBox.center_to_target_y, SvtBox.center_to_target_z);
veePos = new BasicHep3Vector(ballPos.x() + 1, ballPos.y(), ballPos.z());
flatPos = new BasicHep3Vector(ballPos.x(), ballPos.y(), ballPos.z()-1);
@@ -171,6 +142,13 @@
public static final double height = 6.740*inch;
public static final double width = SvtBoxBasePlate.width;
public static final double length = SvtBoxBasePlate.length;
+
+ // position of the target w.r.t. center of this box.
+ // the coordinate frame is the JLab coordinates..confusing.
+ public static final double center_to_target_z = 13.777*inch;
+ public static final double center_to_target_x = 0.84*inch;
+ public static final double center_to_target_y = 0.0;
+
@@ -472,45 +450,7 @@
}
- public static abstract class BaseModule extends SurveyVolume {
- private int layer;
- private String half;
- protected final static double box_extra_length = 10.0;// random at this point
- protected final static double box_extra_width = 15.0;// random at this point
- protected final static double box_extra_height = 1.0;// random at this point
-
- public BaseModule(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
- super(name, mother, alignmentCorrection, ref);
- setLayer(getLayerFromVolumeName(name));
- setHalf(getHalfFromName(name));
- isValid();
- }
- private void isValid() {
- if(half!="bottom" && half!="top") {
- System.out.printf("ERROR invalid half %s for BaseModule\n",half);
- System.exit(1);
- }
- }
- public int getLayer() {
- return layer;
- }
- public void setLayer(int layer) {
- this.layer = layer;
- }
-
- public String getHalf() {
- return half;
- }
-
- public void setHalf(String half) {
- this.half = half;
- }
-
- public boolean isBottom() {
- return getHalf() == "bottom" ? true : false;
- }
-
- }
+
@@ -518,33 +458,42 @@
* @SurveyVolume volume defining the coordinate system of module L1-3
* Reference: @UChannelL13Bottom coordinate system
* Origin: hole position on mounting surface (sensor side)
- * Orientation: u - is normal to the surface, v - points along module away from hybrid side.
+ * Orientation: u - is normal to the surface pointing vertically down, v - points along module away from hybrid side.
*
* @author Per Hansson Adrian <[log in to unmask]>
*
*/
public abstract static class ModuleL13 extends BaseModule {
- public static final double hole_to_center_of_plate_x = 3.75*inch;
+ protected final static double box_extra_length = 10.0;// random at this point
+ protected final static double box_extra_height = 15.0;// random at this point
+ protected final static double box_extra_width = 0.5*inch;// random at this point
+
private static final double tension_lever_y = 2.5*inch;
- public static final double length = 8.0*inch;
- public static final double height = 1.0*inch;
- public static final double width = tension_lever_y;//TODO find the right length to encapsualte L1-3 module
+ // TODO the dimension of this volume is padded manually. Check if this can cause overlap problems
+ public static final double length = 8.0*inch + box_extra_length;
+ public static final double height = 1.0*inch + box_extra_height;
+ public static final double width = tension_lever_y + 0.04*inch + box_extra_width;//TODO find the right length to encapsualte L1-3 module
public static final double hole_to_end_of_module_x = 7.750*inch;
+ public static final double hole_to_module_edge_height_dir = height - 0.875*inch;
+ public static final double hole_to_center_of_plate_width_dir = 3.75*inch;
+ public 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);
-
- }
- protected void setCenter() {
- //TODO the position of this module is not correct.
- setCenter(width/2.0, -hole_to_center_of_plate_x, height/2.0);
+ super(name, mother, alignmentCorrection, ref, getLayerFromVolumeName(name), getHalfFromName(name));
+
+ }
+ protected void setCenter() {
+ final double x = -width/2.0;
+ final double y = -hole_to_module_edge_length_dir + length/2.0;
+ final double z = hole_to_module_edge_height_dir - height/2.0;
+ setCenter(x,y,z);
}
protected void setBoxDim() {
setBoxDim(width, length, height);
}
protected void setPos() {
ballPos = getHole();
- veePos = new BasicHep3Vector(ballPos.x(), ballPos.y(), ballPos.z()+1.0);
+ veePos = new BasicHep3Vector(ballPos.x(), ballPos.y(), ballPos.z()-1.0);
flatPos = new BasicHep3Vector(ballPos.x()-1, ballPos.y(), ballPos.z());
}
protected abstract Hep3Vector getHole();
@@ -560,7 +509,7 @@
}
protected Hep3Vector getHole() {
//hole position (sensor side)
- double x = -hole_to_center_of_plate_x;
+ double x = hole_to_center_of_plate_width_dir;
double y = 0.0; // TODO assume that cone and module mount pin hole is at same y. Check if true.
double z = -UChannelL13Bottom.side_plate_cone_y - UChannelL13Plate.pocket_depth_L1;
return new BasicHep3Vector(x, y, z);
@@ -578,7 +527,7 @@
}
protected Hep3Vector getHole() {
//hole position (sensor side)
- double x = -hole_to_center_of_plate_x;
+ double x = hole_to_center_of_plate_width_dir;
double y = UChannelL13BottomPlate.hole_to_hole_x;
double z = -UChannelL13Bottom.side_plate_cone_y - UChannelL13Plate.pocket_depth_L2;
return new BasicHep3Vector(x, y, z);
@@ -595,7 +544,7 @@
}
protected Hep3Vector getHole() {
//hole position (sensor side)
- double x = -hole_to_center_of_plate_x;
+ double x = hole_to_center_of_plate_width_dir;
double y = 2*UChannelL13BottomPlate.hole_to_hole_x;
double z = -UChannelL13Bottom.side_plate_cone_y - UChannelL13Plate.pocket_depth_L3;
return new BasicHep3Vector(x, y, z);
@@ -604,24 +553,126 @@
}
-
- /**
- * Bundle volumes into a module.
+ /**
+ * @SurveyVolume volume defining the coordinate system of the axial half-module in module L1-3
+ * Reference: @ModuleL13 coordinate system
+ * Origin: sensor center
+ * Orientation: w - is normal to the surface pointing from p-side to n-side, v - points along strips away from signal bond pads
*
* @author Per Hansson Adrian <[log in to unmask]>
*
*/
- public static class SVTModuleBundle extends ModuleBundle {
- SVTModuleBundle(BaseModule m) {
- module = m;
- }
- public void print() {
- if(module!=null) System.out.printf("%s: %s\n", this.getClass().getSimpleName(),module.getName());
-// if(halfModuleAxial!=null) halfModuleAxial.print();
-// if(coldBlock!=null)System.out.printf("%s: %s\n", this.getClass().getSimpleName(),coldBlock.getName());
-// if(halfModuleStereo!=null) halfModuleStereo.print();
- }
- }
+ public static class HalfModuleAxial extends HPSTestRunTracker2014GeometryDefinition.TestRunHalfModule {
+
+ public static final double sensor_x = -1.543*inch;
+ public static final double sensor_y = 4.868*inch;
+ public static final double sensor_z = -0.23*inch;
+
+
+ public HalfModuleAxial(String name, SurveyVolume mother,
+ AlignmentCorrection alignmentCorrection, int layer, String half) {
+ super(name, mother, alignmentCorrection, layer, half);
+ init();
+ }
+ protected void setPos() {
+ // Sensor positions from Shawn's 3D model
+ final double x = sensor_x;
+ final double y = sensor_y;
+ final double z = sensor_z;
+ ballPos = new BasicHep3Vector(x, y, z);
+ veePos = new BasicHep3Vector(ballPos.x()+1, ballPos.y(), ballPos.z());
+ flatPos = new BasicHep3Vector(ballPos.x(), ballPos.y()+1, ballPos.z());
+ }
+ protected void setCenter() {
+ double x = -1.0 * (TestRunHalfModule.getWidth()/2.0 - ( 12.66 - (8.83 -3.00) + Sensor.getSensorWidth()/2.0 ) );
+ double y = TestRunHalfModule.getLength()/2.0 - ( (170.00 + 10.00) - Sensor.getSensorLength()/2.0);
+ double z = -Sensor.getSensorThickness()/2.0 - HalfModuleLamination.kapton_thickness - CarbonFiber.cf_thickness + half_module_thickness/2.0;
+ setCenter(x, y, z);
+ }
+
+
+// double box_center_local_x = TestRunHalfModule.getLength()/2.0 - ( (170.00 + 10.00) - Sensor.getSensorLength()/2.0);
+// double box_center_local_y = - Sensor.getSensorThickness()/2.0 - HalfModuleLamination.kapton_thickness - CarbonFiber.cf_thickness + half_module_thickness/2.0;
+// double box_center_local_z = TestRunHalfModule.getWidth()/2.0 - ( 12.66 - (8.83 -3.00) + Sensor.getSensorWidth()/2.0 );
+//
+//
+// if(useSiStripsConvention) {
+// //setCenter(box_center_local_z, box_center_local_x, box_center_local_y);
+// setCenter(-1.0*box_center_local_z, box_center_local_x, box_center_local_y);
+// } else {
+// setCenter(box_center_local_x, box_center_local_y, box_center_local_z);
+// }
+//
+
+
+
+ }
+
+
+
+ /**
+ * @SurveyVolume volume defining the coordinate system of the stereo half-module in module L1-3
+ * Reference: @ModuleL13 coordinate system
+ * Origin: sensor center
+ * Orientation: same as axial - the module is rotated later.
+ *
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+ public static class HalfModuleStereo extends HPSTestRunTracker2014GeometryDefinition.TestRunHalfModule {
+
+ public static final double sensor_z = -0.52*inch;
+
+ 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");
+ init();
+ }
+ protected void setPos() {
+ // Sensor positions from Shawn's 3D model
+ final double x = HalfModuleAxial.sensor_x;
+ final double y = HalfModuleAxial.sensor_y;
+ final double z = sensor_z;
+ ballPos = new BasicHep3Vector(x, y, z);
+ veePos = new BasicHep3Vector(ballPos.x()+1, ballPos.y(), ballPos.z());
+ flatPos = new BasicHep3Vector(ballPos.x(), ballPos.y()+1, ballPos.z());
+ }
+ protected void setCenter() {
+ double x = -1.0 * (TestRunHalfModule.getWidth()/2.0 - ( 12.66 - (8.83 -3.00) + Sensor.getSensorWidth()/2.0 ) );
+ double y = TestRunHalfModule.getLength()/2.0 - ( (170.00 + 10.00) - Sensor.getSensorLength()/2.0);
+ double z = -Sensor.getSensorThickness()/2.0 - HalfModuleLamination.kapton_thickness - CarbonFiber.cf_thickness + half_module_thickness/2.0;
+ setCenter(x, y, z);
+ }
+ protected void applyGenericCoordinateSystemCorrections() {
+
+ // Rotate into the right place for the stereo - just offset compared to axial before this.
+ // My rotations here are active rotations in the mother coordinate system frame
+ // Sloppy description of the frame:
+ // x: direction along strips towards the readout bonds/apv25's
+ // v: normal to sensor plane pointing from the back-plane (n-side) to strip side (p-side)
+ // w: measurement direction with direction from right hand-rule
+
+ // flip around strip direction - sign doesn't matter
+ Rotation r1 = new Rotation(new Vector3D(0,1,0),Math.PI);
+ // apply stereo angle around v
+ Rotation r2 = new Rotation(new Vector3D(0,0,1),stereo_angle);
+ // Build full rotation
+ Rotation r = r2.applyTo(r1);
+ //Rotation r = r1;
+ if(debug) System.out.printf("%s: Coord before corrections\n%s\n", getClass().getSimpleName(),getCoord().toString());
+ if(debug) System.out.printf("%s: box center before corrections\n%s\n", getClass().getSimpleName(),getBoxDim().toString());
+ getCoord().rotateApache(r);
+ if(debug) System.out.printf("%s: Coord after corrections\n%s\n", getClass().getSimpleName(),getCoord().toString());
+ if(debug) System.out.printf("%s: box center after corrections\n%s\n", getClass().getSimpleName(),getBoxDim().toString());
+
+ }
+
+
+ }
+
+
/**
@@ -629,7 +680,7 @@
* @param layer - of the module
* @param half - top or bottom half of the tracker
*/
- private void makeModuleBundle(int layer, String half)
+ protected void makeModuleBundle(int layer, String half)
{
if(isDebug()) System.out.printf("%s: makeModule for layer %d %s \n", this.getClass().getSimpleName(), layer, half);
@@ -668,12 +719,12 @@
// create the bundle for this module
- SVTModuleBundle bundle = new SVTModuleBundle(module);
+ ModuleBundle bundle = new ModuleBundle(module);
addModuleBundle(bundle);
-// if(doAxial) makeHalfModule("axial", module);
+ if(doAxial) makeHalfModule("axial", module);
// if(doColdBlock) makeColdBlock(module);
-// if(doStereo) makeHalfModule("stereo", module);
+ if(doStereo) makeHalfModule("stereo", module);
if(isDebug()) {
@@ -682,6 +733,24 @@
}
}
+
+
+
+ protected HPSTestRunTracker2014GeometryDefinition.TestRunHalfModule createTestRunHalfModuleAxial(String volName,
+ BaseModule mother, AlignmentCorrection alignmentCorrection,
+ int layer, String half) {
+ return new HalfModuleAxial(volName, mother, alignmentCorrection, layer, half);
+
+ }
+
+ protected HPSTestRunTracker2014GeometryDefinition.TestRunHalfModule createTestRunHalfModuleStereo(String volName,
+ BaseModule mother, AlignmentCorrection alignmentCorrection,
+ int layer, String half) {
+ return new HalfModuleStereo(volName, mother, alignmentCorrection, layer, half);
+
+ }
+
+
}
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 Fri Nov 7 17:13:07 2014
@@ -10,7 +10,7 @@
import org.jdom.DataConversionException;
import org.jdom.Element;
import org.lcsim.detector.Transform3D;
-import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunModule;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.BaseModule;
public abstract class HPSTrackerBuilder {
@@ -150,12 +150,14 @@
* @author Per Hansson Adrian <[log in to unmask]>
*
*/
- public static abstract class ModuleBundle {
+ public static class ModuleBundle {
public SurveyVolume module = null;
public HalfModuleBundle halfModuleAxial = null;
public HalfModuleBundle halfModuleStereo = null;
protected SurveyVolume coldBlock = null;
- abstract public void print();
+ public ModuleBundle(BaseModule m) {
+ module = m;
+ }
public int getLayer() {
if(module==null) throw new RuntimeException("Need to add module to bundle first!");
return HPSTrackerBuilder.getLayerFromVolumeName(module.getName());
@@ -167,6 +169,12 @@
public SurveyVolume getMother() {
if(module==null) throw new RuntimeException("Need to add module to bundle first!");
return module.getMother();
+ }
+ public void print() {
+ if(module!=null) System.out.printf("%s: %s\n", this.getClass().getSimpleName(),module.getName());
+ if(halfModuleAxial!=null) halfModuleAxial.print();
+ if(coldBlock!=null)System.out.printf("%s: %s\n", this.getClass().getSimpleName(),coldBlock.getName());
+ if(halfModuleStereo!=null) halfModuleStereo.print();
}
}
@@ -317,7 +325,7 @@
* @param module - to find
* @return bundle
*/
- protected ModuleBundle getModuleBundle(TestRunModule module) {
+ protected ModuleBundle getModuleBundle(BaseModule module) {
return getModuleBundle(module.getLayer(), module.getHalf());
}
@@ -326,7 +334,7 @@
* @param module - to find
* @return bundle
*/
- protected HalfModuleBundle getHalfModuleBundle(TestRunModule module, String halfModuleName) {
+ protected HalfModuleBundle getHalfModuleBundle(BaseModule module, String halfModuleName) {
ModuleBundle m = getModuleBundle(module.getLayer(), module.getHalf());
HalfModuleBundle hm = null;
if(m!=null) {
Modified: projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerGeometryDefinition.java
=============================================================================
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerGeometryDefinition.java (original)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerGeometryDefinition.java Fri Nov 7 17:13:07 2014
@@ -6,6 +6,17 @@
import hep.physics.vec.BasicHep3Vector;
import org.jdom.Element;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.ActiveSensor;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.BaseModule;
+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.TestRunHalfModuleAxial;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunHalfModuleBundle;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunHalfModuleStereo;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.TestRunModule;
/**
*
@@ -50,9 +61,185 @@
super(debug, node);
}
+
+ protected abstract void makeModuleBundle(int layer, String half);
+ protected abstract TestRunHalfModule createTestRunHalfModuleAxial(String volName, BaseModule mother, AlignmentCorrection alignmentCorrection, int layer, String half);
+ protected abstract TestRunHalfModule createTestRunHalfModuleStereo(String volName, BaseModule mother, AlignmentCorrection alignmentCorrection, int layer, String half);
+
protected boolean doLayer(int layer) {
int a = (1<<(layer-1)) & layerBitMask;
return a!=0?true:false;
+ }
+
+
+
+
+ /**
+ * Create the half-module.
+ * @param side - stereo or axial
+ * @param mother to the half-module
+ */
+ protected void makeHalfModule(String side, BaseModule 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();
+ boolean isTopLayer = !mother.isBottom();
+
+ // find layer
+ int layer = mother.getLayer();
+
+ // axial or stereo
+ boolean isAxial = isAxialFromName(volName);
+
+ // find layer according to old definition
+ int oldLayer = getOldGeomDefLayerFromVolumeName(isTopLayer, layer, isAxial);
+ //if(isDebug()) System.out.printf("%s: half? %s layer %d oldlayer %d axial? %s\n",
+ // this.getClass().getSimpleName(), isTopLayer?"top":"bottom", layer,oldLayer,isAxial?"yes":"no");
+
+ // find alignment correction to this volume
+ AlignmentCorrection alignmentCorrection = getHalfModuleAlignmentCorrection(isTopLayer, oldLayer);
+
+
+ // find the bundle that it will be added to
+ //TestRunModuleBundle bundle = (TestRunModuleBundle)getModuleBundle(mother);
+ //TestRunHalfModuleBundle halfModuleBundle;
+ ModuleBundle bundle = getModuleBundle(mother);
+ HalfModuleBundle halfModuleBundle;
+
+
+ // Build the half-module
+ TestRunHalfModule halfModule;
+ if(isAxial) {
+ halfModule = createTestRunHalfModuleAxial(volName, mother, alignmentCorrection, layer, half);
+ halfModuleBundle = new TestRunHalfModuleBundle(halfModule);
+ bundle.halfModuleAxial = halfModuleBundle;
+ } else {
+ halfModule = createTestRunHalfModuleStereo(volName, mother, alignmentCorrection, layer, half);
+ halfModuleBundle = new TestRunHalfModuleBundle(halfModule);
+ bundle.halfModuleStereo = halfModuleBundle;
+ }
+
+
+ // create the half module components
+
+ makeHalfModuleComponentSensor(halfModule);
+
+ makeHalfModuleComponentKapton(halfModule);
+
+ makeHalfModuleComponentCF(halfModule);
+
+ makeHalfModuleComponentHybrid(halfModule);
+
+
+
+
+ }
+
+
+
+
+ void makeHalfModuleComponentHybrid(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;
+
+ Hybrid hybrid = new Hybrid(volName,mother,component_number);
+ hybrid.setMaterial("G10");
+
+ TestRunHalfModuleBundle hm = (TestRunHalfModuleBundle) getHalfModuleBundle((BaseModule) 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());
+
+
+ }
+
+ void makeHalfModuleComponentCF(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;
+
+ CarbonFiber cf = new CarbonFiber(volName,mother,component_number);
+ cf.setMaterial("CarbonFiber");
+
+ TestRunHalfModuleBundle hm = (TestRunHalfModuleBundle) getHalfModuleBundle((BaseModule) mother.getMother(), mother.getName());
+ hm.carbonFiber = cf;
+
+ }
+
+ void makeHalfModuleComponentKapton(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;
+
+ HalfModuleLamination lamination = new HalfModuleLamination(volName,mother,component_number);
+ lamination.setMaterial("Kapton");
+
+
+ TestRunHalfModuleBundle hm = (TestRunHalfModuleBundle) getHalfModuleBundle((BaseModule) mother.getMother(), mother.getName());
+ hm.lamination = lamination;
+
+ }
+
+ void makeHalfModuleComponentSensor(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;
+
+ //
+ Sensor sensor = new Sensor(volName, mother, null, component_number);
+ sensor.setMaterial("Silicon");
+
+ TestRunHalfModuleBundle hm = (TestRunHalfModuleBundle) getHalfModuleBundle((BaseModule)mother.getMother(), mother.getName());
+ hm.sensor = sensor;
+
+
+ makeHalfModuleComponentActiveSensor(sensor);
+
+
+ }
+
+ private void makeHalfModuleComponentActiveSensor(Sensor mother) {
+
+ if(isDebug()) System.out.printf("%s: makeHalfModuleComponentActiveSensor for %s \n", this.getClass().getSimpleName(), mother.getName());
+
+ String volName = mother.getName() + "_active";
+
+ ActiveSensor active_sensor = new ActiveSensor(volName, mother);
+ active_sensor.setMaterial("Silicon");
+
+ TestRunHalfModuleBundle hm = (TestRunHalfModuleBundle) getHalfModuleBundle((BaseModule) mother.getMother().getMother(), mother.getMother().getName());
+ hm.activeSensor = active_sensor;
+
}
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 Fri Nov 7 17:13:07 2014
@@ -281,10 +281,12 @@
referenceGeom.addAll(refGeomList);
}
public void printSurveyPos() {
- if(debug) System.out.printf("Survey pos for %s:\n",getName());
- if(debug) System.out.printf("ballPos %s\n", ballPos.toString());
- if(debug) System.out.printf("veePos %s\n", veePos.toString());
- if(debug) System.out.printf("flatPos %s\n", flatPos.toString());
+ if(debug) {
+ System.out.printf("%s: Survey pos for %s:\n",getClass().getSimpleName(),getName());
+ System.out.printf("%s: ballPos %s\n",getClass().getSimpleName(), ballPos.toString());
+ System.out.printf("%s: veePos %s\n",getClass().getSimpleName(), veePos.toString());
+ System.out.printf("%s: flatPos %s\n",getClass().getSimpleName(), flatPos.toString());
+ }
}
public String getMaterial() {
return material;
@@ -293,8 +295,10 @@
this.material = material;
}
public String toString() {
- String s = "BaseGeometry " + getName();
- s += "\n" + this.getCoord().toString();
+ String s = "==\n" + getName() + ":\n";
+ if(getCenter()!=null) s += "Center of box in local coordinates: %s \n" + getCenter().toString();
+ if( getBoxDim()!=null) s += "Box dimensions: %s \n" + getBoxDim().toString();
+ s += "Coordinate system:\n" + getCoord().toString();
return s;
}
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 Fri Nov 7 17:13:07 2014
@@ -8,6 +8,7 @@
import org.jdom.JDOMException;
import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition;
import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014LCDDBuilder;
+import org.lcsim.geometry.compact.converter.HPSTrackerGeometryDefinition;
import org.lcsim.geometry.compact.converter.HPSTrackerLCDDBuilder;
import org.lcsim.geometry.compact.converter.lcdd.util.Box;
import org.lcsim.geometry.compact.converter.lcdd.util.LCDD;
########################################################################
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
|