lcsim/src/org/lcsim/recon/tracking/seedtracker
diff -u -r1.4 -r1.5
--- SeedTrackerTrackStateDriver.java 26 May 2010 21:02:49 -0000 1.4
+++ SeedTrackerTrackStateDriver.java 8 Oct 2010 18:28:32 -0000 1.5
@@ -1,4 +1,4 @@
-// $Id: SeedTrackerTrackStateDriver.java,v 1.4 2010/05/26 21:02:49 ngraf Exp $
+// $Id: SeedTrackerTrackStateDriver.java,v 1.5 2010/10/08 18:28:32 grefe Exp $
package org.lcsim.recon.tracking.seedtracker;
import hep.physics.vec.BasicHep3Vector;
@@ -16,6 +16,7 @@
import org.lcsim.fit.helicaltrack.HelicalTrackHit;
import org.lcsim.fit.helicaltrack.HelixUtils;
import org.lcsim.fit.helicaltrack.TrackDirection;
+import org.lcsim.geometry.Detector;
import org.lcsim.geometry.Calorimeter.CalorimeterType;
import org.lcsim.recon.util.CalorimeterInformation;
import org.lcsim.spacegeom.SpacePoint;
@@ -36,23 +37,39 @@
public class SeedTrackerTrackStateDriver extends Driver
{
+ protected CalorimeterInformation calInfo;
+ protected double ecalRadius;
+ protected int ecalNumSides;
+ protected double ecalZ;
+ protected double magField;
+ protected HelixSwimmer swimmer;
+
+ public SeedTrackerTrackStateDriver() {
+ calInfo = CalorimeterInformation.instance();
+ ecalRadius = 0.;
+ ecalNumSides = 0;
+ ecalZ = 0.;
+ magField = 0.;
+ swimmer = null;
+ }
+
+ @Override
+ protected void detectorChanged(Detector detector) {
+ // get the magnetic field and set up the helix swimmer
+ magField = detector.getFieldMap().getField(new BasicHep3Vector(0, 0, 0)).magnitude();
+ swimmer = new HelixSwimmer(magField);
+
+ // get the Ecal geometry
+ calInfo = CalorimeterInformation.instance();
+ ecalRadius = calInfo.getRMin(CalorimeterType.EM_BARREL);
+ ecalNumSides = calInfo.getNSides(CalorimeterType.EM_BARREL);
+ ecalZ = calInfo.getZMin(CalorimeterType.EM_ENDCAP);
+ //System.out.println("ECAL: radius " + ecalRadius + " nsides " + ecalNumSides + " z " + ecalZ);
+ }
+
@Override
public void process(EventHeader event)
{
- // Need the B field for extrapolation
- double magField = event.getDetector().getFieldMap().getField(new BasicHep3Vector(0, 0, 0)).magnitude();
-
- //TODO cache this and refresh under detectorChanged method
- CalorimeterInformation calInfo = CalorimeterInformation.instance();
- double ecalRadius = calInfo.getRMin(CalorimeterType.EM_BARREL);
- // number of sides
- int ecalNumSides = calInfo.getNSides(CalorimeterType.EM_BARREL);
- // inner z of ECal endcap
- double ecalZ = calInfo.getZMin(CalorimeterType.EM_ENDCAP);
-// System.out.println("ECAL: radius " + ecalRadius + " nsides " + ecalNumSides + " z " + ecalZ);
- // the swimmer
- HelixSwimmer swimmer = new HelixSwimmer(magField);
-
// Get the Tracks from the event. Collection name is SeedTracker's default.
List<Track> tracks = event.get(Track.class, "Tracks");
@@ -94,10 +111,14 @@
}
// Set the End TrackState from the outermost hit on the track.
- double[] xpos = pos.v();
- double[] xmomentum = VecOp.mult(ptrk.magnitude(), dir).v();
-
- TrackState endState = new TrackState(xpos[0], xpos[1], xpos[2], xmomentum[0], xmomentum[1], xmomentum[2]);
+ Hep3Vector xmomentum = VecOp.mult(ptrk.magnitude(), dir);
+
+ // Set the End TrackState to the point of closest approach to the last hit
+ swimmer.setTrack(track);
+ double s = swimmer.getDistanceToPoint(pos);
+ Hep3Vector corPos = swimmer.getPointAtLength(s);
+
+ TrackState endState = new TrackState(corPos, xmomentum);
endObjs.add(endState);
// Calculate the Start state and add to list.
@@ -107,8 +128,7 @@
startObjs.add(startState);
//TODO Should set the ECal TrackState by propagating from the outermost hit on the track.
- swimmer.setTrack(track);
- double s = Math.min(swimmer.getDistanceToZ(ecalZ), swimmer.getDistanceToPolyhedra(ecalRadius, ecalNumSides));
+ s = Math.min(swimmer.getDistanceToZ(ecalZ), swimmer.getDistanceToPolyhedra(ecalRadius, ecalNumSides));
SpacePoint ecalPos = swimmer.getPointAtLength(s);
SpaceVector ecalMom = swimmer.getMomentumAtLength(s);
lcsim/src/org/lcsim/recon/tracking/seedtracker
diff -u -r1.2 -r1.3
--- TrackState.java 26 May 2010 21:04:09 -0000 1.2
+++ TrackState.java 8 Oct 2010 18:28:32 -0000 1.3
@@ -1,5 +1,7 @@
package org.lcsim.recon.tracking.seedtracker;
+import hep.physics.vec.Hep3Vector;
+
import java.util.ArrayList;
import java.util.List;
@@ -54,6 +56,21 @@
vals.add((float) py);
vals.add((float) pz);
}
+
+ /**
+ * Constructor using Hep3Vectors
+ *
+ * @param pos position of the track state
+ * @param p momentum at the position
+ */
+ public TrackState(Hep3Vector pos, Hep3Vector p) {
+ vals.add((float)pos.x());
+ vals.add((float)pos.y());
+ vals.add((float)pos.z());
+ vals.add((float)p.x());
+ vals.add((float)p.y());
+ vals.add((float)p.z());
+ }
public double getDoubleVal(int index)
{