Print

Print


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;
-//    }
 }