Author: [log in to unmask] Date: Tue Sep 8 22:44:14 2015 New Revision: 3559 Log: Use the field map extrapolator instead of the analytic one. Modified: java/trunk/recon/src/main/java/org/hps/recon/utils/TrackClusterMatcher.java Modified: java/trunk/recon/src/main/java/org/hps/recon/utils/TrackClusterMatcher.java ============================================================================= --- java/trunk/recon/src/main/java/org/hps/recon/utils/TrackClusterMatcher.java (original) +++ java/trunk/recon/src/main/java/org/hps/recon/utils/TrackClusterMatcher.java Tue Sep 8 22:44:14 2015 @@ -15,9 +15,8 @@ import org.lcsim.event.Cluster; import org.lcsim.event.Track; +import org.lcsim.event.TrackState; import org.lcsim.geometry.FieldMap; -import org.lcsim.recon.tracking.seedtracker.TrackState; -import org.hps.conditions.database.DatabaseConditionsManager; import org.hps.recon.tracking.CoordinateTransformations; import org.hps.recon.tracking.TrackUtils; @@ -40,6 +39,12 @@ /** Flag used to determine if plots are enabled/disabled */ boolean enablePlots = false; + /** + * Flag used to determine whether the analytic or field map extrapolator + * should be used. + */ + boolean useAnalyticExtrapolator = false; + /** * These cuts are set at +/- 4 sigma extracted from Gaussian fits to the * track-cluster residual distributions. The data used to determine these @@ -60,6 +65,9 @@ /** The extrapolation step size */ double stepSize = 5.; // mm + + /** Constant denoting the index of the {@link TrackState} at the Ecal */ + private static final int ECAL_TRACK_STATE_INDEX = 1; /** Constructor */ public TrackClusterMatcher() {}; @@ -68,15 +76,32 @@ * Enable/disable booking, filling of Ecal cluster and extrapolated track * position plots. * - * @param enablePlots : true to enable, false to disable + * @param enablePlots true to enable, false to disable */ public void enablePlots(boolean enablePlots) { this.enablePlots = enablePlots; if (enablePlots == true) this.bookHistograms(); } - + + /** + * Set the 3D field map to be used by the extrapolator. + * + * @param bFieldMap The {@link FieldMap} object containing a mapping to the + * 3D field map. + */ public void setBFieldMap(FieldMap bFieldMap) { this.bFieldMap = bFieldMap; + } + + /** + * Use the analytic track extrapolator i.e. the no fringe extrapolator. + * The field map extrapolator is used by default. + * + * @param useAnalyticExtrapolator Set to true to use the analytic + * extrapolator, false otherwise. + */ + public void setUseAnalyticExtrapolator(boolean useAnalyticExtrapolator) { + this.useAnalyticExtrapolator = useAnalyticExtrapolator; } /** @@ -153,15 +178,19 @@ //System.out.println("Cluster Position: " + clusterPosition.toString()); // Extrapolate the track to the Ecal cluster position - // TODO: At some point, this needs to use the fringe field - Hep3Vector trackPosAtEcal = TrackUtils.extrapolateTrack(track, clusterPosition.z()); - //Hep3Vector trackPosAtEcal - // = new BasicHep3Vector(TrackUtils.extrapolateTrackUsingFieldMap(track, this.extStartPos, clusterPosition.z(), this.stepSize, bFieldMap).getReferencePoint()); - //trackPosAtEcal = CoordinateTransformations.transformVectorToDetector(trackPosAtEcal); + Hep3Vector trackPosAtEcal = null; + if (this.useAnalyticExtrapolator) { + //System.out.println("Using analytic field extrapolator."); + trackPosAtEcal = TrackUtils.extrapolateTrack(track, clusterPosition.z()); + } else { + //System.out.println("Using field map extrapolator"); + TrackState trackStateAtEcal = (TrackState) track.getTrackStates().get(this.ECAL_TRACK_STATE_INDEX); + trackPosAtEcal = new BasicHep3Vector(trackStateAtEcal.getReferencePoint()); + trackPosAtEcal = CoordinateTransformations.transformVectorToDetector(trackPosAtEcal); + } //System.out.println("Track position at Ecal: " + trackPosAtEcal.toString()); - //TrackState trackStateAtEcal = (TrackState) track.getTrackStates().get(1); // Calculate the difference between the cluster position at the Ecal and // the track in both the x and y directions