lcsim/src/org/lcsim/contrib/SiStripSim
diff -N SiliconReadoutDriver.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SiliconReadoutDriver.java 20 Apr 2007 06:32:23 -0000 1.1
@@ -0,0 +1,115 @@
+/*
+ * SiliconReadoutDriver.java
+ *
+ * Created on April 19, 2007, 4:28 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.lcsim.contrib.SiStripSim;
+
+import org.lcsim.util.Driver;
+import org.lcsim.event.EventHeader;
+import org.lcsim.geometry.Detector;
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.ITransform3D;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.event.EventHeader.LCMetaData;
+import org.lcsim.geometry.IDDecoder;
+import org.lcsim.util.aida.AIDA;
+import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.detector.tracker.silicon.TrackSegment;
+
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.VecOp;
+
+import java.util.List;
+import java.util.Set;
+import java.util.HashSet;
+
+/**
+ *
+ * @author tknelson
+ */
+public class SiliconReadoutDriver extends Driver
+{
+
+ // Fields
+ private String _input_hit_collection = "TkrBarrHits";
+ private List<SimTrackerHit> _hits = null;
+ private LCMetaData _metadata = null;
+ private IDDecoder _decoder = null;
+ private AIDA _aida = AIDA.defaultInstance();
+ private boolean _make_histograms = false;
+
+ /** Creates a new instance of SiliconReadoutDriver */
+ public SiliconReadoutDriver()
+ {
+ }
+
+
+ protected void process(EventHeader event)
+ {
+ // Get detector and print out tracking subdetector names
+ Detector detector = event.getDetector();
+
+ // Get the barrel tracker attributes
+ IDetectorElement barrel = detector.getSubdetector("TrackerBarrel").getDetectorElement();
+
+ // Get the SimTrackerHits and metadata
+ _hits = event.getSimTrackerHits(_input_hit_collection);
+// _metadata = event.getMetaData(_hits);
+// _decoder = _metadata.getIDDecoder();
+
+ // Print out number of hits
+ if (_make_histograms) _aida.cloud1D("nHitsTotal").fill(_hits.size());
+
+ // set of sensors with hits
+ Set<SiSensor> hit_sensors = new HashSet<SiSensor>();
+
+ for (SimTrackerHit hit : _hits)
+ {
+// _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)barrel.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
+ for (SiSensor sensor : hit_sensors)
+ {
+ // deposit charge
+ sensor.depositCharge();
+
+ // readout
+// List<RawTrackerHit> raw_hits = readout_chip.readout(sensor);
+
+
+ }
+
+
+
+ }
+
+
+}