Author: [log in to unmask] Date: Wed Jun 3 18:30:36 2015 New Revision: 3085 Log: discard tracks with uncorrected hits Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java ============================================================================= --- java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java (original) +++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java Wed Jun 3 18:30:36 2015 @@ -2,11 +2,12 @@ import hep.physics.vec.BasicHep3Vector; import hep.physics.vec.Hep3Vector; - +import hep.physics.vec.VecOp; +import java.util.Iterator; import java.util.List; - import org.lcsim.event.EventHeader; import org.lcsim.event.Track; +import org.lcsim.event.TrackerHit; import org.lcsim.event.base.BaseTrack; import org.lcsim.fit.helicaltrack.HelicalTrackHit; import org.lcsim.geometry.Detector; @@ -192,6 +193,23 @@ // Set the type of track to indicate B-field in Y e.g. for swimming in Wired. List<Track> tracks = event.get(Track.class, trackCollectionName); + Iterator<Track> iter = tracks.iterator(); + while (iter.hasNext()) { + Track track = iter.next(); + boolean badTrack = false; + for (TrackerHit hit : track.getTrackerHits()) { + HelicalTrackHit hth = (HelicalTrackHit) hit; + double correction = VecOp.sub(hth.getCorrectedPosition(), new BasicHep3Vector(hth.getPosition())).magnitude(); + double chisq = hth.chisq(); + if (correction < 1e-6) { + this.getLogger().warning(String.format("Bad HelicalTrackHit on track (correction distance %f, chisq penalty %f) - discarding track\n", correction, chisq)); + badTrack = true; + } + } + if (badTrack) { + iter.remove(); + } + } setTrackType(tracks); // Increment number of events.