Print

Print


Commit in lcsim/test/org/lcsim on MAIN
SidloiCalorimeterHitTest.java+123added 1.1
basic hit position and neighbors test case for polyhedra calorimeters in sidloi2

lcsim/test/org/lcsim
SidloiCalorimeterHitTest.java added at 1.1
diff -N SidloiCalorimeterHitTest.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ SidloiCalorimeterHitTest.java	15 Sep 2009 23:48:13 -0000	1.1
@@ -0,0 +1,123 @@
+package org.lcsim;
+
+import java.io.File;
+import java.net.URL;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.lcsim.detector.identifier.IIdentifierHelper;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.SimCalorimeterHit;
+import org.lcsim.geometry.IDDecoder;
+import org.lcsim.util.Driver;
+import org.lcsim.util.cache.FileCache;
+import org.lcsim.util.loop.LCSimLoop;
+
+/**
+ * Tests that IDDecoder's computed position matches the position
+ * written into the hit by slic.  Also checks that the correct
+ * number of neighbors are found.
+ * 
+ * @author jeremym
+ */
+// TODO: Add in EcalBarrel once java version is implemented.
+public class SidloiCalorimeterHitTest extends TestCase
+{
+    //private static final String[] colls =
+    //{ "EcalBarrelHits" };
+    private static final String[] colls =
+    { "HcalEndcapHits", "EcalEndcapHits", "HcalBarrelHits" };
+       
+    public void testHitPosition() throws Exception
+    {
+        runTestFile("http://www.lcsim.org/test/lcio/gamma_Theta1-179_10GeV-0-2000_SLIC-v2r6p1_geant4-v9r2p2_LCPhys_sidloi2-0-10.slcio");
+    }
+
+    private void runTestFile(String s) throws Exception
+    {
+        URL url = new URL(s);
+        FileCache cache = new FileCache();
+        File file = cache.getCachedFile(url);
+
+        LCSimLoop loop = new LCSimLoop();
+        loop.setLCIORecordSource(file);
+        loop.add(new HitPositionDriver());
+        loop.loop(-1, null);
+        loop.dispose();
+    }
+
+    static final double tolerance = 1.0; 
+    
+    private class HitPositionDriver extends Driver
+    {    	        
+        public void process(EventHeader event)
+        {
+        	//System.out.println("event: " + event.getEventNumber());
+            for (String s : colls)
+            {
+                List<SimCalorimeterHit> hits = event.get(SimCalorimeterHit.class, s);
+                IDDecoder decoder = event.getMetaData(hits).getIDDecoder();
+                
+                IIdentifierHelper helper = decoder.getSubdetector().getDetectorElement().getIdentifierHelper();
+
+                int nlayers = decoder.getSubdetector().getLayering().getLayerCount();
+
+                for (SimCalorimeterHit hit : hits)
+                {
+                    long id = hit.getCellID();
+                    decoder.setID(id);
+
+                    double[] pos = hit.getPosition();
+                    
+                    // Debug stuff for testing new detector components.
+                    
+                    //System.out.println("-------------------------------");
+                    
+                    //System.out.println("hit id: " + hit.getExpandedIdentifier().toString());
+                    //System.out.println("hit pos: " + pos[0] + ", " + pos[1] + ", " + pos[2]);
+                    //System.out.println("decoder pos: " + decoder.getX() + ", " + decoder.getY() + ", " + decoder.getZ());
+                                        
+                    //IExpandedIdentifier expId = hit.getDetectorElement().getIdentifierHelper().unpack(hit.getIdentifier());
+                    //IIdentifierDictionary iddict = hit.getDetectorElement().getIdentifierHelper().getIdentifierDictionary();
+                    //IIdentifierHelper helper = hit.getDetectorElement().getIdentifierHelper();
+                    //System.out.println("hit id: " + helper.unpack(hit.getIdentifier()));
+                    
+                    //System.out.println("sensor pos: " + hit.getDetectorElement().getGeometry().getPosition());
+                    
+                    //System.out.println("localToGlobal check: " + hit.getDetectorElement().getGeometry().transformLocalToGlobal(new BasicHep3Vector(0,0,0)));
+                    //System.out.println("localToGlobal check X: " + hit.getDetectorElement().getGeometry().transformLocalToGlobal(new BasicHep3Vector(10.0,0,0)));
+                    //System.out.println("localToGlobal check Y: " + hit.getDetectorElement().getGeometry().transformLocalToGlobal(new BasicHep3Vector(0,10.0,0)));
+                    //System.out.println("localToGlobal check Z: " + hit.getDetectorElement().getGeometry().transformLocalToGlobal(new BasicHep3Vector(0,0,10.0)));
+                    
+                    //System.out.println("hit DE: " + hit.getDetectorElement().getName());
+                    //System.out.println("hit DE id: " + hit.getDetectorElement().getExpandedIdentifier().toString());
+                    //System.out.println("-----------------");
+                    
+                    assertEquals("X coordinate off by > " + tolerance, decoder.getX(), pos[0], tolerance);
+                    assertEquals("Y coordinate off by > " + tolerance, decoder.getY(), pos[1], tolerance);
+                    assertEquals("Z coordinate off by > " + tolerance, decoder.getZ(), pos[2], tolerance);
+                    
+                    long neighbors[] = decoder.getNeighbourIDs(1, 1, 1);
+                    
+                    int layern = decoder.getValue("layer");
+                    
+                    if (layern != 0 && layern != (nlayers - 1))
+                    {
+                    	assertEquals("Number of neighbors is incorrect.", 27, neighbors.length);
+                    }
+                    else
+                    {
+                    	assertEquals("Number of neighbors is incorrect.", 18, neighbors.length);
+                    }
+                    
+                    //System.out.println("neighbors: " + neighbors.length);
+                    //for (int i=0; i<neighbors.length; i++)
+                    //{
+                    //	System.out.println("    " + helper.unpack(new Identifier(neighbors[i])));
+                    //}                    
+                }
+            }
+        }
+    }
+}
CVSspam 0.2.8