Print

Print


Commit in lcsim/test/org/lcsim/detector/tracker on MAIN
SimTrackerDigitizationTest.java+155added 1.1
Test code for tracker digitization.

lcsim/test/org/lcsim/detector/tracker
SimTrackerDigitizationTest.java added at 1.1
diff -N SimTrackerDigitizationTest.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ SimTrackerDigitizationTest.java	2 May 2007 19:55:11 -0000	1.1
@@ -0,0 +1,155 @@
+package org.lcsim.detector.tracker;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.HashSet;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.VecOp;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.util.Driver;
+import org.lcsim.util.cache.FileCache;
+import org.lcsim.util.loop.LCSimLoop;
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.ITransform3D;
+import org.lcsim.detector.IReadout;
+import org.lcsim.detector.ReadoutCleanupDriver;
+import org.lcsim.geometry.compact.Subdetector;
+
+import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.detector.tracker.silicon.TrackSegment;
+
+/**
+ * Reads 2 muon event generated in sid01_polyhedra, which uses
+ * SiTrackerBarrel.  For DetectorElements where there is a 
+ * Readout containing one hit, check that the hit from the event
+ * and the DE's have matching cell id. 
+ */
+public class SimTrackerDigitizationTest extends TestCase
+{
+    public SimTrackerDigitizationTest(String testName)
+    {
+        super(testName);
+    }
+
+    public static Test suite()
+    {
+//        return new TestSuite(SimTrackerHitPositionalReadoutDriverTest.class);
+        return new TestSuite(SimTrackerDigitizationTest.class);
+    }
+
+    public void setUp()
+    {
+        java.lang.Runtime.getRuntime().gc();
+    }
+
+    public void testReadout() throws Exception
+    {        
+        URL url = 
+            new URL("http://www.lcsim.org/test/lcio/mu-_10GeV_10_SLIC_v2r1p7_geant4-v8r2p0_SiTrackerBarrelTest00.slcio");
+        FileCache cache = new FileCache();
+        File file = cache.getCachedFile(url);        
+
+        LCSimLoop loop = new LCSimLoop();
+        loop.setLCIORecordSource(file);
+        loop.add( new SimTrackerHitPositionalReadoutDriver(new String[] {"SiTrackerBarrel_RO"} ) );
+        loop.add( new TestDriver() );
+        loop.loop(2);
+        loop.dispose();
+    }     
+
+    class TestDriver
+    extends Driver
+    {
+        protected void process(EventHeader header)
+        {      
+            List<SimTrackerHit> hitsFromRO = new ArrayList<SimTrackerHit>();
+            IDetectorElement tkr = header.getDetector().getSubdetector("SiTrackerBarrel").getDetectorElement();
+            for ( IDetectorElement layer : tkr.getChildren() )
+            {
+                for ( IDetectorElement module : layer.getChildren() )
+                {
+                    for ( IDetectorElement sensor : module.getChildren() )
+                    {
+                        IReadout<SimTrackerHit> ro = sensor.getReadout();
+                        List<SimTrackerHit> hits = ro.getHits();                        
+                        hitsFromRO.addAll( hits );
+                    }
+                }
+            }
+            
+            /*
+            System.out.println("hitsFromRO.size = " + hitsFromRO.size() );
+            for ( SimTrackerHit roHit : hitsFromRO )
+            {
+                System.out.println("got hit from RO - " + roHit.getCellID());
+            }*/
+            
+            List<SimTrackerHit> eventHits = header.get(SimTrackerHit.class, "SiTrackerBarrel_RO");
+            
+            System.out.println("Number of SimTrackerHits: " + eventHits.size());
+            
+            // set of sensors with hits
+            Set<SiSensor> hit_sensors = new HashSet<SiSensor>();
+            
+            for (SimTrackerHit hit : eventHits)
+            {
+//            _decoder.setID(hit.getCellID());
+                
+                // Create track segment in global coordinates
+                Hep3Vector midpoint = new BasicHep3Vector(hit.getPoint());
+                Hep3Vector direction = VecOp.unit(new BasicHep3Vector(hit.getMomentum()));
+                Hep3Vector half_length = VecOp.mult(hit.getPathLength()/2.0,direction);
+                
+                Hep3Vector p1 = VecOp.add(midpoint,VecOp.mult(-1.0,half_length));
+                Hep3Vector p2 = VecOp.add(midpoint,half_length);
+                
+                double energy = hit.getdEdx();
+                
+                TrackSegment track_segment = new TrackSegment(p1,p2,energy);
+                
+                // Find the sensor for this hit, add to list of hit sensors
+                SiSensor sensor = (SiSensor)tkr.findDetectorElement(midpoint);
+                hit_sensors.add(sensor);
+                
+                // Transform track segment to sensor coordinates and assign to sensor
+                ITransform3D global_to_sensor = sensor.getGeometry().getGlobalToLocal();
+                track_segment.transform(global_to_sensor);
+                sensor.addTrackSegment(track_segment);
+            }
+            
+            // Loop over sensors
+            
+            System.out.println("Number of Hit Sensors: " + hit_sensors.size());
+            
+            for (SiSensor sensor : hit_sensors)
+            {
+                // deposit charge
+                sensor.depositCharge();
+                
+                // readout
+//          List<RawTrackerHit> raw_hits = readout_chip.readout(sensor);
+                
+                
+            }
+            
+            
+
+            
+            
+        }
+        
+
+    }
+}
+
CVSspam 0.2.8