GeomConverter/src/org/lcsim/detector/converter/compact
diff -u -r1.9 -r1.10
--- DiskTrackerConverter.java 9 May 2007 00:59:58 -0000 1.9
+++ DiskTrackerConverter.java 12 Jul 2007 06:54:42 -0000 1.10
@@ -2,8 +2,10 @@
import hep.physics.vec.BasicHep3Vector;
+import org.lcsim.geometry.IDDecoder;
import org.lcsim.detector.DetectorElement;
import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.IDetectorElementContainer;
import org.lcsim.detector.ILogicalVolume;
import org.lcsim.detector.LogicalVolume;
import org.lcsim.detector.PhysicalVolume;
@@ -18,6 +20,7 @@
import org.lcsim.geometry.layer.LayerSlice;
import org.lcsim.geometry.layer.Layering;
import org.lcsim.geometry.subdetector.DiskTracker;
+import org.lcsim.detector.identifier.*;
/**
* Convert a DiskTracker to the detailed geometry description.
@@ -33,6 +36,9 @@
ILogicalVolume trackingVolume = detector.getTrackingVolume().getLogicalVolume();
DiskTracker tracker = (DiskTracker)subdet;
+ IDDecoder decoder = tracker.getIDDecoder();
+
+ int systemNumber = tracker.getIDDecoder().getSystemNumber();
subdet.setDetectorElement( new DeSubdetector( detector, subdet ) );
@@ -146,19 +152,31 @@
{
String path = "/tracking_region/" + name + "_positive_layer" +i + "/slice" + j;
- new DiskTrackerSensorLayer(
+ DiskTrackerSensorLayer northEndcapLayer =
+ new DiskTrackerSensorLayer(
name + "_positive_sensor" + sensorNum,
endcapPos,
path);
+ ExpandedIdentifier expid = makeExpandedIdentifier(decoder, systemNumber, 1, i);
+
+ IIdentifierDictionary iddict = IdentifierDictionaryManager.getInstance().getIdentifierDictionary( subdet.getReadout().getName() );
+ IIdentifier id = IdentifierUtil.pack(iddict, expid);
+ northEndcapLayer.setIdentifier(id);
+
if ( tracker.getReflect() )
{
path = "/tracking_region/" + name + "_negative_layer" +i + "/slice" + j;
- new DiskTrackerSensorLayer(
+ DiskTrackerSensorLayer southEndcapLayer =
+ new DiskTrackerSensorLayer(
name + "_negative_sensor" + sensorNum,
endcapNeg,
path);
- }
+
+ expid = makeExpandedIdentifier(decoder, systemNumber, 2, i);
+ id = IdentifierUtil.pack(iddict, expid);
+ southEndcapLayer.setIdentifier(id);
+ }
++sensorNum;
}
@@ -166,6 +184,32 @@
}
}
+ static ExpandedIdentifier makeExpandedIdentifier(IDDecoder decoder, int systemNumber, int barrel, int layer)
+ {
+ ExpandedIdentifier id = new ExpandedIdentifier();
+ for (int i=0; i<decoder.getFieldCount(); i++)
+ {
+ String fieldName = decoder.getFieldName(i);
+ if (fieldName.equals("system"))
+ {
+ id.addValue(systemNumber);
+ }
+ else if (fieldName.equals("layer"))
+ {
+ id.addValue(layer);
+ }
+ else if (fieldName.equals("barrel"))
+ {
+ id.addValue(barrel);
+ }
+ else
+ {
+ id.addValue(0);
+ }
+ }
+ return id;
+ }
+
public Class getSubdetectorType()
{
return DiskTracker.class;
@@ -190,4 +234,4 @@
super(name);
}
}
-}
\ No newline at end of file
+}
GeomConverter/src/org/lcsim/detector/converter/compact
diff -u -r1.7 -r1.8
--- MultiLayerTrackerConverter.java 10 May 2007 06:02:37 -0000 1.7
+++ MultiLayerTrackerConverter.java 12 Jul 2007 06:54:42 -0000 1.8
@@ -14,6 +14,8 @@
import org.lcsim.geometry.layer.LayerSlice;
import org.lcsim.geometry.layer.Layering;
import org.lcsim.geometry.subdetector.MultiLayerTracker;
+import org.lcsim.geometry.IDDecoder;
+import org.lcsim.detector.identifier.*;
/**
* Convert a MultiLayerTracker into the org.lcsim.detector geometry representation.
@@ -99,7 +101,14 @@
if ( slice.isSensitive() )
{
String path = "/tracking_region/" + name + "_layer" +i + "/slice" + j;
- new MultiLayerTrackerSensorLayer(name + "_layer" + layerNumber, tracker.getDetectorElement(), path);
+ MultiLayerTrackerSensorLayer layerDetectorElement = new MultiLayerTrackerSensorLayer(name + "_layer" + layerNumber, tracker.getDetectorElement(), path);
+
+ ExpandedIdentifier expid = makeExpandedIdentifier(subdet.getIDDecoder(),tracker.getIDDecoder().getSystemNumber(),i);
+
+ IIdentifierDictionary iddict = IdentifierDictionaryManager.getInstance().getIdentifierDictionary( subdet.getReadout().getName() );
+ IIdentifier id = IdentifierUtil.pack( iddict, expid );
+ layerDetectorElement.setIdentifier(id);
+
++layerNumber;
}
@@ -107,6 +116,33 @@
}
}
}
+
+ static ExpandedIdentifier makeExpandedIdentifier(IDDecoder decoder, int systemNumber, int layer)
+ {
+ ExpandedIdentifier id = new ExpandedIdentifier();
+ int extras=0;
+ for (int i=0; i<decoder.getFieldCount(); i++)
+ {
+ String fieldName = decoder.getFieldName(i);
+ if (fieldName.equals("system"))
+ {
+ id.addValue(systemNumber);
+ }
+ else if (fieldName.equals("layer"))
+ {
+ id.addValue(layer);
+ }
+ else if (fieldName.equals("barrel"))
+ {
+ id.addValue(0);
+ }
+ else
+ {
+ id.addValue(0);
+ }
+ }
+ return id;
+ }
public Class getSubdetectorType()
{