Print

Print


Commit in lcsim on MAIN
src/org/lcsim/detector/driver/RawTrackerHitReadoutDriver.java+101added 1.1
test/org/lcsim/detector/driver/RawTrackerHitReadoutDriverTest.java+77added 1.1
+178
2 added files
JM: Basic readout driver for assigning DetectorElements to RawTrackerHit, plus simple test case.

lcsim/src/org/lcsim/detector/driver
RawTrackerHitReadoutDriver.java added at 1.1
diff -N RawTrackerHitReadoutDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ RawTrackerHitReadoutDriver.java	23 May 2007 20:14:58 -0000	1.1
@@ -0,0 +1,101 @@
+package org.lcsim.detector.driver;
+
+import java.util.List;
+import java.util.Map;
+
+import org.lcsim.detector.DetectorElementStore;
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.IReadout;
+import org.lcsim.detector.identifier.IExpandedIdentifier;
+import org.lcsim.detector.identifier.IIdentifier;
+import org.lcsim.detector.identifier.IIdentifierField;
+import org.lcsim.detector.identifier.IIdentifierHelper;
+import org.lcsim.detector.identifier.Identifier;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.geometry.subdetector.SiTrackerBarrel;
+
+/**
+ * Assigns the corresponding {@link org.lcsim.detector.IDetectorElement} 
+ * to a {@link org.lcsim.event.RawTrackerHit}.
+ *  
+ * @author Jeremy McCormick
+ * @version $Id: RawTrackerHitReadoutDriver.java,v 1.1 2007/05/23 20:14:58 jeremy Exp $
+ */
+public class RawTrackerHitReadoutDriver 
+extends CollectionHandler
+{
+    public RawTrackerHitReadoutDriver(List<String> collectionNames)
+    {
+        super(collectionNames);
+        add(new ReadoutCleanupDriver(collectionNames));
+    }
+
+    public RawTrackerHitReadoutDriver(String[] collectionNames)
+    {        
+        super(collectionNames);
+        add(new ReadoutCleanupDriver(collectionNames));
+    }
+    
+    static final private String idKey[] = 
+        new String[] {"system","barrel","layer","module","sensor","side","strip"};
+    protected void process(EventHeader header)
+    {                          
+        super.process(header);
+        List<List<RawTrackerHit>> collections = header.get(RawTrackerHit.class);
+        for ( List<RawTrackerHit> collection : collections )
+        {
+            if (canHandle(header.getMetaData( collection ).getName()))
+            {
+                IIdentifierHelper helper = header.getMetaData(collection).getIDDecoder().getSubdetector().getDetectorElement().getIdentifierHelper();
+                
+                // Check that the id is in the expected format.
+                Map<String,IIdentifierField> fields = helper.getIdentifierDictionary().getFieldNameMap();
+                for (int i=0; i<fields.size(); i++)
+                {
+                    if (i > (idKey.length - 1))
+                    {
+                        throw new RuntimeException("Index out of range <"+i+">.");
+                    }
+                    
+                    IIdentifierField field = fields.get(idKey[i]);
+                    
+                    if (field == null)
+                    {
+                        throw new RuntimeException("Missing expected field <"+idKey[i]+">.");
+                    }
+                    
+                    if (field.getOrder() != i)
+                    {
+                        throw new RuntimeException("The field <"+idKey[i]+"> is in the wrong order.");
+                    }
+                }
+                
+                for (RawTrackerHit hit : collection)
+                {
+                        IDetectorElement deSubdet = hit.getSubdetector().getDetectorElement();
+                        IIdentifier hitId = new Identifier(hit.getCellID());          
+                        
+                        // Extract the field values up to, but not including, "side".
+                        IExpandedIdentifier expGeomId = helper.unpack(hitId, 0, helper.getIdentifierDictionary().getFieldIndex("side") - 1);
+                        
+                        // Repack the ID, with non-geometric fields removed.
+                        IIdentifier geomId = helper.pack(expGeomId);
+                        
+                        // Lookup the DetectorElement.
+                        IDetectorElement deHit = 
+                            DetectorElementStore.getInstance().findDetectorElement(geomId);
+                        
+                        if (deHit == null)
+                        {
+                            throw new RuntimeException("DetectorElement not found with id <"+geomId.toHexString()+">.");
+                        }
+                        
+                        hit.setDetectorElement(deHit);
+                        IReadout ro = deHit.getReadout();
+                        ro.addHit(hit);
+                }
+            }
+        }        
+    }                     
+}

lcsim/test/org/lcsim/detector/driver
RawTrackerHitReadoutDriverTest.java added at 1.1
diff -N RawTrackerHitReadoutDriverTest.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ RawTrackerHitReadoutDriverTest.java	23 May 2007 20:14:58 -0000	1.1
@@ -0,0 +1,77 @@
+package org.lcsim.detector.driver;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.*;
+
+import org.lcsim.detector.DetectorElementStore;
+import org.lcsim.detector.driver.RawTrackerHitReadoutDriver;
+import org.lcsim.detector.driver.SimTrackerHitIdentifierReadoutDriver;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.event.base.BaseRawTrackerHit;
+import org.lcsim.util.Driver;
+import org.lcsim.util.cache.FileCache;
+import org.lcsim.util.loop.LCSimLoop;
+
+/**
+ * Test {@link org.lcsim.detector.RawTrackerHitReadout}.
+ * 
+ * @author Jeremy McCormick
+ */
+public class RawTrackerHitReadoutDriverTest extends TestCase
+{
+    
+    private static final String resource = 
+        "http://www.lcsim.org/test/lcio/mu-_10GeV_SiTrackerBarrelTest00.slcio";
+    
+    private static final String[] collection = new String[] { "SiTrackerBarrel_RO" };
+    
+    public void testRawTrackerHitIO() throws Exception
+    {         
+        LCSimLoop writeLoop = new LCSimLoop();
+        writeLoop.setLCIORecordSource((new FileCache()).getCachedFile(new URL(resource)));
+        
+        writeLoop.add(new SimTrackerHitIdentifierReadoutDriver(new String[] { "SiTrackerBarrel_RO" } ));
+        writeLoop.add(new RawTrackerHitMaker());
+        writeLoop.add(new RawTrackerHitReadoutDriver(new String[] { "RawTrackerHitTest" }));
+        writeLoop.add(new CheckDriver());
+        writeLoop.loop(1);
+        writeLoop.dispose();        
+    }    
+            
+    private class RawTrackerHitMaker extends Driver
+    {
+        protected void process(EventHeader event)
+        {
+            List<RawTrackerHit> rawHits = new ArrayList<RawTrackerHit>();
+            List<SimTrackerHit> simHits = event.get(SimTrackerHit.class, "SiTrackerBarrel_RO");
+            for ( SimTrackerHit simHit : simHits )
+            {
+                List<SimTrackerHit> thisSimHit = new ArrayList<SimTrackerHit>();
+                thisSimHit.add(simHit);
+                RawTrackerHit rawHit = 
+                    new BaseRawTrackerHit(0,(long)simHit.getCellID(),new short[]{},simHit.getIDDecoder(),thisSimHit);                
+                rawHits.add(rawHit);
+            }                        
+            event.put("RawTrackerHitTest", rawHits, RawTrackerHit.class, 0, "SiTrackerBarrel_RO");
+        }
+    }
+    
+    private class CheckDriver extends Driver
+    {
+        protected void process(EventHeader event)
+        {     
+            List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, "RawTrackerHitTest");
+            for (RawTrackerHit hit : rawHits)
+            {
+                assertTrue(hit.getIdentifier() != null);
+                assertTrue(hit.getDetectorElement() != null);
+                assertEquals(hit.getDetectorElement(), hit.getSimTrackerHit().get(0).getDetectorElement());                
+            }
+        }
+    }           
+}
\ No newline at end of file
CVSspam 0.2.8