5 modified files
GeomConverter/src/org/lcsim/detector/converter/compact
diff -u -r1.14 -r1.15
--- CylindricalBarrelCalorimeterConverter.java 19 Mar 2009 22:36:55 -0000 1.14
+++ CylindricalBarrelCalorimeterConverter.java 23 Mar 2009 17:43:17 -0000 1.15
@@ -8,6 +8,10 @@
import org.lcsim.detector.LogicalVolume;
import org.lcsim.detector.PhysicalVolume;
import org.lcsim.detector.PhysicalVolumeNavigatorStore;
+import org.lcsim.detector.identifier.ExpandedIdentifier;
+import org.lcsim.detector.identifier.IExpandedIdentifier;
+import org.lcsim.detector.identifier.IIdentifier;
+import org.lcsim.detector.identifier.IIdentifierHelper;
import org.lcsim.detector.material.IMaterial;
import org.lcsim.detector.material.MaterialStore;
import org.lcsim.detector.solids.Tube;
@@ -16,6 +20,7 @@
import org.lcsim.geometry.layer.Layer;
import org.lcsim.geometry.layer.LayerSlice;
import org.lcsim.geometry.layer.Layering;
+import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
import org.lcsim.geometry.subdetector.CylindricalBarrelCalorimeter;
public class CylindricalBarrelCalorimeterConverter
@@ -84,6 +89,8 @@
ILogicalVolume envelope
)
{
+ IIdentifierHelper helper = cal.getDetectorElement().getIdentifierHelper();
+
Layering layering = cal.getLayering();
String name = cal.getName();
@@ -160,11 +167,21 @@
// Path to the PhysicalVolume of this sensor.
String sensorPath = "/" + cal.getName() + "/" + layerName + "/" + sliceName;
-
+
+ // Make an id for the sensor.
+ IExpandedIdentifier expid = new ExpandedIdentifier(helper.getIdentifierDictionary().getNumberOfFields());
+ expid.setValue(helper.getFieldIndex("system"), cal.getSystemID());
+ expid.setValue(helper.getFieldIndex("barrel"), BarrelEndcapFlag.BARREL.getFlag());
+ expid.setValue(helper.getFieldIndex("layer"), i);
+ if (helper.hasField("slice"))
+ expid.setValue(helper.getFieldIndex("slice"), j);
+ IIdentifier id = helper.pack(expid);
+
new DetectorElement(
cal.getName() + "_layer" + layerNumber + "_sensor" + sensorNumber,
cal.getDetectorElement(),
- sensorPath);
+ sensorPath,
+ id);
// Increment the number of sensors.
++sensorNumber;
GeomConverter/src/org/lcsim/detector/converter/compact
diff -u -r1.17 -r1.18
--- CylindricalEndcapCalorimeterConverter.java 19 Mar 2009 22:36:55 -0000 1.17
+++ CylindricalEndcapCalorimeterConverter.java 23 Mar 2009 17:43:17 -0000 1.18
@@ -6,10 +6,13 @@
import org.lcsim.detector.IRotation3D;
import org.lcsim.detector.LogicalVolume;
import org.lcsim.detector.PhysicalVolume;
-import org.lcsim.detector.RotationPassiveEuler;
import org.lcsim.detector.RotationPassiveXYZ;
import org.lcsim.detector.Transform3D;
import org.lcsim.detector.Translation3D;
+import org.lcsim.detector.identifier.ExpandedIdentifier;
+import org.lcsim.detector.identifier.IExpandedIdentifier;
+import org.lcsim.detector.identifier.IIdentifier;
+import org.lcsim.detector.identifier.IIdentifierHelper;
import org.lcsim.detector.material.IMaterial;
import org.lcsim.detector.material.MaterialStore;
import org.lcsim.detector.solids.Tube;
@@ -18,6 +21,7 @@
import org.lcsim.geometry.layer.Layer;
import org.lcsim.geometry.layer.LayerSlice;
import org.lcsim.geometry.layer.Layering;
+import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
import org.lcsim.geometry.subdetector.CylindricalEndcapCalorimeter;
public class CylindricalEndcapCalorimeterConverter
@@ -88,6 +92,8 @@
DetectorElement endcap,
DetectorElement reflectedEndcap)
{
+ IIdentifierHelper helper = cal.getDetectorElement().getIdentifierHelper();
+
int layerNumber=0;
for (int i=0; i<cal.getLayering().getNumberOfLayers(); i++)
@@ -99,26 +105,45 @@
{
String sliceName = "slice" + j;
LayerSlice slice = layer.getSlice(j);
- // TODO: need identifiers
if ( slice.isSensitive() )
{
// Create an endcap sensor.
String pathName = "/" + cal.getName() + "_positive" + "/" + layerName + "/" + sliceName;
+
+ // Make an id for the endcap north sensor.
+ IExpandedIdentifier expid = new ExpandedIdentifier(helper.getIdentifierDictionary().getNumberOfFields());
+ expid.setValue(helper.getFieldIndex("system"), cal.getSystemID());
+ expid.setValue(helper.getFieldIndex("barrel"), BarrelEndcapFlag.ENDCAP_NORTH.getFlag());
+ expid.setValue(helper.getFieldIndex("layer"), i);
+ if (helper.hasField("slice"))
+ expid.setValue(helper.getFieldIndex("slice"), j);
+ IIdentifier id = helper.pack(expid);
+
new DetectorElement(
cal.getName() + "_positive_layer" + layerNumber + "_sensor" + sensorNumber,
endcap,
- pathName);
- //System.out.println("made " + e.getName());
+ pathName,
+ id);
// Create the reflected endcap sensor.
if ( reflectedEndcap != null )
{
pathName = "/" + cal.getName() + "_negative" + "/" + layerName + "/" + sliceName;
+
+ // Make an id for the endcap south sensor.
+ IExpandedIdentifier expidReflect = new ExpandedIdentifier(helper.getIdentifierDictionary().getNumberOfFields());
+ expid.setValue(helper.getFieldIndex("system"), cal.getSystemID());
+ expid.setValue(helper.getFieldIndex("barrel"), BarrelEndcapFlag.ENDCAP_SOUTH.getFlag());
+ expid.setValue(helper.getFieldIndex("layer"), i);
+ if (helper.hasField("slice"))
+ expid.setValue(helper.getFieldIndex("slice"), j);
+ IIdentifier idReflect = helper.pack(expidReflect);
+
new DetectorElement(
cal.getName() + "_negative_layer" + layerNumber + "_sensor" + sensorNumber,
reflectedEndcap,
- pathName);
- //System.out.println("made " + e.getName());
+ pathName,
+ idReflect);
}
// Increment the sensor number.
++sensorNumber;
GeomConverter/src/org/lcsim/detector/identifier
diff -u -r1.8 -r1.9
--- IIdentifierHelper.java 11 Dec 2007 07:27:52 -0000 1.8
+++ IIdentifierHelper.java 23 Mar 2009 17:43:17 -0000 1.9
@@ -23,7 +23,7 @@
* @see IIdentifierDictionary
*
* @author Jeremy McCormick
- * @version $Id: IIdentifierHelper.java,v 1.8 2007/12/11 07:27:52 jeremy Exp $
+ * @version $Id: IIdentifierHelper.java,v 1.9 2009/03/23 17:43:17 jeremy Exp $
*/
public interface IIdentifierHelper
@@ -70,9 +70,17 @@
* @return The field value.
*/
public int getValue( IIdentifier compact, String field );
+
+ /**
+ * Pushed up from {@link IIdentifierDictionary#hasField(String)}.
+ * @param fieldName The field name.
+ * @return True if this helper's dictionary has a field called <code>fieldName</code>;
+ * False if not.
+ */
+ public boolean hasField(String fieldName);
/**
- * Pack a subset of fields in an {@link IExpandedIdentifier}.
+ * Pack a subset of fields into an {@link IExpandedIdentifier}.
*
* @param id An ExpandedIdentifier to pack.
* @param start The start index in the ExpandedIdentifier.
@@ -81,7 +89,7 @@
public IIdentifier pack(IExpandedIdentifier id, int start);
/**
- * Pack a subset of fields in an {@link IExpandedIdentifier}.
+ * Pack a subset of fields into an {@link IExpandedIdentifier}.
*
* @param id An ExpandedIdentifier to pack.
* @param startIndex Starting index.
@@ -92,7 +100,7 @@
/**
* Upack the {@link IIdentifier} into an {@link IExpandedIdentifier}
- * containing field values.
+ * containing the field values in a list.
*
* @param id The Identifier.
* @return An ExpandedIdentifier.
@@ -136,7 +144,19 @@
*/
public int getFieldIndex(String fieldName);
+ /**
+ * Set the single field value of an expanded identifier by named field.
+ * @param expid The expanded identifier.
+ * @param field The field name.
+ * @param value The field value.
+ */
public void setValue(IExpandedIdentifier expid, String field, int value);
+ /**
+ * Set the single field value of an expanded identifier by integer index.
+ * @param expid The expanded identifier.
+ * @param index The field index.
+ * @param value The field value.
+ */
public void setValue(IExpandedIdentifier expid, int index, int value);
}
\ No newline at end of file
GeomConverter/src/org/lcsim/detector/identifier
diff -u -r1.13 -r1.14
--- IdentifierHelper.java 11 Dec 2007 07:27:52 -0000 1.13
+++ IdentifierHelper.java 23 Mar 2009 17:43:17 -0000 1.14
@@ -5,7 +5,7 @@
* Implementation of {@link IIdentifierHelper}.
*
* @author Jeremy McCormick
- * @version $Id: IdentifierHelper.java,v 1.13 2007/12/11 07:27:52 jeremy Exp $
+ * @version $Id: IdentifierHelper.java,v 1.14 2009/03/23 17:43:17 jeremy Exp $
*/
public class IdentifierHelper
@@ -68,6 +68,11 @@
return iddict.getFieldIndex(fieldName);
}
+ public boolean hasField(String fieldName)
+ {
+ return iddict.hasField(fieldName);
+ }
+
public int getValue( IIdentifier compact, String field )
{
return IdentifierUtil.getValue( iddict, compact, field );
GeomConverter/src/org/lcsim/geometry/subdetector
diff -u -r1.2 -r1.3
--- BarrelEndcapFlag.java 14 Feb 2006 21:12:28 -0000 1.2
+++ BarrelEndcapFlag.java 23 Mar 2009 17:43:17 -0000 1.3
@@ -2,13 +2,18 @@
public enum BarrelEndcapFlag
{
- BARREL(0), ENDCAP_NORTH(1), ENDCAP_SOUTH(2), ENDCAP(3), UNKNOWN(-1);
+ BARREL(0), ENDCAP_NORTH(1), ENDCAP_SOUTH(2), ENDCAP(3);
- int _flag;
+ private int flag;
BarrelEndcapFlag(int flag)
{
- _flag = flag;
+ if (flag < 0 || flag > 3)
+ {
+ throw new IllegalArgumentException("Bad BarrelEndcapFlag value: " + flag);
+ }
+
+ this.flag = flag;
}
public boolean isBarrel()
@@ -18,7 +23,7 @@
public boolean isEndcap()
{
- return this == ENDCAP || this == ENDCAP_NORTH || this == ENDCAP_SOUTH;
+ return flag > 0;
}
public boolean isEndcapNorth()
@@ -31,6 +36,11 @@
return this == ENDCAP_SOUTH;
}
+ public int getFlag()
+ {
+ return flag;
+ }
+
public static BarrelEndcapFlag createBarrelEndcapFlag(int flag)
{
if (flag == 0)
@@ -45,8 +55,10 @@
{
return ENDCAP_SOUTH;
}
-
- return UNKNOWN;
+ else
+ {
+ throw new IllegalArgumentException("Bad flag value: " + flag);
+ }
}
};
CVSspam 0.2.8