Commit in projects/lcsim/trunk on MAIN
event-heprep/src/main/java/org/lcsim/util/heprep/ReconstructedParticleConverterNew.java+7-33158 -> 3159
                                                /TrackConverter.java+85-813158 -> 3159
                                                /TrackUtil.java+52added 3159
tracking/src/main/java/org/lcsim/util/swim/HelixSwimmerYField.java+6-423158 -> 3159
                                          /HelixYField.java+5-13158 -> 3159
+155-127
1 added + 4 modified, total 5 files
Changes in lcsim to support display of Tracks that are swum within a Y B-field.

projects/lcsim/trunk/event-heprep/src/main/java/org/lcsim/util/heprep
ReconstructedParticleConverterNew.java 3158 -> 3159
--- projects/lcsim/trunk/event-heprep/src/main/java/org/lcsim/util/heprep/ReconstructedParticleConverterNew.java	2014-06-26 23:50:25 UTC (rev 3158)
+++ projects/lcsim/trunk/event-heprep/src/main/java/org/lcsim/util/heprep/ReconstructedParticleConverterNew.java	2014-06-27 00:13:54 UTC (rev 3159)
@@ -134,14 +134,18 @@
     }   
 
     private void convertTracks(EventHeader event, List<Track> collection, HepRepFactory factory, HepRepTypeTree typeTree, HepRepInstanceTree instanceTree, Color trackColor, HepRepType type)
-    {            
+    {   
+        if (collection.size() == 0)
+            return;
+        
         Detector detector = event.getDetector();
 
         double trackingRMax = detector.getConstants().get("tracking_region_radius").getValue();
         double trackingZMax = detector.getConstants().get("tracking_region_zmax").getValue();
 
-        double[] field = detector.getFieldMap().getField(zero);
-        HelixSwimmer helix = new HelixSwimmer(field[2]);
+        double[] origin = TrackUtil.getOrigin(collection.get(0));
+        double[] field = detector.getFieldMap().getField(origin);
+        HelixSwimmer helix = TrackUtil.getHelixSwimmer(collection, field);
      
         for (Track t : (List<Track>) collection)
         {                        

projects/lcsim/trunk/event-heprep/src/main/java/org/lcsim/util/heprep
TrackConverter.java 3158 -> 3159
--- projects/lcsim/trunk/event-heprep/src/main/java/org/lcsim/util/heprep/TrackConverter.java	2014-06-26 23:50:25 UTC (rev 3158)
+++ projects/lcsim/trunk/event-heprep/src/main/java/org/lcsim/util/heprep/TrackConverter.java	2014-06-27 00:13:54 UTC (rev 3159)
@@ -17,102 +17,106 @@
 import org.lcsim.geometry.Detector;
 import org.lcsim.util.swim.HelixSwimmer;
 
-
 /**
- *
+ * Convert a Track to a Wired representation by swimming it in the B-field using
+ * a helix approximation.
  * @author tonyj
+ * @author Jeremy McCormick <[log in to unmask]>
  * @version $Id: TrackConverter.java,v 1.7 2012/10/18 19:32:49 jeremy Exp $
  */
-class TrackConverter implements HepRepCollectionConverter
-{
-	private static final double[] zero = { 0,0,0 };
+class TrackConverter implements HepRepCollectionConverter {
 
-	public boolean canHandle(Class k)
-	{
-		return Track.class.isAssignableFrom(k);
-	}
-	public void convert(EventHeader event, List collection, HepRepFactory factory, HepRepTypeTree typeTree, HepRepInstanceTree instanceTree)
-	{	   	   
-		try {
-			event.getDetector();
-		}
-		catch (Exception x)
-		{
-			return;
-		}
+    public boolean canHandle(Class k) {
+        return Track.class.isAssignableFrom(k);
+    }
 
-		LCMetaData meta = event.getMetaData(collection);
-		String name = meta.getName();
-		int flags = meta.getFlags();
-		Detector detector = event.getDetector();
+    public void convert(EventHeader event, List collection, HepRepFactory factory, HepRepTypeTree typeTree, HepRepInstanceTree instanceTree) {
+        try {
+            event.getDetector();
+        } catch (Exception x) {
+            return;
+        }
+        
+        if (collection.size() == 0)
+            return;
+        
+        List<Track> trackList = (List<Track>) collection;
+        Track firstTrack = trackList.get(0);
+        
+        LCMetaData meta = event.getMetaData(collection);
+        String name = meta.getName();
+        Detector detector = event.getDetector();
 
-		double trackingRMax = detector.getConstants().get("tracking_region_radius").getValue();
-		double trackingZMax = detector.getConstants().get("tracking_region_zmax").getValue();
+        double trackingRMax = detector.getConstants().get("tracking_region_radius").getValue();
+        double trackingZMax = detector.getConstants().get("tracking_region_zmax").getValue();
 
-		double[] field = detector.getFieldMap().getField(zero);
-		HelixSwimmer helix = new HelixSwimmer(field[2]);
+        double[] origin = TrackUtil.getOrigin(firstTrack);
+        double[] field = detector.getFieldMap().getField(origin);
+        
+        HelixSwimmer helix = TrackUtil.getHelixSwimmer(trackList, field);
+        //System.out.println("swimming with helix of type " + helix.getClass().getCanonicalName());
+        
+        HepRepType typeX = factory.createHepRepType(typeTree, name);
+        typeX.addAttValue("layer", LCSimHepRepConverter.PARTICLES_LAYER);
+        typeX.addAttValue("drawAs", "Line");
 
-		HepRepType typeX = factory.createHepRepType(typeTree, name);
-		typeX.addAttValue("layer", LCSimHepRepConverter.PARTICLES_LAYER);
-		typeX.addAttValue("drawAs","Line");
+        typeX.addAttDef("pT", "Transverse momentum", "physics", "");
+        typeX.addAttDef("dedX", "de/Dx", "physics", "GeV");
+        typeX.addAttDef("dedX error", "", "physics", "GeV");
+        typeX.addAttDef("Charge", "", "physics", "");
+        typeX.addAttDef("Chi2", "", "physics", "");
+        typeX.addAttDef("pX", "Momentum X", "physics", "GeV");
+        typeX.addAttDef("pY", "Momentum Y", "physics", "GeV");
+        typeX.addAttDef("pZ", "Momentum Z", "physics", "GeV");
+        typeX.addAttDef("NDF", "Number Degrees Freedom", "physics", "");
+        typeX.addAttDef("Reference Point X", "Reference Point X", "physics", "mm");
+        typeX.addAttDef("Reference Point Y", "Reference Point Y", "physics", "mm");
+        typeX.addAttDef("Reference Point Z", "Reference Point Z", "physics", "mm");
+        typeX.addAttDef("d0", "d0", "physics", "");
+        typeX.addAttDef("phi0", "phi0", "physics", "");
+        typeX.addAttDef("omega", "omega", "physics", "");
+        typeX.addAttDef("z0", "z0", "physics", "");
+        typeX.addAttDef("s", "s", "physics", "");
 
-		typeX.addAttDef("pT","Transverse momentum", "physics", "");      
-		typeX.addAttDef("dedX","de/Dx", "physics", "GeV");
-		typeX.addAttDef("dedX error","", "physics", "GeV");      
-		typeX.addAttDef("Charge","", "physics", "");      
-		typeX.addAttDef("Chi2","", "physics", "");      
-		typeX.addAttDef("pX","Momentum X", "physics", "GeV");
-		typeX.addAttDef("pY","Momentum Y", "physics", "GeV");
-		typeX.addAttDef("pZ","Momentum Z", "physics", "GeV");      
-		typeX.addAttDef("NDF","Number Degrees Freedom","physics","");      
-		typeX.addAttDef("Reference Point X","Reference Point X","physics","mm");
-		typeX.addAttDef("Reference Point Y","Reference Point Y","physics","mm");
-		typeX.addAttDef("Reference Point Z","Reference Point Z","physics","mm");      
-		typeX.addAttDef("d0","d0","physics","");
-		typeX.addAttDef("phi0","phi0","physics","");
-		typeX.addAttDef("omega","omega","physics","");
-		typeX.addAttDef("z0","z0","physics","");
-		typeX.addAttDef("s","s","physics","");
+        for (Track track : trackList) {
+            
+            helix.setTrack(track);
+            double distanceToCylinder = helix.getDistanceToCylinder(trackingRMax, trackingZMax);
 
-		for (Track t : (List<Track>) collection)
-        {         		    
-            helix.setTrack(t);
-            double distanceToCylinder = helix.getDistanceToCylinder(trackingRMax,trackingZMax);
+            TrackState ts = track.getTrackStates().get(0);
+            double[] referencePoint = ts.getReferencePoint();
+            double[] momentum = ts.getMomentum();
 
-            TrackState ts = t.getTrackStates().get(0);
-            double[] rp = ts.getReferencePoint();
-            double[] p = ts.getMomentum();
-                                                
             HepRepInstance instanceX = factory.createHepRepInstance(instanceTree, typeX);
-            double pt = field[2]*Constants.fieldConversion/Math.abs(ts.getParameter(2));
-            
-            instanceX.addAttValue("pT",pt);
-            instanceX.addAttValue("dedX",t.getdEdx());
-            instanceX.addAttValue("dedX error",t.getdEdxError());
-            instanceX.addAttValue("Charge",t.getCharge());
-            instanceX.addAttValue("Chi2",t.getChi2());
-            instanceX.addAttValue("pX",p[0]);
-            instanceX.addAttValue("pY",p[1]);
-            instanceX.addAttValue("pZ",p[2]);
-            instanceX.addAttValue("NDF",t.getNDF());
-            instanceX.addAttValue("Reference Point X",rp[0]);
-            instanceX.addAttValue("Reference Point Y",rp[1]);
-            instanceX.addAttValue("Reference Point Z",rp[2]);
-            instanceX.addAttValue("d0",ts.getParameter(0));
-            instanceX.addAttValue("phi0",ts.getParameter(1));
-            instanceX.addAttValue("omega",ts.getParameter(2));
-            instanceX.addAttValue("z0",ts.getParameter(3));
-            instanceX.addAttValue("s",ts.getParameter(4));
+            double pt = field[2] * Constants.fieldConversion / Math.abs(ts.getParameter(2));
 
+            instanceX.addAttValue("pT", pt);
+            instanceX.addAttValue("dedX", track.getdEdx());
+            instanceX.addAttValue("dedX error", track.getdEdxError());
+            instanceX.addAttValue("Charge", track.getCharge());
+            instanceX.addAttValue("Chi2", track.getChi2());
+            instanceX.addAttValue("pX", momentum[0]);
+            instanceX.addAttValue("pY", momentum[1]);
+            instanceX.addAttValue("pZ", momentum[2]);
+            instanceX.addAttValue("NDF", track.getNDF());
+            instanceX.addAttValue("Reference Point X", referencePoint[0]);
+            instanceX.addAttValue("Reference Point Y", referencePoint[1]);
+            instanceX.addAttValue("Reference Point Z", referencePoint[2]);
+            instanceX.addAttValue("d0", ts.getParameter(0));
+            instanceX.addAttValue("phi0", ts.getParameter(1));
+            instanceX.addAttValue("omega", ts.getParameter(2));
+            instanceX.addAttValue("z0", ts.getParameter(3));
+            instanceX.addAttValue("s", ts.getParameter(4));
+
             double dAlpha = 10; // 1cm
 
-            for (int k=0;k<200;k++)
-            {
-                double d = k*dAlpha;
-                if (d>distanceToCylinder) break;
+            for (int k = 0; k < 200; k++) {
+                double d = k * dAlpha;
+                if (d > distanceToCylinder)
+                    break;
                 Hep3Vector point = helix.getPointAtDistance(d);
-                factory.createHepRepPoint(instanceX,point.x(),point.y(),point.z());
-            }            
-        }		
-	}
+                factory.createHepRepPoint(instanceX, point.x(), point.y(), point.z());
+            }
+        }
+    }       
 }
\ No newline at end of file

projects/lcsim/trunk/event-heprep/src/main/java/org/lcsim/util/heprep
TrackUtil.java added at 3159
--- projects/lcsim/trunk/event-heprep/src/main/java/org/lcsim/util/heprep/TrackUtil.java	                        (rev 0)
+++ projects/lcsim/trunk/event-heprep/src/main/java/org/lcsim/util/heprep/TrackUtil.java	2014-06-27 00:13:54 UTC (rev 3159)
@@ -0,0 +1,52 @@
+package org.lcsim.util.heprep;
+
+import java.util.List;
+
+import org.lcsim.event.Track;
+import org.lcsim.event.base.BaseTrack;
+import org.lcsim.util.swim.HelixSwimmer;
+import org.lcsim.util.swim.HelixSwimmerYField;
+
+/**
+ * A few utilities for display of Tracks in Wired.
+ * @author Jeremy McCormick <[log in to unmask]>
+ */
+class TrackUtil {
+    
+    private TrackUtil() {        
+    }
+    
+    private static final double[] ORIGIN = { 0, 0, 0 };       
+    private static final double[] YORIGIN = { 0, 0, 0.00001 }; /* FIXME: Hack for HPS!!! */
+    
+    /**
+     * Get a <code>HelixSwimmer</code> implementation depending on the track type.
+     * @param tracks The list of <code>Track</code> objects.
+     * @param field The B-field components.
+     * @return The <code>HelixSwimmer</code> implementation class.
+     */
+    static HelixSwimmer getHelixSwimmer(List<Track> tracks, double[] field) {
+        HelixSwimmer swimmer = new HelixSwimmer(field[2]);
+        if (tracks.size() > 0) {
+            Track track = tracks.get(0);
+            if (track.getType() == BaseTrack.TrackType.Y_FIELD.ordinal()) {
+                swimmer = new HelixSwimmerYField(field[1]);
+            } 
+        }
+        return swimmer;
+    }
+    
+    /**
+     * Get the origin coordinate to use depending on the track type.     
+     * @param track A sample <code>Track</code> from the collection.
+     * @return The origin as a double array containing X, Y, and Z coordinates.
+     */
+    // FIXME: This is basically a hack for HPS where the B-field is reported as zero at the origin
+    // for most detector geometries.
+    static double[] getOrigin(Track track) {
+        if (track.getType() == BaseTrack.TrackType.Y_FIELD.ordinal())
+            return YORIGIN;
+        else 
+            return ORIGIN;
+    }
+}
\ No newline at end of file

projects/lcsim/trunk/tracking/src/main/java/org/lcsim/util/swim
HelixSwimmerYField.java 3158 -> 3159
--- projects/lcsim/trunk/tracking/src/main/java/org/lcsim/util/swim/HelixSwimmerYField.java	2014-06-26 23:50:25 UTC (rev 3158)
+++ projects/lcsim/trunk/tracking/src/main/java/org/lcsim/util/swim/HelixSwimmerYField.java	2014-06-27 00:13:54 UTC (rev 3159)
@@ -5,9 +5,6 @@
 import static org.lcsim.event.LCIOParameters.ParameterName.omega;
 import static org.lcsim.event.LCIOParameters.ParameterName.phi0;
 import static org.lcsim.event.LCIOParameters.ParameterName.tanLambda;
-import hep.physics.matrix.BasicMatrix;
-import hep.physics.vec.BasicHep3Vector;
-import hep.physics.vec.Hep3Vector;
 
 import org.lcsim.event.LCIOParameters;
 import org.lcsim.event.Track;
@@ -15,6 +12,10 @@
 import org.lcsim.spacegeom.CartesianVector;
 import org.lcsim.spacegeom.SpacePoint;
 
+/**
+ * Swim Track assuming B-field in Y direction.
+ * @author Jeremy McCormick <[log in to unmask]>
+ */
 public class HelixSwimmerYField extends HelixSwimmer {
     
     public HelixSwimmerYField(double B) {
@@ -24,47 +25,10 @@
     public void setTrack(Track t) {
         double pt = sqrt(t.getPX() * t.getPX() + t.getPY() * t.getPY());
         LCIOParameters parameters = new LCIOParameters(t.getTrackParameters(), pt);
-
         SpacePoint ref = new CartesianPoint(t.getReferencePoint());
         SpacePoint origin = LCIOParameters.Parameters2Position(parameters, ref);
-        _trajectory = new Helix(origin, 1 / parameters.get(omega), parameters
+        _trajectory = new HelixYField(origin, 1 / parameters.get(omega), parameters
                 .get(phi0), atan(parameters.get(tanLambda)));
-        // Hep3Vectors have too many shortcomings
         _momentum = new CartesianVector(LCIOParameters.Parameters2Momentum(parameters).v());
-    }
-    
-    /*
-    public void setTrack(Hep3Vector origp, Hep3Vector origr0, int iq) {
-        Hep3Vector p = getTrackPoint(origp);
-        Hep3Vector r0 = getTrackPoint(origr0);
-        double pt = Math.sqrt(p.x() * p.x() + p.y() * p.y());
-        double phi = Math.atan2(p.y(), p.x());
-        double lambda = Math.atan2(p.z(), pt);
-        if (iq != 0 && field != 0) {
-            double radius = pt / (iq * field);
-            _trajectory = new HelixYField(r0, radius, phi, lambda);
-        } else {
-            _trajectory = new Line(r0, phi, lambda);
-        }
-        _momentum = new CartesianVector(p.v());
-        _charge = iq;
-        System.out.println("momentum_x: " + _momentum.x());
-        System.out.println("momentum_y: " + _momentum.y());
-        System.out.println("momentum_z: " + _momentum.z());
-    }
-    */
-    
-    private Hep3Vector getTrackPoint(Hep3Vector pos) {
-        BasicMatrix _detToTrk;
-        _detToTrk = new BasicMatrix(3, 3);
-        _detToTrk.setElement(0, 2, 1);
-        _detToTrk.setElement(1, 0, 1);
-        _detToTrk.setElement(2, 1, 1);
-        double[] trk = { 0, 0, 0 };
-        trk[0] = _detToTrk.e(0, 0) * pos.x() + _detToTrk.e(0, 1) * pos.y() + _detToTrk.e(0, 2) * pos.z();
-        trk[1] = _detToTrk.e(1, 0) * pos.x() + _detToTrk.e(1, 1) * pos.y() + _detToTrk.e(1, 2) * pos.z();
-        trk[2] = _detToTrk.e(2, 0) * pos.x() + _detToTrk.e(2, 1) * pos.y() + _detToTrk.e(2, 2) * pos.z();
-        Hep3Vector retpt = new BasicHep3Vector(trk[0], trk[1], trk[2]);
-        return retpt;
-    }
+    }        
 }

projects/lcsim/trunk/tracking/src/main/java/org/lcsim/util/swim
HelixYField.java 3158 -> 3159
--- projects/lcsim/trunk/tracking/src/main/java/org/lcsim/util/swim/HelixYField.java	2014-06-26 23:50:25 UTC (rev 3158)
+++ projects/lcsim/trunk/tracking/src/main/java/org/lcsim/util/swim/HelixYField.java	2014-06-27 00:13:54 UTC (rev 3159)
@@ -6,6 +6,10 @@
 import org.lcsim.spacegeom.CartesianPoint;
 import org.lcsim.spacegeom.SpacePoint;
 
+/**
+ * Helix for swimming in Y B-field.
+ * @author Jeremy McCormick <[log in to unmask]>
+ */
 public class HelixYField extends Helix {
 
     public HelixYField(Hep3Vector org, double r, double p, double lambda) {
@@ -19,7 +23,7 @@
         double z = origin.z() + alpha * sinLambda;
         CartesianPoint trkpoint = new CartesianPoint(x, y, z);
         CartesianPoint labpoint = getLabPoint(trkpoint);
-        System.out.println(trkpoint.toString() + labpoint.toString());
+      //  System.out.println(trkpoint.toString() + labpoint.toString());
         return labpoint;
     }
 
SVNspam 0.1


Use REPLY-ALL to reply to list

To unsubscribe from the LCDET-SVN list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCDET-SVN&A=1