Author: [log in to unmask]
Date: Fri Aug 21 17:42:33 2015
New Revision: 3396
Log:
Formatting and documentation.
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 Fri Aug 21 17:42:33 2015
@@ -1,7 +1,6 @@
package org.hps.recon.tracking;
import hep.physics.vec.Hep3Vector;
-import hep.physics.vec.VecOp;
import java.util.ArrayList;
import java.util.List;
@@ -21,51 +20,45 @@
import org.lcsim.util.Driver;
/**
+ * Driver used to persist additional {@link Track} information via a {@link GenericObject}.
*
- * @author Omar Moreno <[log in to unmask]>
- * @author Sho Uemura <[log in to unmask]>
- *
+ * @author <a href="mailto:[log in to unmask]">Omar Moreno</a>
+ * @author <a href="[log in to unmask]">Sho Uemura</a>
*/
-public class TrackDataDriver extends Driver {
-
- // Collection Names
- String trackCollectionName = "MatchedTracks";
- String trackResidualsCollectionName = "TrackResiduals";
- String rotatedHthRelationsColName = "RotatedHelicalTrackHitRelations";
- String rotatedHthCollectionName = "RotatedHelicalTrackHits";
- String trackResidualsRelationsColName = "TrackResidualsRelations";
+public final class TrackDataDriver extends Driver {
+
+ /** Collection Names */
+ private String trackResidualsCollectionName = "TrackResiduals";
+ private String rotatedHthRelationsColName = "RotatedHelicalTrackHitRelations";
+ private String rotatedHthCollectionName = "RotatedHelicalTrackHits";
+ private String trackResidualsRelationsColName = "TrackResidualsRelations";
/** Default constructor */
public TrackDataDriver() {
}
-
- public void setTrackCollectionName(String name) {
- this.trackCollectionName = name;
- }
-
+
+ /**
+ * Method called by the framework to process the event.
+ *
+ * @param event : LCSim event
+ */
protected void process(EventHeader event) {
- // Check if the event contains a collection of the type Track. If it
+ // Check if the event contains a collection of the type Track. If it
// doesn't skip the event.
- if (!event.hasCollection(Track.class)) return;
-
- // If the event doesn't contain a collection of tracks, skip it.
- //if (!event.hasCollection(Track.class, trackCollectionName)) {
- // return;
- //}
-
- // Get all collections of the type Track from the event. This is
+ if (!event.hasCollection(Track.class))
+ return;
+
+ // Get all collections of the type Track from the event. This is
// required since the event contains a track collection for each of the
// different tracking strategies.
List<List<Track>> trackCollections = event.get(Track.class);
-
- // Get the collection of tracks from the event
- //List<Track> tracks = event.get(Track.class, trackCollectionName);
// Get the collection of LCRelations relating RotatedHelicalTrackHits to
// HelicalTrackHits
List<LCRelation> rotatedHthToHthRelations = event.get(LCRelation.class, rotatedHthRelationsColName);
- BaseRelationalTable hthToRotatedHth = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE, RelationalTable.Weighting.UNWEIGHTED);
+ BaseRelationalTable hthToRotatedHth = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE,
+ RelationalTable.Weighting.UNWEIGHTED);
hthToRotatedHth.addRelations(rotatedHthToHthRelations);
RelationalTable hitToStrips = TrackUtils.getHitToStripsTable(event);
@@ -83,7 +76,8 @@
// Create a collection to hold the track residuals
List<TrackResidualsData> trackResidualsCollection = new ArrayList<TrackResidualsData>();
- // Create a collection of LCRelations between a track and the track residuals
+ // Create a collection of LCRelations between a track and the track
+ // residuals
List<LCRelation> trackToTrackResidualsRelations = new ArrayList<LCRelation>();
double xResidual = 0;
@@ -109,134 +103,103 @@
List<Integer> stereoLayers = new ArrayList<Integer>();
// Loop over each of the track collections retrieved from the event
- for (List<Track> tracks : trackCollections) {
-
- // Loop over all the tracks in the event
- for (Track track : tracks) {
-
- totalT0 = 0;
- totalHits = 0;
- t0Residuals.clear();
- sensorLayers.clear();
- trackResidualsX.clear();
- trackResidualsY.clear();
- stereoLayers.clear();
- isFirstHit = true;
-
- //
- // Change the position of a HelicalTrackHit to be the corrected one.
- //
- // Loop over all stereo hits comprising a track
- for (TrackerHit rotatedStereoHit : track.getTrackerHits()) {
-
- // Add the stereo layer number associated with the track residual
- stereoLayers.add(((HelicalTrackHit) rotatedStereoHit).Layer());
-
- // Extrapolate the track to the stereo hit position and calculate
- // track residuals
- stereoHitPosition = ((HelicalTrackHit) rotatedStereoHit).getCorrectedPosition();
- trackPosition = TrackUtils.extrapolateTrack(track, stereoHitPosition.x());
- xResidual = trackPosition.x() - stereoHitPosition.y();
- yResidual = trackPosition.y() - stereoHitPosition.z();
- trackResidualsX.add(xResidual);
- trackResidualsY.add((float) yResidual);
+ for (List<Track> tracks : trackCollections) {
+
+ // Loop over all the tracks in the event
+ for (Track track : tracks) {
+
+ totalT0 = 0;
+ totalHits = 0;
+ t0Residuals.clear();
+ sensorLayers.clear();
+ trackResidualsX.clear();
+ trackResidualsY.clear();
+ stereoLayers.clear();
+ isFirstHit = true;
//
- // Change the persisted position of both RotatedHelicalTrackHits
- // and HelicalTrackHits to the corrected position.
+ // Change the position of a HelicalTrackHit to be the corrected
+ // one.
+ // FIXME: Now that multiple track collections are being used,
+ // which track should be used to apply the correction?
+ // The best track from each of the collections?
+ // How is the "best track" defined? --OM
//
- // Get the HelicalTrackHit corresponding to the RotatedHelicalTrackHit
- // associated with a track
- helicalTrackHit = (HelicalTrackHit) hthToRotatedHth.from(rotatedStereoHit);
- ((HelicalTrackHit) rotatedStereoHit).setPosition(stereoHitPosition.v());
- stereoHitPosition = CoordinateTransformations.transformVectorToDetector(stereoHitPosition);
- helicalTrackHit.setPosition(stereoHitPosition.v());
-
- // Loop over the clusters comprising the stereo hit
- for (HelicalTrackStrip cluster : ((HelicalTrackCross) rotatedStereoHit).getStrips()) {
-
- totalT0 += cluster.time();
- totalHits++;
-
- if (isFirstHit) {
- sensor = (HpsSiSensor) ((RawTrackerHit) cluster.rawhits().get(0)).getDetectorElement();
- if (sensor.isTopLayer()) {
- trackerVolume = 0;
- } else if (sensor.isBottomLayer()) {
- trackerVolume = 1;
+ // Loop over all stereo hits comprising a track
+ for (TrackerHit rotatedStereoHit : track.getTrackerHits()) {
+
+ // Add the stereo layer number associated with the track
+ // residual
+ stereoLayers.add(((HelicalTrackHit) rotatedStereoHit).Layer());
+
+ // Extrapolate the track to the stereo hit position and
+ // calculate track residuals
+ stereoHitPosition = ((HelicalTrackHit) rotatedStereoHit).getCorrectedPosition();
+ trackPosition = TrackUtils.extrapolateTrack(track, stereoHitPosition.x());
+ xResidual = trackPosition.x() - stereoHitPosition.y();
+ yResidual = trackPosition.y() - stereoHitPosition.z();
+ trackResidualsX.add(xResidual);
+ trackResidualsY.add((float) yResidual);
+
+ //
+ // Change the persisted position of both
+ // RotatedHelicalTrackHits and HelicalTrackHits to the
+ // corrected position.
+ //
+
+ // Get the HelicalTrackHit corresponding to the
+ // RotatedHelicalTrackHit associated with a track
+ helicalTrackHit = (HelicalTrackHit) hthToRotatedHth.from(rotatedStereoHit);
+ ((HelicalTrackHit) rotatedStereoHit).setPosition(stereoHitPosition.v());
+ stereoHitPosition = CoordinateTransformations.transformVectorToDetector(stereoHitPosition);
+ helicalTrackHit.setPosition(stereoHitPosition.v());
+
+ // Loop over the clusters comprising the stereo hit
+ for (HelicalTrackStrip cluster : ((HelicalTrackCross) rotatedStereoHit).getStrips()) {
+
+ totalT0 += cluster.time();
+ totalHits++;
+
+ if (isFirstHit) {
+ sensor = (HpsSiSensor) ((RawTrackerHit) cluster.rawhits().get(0)).getDetectorElement();
+ if (sensor.isTopLayer()) {
+ trackerVolume = 0;
+ } else if (sensor.isBottomLayer()) {
+ trackerVolume = 1;
+ }
+ isFirstHit = false;
}
- isFirstHit = false;
}
}
+
+ // The track time is the mean t0 of hits on a track
+ trackTime = totalT0 / totalHits;
+
+ // Calculate the track isolation constants for each of the
+ // layers
+ Double[] isolations = TrackUtils.getIsolations(track, hitToStrips, hitToRotated);
+ double qualityArray[] = new double[isolations.length];
+ for (int i = 0; i < isolations.length; i++) {
+ qualityArray[i] = isolations[i] == null ? -99999999.0 : isolations[i];
+ }
+
+ // Create a new TrackData object and add it to the event
+ TrackData trackData = new TrackData(trackerVolume, trackTime, qualityArray);
+ trackDataCollection.add(trackData);
+ trackDataRelations.add(new BaseLCRelation(trackData, track));
+
+ // Create a new TrackResidualsData object and add it to the event
+ TrackResidualsData trackResiduals = new TrackResidualsData((int) trackerVolume, stereoLayers,
+ trackResidualsX, trackResidualsY);
+ trackResidualsCollection.add(trackResiduals);
+ trackToTrackResidualsRelations.add(new BaseLCRelation(trackResiduals, track));
}
-
- // The track time is the mean t0 of hits on a track
- trackTime = totalT0 / totalHits;
- Double[] isolations = TrackUtils.getIsolations(track, hitToStrips, hitToRotated);
-
-// double l1Isolation = 99999999.0;
-// double l2Isolation = 99999999.0;
-// // Loop over all stereo hits comprising a track
-// for (TrackerHit stereoHit : track.getTrackerHits()) {
-// // Loop over the clusters comprising the stereo hit
-// for (HelicalTrackStrip cluster : ((HelicalTrackCross) stereoHit).getStrips()) {
-//// System.out.println(cluster.layer());
-// if (cluster.layer() == 1) {
-// l1Isolation = getNearestDistance(cluster, rotatedHths);
-// } else if (cluster.layer() == 2) {
-// l2Isolation = getNearestDistance(cluster, rotatedHths);
-// }
-// }
-// }
- double qualityArray[] = new double[isolations.length];
- for (int i = 0; i < isolations.length; i++) {
- qualityArray[i] = isolations[i] == null ? -99999999.0 : isolations[i];
- }
- TrackData trackData = new TrackData(trackerVolume, trackTime, qualityArray);
- trackDataCollection.add(trackData);
- trackDataRelations.add(new BaseLCRelation(trackData, track));
-
- TrackResidualsData trackResiduals = new TrackResidualsData((int) trackerVolume, stereoLayers, trackResidualsX, trackResidualsY);
- trackResidualsCollection.add(trackResiduals);
- trackToTrackResidualsRelations.add(new BaseLCRelation(trackResiduals, track));
}
- }
+
+ // 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);
}
-//
-// private static Double getNearestDistance(HelicalTrackStrip cl, List<HelicalTrackHit> toththits) {
-// Hep3Vector corigin = cl.origin();
-// Hep3Vector uvec = VecOp.mult(cl.umeas(), cl.u());
-// Hep3Vector clvec = VecOp.add(corigin, uvec);
-// int layer = cl.layer();
-//// HelicalTrackStrip nearest = null;
-//// Hep3Vector nearestvec = null;
-// Double mindist = 99999999.0;
-// for (HelicalTrackHit hth : toththits) {
-// HelicalTrackCross cross = (HelicalTrackCross) hth;
-// for (HelicalTrackStrip str : cross.getStrips()) {
-// if (layer == str.layer() && str != cl) {
-// Hep3Vector strorigin = str.origin();
-// Hep3Vector struvec = VecOp.mult(str.umeas(), str.u());
-// Hep3Vector strvec = VecOp.add(strorigin, struvec);
-// double origindist = VecOp.sub(corigin, strorigin).magnitude();
-// double dist = VecOp.sub(clvec, strvec).magnitude();
-// if (origindist == 0.0 && dist != 0.0 && dist < Math.abs(mindist)) {
-// mindist = VecOp.sub(clvec, strvec).magnitude();
-// if (Math.abs(clvec.z()) > Math.abs(strvec.z())) {
-// mindist = -mindist;
-// }
-//// nearest = str;
-//// nearestvec = strvec;
-// }
-// }
-// }
-// }
-//// System.out.println(clvec);
-//// System.out.println(nearestvec);
-// return mindist;
-// }
}
|