Print

Print


Commit in lcsim/sandbox on MAIN
DetectorIdentifierHelperTest.java+274added 1.1
SimTrackerHitIdentifierReadoutDriverTest.java+101added 1.1
TrackerBarrelDigitizationDriverTest.java+159added 1.1
TrackerEndcapDigitizationDriverTest.java+161added 1.1
TrackingVolumeTest.java+4-31.1 -> 1.2
+699-3
4 added + 1 modified, total 5 files
putting old tests into sandbox

lcsim/sandbox
DetectorIdentifierHelperTest.java added at 1.1
diff -N DetectorIdentifierHelperTest.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ DetectorIdentifierHelperTest.java	31 Aug 2009 18:36:47 -0000	1.1
@@ -0,0 +1,274 @@
+package org.lcsim.detector.tracker.readout;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.freehep.record.loop.LoopException;
+import org.lcsim.detector.driver.*;
+import org.lcsim.detector.identifier.IIdentifier;
+import org.lcsim.detector.identifier.Identifier;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.SimCalorimeterHit;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.event.EventHeader.LCMetaData;
+import org.lcsim.geometry.Subdetector;
+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.DetectorIdentifierHelper;
+
+/**
+ * Tests the functionality of {@link org.lcsim.detector.DetectorIdHelper}
+ * on an sid01 LCIO file.
+ *
+ * @author Jeremy McCormick <[log in to unmask]>
+ * @version $Id: DetectorIdentifierHelperTest.java,v 1.1 2009/08/31 18:36:47 jeremy Exp $
+ */
+
+public class DetectorIdentifierHelperTest extends TestCase
+{
+   public void testDetectorIdHelper()
+   {
+      File file = null;
+      try
+      {
+         FileCache cache = new FileCache();
+         file = cache.getCachedFile(new URL("http://www.lcsim.org/test/lcio/pythiaZPoleuds-0-1000_SLIC-v2r3p7_geant4-v9r0p1_LCPhys_sid01.slcio"));
+         LCSimLoop loop = new LCSimLoop();
+         loop.setLCIORecordSource(file);
+         loop.add(new TrackerDriver());
+         loop.add(new CalorimeterDriver());
+         loop.loop(1,null);
+         loop.dispose();
+      }
+      catch (IOException x)
+      {
+         throw new RuntimeException(x);
+      }
+      catch (LoopException x)
+      {
+         throw new RuntimeException(x);
+      }
+   }
+   
+   class CalorimeterDriver extends Driver
+   {
+      protected void process(EventHeader event)
+      {
+         int ecalBarrel, ecalEndcap, hcalBarrel, hcalEndcap, forwardEcal, lumi, muonBarrel, muonEndcap;
+         ecalBarrel = ecalEndcap = hcalBarrel = hcalEndcap = forwardEcal = lumi = muonBarrel = muonEndcap = 0;
+         List<List<SimCalorimeterHit>> collections = event.get(SimCalorimeterHit.class);
+         for (List<SimCalorimeterHit> collection: collections)
+         {
+            LCMetaData meta = event.getMetaData(collection);
+            String collectionName = meta.getName(); 
+            Subdetector subdet = meta.getIDDecoder().getSubdetector();
+            IDetectorElement deSubdet = subdet.getDetectorElement();
+            DetectorIdentifierHelper idHelper = (DetectorIdentifierHelper)deSubdet.getIdentifierHelper();
+            
+            for (SimCalorimeterHit hit : collection)
+            {
+               IIdentifier hitId = new Identifier(hit.getCellID());
+               
+               assertTrue(idHelper.isCalorimeter(hitId));
+               
+               if (subdet.isBarrel())
+               {
+                  assertTrue(idHelper.isBarrel(hitId));
+                  assertTrue(idHelper.isCalorimeterBarrel(hitId));
+               }
+               
+               if (subdet.isEndcap())
+               {
+                  assertTrue(idHelper.isEndcap(hitId));
+                  assertTrue(idHelper.isCalorimeterEndcap(hitId));
+                  
+                  if (hit.getPosition()[2] > 0)
+                  {
+                     assertTrue(idHelper.isCalorimeterEndcapPositive(hitId));
+                  }
+                  else
+                  {
+                     assertTrue(idHelper.isCalorimeterEndcapNegative(hitId));
+                  }
+               }
+               
+               if (collectionName.equals("EcalBarrHits"))
+               {
+                  assertTrue(idHelper.isEcal(hitId));
+                  assertTrue(idHelper.isBarrel(hitId));
+               }
+               
+               if (collectionName.equals("EcalEndcapHits"))
+               {
+                  assertTrue(idHelper.isEcal(hitId));
+                  assertTrue(idHelper.isEcalEndcap(hitId));
+                  if (hit.getPosition()[2] > 0)
+                  {
+                     assertTrue(idHelper.isEcalEndcapPositive(hitId));
+                  }
+                  else
+                  {
+                     assertTrue(idHelper.isEcalEndcapNegative(hitId));
+                  }
+               }
+               
+               if (collectionName.equals("HcalBarrHits"))
+               {
+                  assertTrue(idHelper.isHcal(hitId));
+                  assertTrue(idHelper.isHcalBarrel(hitId));
+               }
+               
+               if (collectionName.equals("HcalEndcapHits"))
+               {
+                  assertTrue(idHelper.isHcal(hitId));
+                  assertTrue(idHelper.isHcalEndcap(hitId));
+                  if (hit.getPosition()[2] > 0)
+                  {
+                     assertTrue(idHelper.isHcalEndcapPositive(hitId));
+                  }
+                  else
+                  {
+                     assertTrue(idHelper.isHcalEndcapNegative(hitId));
+                  }
+               }
+               
+               if (collectionName.equals("MuonBarrHits"))
+               {
+                  assertTrue(idHelper.isMuon(hitId));
+                  assertTrue(idHelper.isMuonBarrel(hitId));
+               }
+               
+               if (collectionName.equals("MuonEndcapHits"))
+               {
+                  assertTrue(idHelper.isMuon(hitId));
+                  assertTrue(idHelper.isMuonEndcap(hitId));
+                  if (hit.getPosition()[2] > 0)
+                  {
+                     assertTrue(idHelper.isMuonEndcapPositive(hitId));
+                  }
+                  else
+                  {
+                     assertTrue(idHelper.isMuonEndcapNegative(hitId));
+                  }
+               }
+               
+               if (collectionName.equals("LuminosityMonitorHits"))
+               {
+                  assertTrue(idHelper.isLumi(hitId));
+                  
+                  if (hit.getPosition()[2] > 0)
+                  {
+                     assertTrue(idHelper.isLumiEndcapPositive(hitId));
+                  }
+                  else
+                  {
+                     assertTrue(idHelper.isLumiEndcapNegative(hitId));
+                  }
+               }
+               
+               if (collectionName.equals("ForwardEcalEndcapHits"))
+               {
+                  assertTrue(idHelper.isEcalForward(hitId));
+                  
+                  if (hit.getPosition()[2] > 0)
+                  {
+                     assertTrue(idHelper.isEcalForwardEndcapPositive(hitId));
+                  }
+                  else
+                  {
+                     assertTrue(idHelper.isEcalForwardEndcapNegative(hitId));
+                  }
+               }
+            }
+         }
+      }
+   }
+   
+   class TrackerDriver extends Driver
+   {
+      protected void process(EventHeader event)
+      {
+         event.getDetector();
+         int sitBarrel, sitEndcap, vtxBarrel, vtxEndcap;
+         sitBarrel = sitEndcap = vtxBarrel = vtxEndcap = 0;
+         List<List<SimTrackerHit>> collections = event.get(SimTrackerHit.class);
+         for (List<SimTrackerHit> collection : collections)
+         {
+            LCMetaData meta = event.getMetaData(collection);
+            String collectionName = meta.getName();
+            Subdetector subdet = meta.getIDDecoder().getSubdetector();
+            if (subdet == null)
+               throw new RuntimeException("Oops!  Subdetector for collection " + meta.getName() + " is null!");
+            IDetectorElement deSubdet = subdet.getDetectorElement();
+            DetectorIdentifierHelper idHelper = (DetectorIdentifierHelper)deSubdet.getIdentifierHelper();
+            
+            IIdentifier subdetId = deSubdet.getIdentifier();
+            
+            for (SimTrackerHit hit : collection)
+            {
+               IIdentifier hitId = new Identifier(hit.getCellID());
+               
+               assertTrue(idHelper.isTracker(hitId));
+               
+               if (subdet.isBarrel())
+               {
+                  assertTrue(idHelper.isBarrel(hitId));
+                  assertTrue(idHelper.isTrackerBarrel(hitId));
+               }
+               
+               if (subdet.isEndcap())
+               {
+                  assertTrue(idHelper.isEndcap(hitId));
+                  assertTrue(idHelper.isTrackerEndcap(hitId));
+               }
+               
+               if (collectionName.equals("TkrBarrHits"))
+               {
+                  assertTrue(idHelper.isSit(hitId));
+                  assertTrue(idHelper.isSitBarrel(hitId));
+               }
+               
+               if (collectionName.equals("TkrEndcapHits"))
+               {
+                  assertTrue(idHelper.isSit(hitId));
+                  assertTrue(idHelper.isSitEndcap(hitId));
+                  if (hit.getPoint()[2] > 0)
+                  {
+                     assertTrue(idHelper.isSitEndcapPositive(hitId));
+                  }
+                  else
+                  {
+                     assertTrue(idHelper.isSitEndcapNegative(hitId));
+                  }
+               }
+               
+               if (collectionName.equals("VtxBarrHits"))
+               {
+                  assertTrue(idHelper.isVtx(hitId));
+                  assertTrue(idHelper.isVtxBarrel(hitId));
+               }
+               
+               if (collectionName.equals("VtxEndcapHits"))
+               {
+                  assertTrue(idHelper.isVtx(hitId));
+                  assertTrue(idHelper.isVtxEndcap(hitId));
+                  if (hit.getPoint()[2] > 0)
+                  {
+                     assertTrue(idHelper.isVtxEndcapPositive(hitId));
+                  }
+                  else
+                  {
+                     assertTrue(idHelper.isVtxEndcapNegative(hitId));
+                  }
+               }
+            }
+         }         
+      }
+   }
+}
\ No newline at end of file

lcsim/sandbox
SimTrackerHitIdentifierReadoutDriverTest.java added at 1.1
diff -N SimTrackerHitIdentifierReadoutDriverTest.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ SimTrackerHitIdentifierReadoutDriverTest.java	31 Aug 2009 18:36:47 -0000	1.1
@@ -0,0 +1,101 @@
+package org.lcsim.detector.tracker.readout;
+
+import hep.physics.vec.BasicHep3Vector;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import org.lcsim.detector.driver.*;
+
+import org.lcsim.detector.solids.Inside;
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.IReadout;
+import org.lcsim.detector.identifier.Identifier;
+import org.lcsim.detector.driver.CollectionHandler;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.geometry.compact.Subdetector;
+import org.lcsim.util.Driver;
+import org.lcsim.util.cache.FileCache;
+import org.lcsim.util.loop.LCSimLoop;
+
+/**
+ * Test the {@link org.lcsim.detector.driver.SimTrackerHitIdentifierReadoutDriver} on the sid01 detector.
+ */
+public class SimTrackerHitIdentifierReadoutDriverTest extends TestCase
+{
+    public void setUp()
+    {
+        java.lang.Runtime.getRuntime().gc();
+    }
+
+    public void testReadout() throws Exception
+    {        
+        URL url = 
+            new URL("http://www.lcsim.org/test/lcio/muons10_Theta4-176_1-10GeV_SLIC_v2r2p1_sid01.slcio");
+        FileCache cache = new FileCache();
+        File file = cache.getCachedFile(url);        
+
+        LCSimLoop loop = new LCSimLoop();
+        loop.setLCIORecordSource(file);
+
+        String[] colls = {"TkrBarrHits","TkrEndcapHits"};
+
+        loop.add( new SimTrackerHitIdentifierReadoutDriver(colls));
+        loop.add( new TestDriver(colls));
+        loop.loop(1, null);
+        loop.dispose();
+    }     
+    
+    class TestDriver
+    extends CollectionHandler
+    {
+    	TestDriver(String[] colls)
+    	{
+    		super(colls);
+    	}
+    	
+    	protected void process(EventHeader event)
+    	{
+    		List<List<SimTrackerHit>> collections = event.get(SimTrackerHit.class);
+    		for (List<SimTrackerHit> collection : collections)
+    		{
+    			if (canHandle(event.getMetaData(collection).getName()))
+    			{
+    				for (SimTrackerHit hit : collection)
+    				{
+    					//System.out.println("Checking SimTrackerHit at " + hit.getPoint()[0] + "," + hit.getPoint()[1] + " " + hit.getPoint()[2] + " with id: " + new Identifier(hit.getCellID()).toHexString());
+    					IDetectorElement deHit = hit.getDetectorElement();
+    					assertTrue("DetectorElement from the hit is null!",deHit!=null);
+    					assertEquals("IDs do not match",new Identifier(hit.getCellID()),deHit.getIdentifier());
+    					SimTrackerHit lkpHit = findHitByPosition(hit,deHit.getReadout().getHits(SimTrackerHit.class));
+    					assertTrue("Failed to find SimTrackerHit in Readout!",lkpHit != null);
+    					//System.out.println("OK!");
+    				}
+    			}
+    		}
+    	}
+    }
+    
+    private SimTrackerHit findHitByPosition( SimTrackerHit findHit, List<SimTrackerHit> hits)
+    {
+        double[] findHitPos = findHit.getPoint();
+        for ( SimTrackerHit hit : hits )
+        {
+            double[] hitPos = hit.getPoint();
+            if ( findHitPos[0] == hitPos[0] && 
+                    findHitPos[1] == hitPos[1] && 
+                    findHitPos[2] == hitPos[2] )
+            {
+                return hit;
+            }
+        }
+        return null;
+    }
+}
+

lcsim/sandbox
TrackerBarrelDigitizationDriverTest.java added at 1.1
diff -N TrackerBarrelDigitizationDriverTest.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ TrackerBarrelDigitizationDriverTest.java	31 Aug 2009 18:36:48 -0000	1.1
@@ -0,0 +1,159 @@
+package org.lcsim.detector.tracker.readout;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedMap;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import org.lcsim.detector.driver.*;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.base.BaseRawTrackerHit;
+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.IReadout;
+
+import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.detector.tracker.silicon.ChargeCarrier;
+
+import org.lcsim.contrib.SiStripSim.SiSensorSim;
+import org.lcsim.contrib.SiStripSim.CDFSiSensorSim;
+import org.lcsim.contrib.SiStripSim.ReadoutChip;
+import org.lcsim.contrib.SiStripSim.Kpix;
+import org.lcsim.contrib.SiStripSim.SiElectrodeDataCollection;
+
+/**
+ * Reads single muon events 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 TrackerBarrelDigitizationDriverTest extends TestCase
+{
+    public TrackerBarrelDigitizationDriverTest(String testName)
+    {
+        super(testName);
+    }
+    
+    public static Test suite()
+    {
+        return new TestSuite(TrackerBarrelDigitizationDriverTest.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_10.0GeV_Theta90_SLIC-v2r3p7_geant4-v9r0p1_LCPhys_SiTrackerBarrelTest00.slcio");
+        URL url = new URL("http://www.lcsim.org/test/lcio/mu-_10GeV_SLIC-v2r3p10_geant4-v9r0p1_LCPhys_SiTrackerBarrelTest01.slcio");
+        FileCache cache = new FileCache();
+        File file = cache.getCachedFile(url);
+        
+        LCSimLoop loop = new LCSimLoop();
+        loop.setLCIORecordSource(file);
+        loop.add( new SimTrackerHitIdentifierReadoutDriver(new String[] {"SiTrackerBarrel_RO"} ) );
+        loop.add( new TestDriver() );
+        loop.loop(10, null);
+        loop.dispose();
+    }
+    
+    class TestDriver
+            extends Driver
+    {
+        protected void process(EventHeader header)
+        {
+            
+            boolean found_hits = false;
+            
+            // Setup simulation and readout
+            SiSensorSim si_simulation = new CDFSiSensorSim();
+            ReadoutChip kpix = new Kpix();
+            
+            IDetectorElement tkr = header.getDetector().getSubdetector("SiTrackerBarrel").getDetectorElement();
+            for ( IDetectorElement layer : tkr.getChildren() )
+            {
+                for ( IDetectorElement module : layer.getChildren() )
+                {
+                    for ( IDetectorElement sensorDE : module.getChildren() )
+                    {
+                        SiSensor sensor = (SiSensor)sensorDE;
+                        
+                        IReadout ro = sensor.getReadout();
+                        List<SimTrackerHit> hits = ro.getHits(SimTrackerHit.class);
+                        
+                        if (!hits.isEmpty())
+                        {
+                            
+//                            System.out.println("\n"+"Simulating sensor: "+sensor.getName());
+                            
+                            List<RawTrackerHit> raw_hits = new ArrayList<RawTrackerHit>();
+                            
+                            si_simulation.setSensor(sensor);
+                            Map<ChargeCarrier,SiElectrodeDataCollection> electrode_data = si_simulation.computeElectrodeData();
+                            
+                            for (ChargeCarrier carrier : ChargeCarrier.values())
+                            {
+                                if (sensor.hasElectrodesOnSide(carrier))
+                                {
+                                    
+//                                    System.out.println("Readout data: "+si_simulation.getReadoutData(carrier).getChargeMap());
+                                    
+                                    SortedMap<Integer,List<Integer>> digitized_hits = kpix.readout(electrode_data.get(carrier),sensor.getReadoutElectrodes(carrier));
+                                    
+                                    assertTrue(digitized_hits.size() > 0);
+//                                    System.out.println("# digitized hits: "+digitized_hits.size());
+                                    
+                                    // Create RawTrackerHits
+                                    
+                                    for (Integer readout_cell : digitized_hits.keySet())
+                                    {
+                                        int time = 0;
+                                        long cell_id = sensor.makeStripId(readout_cell,carrier.charge()).getValue();
+                                        short[] adc_values = {digitized_hits.get(readout_cell).get(0).shortValue(),digitized_hits.get(readout_cell).get(1).shortValue()};
+                                        
+                                        Set<SimTrackerHit> simulated_hits = electrode_data.get(carrier).get(readout_cell).getSimulatedHits();
+                                        IDetectorElement detector_element = sensor;
+                                        
+                                        RawTrackerHit raw_hit = new BaseRawTrackerHit(time,cell_id,adc_values,new ArrayList<SimTrackerHit>(simulated_hits),detector_element);
+                                        raw_hits.add(raw_hit);
+                                        found_hits = true;
+                                        
+//                                        System.out.println("ADC data for cell "+readout_cell+": "+
+//                                                raw_hit.getADCValues()[0]+", "+raw_hit.getADCValues()[1]);
+                                        
+                                        double signal = kpix.decodeCharge(raw_hit);
+//                                        System.out.println("Readout data for cell "+readout_cell+": "+signal);
+                                        
+                                    }
+                                    
+                                }
+                            }
+                            
+                            // Clear simulation and add RawTrackerHits to event
+                            si_simulation.clearReadout();
+                            header.put("RawBarrelTrackerHits",raw_hits,RawTrackerHit.class,0,"Kpix");
+                            
+                        }
+                        
+                    }
+                }
+            }
+            
+        }        
+        
+    }
+}
+

lcsim/sandbox
TrackerEndcapDigitizationDriverTest.java added at 1.1
diff -N TrackerEndcapDigitizationDriverTest.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ TrackerEndcapDigitizationDriverTest.java	31 Aug 2009 18:36:48 -0000	1.1
@@ -0,0 +1,161 @@
+package org.lcsim.detector.tracker.readout;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedMap;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import org.lcsim.detector.driver.*;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.base.BaseRawTrackerHit;
+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.IReadout;
+
+import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.detector.tracker.silicon.ChargeCarrier;
+
+import org.lcsim.contrib.SiStripSim.SiSensorSim;
+import org.lcsim.contrib.SiStripSim.CDFSiSensorSim;
+import org.lcsim.contrib.SiStripSim.ReadoutChip;
+import org.lcsim.contrib.SiStripSim.Kpix;
+import org.lcsim.contrib.SiStripSim.SiElectrodeDataCollection;
+
+/**
+ * Reads single muon events 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 TrackerEndcapDigitizationDriverTest extends TestCase
+{
+    public TrackerEndcapDigitizationDriverTest(String testName)
+    {
+        super(testName);
+    }
+    
+    public static Test suite()
+    {
+        return new TestSuite(TrackerEndcapDigitizationDriverTest.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_SLIC-v2r3p10_geant4-v9r0p1_LCPhys_SiTrackerEndcapTest00.slcio");
+        URL url = new URL("http://www.lcsim.org/test/lcio/pythiaZPoleuds-0-1000_SLIC-v2r4p2_geant4-v9r1p0_LCPhys_SiTrackerTest01.slcio");
+        
+        FileCache cache = new FileCache();
+        File file = cache.getCachedFile(url);
+        
+        LCSimLoop loop = new LCSimLoop();
+        loop.setLCIORecordSource(file);
+        loop.add( new SimTrackerHitIdentifierReadoutDriver(new String[] {"SiTrackerEndcap_RO"} ) );
+        loop.add( new TestDriver() );
+        loop.loop(10, null);
+        loop.dispose();
+    }
+    
+    class TestDriver
+            extends Driver
+    {
+        protected void process(EventHeader header)
+        {
+            
+//            System.out.println("\n"+"Processing endcap event: ");
+            
+            boolean found_hits = false;
+            
+            // Setup simulation and readout
+            SiSensorSim si_simulation = new CDFSiSensorSim();
+            ReadoutChip kpix = new Kpix();
+            
+            IDetectorElement tkr = header.getDetector().getSubdetector("SiTrackerEndcap").getDetectorElement();
+            
+            List<SiSensor> sensors = tkr.findDescendants(SiSensor.class);
+            
+            for ( IDetectorElement sensorDE : sensors)
+            {
+                //System.out.println("casting to sensor -> " + sensorDE.getName());
+                
+                SiSensor sensor = (SiSensor)sensorDE;
+                
+                IReadout ro = sensor.getReadout();
+                List<SimTrackerHit> hits = ro.getHits(SimTrackerHit.class);
+                
+                if (!hits.isEmpty())
+                {
+                    
+//                    System.out.println("\n"+"Simulating sensor: "+sensor.getName());
+                    
+                    List<RawTrackerHit> raw_hits = new ArrayList<RawTrackerHit>();
+                    
+                    si_simulation.setSensor(sensor);
+                    Map<ChargeCarrier,SiElectrodeDataCollection> electrode_data = si_simulation.computeElectrodeData();
+                    
+                    for (ChargeCarrier carrier : ChargeCarrier.values())
+                    {
+                        if (sensor.hasElectrodesOnSide(carrier))
+                        {
+                            
+//                            System.out.println("Readout data: "+electrode_data.get(carrier).getChargeMap());
+                            assertTrue(electrode_data.get(carrier).getChargeMap().size() > 0);
+                            
+                            SortedMap<Integer,List<Integer>> digitized_hits = kpix.readout(electrode_data.get(carrier),sensor.getReadoutElectrodes(carrier));
+                            
+//                            System.out.println("# digitized hits: "+digitized_hits.size());
+//                            assertTrue(digitized_hits.size() > 0);  // not a completely safe assertion due to thresholds.
+                            
+                            // Create RawTrackerHits
+                            
+                            for (Integer readout_cell : digitized_hits.keySet())
+                            {
+                                int time = 0;
+                                long cell_id = sensor.makeStripId(readout_cell,carrier.charge()).getValue();
+                                short[] adc_values = {digitized_hits.get(readout_cell).get(0).shortValue(),digitized_hits.get(readout_cell).get(1).shortValue()};
+                                
+                                Set<SimTrackerHit> simulated_hits = electrode_data.get(carrier).get(readout_cell).getSimulatedHits();
+                                IDetectorElement detector_element = sensor;
+                                
+                                RawTrackerHit raw_hit = new BaseRawTrackerHit(time,cell_id,adc_values,new ArrayList<SimTrackerHit>(simulated_hits),detector_element);
+                                raw_hits.add(raw_hit);
+                                found_hits = true;
+                                
+//                                System.out.println("ADC data for cell "+readout_cell+": "+
+//                                        raw_hit.getADCValues()[0]+", "+raw_hit.getADCValues()[1]);
+                                
+                                double signal = kpix.decodeCharge(raw_hit);
+//                                System.out.println("Readout data for cell "+readout_cell+": "+signal);
+                                
+                            }
+                            
+                        }
+                    }
+                    
+                    // Clear simulation and add RawTrackerHits to event
+                    si_simulation.clearReadout();
+                    header.put("RawEndcapTrackerHits",raw_hits,RawTrackerHit.class,0,"Kpix");
+                }
+            }
+            
+        }
+        
+    }
+
+}
+

lcsim/sandbox
TrackingVolumeTest.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- TrackingVolumeTest.java	31 Aug 2009 18:21:33 -0000	1.1
+++ TrackingVolumeTest.java	31 Aug 2009 18:36:48 -0000	1.2
@@ -1,9 +1,10 @@
-package org.lcsim;
+package org.lcsim.detector.tracker.readout;
 
 import junit.framework.TestCase;
 
 import java.io.File;
 import java.net.URL;
+import org.lcsim.detector.driver.*;
 
 import org.lcsim.util.Driver;
 import org.lcsim.util.loop.LCSimLoop;
@@ -20,7 +21,7 @@
  * Shows how to access the detector's tracking volume from an {@link org.lcsim.util.Driver}.
  * 
  * @author Jeremy McCormick
- * @version $Id: TrackingVolumeTest.java,v 1.1 2009/08/31 18:21:33 jeremy Exp $
+ * @version $Id: TrackingVolumeTest.java,v 1.2 2009/08/31 18:36:48 jeremy Exp $
  */
 public class TrackingVolumeTest
 extends TestCase
@@ -101,4 +102,4 @@
 			System.out.println(buff.toString());
 		}				
 	}
-}
+}
\ No newline at end of file
CVSspam 0.2.8