Print

Print


Commit in lcsim/test/org/lcsim/detector/driver on MAIN
TrackerEndcapDigitizationDriverTest.java+159added 1.1
JM: first working version (work in progress)

lcsim/test/org/lcsim/detector/driver
TrackerEndcapDigitizationDriverTest.java added at 1.1
diff -N TrackerEndcapDigitizationDriverTest.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ TrackerEndcapDigitizationDriverTest.java	6 Dec 2007 22:29:59 -0000	1.1
@@ -0,0 +1,159 @@
+package org.lcsim.detector.driver;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.SortedMap;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+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.IDetectorElementContainer;
+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;
+
+/**
+ * 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
+	{
+
+		System.out.println("\n"+"STARTING!!!!!!!!!!!!!!!!!!!!!!!!!!! ");
+
+
+		URL url = new URL("http://www.lcsim.org/test/lcio/mu-_10GeV_SLIC-v2r3p10_geant4-v9r0p1_LCPhys_SiTrackerEndcapTest00.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.simulate(sensor);
+
+					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(si_simulation.getReadoutData(carrier),sensor.getReadoutElectrodes(carrier));
+
+							// 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 = si_simulation.getReadoutData(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");
+				}
+			}
+			
+			assertTrue(found_hits);
+
+		}
+
+
+
+	}
+}
+
CVSspam 0.2.8