Commit in lcsim on MAIN
test/org/lcsim/contrib/tracking/TrackerHitCheaterTest.java+15-151.9 -> 1.10
src/org/lcsim/contrib/SiStripSim/TrackerHitType.java+99added 1.1
                                /BaseTrackerHit.java+290added 1.1
                                /SiTrackerHitPixel.java+52added 1.1
                                /SiTrackerHitStrip1D.java+119added 1.1
                                /SiTrackerHitStrip2D.java+78added 1.1
                                /SiTrackerHit.java+81added 1.1
                                /StripClusterMaker.java+99-271.8 -> 1.9
test/org/lcsim/detector/driver/TrackerHitEndcapDriverTest.java+170added 1.1
                              /TrackerHitBarrelDriverTest.java+170added 1.1
                              /TrackerBarrelDigitizationDriverTest.java+2-51.1 -> 1.2
                              /TrackerEndcapDigitizationDriverTest.java+5-61.3 -> 1.4
                              /TrackerHitDriverTest.java-1201.6 removed
+1180-173
8 added + 1 removed + 4 modified, total 13 files
New hit classes for strip (1d and 2d) and pixel hits.  
- Encoded hit type (TrackerHitType) allows persistency of different hit types and support for hits persisted in different coordinate systems.  
- Hits can also be transformed into an arbitrary coordinate system, but are not then persistable.
- Code for loading persisted hits and for making 2d strip hits (crosses) will be ready soon.
New test for making Endcap clusters (TrackerHits).  All tests updated with more stringent assertions.  Both the endcap and barrel digitization tests can probably be removed from the build at this point, in order to shorten build times.
Cleaned up unneccessary Sysouts in TrackerHitCheaterTest

lcsim/test/org/lcsim/contrib/tracking
TrackerHitCheaterTest.java 1.9 -> 1.10
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
TrackerHitType.java added at 1.1
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
BaseTrackerHit.java added at 1.1
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
SiTrackerHitPixel.java added at 1.1
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
SiTrackerHitStrip1D.java added at 1.1
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
SiTrackerHitStrip2D.java added at 1.1
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
SiTrackerHit.java added at 1.1
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
StripClusterMaker.java 1.8 -> 1.9
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
TrackerHitEndcapDriverTest.java added at 1.1
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
TrackerHitBarrelDriverTest.java added at 1.1
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
TrackerBarrelDigitizationDriverTest.java 1.1 -> 1.2
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
TrackerEndcapDigitizationDriverTest.java 1.3 -> 1.4
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
TrackerHitDriverTest.java removed after 1.6
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