Author: [log in to unmask]
Date: Thu Sep 3 14:41:20 2015
New Revision: 3514
Log:
Add a track state to a track containing the track paramters and position of the track at the Ecal face. The distance to the Ecal face is taken from the compact description.
Modified:
java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java Thu Sep 3 14:41:20 2015
@@ -10,6 +10,7 @@
import org.lcsim.event.LCRelation;
import org.lcsim.event.RawTrackerHit;
import org.lcsim.event.Track;
+import org.lcsim.event.TrackState;
import org.lcsim.event.TrackerHit;
import org.lcsim.event.base.BaseLCRelation;
import org.lcsim.event.RelationalTable;
@@ -17,25 +18,87 @@
import org.lcsim.fit.helicaltrack.HelicalTrackCross;
import org.lcsim.fit.helicaltrack.HelicalTrackHit;
import org.lcsim.fit.helicaltrack.HelicalTrackStrip;
+import org.lcsim.geometry.Detector;
+import org.lcsim.geometry.FieldMap;
import org.lcsim.recon.tracking.seedtracker.SeedTrack;
import org.lcsim.util.Driver;
/**
- * Driver used to persist additional {@link Track} information via a {@link GenericObject}.
+ * Driver used to persist additional {@link Track} information via a
+ * {@link GenericObject}.
*
* @author <a href="mailto:[log in to unmask]">Omar Moreno</a>
* @author <a href="[log in to unmask]">Sho Uemura</a>
*/
public final class TrackDataDriver extends Driver {
+ /** The B field map */
+ FieldMap bFieldMap = null;
+
/** Collection Names */
- private String trackResidualsCollectionName = "TrackResiduals";
- private String rotatedHthRelationsColName = "RotatedHelicalTrackHitRelations";
- private String rotatedHthCollectionName = "RotatedHelicalTrackHits";
- private String trackResidualsRelationsColName = "TrackResidualsRelations";
-
+
+ /** Collection name of TrackResidualData objects */
+ private static final String TRK_RESIDUALS_COL_NAME = "TrackResiduals";
+
+ /**
+ * Collection name of LCRelations between a Track and Rotated
+ * HelicalTrackHits
+ */
+ private static final String ROTATED_HTH_REL_COL_NAME = "RotatedHelicalTrackHitRelations";
+
+ /** Collection name of Rotated HelicalTrackHits */
+ private static final String ROTATED_HTH_COL_NAME = "RotatedHelicalTrackHits";
+
+ /**
+ * Collection name of LCRelations between a Track and TrackResidualsData
+ * objects.
+ */
+ private static final String TRK_RESIDUALS_REL_COL_NAME = "TrackResidualsRelations";
+
+ /**
+ * Name of the constant denoting the position of the Ecal face in the
+ * compact description.
+ */
+ private static final String ECAL_POSITION_CONSTANT_NAME = "ecal_dface";
+
+ /** Position of the Ecal face */
+ private double ecalPosition = 0; // mm
+
+ /** Z position to start extrapolation from */
+ double extStartPos = 700; // mm
+
+ /** The extrapolation step size */
+ double stepSize = 5.0; // mm
+
/** Default constructor */
public TrackDataDriver() {
+ }
+
+ /**
+ * Set the position along Z where the extrapolation of a track should
+ * begin.
+ *
+ * @param extStartPoint Position along Z where the extrapolation should
+ * begin
+ */
+ void setExtrapolationStartPosition(double extStartPos) {
+ this.extStartPos = extStartPos;
+ }
+
+ /**
+ * Method called by the framework when a new {@link Detector} geometry is
+ * loaded. This method is called at the beginning of every run and
+ * provides access to the {@link Detector} object itself.
+ *
+ * @param detector LCSim {@link Detector} geometry
+ */
+ protected void detectorChanged(Detector detector) {
+
+ // Get the field map from the detector object
+ bFieldMap = detector.getFieldMap();
+
+ // Get the position of the Ecal from the compact description
+ ecalPosition = detector.getConstants().get(ECAL_POSITION_CONSTANT_NAME).getValue();
}
/**
@@ -57,7 +120,7 @@
// Get the collection of LCRelations relating RotatedHelicalTrackHits to
// HelicalTrackHits
- List<LCRelation> rotatedHthToHthRelations = event.get(LCRelation.class, rotatedHthRelationsColName);
+ List<LCRelation> rotatedHthToHthRelations = event.get(LCRelation.class, ROTATED_HTH_REL_COL_NAME);
BaseRelationalTable hthToRotatedHth = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE,
RelationalTable.Weighting.UNWEIGHTED);
hthToRotatedHth.addRelations(rotatedHthToHthRelations);
@@ -65,7 +128,7 @@
RelationalTable hitToStrips = TrackUtils.getHitToStripsTable(event);
RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
- List<HelicalTrackHit> rotatedHths = event.get(HelicalTrackHit.class, rotatedHthCollectionName);
+ List<HelicalTrackHit> rotatedHths = event.get(HelicalTrackHit.class, ROTATED_HTH_COL_NAME);
// Create a container that will be used to store all TrackData objects.
List<TrackData> trackDataCollection = new ArrayList<TrackData>();
@@ -190,6 +253,16 @@
}
}
+ //
+ // Add a track state that contains the extrapolated track position and
+ // parameters at the face of the Ecal.
+ //
+
+ // Extrapolate the track to the face of the Ecal and get the TrackState
+ TrackState state
+ = TrackUtils.extrapolateTrackUsingFieldMap(track, extStartPos, ecalPosition, stepSize, bFieldMap, false);
+ track.getTrackStates().add(state);
+
// The track time is the mean t0 of hits on a track
trackTime = totalT0 / totalHits;
@@ -217,7 +290,7 @@
// Add all collections to the event
event.put(TrackData.TRACK_DATA_COLLECTION, trackDataCollection, TrackTimeData.class, 0);
event.put(TrackData.TRACK_DATA_RELATION_COLLECTION, trackDataRelations, LCRelation.class, 0);
- event.put(trackResidualsCollectionName, trackResidualsCollection, TrackResidualsData.class, 0);
- event.put(trackResidualsRelationsColName, trackToTrackResidualsRelations, LCRelation.class, 0);
+ event.put(TRK_RESIDUALS_COL_NAME, trackResidualsCollection, TrackResidualsData.class, 0);
+ event.put(TRK_RESIDUALS_REL_COL_NAME, trackToTrackResidualsRelations, LCRelation.class, 0);
}
}
|