Author: [log in to unmask]
Date: Mon Jan 25 11:17:35 2016
New Revision: 4135
Log:
Add new 2016 converters. Java still to be tested.
Added:
java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTracker2016Converter.java
java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2016GeometryDefinition.java
java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2016JavaBuilder.java
java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2016LCDDBuilder.java
java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2016.java
java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/subdetector/HPSTracker2016.java
Added: java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTracker2016Converter.java
=============================================================================
--- java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTracker2016Converter.java (added)
+++ java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTracker2016Converter.java Mon Jan 25 11:17:35 2016
@@ -0,0 +1,67 @@
+package org.lcsim.detector.converter.compact;
+
+import org.jdom.Element;
+import org.lcsim.geometry.compact.converter.HPSTracker2016JavaBuilder;
+import org.lcsim.geometry.compact.converter.HPSTrackerBuilder;
+import org.lcsim.geometry.compact.converter.HPSTrackerJavaBuilder;
+import org.lcsim.geometry.subdetector.HPSTracker2016;
+
+public class HPSTracker2016Converter extends HPSTracker2014v1Converter {
+
+ public HPSTracker2016Converter() {
+ super();
+ }
+
+ /* (non-Javadoc)
+ * @see org.lcsim.detector.converter.compact.HPSTracker2014ConverterBase#initializeBuilder(org.jdom.Element)
+ */
+ protected HPSTrackerJavaBuilder initializeBuilder(Element node) {
+ return new HPSTracker2016JavaBuilder(_debug, node);
+ }
+
+ /* (non-Javadoc)
+ * @see org.lcsim.detector.converter.compact.AbstractSubdetectorConverter#getSubdetectorType()
+ */
+ public Class getSubdetectorType() {
+ return HPSTracker2016.class;
+ }
+
+ /*
+ * Override this to handle different layer structure.
+ * (non-Javadoc)
+ * @see org.lcsim.detector.converter.compact.HPSTracker2014ConverterBase#getModuleNumber(org.lcsim.geometry.compact.converter.JavaSurveyVolume)
+ */
+ protected int getModuleNumber(String surveyVolume) {
+ boolean isTopLayer = HPSTrackerBuilder.getHalfFromName(surveyVolume).equals("top") ? true : false;
+ int layer = HPSTrackerBuilder.getLayerFromVolumeName(surveyVolume);
+ int moduleNumber = -1;
+ if(isTopLayer) {
+ if(layer < 5 ) {
+ moduleNumber = 0;
+ } else {
+ if(HPSTrackerBuilder.isHoleFromName(surveyVolume)) {
+ moduleNumber = 0;
+ } else {
+ moduleNumber = 2;
+ }
+ }
+ } else {
+ if(layer < 5 ) {
+ moduleNumber = 1;
+ } else {
+ if(HPSTrackerBuilder.isHoleFromName(surveyVolume)) {
+ moduleNumber = 1;
+ } else {
+ moduleNumber = 3;
+ }
+ }
+ }
+
+ if(moduleNumber<0) throw new RuntimeException("Invalid module nr found for " + surveyVolume);
+
+ return moduleNumber;
+ }
+
+
+
+}
Added: java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2016GeometryDefinition.java
=============================================================================
--- java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2016GeometryDefinition.java (added)
+++ java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2016GeometryDefinition.java Mon Jan 25 11:17:35 2016
@@ -0,0 +1,693 @@
+package org.lcsim.geometry.compact.converter;
+
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+
+import java.util.logging.Logger;
+
+import org.jdom.Element;
+import org.lcsim.geometry.compact.converter.HPSTestRunTracker2014GeometryDefinition.BaseModule;
+
+/**
+ *
+ * Updated geometry information for the HPS tracker 2016
+ *
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+public class HPSTracker2016GeometryDefinition extends HPSTracker2014v1GeometryDefinition {
+
+ private static final Logger LOGGER = Logger.getLogger(HPSTracker2014GeometryDefinition.class.getPackage().getName());
+
+ public HPSTracker2016GeometryDefinition(boolean debug, Element node) {
+ super(debug, node);
+ layerBitMask = 0x7F;
+ }
+
+ @Override
+ public void build() {
+
+ // Create alignment correction objects
+ // THis is really a ugly approach with MP corrections initialized before
+ // and
+ // the survey corrections based on the XML node
+ // FIX THIS! //TODO
+ AlignmentCorrection alignmentCorrections = new AlignmentCorrection();
+ alignmentCorrections.setNode(node);
+ AlignmentCorrection supBotCorr = getL13UChannelAlignmentCorrection(false);
+ supBotCorr.setNode(node);
+ AlignmentCorrection supTopCorr = this.getL13UChannelAlignmentCorrection(true);
+ supTopCorr.setNode(node);
+
+ // 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
+ HPSTrackerGeometryDefinition.TrackingVolume tracking = new HPSTrackerGeometryDefinition.TrackingVolume("trackingVolume", null);
+ surveyVolumes.add(tracking);
+
+ PSVacuumChamber chamber = new PSVacuumChamber("chamber", tracking, null);
+ surveyVolumes.add(chamber);
+
+ SvtBox svtBox = new SvtBox("base", chamber, null);
+ surveyVolumes.add(svtBox);
+
+ SvtBoxBasePlate svtBoxBasePlate = new SvtBoxBasePlate("base_plate", svtBox, null);
+ surveyVolumes.add(svtBoxBasePlate);
+
+ SupportRingL13BottomKinMount supportRingKinL13Bottom = new SupportRingL13BottomKinMount("c_support_kin_L13b", svtBox, supBotCorr);
+ surveyVolumes.add(supportRingKinL13Bottom);
+
+ LOGGER.info("Construct uChannelL14Bottom");
+
+ UChannelL13 uChannelL14Bottom = new UChannelL14Bottom("support_bottom_L14", svtBox, alignmentCorrections, supportRingKinL13Bottom);
+ surveyVolumes.add(uChannelL14Bottom);
+
+ LOGGER.info("Construct uChannelL14BottomPlate");
+
+ UChannelL14Plate uChannelL14BottomPlate = new UChannelL14BottomPlate("support_plate_bottom_L14", svtBox, null, uChannelL14Bottom);
+ surveyVolumes.add(uChannelL14BottomPlate);
+
+ LOGGER.info("Constructed uChannelL14BottomPlate: " + uChannelL14BottomPlate.toString());
+
+ SupportRingL13TopKinMount supportRingKinL13Top = new SupportRingL13TopKinMount("c_support_kin_L13t", svtBox, supTopCorr);
+ surveyVolumes.add(supportRingKinL13Top);
+
+ UChannelL13 uChannelL14Top = new UChannelL14Top("support_top_L14", svtBox, alignmentCorrections, supportRingKinL13Top);
+ surveyVolumes.add(uChannelL14Top);
+
+ UChannelL14Plate uChannelL14TopPlate = new UChannelL14TopPlate("support_plate_top_L14", svtBox, null, uChannelL14Top);
+ surveyVolumes.add(uChannelL14TopPlate);
+
+ UChannelL46 uChannelL46Bottom = new UChannelL46Bottom("support_bottom_L46", svtBox, alignmentCorrections);
+ surveyVolumes.add(uChannelL46Bottom);
+
+ UChannelL46Plate uChannelL46BottomPlate = new UChannelL46BottomPlate("support_plate_bottom_L46", svtBox, null, uChannelL46Bottom);
+ surveyVolumes.add(uChannelL46BottomPlate);
+
+ UChannelL46 uChannelL46Top = new UChannelL46Top("support_top_L46", svtBox, alignmentCorrections);
+ surveyVolumes.add(uChannelL46Top);
+
+ UChannelL46Plate uChannelL46TopPlate = new UChannelL46TopPlate("support_plate_top_L46", svtBox, null, uChannelL46Top);
+ surveyVolumes.add(uChannelL46TopPlate);
+
+
+ LOGGER.info( "Construct modules");
+
+ for(int l=1; l<=7;++l) {
+ if(doLayer(l)) {
+ LOGGER.info( "Construct layer " + l + " modules");
+ final SurveyVolume moduleMother = getSurveyVolume(SvtBox.class);
+ SurveyVolume moduleRef;
+ if(doBottom) {
+ if(l < 5)
+ moduleRef = getSurveyVolume(UChannelL14Bottom.class);
+ else
+ moduleRef = getSurveyVolume(UChannelL46Bottom.class);
+
+ LOGGER.info( "Make the bundle for layer " + l + " bottom");
+ makeModuleBundle(l, "bottom", moduleMother, moduleRef);
+ }
+
+ if(doTop) {
+ if(l < 5)
+ moduleRef = getSurveyVolume(UChannelL14Top.class);
+ else
+ moduleRef = getSurveyVolume(UChannelL46Top.class);
+
+ LOGGER.info( "Make the bundle for layer " + l + " top");
+ makeModuleBundle(l, "top", moduleMother, moduleRef);
+ }
+ }
+ }
+
+
+ LOGGER.info(String.format("%s: Constructed %d geometry objects", this.getClass().getSimpleName(), surveyVolumes.size()));
+ LOGGER.info(String.format("%s: Constructed %d module bundles", this.getClass().getSimpleName(), modules.size()));
+
+ if (isDebug()) {
+ System.out.printf("%s: DONE constructing the geometry objects\n", this.getClass().getSimpleName());
+ System.out.printf("%s: List of the survey volumes built\n", this.getClass().getSimpleName());
+ for (SurveyVolume bg : surveyVolumes) {
+ System.out.printf("-------\n%s\n", bg.toString());
+ }
+ }
+ if (isDebug()) {
+ System.out.printf("%s: List of the module bundles built\n", this.getClass().getSimpleName());
+ for (BaseModuleBundle bundle : this.modules) {
+ bundle.print();
+ }
+ }
+
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition#makeModuleBundle(int, java.lang.String, org.lcsim.geometry.compact.converter.SurveyVolume, org.lcsim.geometry.compact.converter.SurveyVolume)
+ */
+ @Override
+ protected void makeModuleBundle(int layer, String half, SurveyVolume mother, SurveyVolume ref)
+ {
+
+ LOGGER.info( "makeModule for layer " + layer + " " + half);
+
+ //Create the module
+ BaseModule module = createModule(half, layer, mother, ref);
+
+ BaseModuleBundle bundle;
+
+ if(layer<=4) {
+ bundle = new TestRunModuleBundle(module);
+ addModuleBundle(bundle);
+ if(doAxial) makeHalfModule("axial", module);
+ // if(doColdBlock) makeColdBlock(module);
+ if(doStereo) makeHalfModule("stereo", module);
+ } else {
+ bundle = new LongModuleBundle(module);
+ addModuleBundle(bundle);
+ if(doAxial) {
+ makeLongHalfModule("axial","hole", module);
+ makeLongHalfModule("axial","slot", module);
+ }
+ // if(doColdBlock) makeColdBlock(module);
+ if(doStereo) {
+ makeLongHalfModule("stereo","hole", module);
+ makeLongHalfModule("stereo","slot", module);
+ }
+ }
+
+ LOGGER.info("created module bundle:\n" + bundle.toString() + "\n" + "Now there are " + modules.size() + " modules");
+
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition#createModule(java.lang.String, int, org.lcsim.geometry.compact.converter.SurveyVolume, org.lcsim.geometry.compact.converter.SurveyVolume)
+ */
+ @Override
+ protected BaseModule createModule(String half, int layer, SurveyVolume mother, SurveyVolume ref) {
+
+ // build the module name
+ String volName = "module_L"+ layer + (half=="bottom"?"b":"t");
+
+ // find alignment corrections
+ AlignmentCorrection alignmentCorrection = new AlignmentCorrection();
+ alignmentCorrection.setNode(node);
+
+ BaseModule module;
+ if(half == "bottom") {
+ switch (layer) {
+ case 1:
+ module = new ModuleL1Bot(volName, mother, alignmentCorrection, ref);
+ break;
+ case 2:
+ module = new ModuleL2Bot(volName, mother, alignmentCorrection, ref);
+ break;
+ case 3:
+ module = new ModuleL3Bot(volName, mother, alignmentCorrection, ref);
+ break;
+ case 4:
+ module = new ModuleL4Bot(volName, mother, alignmentCorrection, ref);
+ break;
+ case 5:
+ module = new ModuleL5Bot(volName, mother, alignmentCorrection, ref);
+ break;
+ case 6:
+ module = new ModuleL6Bot(volName, mother, alignmentCorrection, ref);
+ break;
+ case 7:
+ module = new ModuleL7Bot(volName, mother, alignmentCorrection, ref);
+ break;
+ default:
+ throw new IllegalArgumentException("Can't make layer " + layer);
+ }
+ } else {
+ switch (layer) {
+ case 1:
+ module = new ModuleL1Top(volName, mother, alignmentCorrection, ref);
+ break;
+ case 2:
+ module = new ModuleL2Top(volName, mother, alignmentCorrection, ref);
+ break;
+ case 3:
+ module = new ModuleL3Top(volName, mother, alignmentCorrection, ref);
+ break;
+ case 4:
+ module = new ModuleL4Top(volName, mother, alignmentCorrection, ref);
+ break;
+ case 5:
+ module = new ModuleL5Top(volName, mother, alignmentCorrection, ref);
+ break;
+ case 6:
+ module = new ModuleL6Top(volName, mother, alignmentCorrection, ref);
+ break;
+ case 7:
+ module = new ModuleL7Top(volName, mother, alignmentCorrection, ref);
+ break;
+ default:
+ throw new IllegalArgumentException("Can't make layer " + layer);
+ }
+ }
+ return module;
+ }
+
+
+
+
+ public abstract static class UChannelL14Plate extends HPSTracker2014GeometryDefinition.UChannelL13Plate {
+ protected final static double length = HPSTracker2014GeometryDefinition.UChannelL13Plate.length + 50.0;
+ protected final static double height = HPSTracker2014GeometryDefinition.UChannelL13Plate.height;
+ protected static final double width = HPSTracker2014GeometryDefinition.UChannelL13Plate.width;
+
+ public UChannelL14Plate(String name, SurveyVolume m, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, m, alignmentCorrection, ref);
+ }
+
+ @Override
+ public double getLength() {
+ return length;
+ }
+
+ @Override
+ public double getHeight() {
+ return height;
+ }
+
+ @Override
+ public double getWidth() {
+ return width;
+ }
+
+ }
+
+ public static abstract class UChannelL14 extends HPSTracker2014GeometryDefinition.UChannelL13 {
+ protected static final double length = UChannelL14BottomPlate.length;
+ private static final double width = UChannelL14BottomPlate.width;
+ protected static final double height = HPSTracker2014GeometryDefinition.UChannelL13.height;
+ protected static final double side_plate_cone_y = HPSTracker2014GeometryDefinition.UChannelL13.side_plate_cone_y;
+
+ public UChannelL14(String name, SurveyVolume m, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, m, alignmentCorrection, ref);
+ }
+
+ @Override
+ protected double getLength() {
+ return length;
+ }
+
+ @Override
+ protected double getWidth() {
+ return width;
+ }
+
+ @Override
+ protected double getHeight() {
+ return height;
+ }
+
+ }
+
+ public static class UChannelL14BottomPlate extends UChannelL14Plate {
+
+ public UChannelL14BottomPlate(String name, SurveyVolume m, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, m, alignmentCorrection, ref);
+ init();
+ }
+
+ @Override
+ protected void setCenter() {
+ System.out.println("UChannelL14BottomPlate setCenter");
+
+ final double x = 0.0;
+ double y = UChannelL14Bottom.cone_to_edge_of_plate_y - getLength() / 2.0;
+ // with coordinate system 'y' pointing from L1 to L3 we want to
+ // subtract the difference in length
+ y -= UChannelL14Bottom.length_diff;
+ final double z = -UChannelL13.side_plate_cone_y - getHeight() / 2.0;
+ setCenter(x, y, z);
+ }
+
+ }
+
+ public static class UChannelL14Bottom extends UChannelL13Bottom {
+ protected static final double length = UChannelL14BottomPlate.length;
+ private static final double width = UChannelL14BottomPlate.width;
+ protected static final double height = HPSTracker2014GeometryDefinition.UChannelL13.height;
+ // this length need to be longer by the difference in length
+ protected static final double length_diff = length - HPSTracker2014GeometryDefinition.UChannelL13Bottom.length;
+ protected static final double cone_to_edge_of_plate_y = HPSTracker2014GeometryDefinition.UChannelL13Bottom.cone_to_edge_of_plate_y + length_diff;
+
+ public UChannelL14Bottom(String name, SurveyVolume m, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, m, alignmentCorrection, ref);
+ }
+
+ protected void setCenter() {
+ final double x = 0.0;
+ double y = cone_to_edge_of_plate_y - getLength() / 2.0;
+ // with coordinate system 'y' pointing from L1 to L3 we want to
+ // subtract the difference in length
+ y -= UChannelL14Bottom.length_diff;
+ final double z = -side_plate_cone_y - UChannelL14Plate.height + getHeight() / 2.0;
+ setCenter(x, y, z);
+ }
+
+ @Override
+ protected double getLength() {
+ return length;
+ }
+
+ @Override
+ protected double getWidth() {
+ return width;
+ }
+
+ @Override
+ protected double getHeight() {
+ return height;
+ }
+
+ }
+
+
+
+ public static class UChannelL14TopPlate extends UChannelL14Plate {
+
+ public UChannelL14TopPlate(String name, SurveyVolume m, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, m, alignmentCorrection, ref);
+ init();
+ }
+
+ @Override
+ protected void setCenter() {
+ System.out.println("UChannelL14TopPlate setCenter");
+
+ final double x = 0.0;
+ double y = UChannelL14Top.cone_to_edge_of_plate_y - getLength() / 2.0;
+ // with coordinate system 'y' pointing from L1 to L3 we want to
+ // subtract the difference in length
+ y -= UChannelL14Top.length_diff;
+ final double z = -UChannelL13.side_plate_cone_y - getHeight() / 2.0;
+ setCenter(x, y, z);
+ }
+
+ }
+
+
+
+ public static class UChannelL14Top extends UChannelL13Top {
+ protected static final double length = UChannelL14TopPlate.length;
+ private static final double width = UChannelL14TopPlate.width;
+ protected static final double height = HPSTracker2014GeometryDefinition.UChannelL13.height;
+ // this length need to be longer by the difference in length
+ protected static final double length_diff = length - HPSTracker2014GeometryDefinition.UChannelL13Top.length;
+ protected static final double cone_to_edge_of_plate_y = HPSTracker2014GeometryDefinition.UChannelL13Top.cone_to_edge_of_plate_y + length_diff;
+
+ public UChannelL14Top(String name, SurveyVolume m, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, m, alignmentCorrection, ref);
+ }
+
+ protected void setCenter() {
+ final double x = 0.0;
+ double y = cone_to_edge_of_plate_y - getLength() / 2.0;
+ // with coordinate system 'y' pointing from L1 to L3 we want to
+ // subtract the difference in length
+ y -= UChannelL14Top.length_diff;
+ final double z = -side_plate_cone_y - UChannelL14Plate.height + getHeight() / 2.0;
+ setCenter(x, y, z);
+ }
+
+ @Override
+ protected double getLength() {
+ return length;
+ }
+
+ @Override
+ protected double getWidth() {
+ return width;
+ }
+
+ @Override
+ protected double getHeight() {
+ return height;
+ }
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ public static class ModuleL1Bot extends HPSTracker2014GeometryDefinition.ModuleL1Bot {
+
+ //protected final static double cone_to_hole_along_uchannel = HPSTracker2014GeometryDefinition.ModuleL1Bot.cone_to_hole_along_uchannel;
+ // shift 50mm along the U-channel and adjust also the vertical distance from the beam due to the 15mrad opening angle
+ private final static double shift = 50.;
+ private final static double shift_vertical = 15e-3 * shift;
+ protected final static double cone_to_hole_along_uchannel = HPSTracker2014GeometryDefinition.ModuleL1Bot.cone_to_hole_along_uchannel - shift;
+ protected final static double cone_to_hole_vertical_from_uchannel = HPSTracker2014GeometryDefinition.ModuleL1Bot.cone_to_hole_vertical_from_uchannel + shift_vertical;
+ protected final static double cone_to_hole_across_uchannel = HPSTracker2014GeometryDefinition.ModuleL13Bot.cone_to_hole_across_uchannel;
+
+ public ModuleL1Bot(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
+ }
+
+ @Override
+ protected Hep3Vector getHolePosition() {
+ double x = cone_to_hole_across_uchannel;
+ double y = cone_to_hole_along_uchannel;
+ double z = cone_to_hole_vertical_from_uchannel;
+ return new BasicHep3Vector(x, y, z);
+ }
+
+ }
+
+
+
+ public static class ModuleL1Top extends HPSTracker2014GeometryDefinition.ModuleL1Top {
+
+ //protected final static double cone_to_hole_along_uchannel = HPSTracker2014GeometryDefinition.ModuleL1Top.cone_to_hole_along_uchannel;
+ // shift 50mm along the U-channel and adjust also the vertical distance from the beam due to the 15mrad opening angle
+ private final static double shift = 50.;
+ private final static double shift_vertical = 15e-3 * shift;
+ protected final static double cone_to_hole_along_uchannel = HPSTracker2014GeometryDefinition.ModuleL1Top.cone_to_hole_along_uchannel - shift;
+ protected final static double cone_to_hole_vertical_from_uchannel = HPSTracker2014GeometryDefinition.ModuleL1Top.cone_to_hole_vertical_from_uchannel + shift_vertical;
+ protected final static double cone_to_hole_across_uchannel = HPSTracker2014GeometryDefinition.ModuleL13Top.cone_to_hole_across_uchannel;
+
+ public ModuleL1Top(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
+ }
+
+ @Override
+ protected Hep3Vector getHolePosition() {
+ double x = cone_to_hole_across_uchannel;
+ double y = cone_to_hole_along_uchannel;
+ double z = cone_to_hole_vertical_from_uchannel;
+ return new BasicHep3Vector(x, y, z);
+ }
+
+ }
+
+ public static class ModuleL2Bot extends ModuleL13Bot {
+ // Note the L1 measures are used here
+ protected final static double cone_to_hole_along_uchannel = HPSTracker2014GeometryDefinition.ModuleL1Bot.cone_to_hole_along_uchannel;
+ protected final static double cone_to_hole_vertical_from_uchannel = HPSTracker2014GeometryDefinition.ModuleL1Bot.cone_to_hole_vertical_from_uchannel;
+
+ public ModuleL2Bot(String name, SurveyVolume mother,
+ AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
+ init();
+ }
+ protected Hep3Vector getHolePosition() {
+ double x = cone_to_hole_across_uchannel;
+ double y = cone_to_hole_along_uchannel;
+ double z = cone_to_hole_vertical_from_uchannel;
+ return new BasicHep3Vector(x, y, z);
+ }
+
+ }
+
+ public static class ModuleL2Top extends ModuleL13Top {
+ // Note the L1 measures are used here
+ protected final static double cone_to_hole_along_uchannel = HPSTracker2014GeometryDefinition.ModuleL1Top.cone_to_hole_along_uchannel;
+ protected final static double cone_to_hole_vertical_from_uchannel = HPSTracker2014GeometryDefinition.ModuleL1Top.cone_to_hole_vertical_from_uchannel;
+
+ public ModuleL2Top(String name, SurveyVolume mother,
+ AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
+ init();
+ }
+ protected Hep3Vector getHolePosition() {
+ double x = cone_to_hole_across_uchannel;
+ double y = cone_to_hole_along_uchannel;
+ double z = cone_to_hole_vertical_from_uchannel;
+ return new BasicHep3Vector(x, y, z);
+ }
+
+ }
+
+ public static class ModuleL3Bot extends ModuleL13Bot {
+ // Note the L2 measures are used here
+ protected final static double cone_to_hole_along_uchannel = HPSTracker2014GeometryDefinition.ModuleL2Bot.cone_to_hole_along_uchannel;
+ protected final static double cone_to_hole_vertical_from_uchannel = HPSTracker2014GeometryDefinition.ModuleL2Bot.cone_to_hole_vertical_from_uchannel;
+
+ public ModuleL3Bot(String name, SurveyVolume mother,
+ AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
+ init();
+ }
+ protected Hep3Vector getHolePosition() {
+ double x = cone_to_hole_across_uchannel;
+ double y = cone_to_hole_along_uchannel;
+ double z = cone_to_hole_vertical_from_uchannel;
+ return new BasicHep3Vector(x, y, z);
+ }
+
+ }
+
+ public static class ModuleL3Top extends ModuleL13Top {
+ // Note the L2 measures are used here
+ protected final static double cone_to_hole_along_uchannel = HPSTracker2014GeometryDefinition.ModuleL2Top.cone_to_hole_along_uchannel;
+ protected final static double cone_to_hole_vertical_from_uchannel = HPSTracker2014GeometryDefinition.ModuleL2Top.cone_to_hole_vertical_from_uchannel;
+
+ public ModuleL3Top(String name, SurveyVolume mother,
+ AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
+ init();
+ }
+ protected Hep3Vector getHolePosition() {
+ double x = cone_to_hole_across_uchannel;
+ double y = cone_to_hole_along_uchannel;
+ double z = cone_to_hole_vertical_from_uchannel;
+ return new BasicHep3Vector(x, y, z);
+ }
+
+ }
+
+ public static class ModuleL4Bot extends ModuleL13Bot {
+ // Note the L2 measures are used here
+ protected final static double cone_to_hole_along_uchannel = HPSTracker2014GeometryDefinition.ModuleL3Bot.cone_to_hole_along_uchannel;
+ protected final static double cone_to_hole_vertical_from_uchannel = HPSTracker2014GeometryDefinition.ModuleL3Bot.cone_to_hole_vertical_from_uchannel;
+
+ public ModuleL4Bot(String name, SurveyVolume mother,
+ AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
+ init();
+ }
+ protected Hep3Vector getHolePosition() {
+ double x = cone_to_hole_across_uchannel;
+ double y = cone_to_hole_along_uchannel;
+ double z = cone_to_hole_vertical_from_uchannel;
+ return new BasicHep3Vector(x, y, z);
+ }
+
+ }
+
+ public static class ModuleL4Top extends ModuleL13Top {
+ // Note the L2 measures are used here
+ protected final static double cone_to_hole_along_uchannel = HPSTracker2014GeometryDefinition.ModuleL3Top.cone_to_hole_along_uchannel;
+ protected final static double cone_to_hole_vertical_from_uchannel = HPSTracker2014GeometryDefinition.ModuleL3Top.cone_to_hole_vertical_from_uchannel;
+
+ public ModuleL4Top(String name, SurveyVolume mother,
+ AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
+ init();
+ }
+ protected Hep3Vector getHolePosition() {
+ double x = cone_to_hole_across_uchannel;
+ double y = cone_to_hole_along_uchannel;
+ double z = cone_to_hole_vertical_from_uchannel;
+ return new BasicHep3Vector(x, y, z);
+ }
+
+ }
+
+
+ public static class ModuleL5Bot extends HPSTracker2014GeometryDefinition.ModuleL4Bot {
+
+ public ModuleL5Bot(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
+ }
+ }
+
+ public static class ModuleL5Top extends HPSTracker2014GeometryDefinition.ModuleL4Top {
+
+ public ModuleL5Top(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
+ }
+ }
+
+ public static class ModuleL6Bot extends HPSTracker2014GeometryDefinition.ModuleL5Bot {
+
+ public ModuleL6Bot(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
+ }
+ }
+
+ public static class ModuleL6Top extends HPSTracker2014GeometryDefinition.ModuleL5Top {
+
+ public ModuleL6Top(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
+ }
+ }
+
+ public static class ModuleL7Bot extends HPSTracker2014GeometryDefinition.ModuleL6Bot {
+
+ public ModuleL7Bot(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
+ }
+ }
+
+ public static class ModuleL7Top extends HPSTracker2014GeometryDefinition.ModuleL6Top {
+
+ public ModuleL7Top(String name, SurveyVolume mother, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ super(name, mother, alignmentCorrection, ref);
+ }
+ }
+
+
+
+
+ /* (non-Javadoc)
+ * @see org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition#getMillepedeLayer(java.lang.String)
+ */
+ @Override
+ public int getMillepedeLayer(String name) {
+
+ boolean isTopLayer = getHalfFromName(name).equals("top") ? true : false;
+
+ // find layer
+ int layer = getLayerFromVolumeName(name);
+
+ // axial or stereo
+ boolean isAxial = isAxialFromName(name);
+
+ // use default layer numbering for L1-4
+ if(layer<5) {
+ return getOldLayerDefinition(isTopLayer, layer, isAxial);
+ }
+
+ // hole or slot
+ boolean isHole = isHoleFromName(name);
+
+ return getMillepedeLayer(isTopLayer, layer, isAxial, isHole);
+
+ }
+
+
+
+
+
+}
Added: java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2016JavaBuilder.java
=============================================================================
--- java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2016JavaBuilder.java (added)
+++ java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2016JavaBuilder.java Mon Jan 25 11:17:35 2016
@@ -0,0 +1,17 @@
+package org.lcsim.geometry.compact.converter;
+
+import org.jdom.Element;
+
+public class HPSTracker2016JavaBuilder extends HPSTracker2014v1JavaBuilder {
+
+ public HPSTracker2016JavaBuilder(boolean debugFlag, Element node) {
+ super(debugFlag, node);
+ }
+
+ @Override
+ public HPSTrackerGeometryDefinition createGeometryDefinition(boolean debug, Element node) {
+ return new HPSTracker2016GeometryDefinition(debug, node);
+ }
+
+
+}
Added: java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2016LCDDBuilder.java
=============================================================================
--- java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2016LCDDBuilder.java (added)
+++ java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2016LCDDBuilder.java Mon Jan 25 11:17:35 2016
@@ -0,0 +1,139 @@
+package org.lcsim.geometry.compact.converter;
+
+import org.jdom.Element;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.PSVacuumChamber;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.SvtBox;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.SvtBoxBasePlate;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL13Bottom;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL13BottomPlate;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL13Top;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL13TopPlate;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL46Bottom;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL46BottomPlate;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL46Top;
+import org.lcsim.geometry.compact.converter.HPSTracker2014GeometryDefinition.UChannelL46TopPlate;
+import org.lcsim.geometry.compact.converter.HPSTracker2016GeometryDefinition.UChannelL14Bottom;
+import org.lcsim.geometry.compact.converter.HPSTracker2016GeometryDefinition.UChannelL14BottomPlate;
+import org.lcsim.geometry.compact.converter.HPSTracker2016GeometryDefinition.UChannelL14Top;
+import org.lcsim.geometry.compact.converter.HPSTracker2016GeometryDefinition.UChannelL14TopPlate;
+import org.lcsim.geometry.compact.converter.HPSTrackerBuilder.BaseModuleBundle;
+import org.lcsim.geometry.compact.converter.HPSTrackerGeometryDefinition.TrackingVolume;
+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;
+
+public class HPSTracker2016LCDDBuilder extends HPSTracker2014v1LCDDBuilder {
+
+ public HPSTracker2016LCDDBuilder(boolean debugFlag, Element node,
+ LCDD lcdd, SensitiveDetector sens) {
+ super(debugFlag, node, lcdd, sens);
+ }
+
+ @Override
+ public HPSTrackerGeometryDefinition createGeometryDefinition(boolean debug,
+ Element node) {
+ return new HPSTracker2016GeometryDefinition(_debug, node);
+ }
+
+
+
+
+ @Override
+ public void build(Volume worldVolume) {
+
+
+ // set and build geometry
+ setBuilder();
+
+ 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());
+
+
+ LCDDSurveyVolume trackingGeometry = new LCDDSurveyVolume(_builder.getSurveyVolume(TrackingVolume.class), worldVolume);
+ add(trackingGeometry);
+
+// baseSurveyVolume = new LCDDSurveyVolume(_builder.getSurveyVolume(PSVacuumChamber.class), lcdd, trackingGeometry);
+// add(baseSurveyVolume);
+ LCDDSurveyVolume vacuumChamberVolume = new LCDDGhostSurveyVolume(_builder.getSurveyVolume(PSVacuumChamber.class), trackingGeometry);
+ add(vacuumChamberVolume);
+
+// LCDDSurveyVolume svtBox = new LCDDSurveyVolume(_builder.getSurveyVolume(SvtBox.class), lcdd, baseSurveyVolume);
+// add(svtBox);
+
+ LCDDSurveyVolume svtBox = new LCDDSurveyVolume(_builder.getSurveyVolume(SvtBox.class), lcdd, vacuumChamberVolume);
+ baseSurveyVolume = svtBox;
+ add(baseSurveyVolume);
+
+
+ LCDDSurveyVolume svtBoxBasePlate = new LCDDSurveyVolume(_builder.getSurveyVolume(SvtBoxBasePlate.class), lcdd, svtBox);
+ add(svtBoxBasePlate);
+
+
+ LCDDSurveyVolume uChannelL14Bottom = new LCDDGhostSurveyVolume(_builder.getSurveyVolume(UChannelL14Bottom.class), svtBox);
+ add(uChannelL14Bottom);
+
+ SurveyVolume v = _builder.getSurveyVolume(UChannelL14BottomPlate.class);
+ if(v==null) {
+ System.out.printf("%s: couldnt find UChannelL14BottomPlate class among %d volumes\n", this.getClass().getSimpleName(), _builder.surveyVolumes.size());
+ for (SurveyVolume vol : _builder.surveyVolumes) System.out.printf("%s:vol %s\n", this.getClass().getSimpleName(), vol.toString());
+ }
+ LCDDSurveyVolume uChannelL14BottomPlate = new LCDDSurveyVolume(_builder.getSurveyVolume(UChannelL14BottomPlate.class), lcdd, svtBox);
+ add(uChannelL14BottomPlate);
+
+ LCDDSurveyVolume uChannelL14Top = new LCDDGhostSurveyVolume(_builder.getSurveyVolume(UChannelL14Top.class), svtBox);
+ add(uChannelL14Top);
+
+ LCDDSurveyVolume uChannelL14TopPlate = new LCDDSurveyVolume(_builder.getSurveyVolume(UChannelL14TopPlate.class), lcdd, svtBox);
+ add(uChannelL14TopPlate);
+
+ LCDDSurveyVolume uChannelL46Bottom = new LCDDGhostSurveyVolume(_builder.getSurveyVolume(UChannelL46Bottom.class), svtBox);
+ add(uChannelL46Bottom);
+
+ LCDDSurveyVolume uChannelL46BottomPlate = new LCDDSurveyVolume(_builder.getSurveyVolume(UChannelL46BottomPlate.class), lcdd, svtBox);
+ add(uChannelL46BottomPlate);
+
+ LCDDSurveyVolume uChannelL46Top = new LCDDGhostSurveyVolume(_builder.getSurveyVolume(UChannelL46Top.class), svtBox);
+ add(uChannelL46Top);
+
+ LCDDSurveyVolume uChannelL46TopPlate = new LCDDSurveyVolume(_builder.getSurveyVolume(UChannelL46TopPlate.class), lcdd, svtBox);
+ add(uChannelL46TopPlate);
+
+
+ // build modules
+
+ if(isDebug()) System.out.printf("%s: build modules\n", getClass().getSimpleName());
+
+ addModules();
+
+ System.out.printf("%s: Built %d LCDD geometry objects\n", getClass().getSimpleName(), lcddSurveyVolumes.size());
+
+ if(isDebug()) {
+ System.out.printf("%s: List of all %d LCDD geometry objects built\n", this.getClass().getSimpleName(), lcddSurveyVolumes.size());
+ for(SurveyVolumeImpl bg : lcddSurveyVolumes) {
+ System.out.printf("-------\n%s\n", bg.toString());
+ }
+ }
+
+
+
+ // Set visualization features
+ setVisualization();
+
+
+
+ }
+
+
+
+
+
+
+}
Added: java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2016.java
=============================================================================
--- java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2016.java (added)
+++ java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2016.java Mon Jan 25 11:17:35 2016
@@ -0,0 +1,63 @@
+package org.lcsim.geometry.compact.converter.lcdd;
+
+import org.jdom.Element;
+import org.jdom.JDOMException;
+import org.lcsim.geometry.compact.converter.HPSTracker2016LCDDBuilder;
+import org.lcsim.geometry.compact.converter.HPSTrackerBuilder;
+import org.lcsim.geometry.compact.converter.HPSTrackerLCDDBuilder;
+import org.lcsim.geometry.compact.converter.lcdd.util.LCDD;
+import org.lcsim.geometry.compact.converter.lcdd.util.SensitiveDetector;
+
+public class HPSTracker2016 extends HPSTracker2014v1
+{
+ public HPSTracker2016(Element node) throws JDOMException
+ {
+ super(node);
+ }
+
+ /* (non-Javadoc)
+ * @see org.lcsim.geometry.compact.converter.lcdd.HPSTracker2014Base#initializeBuilder(org.lcsim.geometry.compact.converter.lcdd.util.LCDD, org.lcsim.geometry.compact.converter.lcdd.util.SensitiveDetector)
+ */
+ protected HPSTrackerLCDDBuilder initializeBuilder(LCDD lcdd, SensitiveDetector sens) {
+ return new HPSTracker2016LCDDBuilder(_debug,node,lcdd,sens);
+ }
+
+
+ /*
+ * Override this to handle different layer numbering.
+ *
+ * (non-Javadoc)
+ * @see org.lcsim.geometry.compact.converter.lcdd.HPSTracker2014#getModuleNumber(java.lang.String)
+ */
+ protected int getModuleNumber(String surveyVolume) {
+ boolean isTopLayer = HPSTrackerBuilder.getHalfFromName(surveyVolume).equals("top") ? true : false;
+ int layer = HPSTrackerBuilder.getLayerFromVolumeName(surveyVolume);
+ int moduleNumber = -1;
+ if(isTopLayer) {
+ if(layer < 5 ) {
+ moduleNumber = 0;
+ } else {
+ if(HPSTrackerBuilder.isHoleFromName(surveyVolume)) {
+ moduleNumber = 2;
+ } else {
+ moduleNumber = 0;
+ }
+ }
+ } else {
+ if(layer < 5 ) {
+ moduleNumber = 1;
+ } else {
+ if(HPSTrackerBuilder.isHoleFromName(surveyVolume)) {
+ moduleNumber = 1;
+ } else {
+ moduleNumber = 3;
+ }
+ }
+ }
+
+ if(moduleNumber<0) throw new RuntimeException("Invalid module nr found for " + surveyVolume);
+
+ return moduleNumber;
+ }
+
+}
Added: java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/subdetector/HPSTracker2016.java
=============================================================================
--- java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/subdetector/HPSTracker2016.java (added)
+++ java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/subdetector/HPSTracker2016.java Mon Jan 25 11:17:35 2016
@@ -0,0 +1,15 @@
+package org.lcsim.geometry.subdetector;
+
+import org.jdom.Element;
+import org.jdom.JDOMException;
+
+public class HPSTracker2016 extends HPSTracker2014v1 {
+
+ public HPSTracker2016(Element node) throws JDOMException
+ {
+ super(node);
+ }
+
+
+
+}
|