Print

Print


Commit in GeomConverter/src/org/lcsim/geometry/subdetector on MAIN
HPSEcal.java+521.1 -> 1.2
add neighboring method using IDs to HPSEcal

GeomConverter/src/org/lcsim/geometry/subdetector
HPSEcal.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- HPSEcal.java	3 May 2011 00:41:30 -0000	1.1
+++ HPSEcal.java	17 May 2011 23:10:46 -0000	1.2
@@ -6,6 +6,8 @@
 
 import org.jdom.Element;
 import org.jdom.JDOMException;
+import org.lcsim.geometry.IDDecoder;
+import org.lcsim.geometry.util.IDEncoder;
 
 /**
  * @author jeremym
@@ -91,6 +93,56 @@
         }
     }
     
+    /**
+     * Get the neighbors for a given cell ID.  Each crystal not on an edge 
+     * has 8 neighbors.  Edge crystals have fewer.
+     * @param id The cell ID.
+     * @return A <code>Set</code> containing the cell's neighbors.
+     */
+    public Set<Long> getNeighbors(Long id)
+    {        
+        // Get the IDDecoder.
+        IDDecoder dec = getIDDecoder();        
+        
+        // Set the ID.
+        dec.setID(id);
+        
+        // Get ID field values.
+        int x = dec.getValue("ix");
+        int y = dec.getValue("iy");
+        int side = dec.getValue("side");
+       
+        // Get field indices.
+        int ix = dec.getFieldIndex("ix");
+        int iy = dec.getFieldIndex("iy");
+        int iside = dec.getFieldIndex("side");
+        
+        // Get X, Y, & side neighbor data for this crystal.
+        Set<XYSide> neighbors = getNeighbors(x, y, side);
+
+        // Get buffer with values from current ID.
+        int[] buffer = new int[dec.getFieldCount()];
+        dec.getValues(buffer);       
+        
+        // Create an encoder to make neighbor IDs.
+        IDEncoder enc = new IDEncoder(dec.getIDDescription());
+     
+        // Set to hold neighbor IDs.
+        Set<Long> ids = new HashSet<Long>();
+        
+        // Loop over neighbor objects to make IDs.
+        for (XYSide xyside : neighbors)
+        {
+            buffer[ix] = xyside.x;
+            buffer[iy] = xyside.y;
+            buffer[iside] = xyside.side;
+            long nId = enc.setValues(buffer);
+            ids.add(nId);
+        }
+        
+        return ids;
+    }
+    
     public Set<XYSide> getNeighbors(int ix, int iy, int side)
     {
         Set<Integer> xneighbors = getXNeighbors(ix);
CVSspam 0.2.8