projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact/HPSTestRunTracker2014Converter.java 2014-09-23 00:12:43 UTC (rev 3338)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact/HPSTestRunTracker2014Converter.java 2014-09-23 00:14:23 UTC (rev 3339)
@@ -168,8 +168,36 @@
PhysicalVolume physVol = (PhysicalVolume) geometryObject.getPhysVolume();
// create detector element
- if(HPSTestRunTracker2014Builder.isHalfModule(geometryObject.getName())) {
+ // create detector element
+ if(HPSTestRunTracker2014Builder.isBase(geometryObject.getName())) {
+
+ if(_debug) System.out.printf("%s: create the base detector element\n", getClass().getSimpleName());
+
+ int nfields = builder.getDetectorIdentifierHelper().getIdentifierDictionary().getNumberOfFields();
+ IExpandedIdentifier layerPosId = new ExpandedIdentifier(nfields);
+ layerPosId.setValue(builder.getDetectorIdentifierHelper().getFieldIndex("system"), builder.getSubdetector().getSystemID());
+ layerPosId.setValue(builder.getDetectorIdentifierHelper().getFieldIndex("barrel"), builder.getDetectorIdentifierHelper().getBarrelValue());
+ int layer = 12; // dummy value
+ layerPosId.setValue(builder.getDetectorIdentifierHelper().getFieldIndex("layer"), layer);
+ IDetectorElement baseDe = builder.getBaseDetectorElement();
+ if(baseDe!=null) {
+ throw new RuntimeException("Base exists. Shouldn't happen!");
+ }
+ ILogicalVolume trackingVolume = geometryObject.getPhysMother().getVolume();
+ if(!trackingVolume.getName().contains("tracking")) {
+ throw new RuntimeException("base phys mother " + geometryObject.getPhysMother().getName() + " is not tracking volume!?");
+ }
+ String physVolPath = trackingVolume.getName() + "/" + geometryObject.getPhysVolume().getName();
+ baseDe = new DetectorElement(builder.getSubdetector().getName() + "_base", builder.getSubdetector().getDetectorElement(), physVolPath, builder.getIdentifierDictionary().pack(layerPosId));
+ builder.addBaseDetectorElement(baseDe);
+
+ if(_debug) System.out.printf("%s: baseDE name %s \n", getClass().getSimpleName(),baseDe.getName());
+
+
+
+ } else if(HPSTestRunTracker2014Builder.isHalfModule(geometryObject.getName())) {
+
if(_debug) System.out.printf("%s: create the layer detector element\n", getClass().getSimpleName());
// The old geometry was built using a layer definition from a barrel tracker
@@ -186,12 +214,21 @@
int layer = HPSTestRunTracker2014Builder.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()));
+
+ // find the base DE as mother
+ IDetectorElement baseDe = builder.getBaseDetectorElement();
+ if(baseDe==null) {
+ throw new RuntimeException("Base DE couldn't be found. Shouldn't happen!");
+ }
+
+
// create the layer detector element and keep track of it
//IDetectorElement layerDe = builder.getLayerDetectorElement(layerPosId);
IDetectorElement layerDe = builder.getLayerDetectorElement(layerPosId);
+
if(layerDe==null) {
- layerDe = new DetectorElement(builder.getSubdetector().getName() + "_layer" + layer, builder.getSubdetector().getDetectorElement(), builder.getDetectorIdentifierHelper().pack(layerPosId));
- //builder.addLayerDetectorElement(layerDe);
+ //layerDe = new DetectorElement(builder.getSubdetector().getName() + "_layer" + layer, builder.getSubdetector().getDetectorElement(), builder.getDetectorIdentifierHelper().pack(layerPosId));
+ layerDe = new DetectorElement(builder.getSubdetector().getName() + "_layer" + layer, baseDe, builder.getDetectorIdentifierHelper().pack(layerPosId));
builder.addLayerDetectorElement(layerDe);
} else {
if(_debug) System.out.printf("%s: layerDE exists\n", getClass().getSimpleName());
@@ -203,7 +240,16 @@
if(_debug) System.out.printf("%s: create the module detector element\n", getClass().getSimpleName());
- // create the "module" detector element
+ // create the "module" detector element
+ // it's under the base element
+ String half = HPSTestRunTracker2014Builder.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;
+ String modulePlacementName = geometryObject.getName();// builder.getSubdetector().getName() + "_" + moduleName + "_layer" + layer + "_module" + moduleNumber;
+
+
+ /*
ILogicalVolume trackingVolume = null;
if(builder.getBaseTrackerGeometry().getName().contains("tracking")) {
trackingVolume = builder.getBaseTrackerGeometry().getVolume();
@@ -213,16 +259,11 @@
if( trackingVolume == null ) {
throw new RuntimeException("failed to get tracking geometry from mother to " + builder.getBaseTrackerGeometry().getName());
}
- String moduleName = "TestRunModule";
- //TODO I'm not sure I need to follow the old style here?
- moduleName = geometryObject.getName();
- String half = HPSTestRunTracker2014Builder.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;
- String modulePlacementName = geometryObject.getName();// builder.getSubdetector().getName() + "_" + moduleName + "_layer" + layer + "_module" + moduleNumber;
String modulePath = String.format("/%s/%s", trackingVolume.getName(), modulePlacementName);
-
+ */
+ // use base as mother for physical volume
+ String modulePath = baseDe.getGeometry().getPathString() + "/" + modulePlacementName;
+
if(_debug) {
System.out.printf("%s: create SiTrackerModule with: placementname %s, modulePath %s, moduleNumber %d \n", getClass().getSimpleName(),modulePlacementName, modulePath, moduleNumber);
//System.out.printf("%s: print all %d physical volumes from the Store\n", getClass().getSimpleName(),PhysicalVolumeStore.getInstance().size());