java/trunk/tracking/src/main/java/org/hps/recon/tracking
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java 2014-06-04 23:47:25 UTC (rev 670)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java 2014-06-04 23:48:17 UTC (rev 671)
@@ -1,5 +1,7 @@
package org.hps.recon.tracking;
+import hep.physics.vec.Hep3Vector;
+
import java.util.ArrayList;
import java.util.List;
@@ -9,6 +11,7 @@
import org.lcsim.event.Track;
import org.lcsim.event.TrackerHit;
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.util.Driver;
@@ -27,6 +30,7 @@
String trackCollectionName = "MatchedTracks";
// TODO: Change this to match whatever track name is decided on
String trackTimeDataCollectionName = "TrackTimeData";
+ String trackResidualsCollectionName = "TrackResiduals";
public TrackDataDriver() {}
@@ -48,36 +52,63 @@
// Create a collection to hold the track time and t0 residual data
List<TrackTimeData> timeDataCollection = new ArrayList<TrackTimeData>();
+ // Create a collection to hold the track residuals
+ List<TrackResidualsData> trackResidualsCollection = new ArrayList<TrackResidualsData>();
+
double totalT0 = 0;
double totalHits = 0;
double trackTime = 0;
double t0Residual = 0;
+ double xResidual = 0;
+ double yResidual = 0;
float trackerVolume = -1;
- int layer;
boolean isFirstHit = true;
HpsSiSensor sensor = null;
- TrackTimeData timeData = null;
+ Hep3Vector stereoHitPosition = null;
+ Hep3Vector trackPosition = null;
- List<Double> t0Residuals = new ArrayList<Double>();
- List<Integer> layers = new ArrayList<Integer>();
+ List<Double> t0Residuals = new ArrayList<Double>();
+ List<Double> trackResidualsX = new ArrayList<Double>();
+ List<Float> trackResidualsY = new ArrayList<Float>();
+ List<Integer> sensorLayers = new ArrayList<Integer>();
+ List<Integer> stereoLayers = new ArrayList<Integer>();
+
// Loop over all the tracks in the event
for (Track track : tracks) {
-
+
totalT0 = 0;
totalHits = 0;
t0Residuals.clear();
- layers.clear();
+ sensorLayers.clear();
+ trackResidualsX.clear();
+ trackResidualsY.clear();
+ stereoLayers.clear();
//
- // Calculate the track time
+ // Calculate the track time and track residuals
//
// Loop over all stereo hits comprising a track
for (TrackerHit stereoHit : track.getTrackerHits()) {
+
+ // Add the stereo layer number associated with the track residual
+ stereoLayers.add(((HelicalTrackHit) stereoHit).Layer());
+
+ // Extrapolate the track to the stereo hit position and calculate
+ // track residuals
+ stereoHitPosition = ((HelicalTrackHit) stereoHit).getCorrectedPosition();
+ System.out.println("Stereo Hit Position: " + stereoHitPosition.toString());
+ trackPosition = TrackUtils.extrapolateTrack(track, stereoHitPosition.x());
+ System.out.println("Track Position: " + trackPosition.toString());
+ xResidual = trackPosition.x() - stereoHitPosition.y();
+ yResidual = trackPosition.y() - stereoHitPosition.z();
+ trackResidualsX.add(xResidual);
+ trackResidualsY.add((float) yResidual);
+
// Loop over the clusters comprising the stereo hit
for(HelicalTrackStrip cluster : ((HelicalTrackCross) stereoHit).getStrips()){
@@ -107,7 +138,7 @@
}
// Add the layer number associated with this residual to the list of layers
- layers.add(sensor.getLayerNumber());
+ sensorLayers.add(sensor.getLayerNumber());
// Find the t0 residual and add it to the list of residuals
t0Residual = trackTime - cluster.time();
@@ -117,9 +148,12 @@
}
}
- timeDataCollection.add(new TrackTimeData(trackerVolume, trackTime, layers, t0Residuals));
+ timeDataCollection.add(new TrackTimeData(trackerVolume, trackTime, sensorLayers, t0Residuals));
+ trackResidualsCollection.add(new TrackResidualsData((int) trackerVolume, stereoLayers, trackResidualsX, trackResidualsY));
+
}
event.put(trackTimeDataCollectionName, timeDataCollection, TrackTimeData.class, 0);
+ event.put(trackResidualsCollectionName, trackResidualsCollection, TrackResidualsData.class, 0);
}
}