8 added + 1 removed + 4 modified, total 13 files
lcsim/test/org/lcsim/contrib/tracking
diff -u -r1.9 -r1.10
--- TrackerHitCheaterTest.java 30 Nov 2007 01:03:45 -0000 1.9
+++ TrackerHitCheaterTest.java 24 Dec 2007 14:38:07 -0000 1.10
@@ -61,14 +61,14 @@
private int nevents=0;
protected void process(EventHeader event)
{
- int nhits=0;
+// int nhits=0;
// Get the SimTrackerHits
List<SimTrackerHit> simulated_hits = event.get(SimTrackerHit.class, "SiTrackerBarrel_RO");
- System.out.println("Number of input SimTrackerHits: "+simulated_hits.size());
+// System.out.println("Number of input SimTrackerHits: "+simulated_hits.size());
List<TrackerHit> tracker_hits = _hit_cheater.makeTrackerHits(simulated_hits);
- System.out.println("Number of output TrackerHits: "+tracker_hits.size());
+// System.out.println("Number of output TrackerHits: "+tracker_hits.size());
if (nevents == 0)
{
@@ -81,18 +81,18 @@
assertTrue("Missing MCParticles.",((BaseTrackerHitMC)hit).mcParticles().size() > 0);
assertTrue("Missing SimTrackerHits.",((BaseTrackerHitMC)hit).getSimHits().size() > 0);
- if (nhits<2)
- {
- System.out.println("Location of output TrackerHit: ["+hit.getPosition()[0]+
- ","+hit.getPosition()[1]+
- ","+hit.getPosition()[2]+"]");
- System.out.println("Number of MCParticles contributing: "+((BaseTrackerHitMC)hit).mcParticles().size());
- System.out.println("Number of SimTrackerHits contributing: "+((BaseTrackerHitMC)hit).getSimHits().size());
- }
- else if (nhits == 2) {
- System.out.println("[SNIP]");
- }
- ++nhits;
+// if (nhits<2)
+// {
+// System.out.println("Location of output TrackerHit: ["+hit.getPosition()[0]+
+// ","+hit.getPosition()[1]+
+// ","+hit.getPosition()[2]+"]");
+// System.out.println("Number of MCParticles contributing: "+((BaseTrackerHitMC)hit).mcParticles().size());
+// System.out.println("Number of SimTrackerHits contributing: "+((BaseTrackerHitMC)hit).getSimHits().size());
+// }
+// else if (nhits == 2) {
+// System.out.println("[SNIP]");
+// }
+// ++nhits;
}
// event.put("CheatedTrackerHits",trackerhits,BaseTrackerHitMC.class,0);
lcsim/src/org/lcsim/contrib/SiStripSim
diff -N TrackerHitType.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ TrackerHitType.java 24 Dec 2007 14:38:11 -0000 1.1
@@ -0,0 +1,99 @@
+/*
+ * TrackerHitType.java
+ *
+ * Created on December 4, 2007, 11:14 AM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.lcsim.contrib.SiStripSim;
+
+import org.lcsim.detector.tracker.silicon.SiSensor;
+
+/**
+ *
+ * @author tknelson
+ */
+public class TrackerHitType
+{
+
+ private CoordinateSystem _coordinate_system;
+ private MeasurementType _measurement_type;
+
+ public enum CoordinateSystem
+ {
+ GLOBAL,
+ SENSOR,
+ UNKNOWN;
+ }
+
+ public enum MeasurementType
+ {
+ STRIP_1D,
+ STRIP_2D,
+ PIXEL;
+ }
+
+ /** Creates a new instance of TrackerHitType */
+ public TrackerHitType(CoordinateSystem coordinate_system, MeasurementType measurement_type)
+ {
+ _coordinate_system = coordinate_system;
+ _measurement_type = measurement_type;
+ }
+
+ public CoordinateSystem getCoordinateSystem()
+ {
+ return _coordinate_system;
+ }
+
+ public MeasurementType getMeasurementType()
+ {
+ return _measurement_type;
+ }
+
+ private void setCoordinateSystem(CoordinateSystem coordinate_system)
+ {
+ _coordinate_system = coordinate_system;
+ }
+
+ private void setMeasurementType(MeasurementType measurement_type)
+ {
+ _measurement_type = measurement_type;
+ }
+
+ public static TrackerHitType decoded(int encoded_type)
+ {
+ return Decoder.decoded(encoded_type);
+ }
+
+ public static int encoded(TrackerHitType decoded_type)
+ {
+ return Decoder.encoded(decoded_type);
+ }
+
+ private static class Decoder
+ {
+
+ private static TrackerHitType decoded(int raw_type)
+ {
+ int measurement_type_index = raw_type & 0x3 ;
+ int coordinate_system_index = (raw_type & 0x4) >> 2;
+
+ MeasurementType measurement_type = MeasurementType.values()[measurement_type_index];
+ CoordinateSystem coordinate_system = CoordinateSystem.values()[coordinate_system_index];
+
+ return new TrackerHitType(coordinate_system,measurement_type);
+ }
+
+ private static int encoded(TrackerHitType type)
+ {
+ return (type.getCoordinateSystem().ordinal()<<2) | type.getMeasurementType().ordinal();
+ }
+
+ }
+
+
+
+
+}
lcsim/src/org/lcsim/contrib/SiStripSim
diff -N BaseTrackerHit.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ BaseTrackerHit.java 24 Dec 2007 14:38:11 -0000 1.1
@@ -0,0 +1,290 @@
+/*
+ * BaseTrackerHit.java
+ *
+ * Created on December 4, 2007, 11:05 AM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.lcsim.contrib.SiStripSim;
+
+import hep.physics.matrix.SymmetricMatrix;
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.ITransform3D;
+import org.lcsim.detector.Transform3D;
+import org.lcsim.detector.identifier.IIdentifierHelper;
+import org.lcsim.event.MCParticle;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.event.TrackerHit;
+
+/**
+ *
+ * @author tknelson
+ */
+public class BaseTrackerHit implements TrackerHit
+{
+
+ // Elements of TrackerHit interface
+ private Hep3Vector _position_vector;
+ private SymmetricMatrix _covariance_matrix;
+ private double _energy;
+ private double _time;
+ private List<RawTrackerHit> _raw_hits;
+ private TrackerHitType _decoded_type;
+
+ private ITransform3D _local_to_global; // Key element that goes beyond TrackerHit in functionality
+
+ // Cached derived quantities
+ private IIdentifierHelper _identifier_helper;
+ private IDetectorElement _sensor;
+ private Set<SimTrackerHit> _simulated_hits;
+ private Set<MCParticle> _mc_particles;
+ private TrackerHitType.CoordinateSystem _coordinate_system;
+ private TrackerHitType.MeasurementType _measurement_type;
+
+
+ /** Creates a new instance of BaseTrackerHit */
+
+ // Basic constructor
+ public BaseTrackerHit(Hep3Vector position_vector, SymmetricMatrix covariance_matrix, double energy, double time, List<RawTrackerHit> raw_hits, TrackerHitType decoded_type)
+ {
+ _position_vector = position_vector;
+ _covariance_matrix = covariance_matrix;
+ _energy = energy;
+ _time = time;
+ _raw_hits = raw_hits;
+ _decoded_type = decoded_type;
+
+ if (getCoordinateSystem() == TrackerHitType.CoordinateSystem.GLOBAL)
+ {
+ _local_to_global = new Transform3D();
+ }
+ else if (getCoordinateSystem() == TrackerHitType.CoordinateSystem.SENSOR)
+ {
+ _local_to_global = getSensor().getGeometry().getLocalToGlobal();
+ }
+ else
+ {
+ throw new RuntimeException("Cannot instantiate a BaseTrackerHit object with unknown coordinates!");
+ }
+ }
+
+ // Construct from TrackerHit
+ public BaseTrackerHit(TrackerHit hit)
+ {
+ this(
+ new BasicHep3Vector(hit.getPosition()[0],hit.getPosition()[1],hit.getPosition()[2]),
+ new SymmetricMatrix( 3, hit.getCovMatrix(), true),
+ hit.getdEdx(),
+ hit.getTime(),
+ hit.getRawHits(),
+ TrackerHitType.decoded(hit.getType())
+ );
+ }
+
+ // Construct from TrackerHit and specified coordinate system
+ public BaseTrackerHit(TrackerHit hit, TrackerHitType.CoordinateSystem coordinate_system)
+ {
+ this(hit);
+
+ // Change coordinates of hit
+ ITransform3D global_to_local = getGlobalToHit(coordinate_system);
+ ITransform3D hit_to_local = Transform3D.multiply(global_to_local,_local_to_global); // transformation to apply
+
+ _position_vector = hit_to_local.transformed(_position_vector);
+ _covariance_matrix = hit_to_local.transformed(_covariance_matrix);
+ _local_to_global = global_to_local.inverse(); // new coordinates of hit
+ _decoded_type = new TrackerHitType(coordinate_system,getMeasurementType()); // change coordinate system
+ }
+
+ // produce transformed copies of current hit
+ //===========================================
+
+ // This can put any BaseTrackerHit back into standard coordinates
+ public TrackerHit getTransformedHit(TrackerHitType.CoordinateSystem coordinate_system)
+ {
+ // Change coordinates of hit
+ ITransform3D global_to_local = getGlobalToHit(coordinate_system);
+ ITransform3D hit_to_local = Transform3D.multiply(global_to_local,_local_to_global); // transformation to apply
+
+ Hep3Vector position_vector = hit_to_local.transformed(_position_vector);
+ SymmetricMatrix covariance_matrix = hit_to_local.transformed(_covariance_matrix);
+ double energy = getdEdx();
+ double time = getTime();
+ List<RawTrackerHit> raw_hits = getRawHits();
+ TrackerHitType decoded_type = new TrackerHitType(coordinate_system,getMeasurementType()); // change coordinate system
+
+ return new BaseTrackerHit(position_vector,covariance_matrix,energy,time,raw_hits,decoded_type);
+ }
+
+ // This can put any BaseTrackerHit into any coordinates. Such hits are not persistable
+ public TrackerHit getTransformedHit(ITransform3D global_to_local)
+ {
+ // Change coordinates of hit
+ ITransform3D hit_to_local = Transform3D.multiply(global_to_local,_local_to_global); // transformation to apply
+
+ Hep3Vector position_vector = hit_to_local.transformed(_position_vector);
+ SymmetricMatrix covariance_matrix = hit_to_local.transformed(_covariance_matrix);
+ double energy = getdEdx();
+ double time = getTime();
+ List<RawTrackerHit> raw_hits = getRawHits();
+
+ ITransform3D local_to_global = global_to_local.inverse(); // new coordinates of hit
+
+ TrackerHitType dummy_type = new TrackerHitType(TrackerHitType.CoordinateSystem.GLOBAL,getMeasurementType()); // dummy type to allow construciton
+ TrackerHitType decoded_type = new TrackerHitType(TrackerHitType.CoordinateSystem.UNKNOWN,getMeasurementType()); // real coordinate system is unknown
+
+ // Make a new BaseTrackerHit with dummy CoordinateSystem
+ BaseTrackerHit new_hit = new BaseTrackerHit(position_vector,covariance_matrix,energy,time,raw_hits,dummy_type);
+
+ // Set correct information about coordinate system
+ new_hit._decoded_type = decoded_type;
+ new_hit._local_to_global = local_to_global;
+
+ return new_hit;
+ }
+
+ // TrackerHit interface
+ //======================
+ public double[] getPosition()
+ {
+ return _position_vector.v();
+ }
+
+ public double[] getCovMatrix()
+ {
+ return ((SymmetricMatrix)_covariance_matrix).asPackedArray(true);
+ }
+
+ public double getdEdx()
+ {
+ return _energy;
+ }
+
+ public double getTime()
+ {
+ return _time;
+ }
+
+ public List<RawTrackerHit> getRawHits()
+ {
+ return _raw_hits;
+ }
+
+ public int getType()
+ {
+ return TrackerHitType.encoded(_decoded_type);
+ }
+
+ // More refined output types for hit information
+ public Hep3Vector getPositionAsVector()
+ {
+ return _position_vector;
+ }
+
+ public SymmetricMatrix getCovarianceAsMatrix()
+ {
+ return _covariance_matrix;
+ }
+
+
+ // Additional information for hits
+ //=================================
+ public boolean isPersistable()
+ {
+ return (this.getCoordinateSystem() != TrackerHitType.CoordinateSystem.UNKNOWN);
+ }
+
+ public ITransform3D getLocalToGlobal()
+ {
+ return _local_to_global;
+ }
+
+ public TrackerHitType.CoordinateSystem getCoordinateSystem()
+ {
+ if (_coordinate_system == null)
+ {
+ _coordinate_system = _decoded_type.getCoordinateSystem();
+ }
+ return _coordinate_system;
+ }
+
+ public TrackerHitType.MeasurementType getMeasurementType()
+ {
+ if (_measurement_type == null)
+ {
+ _measurement_type = _decoded_type.getMeasurementType();
+ }
+ return _measurement_type;
+ }
+
+ public Set<SimTrackerHit> getSimHits()
+ {
+ if (_simulated_hits == null)
+ {
+ _simulated_hits = new HashSet<SimTrackerHit>();
+ for (RawTrackerHit raw_hit : _raw_hits)
+ {
+ _simulated_hits.addAll(raw_hit.getSimTrackerHit());
+ }
+ }
+ return _simulated_hits;
+ }
+
+ public Set<MCParticle> getMCParticles()
+ {
+ if (_mc_particles == null)
+ {
+ _mc_particles = new HashSet<MCParticle>();
+ for (SimTrackerHit sim_hit : getSimHits())
+ {
+ _mc_particles.add(sim_hit.getMCParticle());
+ }
+ }
+ return _mc_particles;
+ }
+
+ public IDetectorElement getSensor()
+ {
+ if (_sensor == null)
+ {
+ _sensor = this.getRawHits().get(0).getDetectorElement();
+ }
+ return _sensor;
+ }
+
+ public IIdentifierHelper getIdentifierHelper()
+ {
+ if (_identifier_helper == null)
+ {
+ _identifier_helper = getRawHits().get(0).getIdentifierHelper();
+ }
+ return _identifier_helper;
+ }
+
+ // Private - Get transform for hit given coordinate system type
+ private ITransform3D getGlobalToHit(TrackerHitType.CoordinateSystem coordinate_system)
+ {
+ if (coordinate_system == TrackerHitType.CoordinateSystem.GLOBAL)
+ {
+ return new Transform3D();
+ }
+ else if (coordinate_system == TrackerHitType.CoordinateSystem.SENSOR)
+ {
+ return ((List<RawTrackerHit>)getRawHits()).get(0).getDetectorElement().getGeometry().getGlobalToLocal();
+ }
+ else
+ {
+ throw new RuntimeException("Cannot determine Transform3D to UNKNOWN coordinates!");
+ }
+ }
+
+}
+
lcsim/src/org/lcsim/contrib/SiStripSim
diff -N SiTrackerHitPixel.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SiTrackerHitPixel.java 24 Dec 2007 14:38:11 -0000 1.1
@@ -0,0 +1,52 @@
+/*
+ * SiTrackerHitPixel.java
+ *
+ * Created on December 12, 2007, 10:58 AM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.lcsim.contrib.SiStripSim;
+
+import hep.physics.matrix.SymmetricMatrix;
+import hep.physics.vec.Hep3Vector;
+import java.util.List;
+import org.lcsim.detector.ITransform3D;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.TrackerHit;
+
+/**
+ *
+ * @author tknelson
+ */
+public class SiTrackerHitPixel extends SiTrackerHit
+{
+
+ /** Creates a new instance of SiTrackerHitPixel */
+ public SiTrackerHitPixel(Hep3Vector position_vector, SymmetricMatrix covariance_matrix, double energy, double time, List<RawTrackerHit> raw_hits, TrackerHitType decoded_type)
+ {
+ super(position_vector, covariance_matrix, energy, time, raw_hits, decoded_type);
+ }
+
+ public SiTrackerHitPixel(TrackerHit hit)
+ {
+ super(hit);
+ }
+
+ public SiTrackerHitPixel(TrackerHit hit, TrackerHitType.CoordinateSystem coordinate_system)
+ {
+ super(hit,coordinate_system);
+ }
+
+ public TrackerHit getTransformedHit(TrackerHitType.CoordinateSystem coordinate_system)
+ {
+ return new SiTrackerHitPixel(super.getTransformedHit(coordinate_system));
+ }
+
+ public TrackerHit getTransformedHit(ITransform3D global_to_local)
+ {
+ return new SiTrackerHitPixel(super.getTransformedHit(global_to_local));
+ }
+
+}
lcsim/src/org/lcsim/contrib/SiStripSim
diff -N SiTrackerHitStrip1D.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SiTrackerHitStrip1D.java 24 Dec 2007 14:38:11 -0000 1.1
@@ -0,0 +1,119 @@
+/*
+ * SiTrackerHitStrip1D.java
+ *
+ * Created on December 12, 2007, 10:56 AM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.lcsim.contrib.SiStripSim;
+
+import hep.physics.matrix.SymmetricMatrix;
+import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.VecOp;
+import java.util.List;
+import org.lcsim.detector.ITransform3D;
+import org.lcsim.detector.Transform3D;
+import org.lcsim.detector.solids.LineSegment3D;
+import org.lcsim.detector.solids.Point3D;
+import org.lcsim.detector.tracker.silicon.SiStrips;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.TrackerHit;
+
+/**
+ *
+ * @author tknelson
+ */
+public class SiTrackerHitStrip1D extends SiTrackerHit
+{
+ private Hep3Vector _measured_coordinate;
+ private Hep3Vector _unmeasured_coordinate;
+
+ private LineSegment3D _hit_segment;
+
+ /**
+ * Creates a new instance of SiTrackerHitStrip1D
+ */
+ public SiTrackerHitStrip1D(Hep3Vector position_vector, SymmetricMatrix covariance_matrix, double energy, double time, List<RawTrackerHit> raw_hits, TrackerHitType decoded_type)
+ {
+ super(position_vector, covariance_matrix, energy, time, raw_hits, decoded_type);
+ }
+
+ public SiTrackerHitStrip1D(TrackerHit hit)
+ {
+ super(hit);
+ }
+
+ public SiTrackerHitStrip1D(TrackerHit hit, TrackerHitType.CoordinateSystem coordinate_system)
+ {
+ super(hit,coordinate_system);
+ }
+
+ public TrackerHit getTransformedHit(TrackerHitType.CoordinateSystem coordinate_system)
+ {
+ return new SiTrackerHitStrip1D(super.getTransformedHit(coordinate_system));
+ }
+
+ public TrackerHit getTransformedHit(ITransform3D global_to_local)
+ {
+ return new SiTrackerHitStrip1D(super.getTransformedHit(global_to_local));
+ }
+
+ // Access information specific to 1D strip hits
+ public double getHitLength()
+ {
+ double hit_length = 0;
+ for (RawTrackerHit raw_hit : getRawHits())
+ {
+ hit_length = Math.max( hit_length,
+ ((SiStrips)getReadoutElectrodes()).
+ getStripLength(getIdentifierHelper().getStripValue(raw_hit.getIdentifier())) );
+
+// System.out.println("Strip length: "+((SiStrips)getReadoutElectrodes()).
+// getStripLength(getIdentifierHelper().getStripValue(raw_hit.getIdentifier())));
+ }
+// System.out.println(" Hit length: "+hit_length);
+
+ return hit_length;
+ }
+
+ public LineSegment3D getHitSegment()
+ {
+ if (_hit_segment == null)
+ {
+ Hep3Vector direction = getUnmeasuredCoordinate();
+ double length = getHitLength();
+ Point3D startpoint = new Point3D(VecOp.add(getPositionAsVector(),VecOp.mult(-length/2,direction)));
+ _hit_segment = new LineSegment3D(startpoint,direction,length);
+ }
+ return _hit_segment;
+ }
+
+ public Hep3Vector getMeasuredCoordinate()
+ {
+ if (_measured_coordinate == null)
+ {
+ ITransform3D electrodes_to_global = getReadoutElectrodes().getLocalToGlobal();
+ ITransform3D global_to_hit = getLocalToGlobal().inverse();
+ ITransform3D electrodes_to_hit = Transform3D.multiply(global_to_hit,electrodes_to_global);
+
+ _measured_coordinate = electrodes_to_hit.rotated(getReadoutElectrodes().getMeasuredCoordinate(0));
+ }
+ return _measured_coordinate;
+ }
+
+ public Hep3Vector getUnmeasuredCoordinate()
+ {
+ if (_unmeasured_coordinate == null)
+ {
+ ITransform3D electrodes_to_global = getReadoutElectrodes().getLocalToGlobal();
+ ITransform3D global_to_hit = getLocalToGlobal().inverse();
+ ITransform3D electrodes_to_hit = Transform3D.multiply(global_to_hit,electrodes_to_global);
+
+ _unmeasured_coordinate = electrodes_to_hit.rotated(getReadoutElectrodes().getUnmeasuredCoordinate(0));
+ }
+ return _unmeasured_coordinate;
+ }
+
+}
lcsim/src/org/lcsim/contrib/SiStripSim
diff -N SiTrackerHitStrip2D.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SiTrackerHitStrip2D.java 24 Dec 2007 14:38:11 -0000 1.1
@@ -0,0 +1,78 @@
+/*
+ * SiTrackerHitStrip2D.java
+ *
+ * Created on December 12, 2007, 10:56 AM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.lcsim.contrib.SiStripSim;
+
+import hep.physics.matrix.SymmetricMatrix;
+import hep.physics.vec.Hep3Vector;
+import java.util.List;
+import org.lcsim.detector.ITransform3D;
+import org.lcsim.event.MCParticle;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.TrackerHit;
+
+/**
+ *
+ * @author tknelson
+ */
+public class SiTrackerHitStrip2D extends SiTrackerHit
+{
+
+ List<SiTrackerHitStrip1D> _hits_1D;
+
+ /**
+ * Creates a new instance of SiTrackerHitStrip2D
+ */
+ public SiTrackerHitStrip2D(Hep3Vector position_vector, SymmetricMatrix covariance_matrix, double energy, double time, List<RawTrackerHit> raw_hits, TrackerHitType decoded_type)
+ {
+ super(position_vector, covariance_matrix, energy, time, raw_hits, decoded_type);
+ }
+
+ public SiTrackerHitStrip2D(TrackerHit hit)
+ {
+ super(hit);
+ }
+
+ public SiTrackerHitStrip2D(TrackerHit hit, TrackerHitType.CoordinateSystem coordinate_system)
+ {
+ super(hit,coordinate_system);
+ }
+
+ public TrackerHit getTransformedHit(TrackerHitType.CoordinateSystem coordinate_system)
+ {
+ return new SiTrackerHitStrip2D(super.getTransformedHit(coordinate_system));
+ }
+
+ public TrackerHit getTransformedHit(ITransform3D global_to_local)
+ {
+ return new SiTrackerHitStrip2D(super.getTransformedHit(global_to_local));
+ }
+
+ // Methods specific to 2d hits
+ public List<SiTrackerHitStrip1D> getHits1D()
+ {
+ // do this at creation time... need to synchronize coordinate system of 1D hits.
+ // I think the LCRelations needs to be dug up by the constructor. How do we find the right relations?
+ if (_hits_1D == null)
+ {
+ // find LCRelations?
+ }
+ return _hits_1D;
+ }
+
+ public boolean isGhost()
+ {
+ for (MCParticle particle1 : _hits_1D.get(0).getMCParticles())
+ {
+ if (_hits_1D.get(1).getMCParticles().contains(particle1)) return true;
+ }
+ return false;
+ }
+
+}
lcsim/src/org/lcsim/contrib/SiStripSim
diff -N SiTrackerHit.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SiTrackerHit.java 24 Dec 2007 14:38:12 -0000 1.1
@@ -0,0 +1,81 @@
+/*
+ * SiTrackerHit.java
+ *
+ * Created on November 19, 2007, 11:34 AM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.lcsim.contrib.SiStripSim;
+
+import hep.physics.matrix.SymmetricMatrix;
+import hep.physics.vec.Hep3Vector;
+import java.util.List;
+import org.lcsim.detector.ITransform3D;
+import org.lcsim.detector.tracker.silicon.ChargeCarrier;
+import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.detector.tracker.silicon.SiSensorElectrodes;
+import org.lcsim.detector.tracker.silicon.SiTrackerIdentifierHelper;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.TrackerHit;
+
+/**
+ *
+ * @author tknelson
+ */
+public class SiTrackerHit extends BaseTrackerHit
+{
+
+ // Cached derived quantities
+ private SiSensorElectrodes _electrodes;
+
+ /** Creates a new instance of SiTrackerHit */
+ public SiTrackerHit(Hep3Vector position_vector, SymmetricMatrix covariance_matrix, double energy, double time, List<RawTrackerHit> raw_hits, TrackerHitType decoded_type)
+ {
+ super(position_vector, covariance_matrix, energy, time, raw_hits, decoded_type);
+ }
+
+ public SiTrackerHit(TrackerHit hit)
+ {
+ super(hit);
+ }
+
+ public SiTrackerHit(TrackerHit hit, TrackerHitType.CoordinateSystem coordinate_system)
+ {
+ super(hit,coordinate_system);
+ }
+
+ public TrackerHit getTransformedHit(TrackerHitType.CoordinateSystem coordinate_system)
+ {
+ return new SiTrackerHit(super.getTransformedHit(coordinate_system));
+ }
+
+ public TrackerHit getTransformedHit(ITransform3D global_to_local)
+ {
+ return new SiTrackerHit(super.getTransformedHit(global_to_local));
+ }
+
+ // Additional information
+ public SiSensor getSensor()
+ {
+ return (SiSensor)super.getSensor();
+ }
+
+ public SiSensorElectrodes getReadoutElectrodes()
+ {
+ if (_electrodes == null)
+ {
+ RawTrackerHit raw_hit = this.getRawHits().get(0);
+ SiTrackerIdentifierHelper id_helper = getIdentifierHelper();
+ _electrodes = getSensor().getReadoutElectrodes(ChargeCarrier.getCarrier(id_helper.getSideValue(raw_hit.getIdentifier())));
+ }
+ return _electrodes;
+ }
+
+ public SiTrackerIdentifierHelper getIdentifierHelper()
+ {
+ return (SiTrackerIdentifierHelper)super.getIdentifierHelper();
+ }
+
+}
lcsim/src/org/lcsim/contrib/SiStripSim
diff -u -r1.8 -r1.9
--- StripClusterMaker.java 11 Dec 2007 18:51:07 -0000 1.8
+++ StripClusterMaker.java 24 Dec 2007 14:38:11 -0000 1.9
@@ -32,7 +32,6 @@
import org.lcsim.detector.tracker.silicon.SiSensorElectrodes;
import org.lcsim.detector.tracker.silicon.SiStrips;
import org.lcsim.event.SimTrackerHit;
-import org.lcsim.event.base.BaseTrackerHitMC;
/**
*
@@ -76,8 +75,8 @@
// Sort RawTrackerHits by electrodes
for (RawTrackerHit raw_hit : raw_hits)
{
- // FIXME: This doesn't need to be inside a loop if all the hits have
- // the same helper.
+ // FIXME: This doesn't need to be inside a loop if all the hits have
+ // the same helper.
int strip_field = raw_hit.getIdentifierHelper().getFieldIndex("strip");
int side_field = raw_hit.getIdentifierHelper().getFieldIndex("side");
@@ -181,17 +180,29 @@
private TrackerHit makeTrackerHit(List<RawTrackerHit> cluster, SiSensorElectrodes electrodes)
{
- double[] position = getPosition(cluster,electrodes);
+ Hep3Vector position = getPosition(cluster,electrodes);
SymmetricMatrix covariance = getCovariance(cluster,electrodes);
double time = getTime(cluster);
double energy = getEnergy(cluster);
- int type = 0;
+ TrackerHitType type = new TrackerHitType(TrackerHitType.CoordinateSystem.GLOBAL,TrackerHitType.MeasurementType.STRIP_1D);
- BaseTrackerHitMC hit = new BaseTrackerHitMC(position, covariance.asPackedArray(true), time, energy, type, getSimulatedHits(cluster));
- hit.addRawTrackerHits(cluster);
+ TrackerHit hit = new SiTrackerHitStrip1D(position, covariance, energy, time, cluster, type);
return hit;
}
+// private TrackerHit makeTrackerHit(List<RawTrackerHit> cluster, SiSensorElectrodes electrodes)
+// {
+// double[] position = getPosition(cluster,electrodes);
+// SymmetricMatrix covariance = getCovariance(cluster,electrodes);
+// double time = getTime(cluster);
+// double energy = getEnergy(cluster);
+// int type = 0;
+//
+// BaseTrackerHitMC hit = new BaseTrackerHitMC(position, covariance.asPackedArray(true), time, energy, type, getSimulatedHits(cluster));
+// hit.addRawTrackerHits(cluster);
+// return hit;
+// }
+
private List<SimTrackerHit> getSimulatedHits(List<RawTrackerHit> cluster)
{
Set<SimTrackerHit> simulated_hits = new HashSet<SimTrackerHit>();
@@ -202,7 +213,7 @@
return new ArrayList<SimTrackerHit>(simulated_hits);
}
- private double[] getPosition(List<RawTrackerHit> cluster, SiSensorElectrodes electrodes)
+ private Hep3Vector getPosition(List<RawTrackerHit> cluster, SiSensorElectrodes electrodes)
{
double total_charge = 0;
Hep3Vector position = new BasicHep3Vector(0,0,0);
@@ -213,14 +224,24 @@
double signal = _readout_chip.decodeCharge(hit);
total_charge += signal;
- position = VecOp.add(position,VecOp.mult(signal,((SiStrips)electrodes).getStripCenter(_strip_map.get(hit))));
+ position = VecOp.add(position,VecOp.mult(signal,((SiStrips)electrodes).getStripCenter(strip_number)));
}
position = VecOp.mult(1/total_charge,position);
+ // Put position in sensor coordinates
+ electrodes.getParentToLocal().inverse().transform(position);
+
+// System.out.println("Position \n"+position);
+
+ // Swim position back through lorentz drift direction to midpoint between bias surfaces
_simulation.setSensor((SiSensor)electrodes.getDetectorElement());
_simulation.lorentzCorrect(position,electrodes.getChargeCarrier());
- return electrodes.getLocalToGlobal().transformed(position).v();
+// System.out.println("Lorentz corrected position \n"+position);
+
+ // return position in global coordinates
+ return ((SiSensor)electrodes.getDetectorElement()).getGeometry().getLocalToGlobal().transformed(position);
+// return electrodes.getLocalToGlobal().transformed(position);
}
private double getTime(List<RawTrackerHit> cluster)
@@ -244,26 +265,77 @@
private SymmetricMatrix getCovariance(List<RawTrackerHit> cluster, SiSensorElectrodes electrodes)
{
- // FIXME: very raw hack
+ SymmetricMatrix covariance = new SymmetricMatrix(3);
+ covariance.setElement( 0, 0, Math.pow( getMeasuredResolution(cluster, electrodes), 2 ) );
+ covariance.setElement( 1, 1, Math.pow( getUnmeasuredResolution(cluster, electrodes) ,2 ) );
+ covariance.setElement( 2, 2, 0.0);
- BasicHep3Matrix covariance = new BasicHep3Matrix();
- covariance.setElement(0,0,Math.pow(0.007,2));
- covariance.setElement(1,1,Math.pow(93.031/Math.sqrt(12),2));
- covariance.setElement(2,2,0.0);
-
- BasicHep3Matrix rotation_matrix = (BasicHep3Matrix)electrodes.getLocalToGlobal().getRotation().getRotationMatrix();
- BasicHep3Matrix rotation_matrix_transposed = new BasicHep3Matrix(rotation_matrix);
- rotation_matrix_transposed.transpose();
-
-// System.out.println("Rotation matrix: \n"+rotation_matrix);
-// System.out.println("Rotation matrix transposed: \n"+rotation_matrix_transposed);
-// System.out.println("Local covariance matrix: \n"+covariance);
-
- BasicHep3Matrix covariance_global = (BasicHep3Matrix)VecOp.mult(rotation_matrix,VecOp.mult(covariance,rotation_matrix_transposed));
+ SymmetricMatrix covariance_global = electrodes.getLocalToGlobal().transformed(covariance);
// System.out.println("Global covariance matrix: \n"+covariance_global);
-
- return new SymmetricMatrix((Matrix)covariance_global);
+
+ return covariance_global;
+
+// BasicHep3Matrix rotation_matrix = (BasicHep3Matrix)electrodes.getLocalToGlobal().getRotation().getRotationMatrix();
+// BasicHep3Matrix rotation_matrix_transposed = new BasicHep3Matrix(rotation_matrix);
+// rotation_matrix_transposed.transpose();
+//
+//// System.out.println("Rotation matrix: \n"+rotation_matrix);
+//// System.out.println("Rotation matrix transposed: \n"+rotation_matrix_transposed);
+//// System.out.println("Local covariance matrix: \n"+covariance);
+//
+// BasicHep3Matrix covariance_global = (BasicHep3Matrix)VecOp.mult(rotation_matrix,VecOp.mult(covariance,rotation_matrix_transposed));
+//
+//// System.out.println("Global covariance matrix: \n"+covariance_global);
+//
+// return new SymmetricMatrix((Matrix)covariance_global);
+ }
+
+ private double getMeasuredResolution(List<RawTrackerHit> cluster, SiSensorElectrodes electrodes) // should replace this by a ResolutionModel class that gives expected resolution. This could be a big job.
+ {
+ double measured_resolution;
+
+ double sense_pitch = ((SiSensor)electrodes.getDetectorElement()).
+ getSenseElectrodes(electrodes.getChargeCarrier()).getPitch(0);
+
+// double readout_pitch = electrodes.getPitch(0);
+// double noise = _readout_chip.getChannel(strip_number).computeNoise(electrodes.getCapacitance(strip_number));
+// double signal_expected = (0.000280/DopedSilicon.ENERGY_EHPAIR) *
+// ((SiSensor)electrodes.getDetectorElement()).getThickness(); // ~280 KeV/mm for thick Si sensors
+
+ if (cluster.size() == 1)
+ {
+ measured_resolution = sense_pitch / Math.sqrt(12);
+ }
+ else if (cluster.size() == 2)
+ {
+ measured_resolution = sense_pitch / 5;
+ }
+ else if (cluster.size() == 3)
+ {
+ measured_resolution = sense_pitch / 3;
+ }
+ else if (cluster.size() == 4)
+ {
+ measured_resolution = sense_pitch / 2;
+ }
+ else
+ {
+ measured_resolution = sense_pitch;
+ }
+
+ return measured_resolution;
+ }
+
+ private double getUnmeasuredResolution(List<RawTrackerHit> cluster, SiSensorElectrodes electrodes)
+ {
+ // Get length of longest strip in hit
+ double hit_length = 0;
+ for (RawTrackerHit hit : cluster)
+ {
+ hit_length = Math.max( hit_length, ((SiStrips)electrodes).getStripLength(_strip_map.get(hit)) );
+ }
+ return hit_length/Math.sqrt(12);
}
private double getEnergy(List<RawTrackerHit> cluster)
lcsim/test/org/lcsim/detector/driver
diff -N TrackerHitEndcapDriverTest.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ TrackerHitEndcapDriverTest.java 24 Dec 2007 14:38:12 -0000 1.1
@@ -0,0 +1,170 @@
+package org.lcsim.detector.driver;
+
+import hep.physics.matrix.SymmetricMatrix;
+import hep.physics.vec.BasicHep3Vector;
+import java.io.File;
+import java.net.URL;
+import java.util.List;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import org.lcsim.contrib.RobKutschke.TKNHits.TKNRawHitsDriverV1;
+import org.lcsim.contrib.SiStripSim.CDFSiSensorSim;
+import org.lcsim.contrib.SiStripSim.ClusterMaker;
+import org.lcsim.contrib.SiStripSim.Kpix;
+import org.lcsim.contrib.SiStripSim.ReadoutChip;
+import org.lcsim.contrib.SiStripSim.SiSensorSim;
+import org.lcsim.contrib.SiStripSim.SiTrackerHitStrip1D;
+import org.lcsim.contrib.SiStripSim.StripClusterMaker;
+import org.lcsim.contrib.SiStripSim.TrackerHitType;
+import org.lcsim.detector.identifier.ExpandedIdentifier;
+import org.lcsim.detector.identifier.IExpandedIdentifier;
+import org.lcsim.detector.tracker.silicon.DopedSilicon;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.MCParticle;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.util.Driver;
+import org.lcsim.util.cache.FileCache;
+import org.lcsim.util.loop.LCSimLoop;
+
+/**
+ * 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 TrackerHitEndcapDriverTest extends TestCase
+{
+ public TrackerHitEndcapDriverTest(String testName)
+ {
+ super(testName);
+ }
+
+ public static Test suite()
+ {
+ return new TestSuite(TrackerHitEndcapDriverTest.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");
+ 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 TKNRawHitsDriverV1(new String[]{"SiTrackerEndcap_RO"},new String[]{"RawEndcapTrackerHits"}));
+ loop.add( new TestDriver() );
+ loop.loop(10, null);
+ loop.dispose();
+ }
+
+ class TestDriver
+ extends Driver
+ {
+
+ ReadoutChip kpix = new Kpix();
+ SiSensorSim simulation = new CDFSiSensorSim();
+ ClusterMaker cluster_maker = new StripClusterMaker(kpix,simulation);
+
+ protected void process(EventHeader header)
+ {
+
+ // Create the list of RawTrackerHits and add it to the event.
+ super.process(header);
+
+ // Get the list of RawTrackerHits from the event.
+ List<RawTrackerHit> raw_hits = header.get(RawTrackerHit.class, "RawEndcapTrackerHits");
+ List<TrackerHit> hits = cluster_maker.makeClusters(raw_hits);
+
+ assertTrue(hits.size() > 0);
+
+// System.out.println("# hits in event: "+hits.size());
+// for (TrackerHit hit : hits)
+// {
+// SiTrackerHitStrip1D mc_hit = (SiTrackerHitStrip1D)hit;
+//
+// System.out.println(" Coordinate System: "+mc_hit.getCoordinateSystem());
+// System.out.println(" Measurement type: "+mc_hit.getMeasurementType());
+//
+// System.out.println(" # MCParticles contributing: "+mc_hit.getMCParticles().size());
+// for (MCParticle particle : mc_hit.getMCParticles())
+// {
+// System.out.println(" MCParticle type: "+particle.getPDGID());
+// System.out.println(" MCParticle momentum: "+particle.getMomentum());
+// }
+// System.out.println(" Charge in cluster (electrons): "+mc_hit.getdEdx()/DopedSilicon.ENERGY_EHPAIR);
+// System.out.println(" Time of hit: "+mc_hit.getTime());
+// System.out.println(" Position: "+new BasicHep3Vector(mc_hit.getPosition()));
+// System.out.println(" Covariance matrix: \n"+(new SymmetricMatrix(3,mc_hit.getCovMatrix(),true)));
+// System.out.println(" # SimTrackerHits contributing to cluster: "+mc_hit.getRawHits().size());
+// for (RawTrackerHit raw_hit : (List<RawTrackerHit>)mc_hit.getRawHits())
+// {
+// IExpandedIdentifier id = new ExpandedIdentifier(raw_hit.getExpandedIdentifier());
+// int strip_field = raw_hit.getIdentifierHelper().getFieldIndex("strip");
+// int strip_id = id.getValue(strip_field);
+//
+// System.out.println(" Strip number: "+strip_id);
+// System.out.println(" Charge: "+kpix.decodeCharge(raw_hit));
+// }
+// System.out.println(" Measured Coordinate: "+mc_hit.getMeasuredCoordinate());
+// System.out.println(" Unmeasured Coordinate: "+mc_hit.getUnmeasuredCoordinate());
+// System.out.println(" Hit Length: "+mc_hit.getHitLength());
+// System.out.println(" Hit Endpoints: "+mc_hit.getHitSegment().getStartPoint()+mc_hit.getHitSegment().getEndPoint());
+//
+// System.out.println(" Sensor name: "+mc_hit.getSensor().getName());
+// System.out.println(" Electrodes carrier: "+mc_hit.getReadoutElectrodes().getChargeCarrier());
+//
+// System.out.println("\n");
+// System.out.println("Transforming to sensor coordinates...");
+//
+// mc_hit = (SiTrackerHitStrip1D)mc_hit.getTransformedHit(TrackerHitType.CoordinateSystem.SENSOR);
+//
+// System.out.println(" Coordinate System: "+mc_hit.getCoordinateSystem());
+// System.out.println(" Measurement type: "+mc_hit.getMeasurementType());
+//
+// System.out.println(" # MCParticles contributing: "+mc_hit.getMCParticles().size());
+// for (MCParticle particle : mc_hit.getMCParticles())
+// {
+// System.out.println(" MCParticle type: "+particle.getPDGID());
+// System.out.println(" MCParticle momentum: "+particle.getMomentum());
+// }
+// System.out.println(" Charge in cluster (electrons): "+mc_hit.getdEdx()/DopedSilicon.ENERGY_EHPAIR);
+// System.out.println(" Time of hit: "+mc_hit.getTime());
+// System.out.println(" Position: "+new BasicHep3Vector(mc_hit.getPosition()));
+// System.out.println(" Covariance matrix: \n"+(new SymmetricMatrix(3,mc_hit.getCovMatrix(),true)));
+// System.out.println(" # SimTrackerHits contributing to cluster: "+mc_hit.getRawHits().size());
+// for (RawTrackerHit raw_hit : (List<RawTrackerHit>)mc_hit.getRawHits())
+// {
+// IExpandedIdentifier id = new ExpandedIdentifier(raw_hit.getExpandedIdentifier());
+// int strip_field = raw_hit.getIdentifierHelper().getFieldIndex("strip");
+// int strip_id = id.getValue(strip_field);
+//
+// System.out.println(" Strip number: "+strip_id);
+// System.out.println(" Charge: "+kpix.decodeCharge(raw_hit));
+// }
+// System.out.println(" Measured Coordinate: "+mc_hit.getMeasuredCoordinate());
+// System.out.println(" Unmeasured Coordinate: "+mc_hit.getUnmeasuredCoordinate());
+// System.out.println(" Hit Length: "+mc_hit.getHitLength());
+// System.out.println(" Hit Endpoints: "+mc_hit.getHitSegment().getStartPoint()+mc_hit.getHitSegment().getEndPoint());
+//
+// System.out.println(" Sensor name: "+mc_hit.getSensor().getName());
+// System.out.println(" Electrodes carrier: "+mc_hit.getReadoutElectrodes().getChargeCarrier());
+//
+// System.out.println("\n\n");
+//
+// }
+
+ }
+ }
+}
+
lcsim/test/org/lcsim/detector/driver
diff -N TrackerHitBarrelDriverTest.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ TrackerHitBarrelDriverTest.java 24 Dec 2007 14:38:12 -0000 1.1
@@ -0,0 +1,170 @@
+package org.lcsim.detector.driver;
+
+import hep.physics.matrix.SymmetricMatrix;
+import hep.physics.vec.BasicHep3Vector;
+import java.io.File;
+import java.net.URL;
+import java.util.List;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import org.lcsim.contrib.RobKutschke.TKNHits.TKNRawHitsDriverV1;
+import org.lcsim.contrib.SiStripSim.CDFSiSensorSim;
+import org.lcsim.contrib.SiStripSim.ClusterMaker;
+import org.lcsim.contrib.SiStripSim.Kpix;
+import org.lcsim.contrib.SiStripSim.ReadoutChip;
+import org.lcsim.contrib.SiStripSim.SiSensorSim;
+import org.lcsim.contrib.SiStripSim.SiTrackerHitStrip1D;
+import org.lcsim.contrib.SiStripSim.StripClusterMaker;
+import org.lcsim.contrib.SiStripSim.TrackerHitType;
+import org.lcsim.detector.identifier.ExpandedIdentifier;
+import org.lcsim.detector.identifier.IExpandedIdentifier;
+import org.lcsim.detector.tracker.silicon.DopedSilicon;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.MCParticle;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.util.Driver;
+import org.lcsim.util.cache.FileCache;
+import org.lcsim.util.loop.LCSimLoop;
+
+/**
+ * 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 TrackerHitBarrelDriverTest extends TestCase
+{
+ public TrackerHitBarrelDriverTest(String testName)
+ {
+ super(testName);
+ }
+
+ public static Test suite()
+ {
+ return new TestSuite(TrackerHitBarrelDriverTest.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 TKNRawHitsDriverV1(new String[]{"SiTrackerBarrel_RO"},new String[]{"RawBarrelTrackerHits"}));
+ loop.add( new TestDriver() );
+ loop.loop(10, null);
+ loop.dispose();
+ }
+
+ class TestDriver
+ extends Driver
+ {
+
+ ReadoutChip kpix = new Kpix();
+ SiSensorSim simulation = new CDFSiSensorSim();
+ ClusterMaker cluster_maker = new StripClusterMaker(kpix,simulation);
+
+ protected void process(EventHeader header)
+ {
+ // Create the list of RawTrackerHits and add it to the event.
+ super.process(header);
+
+ // Get the list of RawTrackerHits from the event.
+ List<RawTrackerHit> raw_hits = header.get(RawTrackerHit.class, "RawBarrelTrackerHits");
+ List<TrackerHit> hits = cluster_maker.makeClusters(raw_hits);
+
+ assertTrue(hits.size() > 0);
+
+// System.out.println("# hits in event: "+hits.size());
+// for (TrackerHit hit : hits)
+// {
+// SiTrackerHitStrip1D mc_hit = (SiTrackerHitStrip1D)hit;
+//
+// System.out.println(" Coordinate System: "+mc_hit.getCoordinateSystem());
+// System.out.println(" Measurement type: "+mc_hit.getMeasurementType());
+//
+// System.out.println(" # MCParticles contributing: "+mc_hit.getMCParticles().size());
+// for (MCParticle particle : mc_hit.getMCParticles())
+// {
+// System.out.println(" MCParticle type: "+particle.getPDGID());
+// System.out.println(" MCParticle momentum: "+particle.getMomentum());
+// }
+// System.out.println(" Charge in cluster (electrons): "+mc_hit.getdEdx()/DopedSilicon.ENERGY_EHPAIR);
+// System.out.println(" Time of hit: "+mc_hit.getTime());
+// System.out.println(" Position: "+new BasicHep3Vector(mc_hit.getPosition()));
+// System.out.println(" Covariance matrix: \n"+(new SymmetricMatrix(3,mc_hit.getCovMatrix(),true)));
+// System.out.println(" # SimTrackerHits contributing to cluster: "+mc_hit.getRawHits().size());
+// for (RawTrackerHit raw_hit : (List<RawTrackerHit>)mc_hit.getRawHits())
+// {
+// IExpandedIdentifier id = new ExpandedIdentifier(raw_hit.getExpandedIdentifier());
+// int strip_field = raw_hit.getIdentifierHelper().getFieldIndex("strip");
+// int strip_id = id.getValue(strip_field);
+//
+// System.out.println(" Strip number: "+strip_id);
+// System.out.println(" Charge: "+kpix.decodeCharge(raw_hit));
+// }
+// System.out.println(" Measured Coordinate: "+mc_hit.getMeasuredCoordinate());
+// System.out.println(" Unmeasured Coordinate: "+mc_hit.getUnmeasuredCoordinate());
+// System.out.println(" Hit Length: "+mc_hit.getHitLength());
+// System.out.println(" Hit Endpoints: "+mc_hit.getHitSegment().getStartPoint()+mc_hit.getHitSegment().getEndPoint());
+//
+// System.out.println(" Sensor name: "+mc_hit.getSensor().getName());
+// System.out.println(" Electrodes carrier: "+mc_hit.getReadoutElectrodes().getChargeCarrier());
+//
+// System.out.println("\n");
+// System.out.println("Transforming to sensor coordinates...");
+//
+// mc_hit = (SiTrackerHitStrip1D)mc_hit.getTransformedHit(TrackerHitType.CoordinateSystem.SENSOR);
+//
+// System.out.println(" Coordinate System: "+mc_hit.getCoordinateSystem());
+// System.out.println(" Measurement type: "+mc_hit.getMeasurementType());
+//
+// System.out.println(" # MCParticles contributing: "+mc_hit.getMCParticles().size());
+// for (MCParticle particle : mc_hit.getMCParticles())
+// {
+// System.out.println(" MCParticle type: "+particle.getPDGID());
+// System.out.println(" MCParticle momentum: "+particle.getMomentum());
+// }
+// System.out.println(" Charge in cluster (electrons): "+mc_hit.getdEdx()/DopedSilicon.ENERGY_EHPAIR);
+// System.out.println(" Time of hit: "+mc_hit.getTime());
+// System.out.println(" Position: "+new BasicHep3Vector(mc_hit.getPosition()));
+// System.out.println(" Covariance matrix: \n"+(new SymmetricMatrix(3,mc_hit.getCovMatrix(),true)));
+// System.out.println(" # SimTrackerHits contributing to cluster: "+mc_hit.getRawHits().size());
+// for (RawTrackerHit raw_hit : (List<RawTrackerHit>)mc_hit.getRawHits())
+// {
+// IExpandedIdentifier id = new ExpandedIdentifier(raw_hit.getExpandedIdentifier());
+// int strip_field = raw_hit.getIdentifierHelper().getFieldIndex("strip");
+// int strip_id = id.getValue(strip_field);
+//
+// System.out.println(" Strip number: "+strip_id);
+// System.out.println(" Charge: "+kpix.decodeCharge(raw_hit));
+// }
+// System.out.println(" Measured Coordinate: "+mc_hit.getMeasuredCoordinate());
+// System.out.println(" Unmeasured Coordinate: "+mc_hit.getUnmeasuredCoordinate());
+// System.out.println(" Hit Length: "+mc_hit.getHitLength());
+// System.out.println(" Hit Endpoints: "+mc_hit.getHitSegment().getStartPoint()+mc_hit.getHitSegment().getEndPoint());
+//
+// System.out.println(" Sensor name: "+mc_hit.getSensor().getName());
+// System.out.println(" Electrodes carrier: "+mc_hit.getReadoutElectrodes().getChargeCarrier());
+//
+// System.out.println("\n\n");
+//
+// }
+
+ }
+ }
+}
+
lcsim/test/org/lcsim/detector/driver
diff -u -r1.1 -r1.2
--- TrackerBarrelDigitizationDriverTest.java 11 Dec 2007 18:51:07 -0000 1.1
+++ TrackerBarrelDigitizationDriverTest.java 24 Dec 2007 14:38:12 -0000 1.2
@@ -112,6 +112,7 @@
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
@@ -150,11 +151,7 @@
}
}
- assertTrue(found_hits);
-
- }
-
-
+ }
}
}
lcsim/test/org/lcsim/detector/driver
diff -u -r1.3 -r1.4
--- TrackerEndcapDigitizationDriverTest.java 11 Dec 2007 18:51:07 -0000 1.3
+++ TrackerEndcapDigitizationDriverTest.java 24 Dec 2007 14:38:12 -0000 1.4
@@ -55,7 +55,7 @@
}
public void testReadout() throws Exception
- {
+ {
URL url = new URL("http://www.lcsim.org/test/lcio/mu-_10GeV_SLIC-v2r3p10_geant4-v9r0p1_LCPhys_SiTrackerEndcapTest00.slcio");
FileCache cache = new FileCache();
@@ -115,6 +115,9 @@
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())
@@ -146,13 +149,9 @@
header.put("RawEndcapTrackerHits",raw_hits,RawTrackerHit.class,0,"Kpix");
}
}
-
- assertTrue(found_hits);
-
+
}
-
-
}
}
lcsim/test/org/lcsim/detector/driver
diff -N TrackerHitDriverTest.java
--- TrackerHitDriverTest.java 11 Dec 2007 18:51:07 -0000 1.6
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,120 +0,0 @@
-package org.lcsim.detector.driver;
-
-import java.io.File;
-import java.net.URL;
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import org.lcsim.contrib.RobKutschke.TKNHits.TKNRawHitsDriverV1;
-import org.lcsim.contrib.SiStripSim.CDFSiSensorSim;
-import org.lcsim.contrib.SiStripSim.ClusterMaker;
-import org.lcsim.contrib.SiStripSim.Kpix;
-import org.lcsim.contrib.SiStripSim.ReadoutChip;
-import org.lcsim.contrib.SiStripSim.SiSensorSim;
-import org.lcsim.contrib.SiStripSim.StripClusterMaker;
-
-import org.lcsim.event.EventHeader;
-import org.lcsim.event.RawTrackerHit;
-import org.lcsim.event.TrackerHit;
-import org.lcsim.util.Driver;
-import org.lcsim.util.cache.FileCache;
-import org.lcsim.util.loop.LCSimLoop;
-
-/**
- * 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 TrackerHitDriverTest extends TestCase
-{
- public TrackerHitDriverTest(String testName)
- {
- super(testName);
- }
-
- public static Test suite()
- {
- return new TestSuite(TrackerHitDriverTest.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 TKNRawHitsDriverV1(new String[]{"SiTrackerBarrel_RO"},new String[]{"RawBarrelTrackerHits"}));
- loop.add( new TestDriver() );
- loop.loop(10, null);
- loop.dispose();
- }
-
- class TestDriver
- extends Driver
- {
-
- ReadoutChip kpix = new Kpix();
- SiSensorSim simulation = new CDFSiSensorSim();
- ClusterMaker cluster_maker = new StripClusterMaker(kpix,simulation);
-
- protected void process(EventHeader header)
- {
- // Create the list of RawTrackerHits and add it to the event.
- super.process(header);
-
- // Get the list of RawTrackerHits from the event.
- List<RawTrackerHit> raw_hits = header.get(RawTrackerHit.class, "RawBarrelTrackerHits");
- List<TrackerHit> hits = cluster_maker.makeClusters(raw_hits);
-
-// System.out.println("# hits in event: "+hits.size());
-// for (TrackerHit hit : hits)
-// {
-// BaseTrackerHitMC mc_hit = (BaseTrackerHitMC)hit;
-// System.out.println(" # MCParticles contributing: "+mc_hit.mcParticles().size());
-// for (MCParticle particle : mc_hit.mcParticles())
-// {
-// System.out.println(" MCParticle type: "+particle.getPDGID());
-// System.out.println(" MCParticle momentum: "+particle.getMomentum());
-// }
-// System.out.println(" Charge in cluster (electrons): "+mc_hit.getdEdx()/DopedSilicon.ENERGY_EHPAIR);
-// System.out.println(" Position: "+new BasicHep3Vector(mc_hit.getPosition()));
-// System.out.println(" Covariance matrix: \n"+(new SymmetricMatrix(3,mc_hit.getCovMatrix(),true)));
-// System.out.println(" # SimTrackerHits contributing to cluster: "+mc_hit.getRawHits().size());
-// for (RawTrackerHit raw_hit : (List<RawTrackerHit>)mc_hit.getRawHits())
-// {
-// IExpandedIdentifier id = new ExpandedIdentifier(raw_hit.getExpandedIdentifier());
-// int strip_field;
-// try
-// {
-// strip_field = raw_hit.getIdentifierHelper().getFieldIndex("strip");
-// }
-// catch (FieldNotFoundException exception)
-// {
-// throw new RuntimeException(exception);
-// }
-// int strip_id = id.getValue(strip_field);
-//
-// System.out.println(" Strip number: "+strip_id);
-// System.out.println(" Charge: "+kpix.decodeCharge(raw_hit));
-// }
-//
-// System.out.println("\n");
-//
-// }
-
- }
- }
-}
-
CVSspam 0.2.8