Commit in GeomConverter/src/org/lcsim on MAIN
detector/converter/compact/CylindricalBarrelCalorimeterConverter.java+19-21.14 -> 1.15
                          /CylindricalEndcapCalorimeterConverter.java+31-61.17 -> 1.18
detector/identifier/IIdentifierHelper.java+24-41.8 -> 1.9
                   /IdentifierHelper.java+6-11.13 -> 1.14
geometry/subdetector/BarrelEndcapFlag.java+18-61.2 -> 1.3
+98-19
5 modified files
add ids to cylindrical calorimeter sensors; some minor changes to BarrelEndcapFlag and IdHelper

GeomConverter/src/org/lcsim/detector/converter/compact
CylindricalBarrelCalorimeterConverter.java 1.14 -> 1.15
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
CylindricalEndcapCalorimeterConverter.java 1.17 -> 1.18
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
IIdentifierHelper.java 1.8 -> 1.9
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
IdentifierHelper.java 1.13 -> 1.14
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
BarrelEndcapFlag.java 1.2 -> 1.3
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