lcsim/test/org/lcsim
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])));
+ //}
+ }
+ }
+ }
+ }
+}