Print

Print


Commit in java/trunk/tracking/src/main/java/org/hps/recon/tracking on MAIN
HitTimeTrackCheck.java+77added 1070
TrackerReconDriver.java+31-151069 -> 1070
+108-15
1 added + 1 modified, total 2 files
add option for time cut in track finding

java/trunk/tracking/src/main/java/org/hps/recon/tracking
HitTimeTrackCheck.java added at 1070
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/HitTimeTrackCheck.java	                        (rev 0)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/HitTimeTrackCheck.java	2014-09-20 01:51:19 UTC (rev 1070)
@@ -0,0 +1,77 @@
+package org.hps.recon.tracking;
+
+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.recon.tracking.seedtracker.SeedCandidate;
+import org.lcsim.recon.tracking.seedtracker.SeedTrack;
+import org.lcsim.recon.tracking.seedtracker.TrackCheck;
+
+/**
+ *
+ * @author Sho Uemura <[log in to unmask]>
+ * @version $Id: $
+ */
+public class HitTimeTrackCheck implements TrackCheck {
+
+    private final double rmsTimeCut;
+    private final int minTrackHits = 10;
+    private int seedsChecked = 0;
+    private int seedsPassed = 0;
+    private int tracksChecked = 0;
+    private int tracksPassed = 0;
+
+    public HitTimeTrackCheck(double rmsTimeCut) {
+        this.rmsTimeCut = rmsTimeCut;
+    }
+
+    @Override
+    public boolean checkSeed(SeedCandidate candidate) {
+//        System.out.format("seed with %d hits\n", candidate.getHits().size());
+        seedsChecked++;
+        int nStrips = 0;
+        double rmsTime = 0;
+        for (HelicalTrackHit hth : candidate.getHits()) {
+            for (HelicalTrackStrip hts : ((HelicalTrackCross) hth).getStrips()) {
+                nStrips++;
+                rmsTime += hts.time() * hts.time();
+            }
+        }
+//        rmsTime = Math.sqrt(rmsTime / nStrips);
+//        System.out.format("seed RMS %f on %d hits\n",rmsTime,nStrips);
+        boolean passCheck = (rmsTime < minTrackHits * rmsTimeCut * rmsTimeCut);
+        if (passCheck) {
+            seedsPassed++;
+        }
+        if (seedsChecked % 10000 == 0) {
+            System.out.format("Checked %d seeds, %d passed (%d failed)\n", seedsChecked, seedsPassed, seedsChecked - seedsPassed);
+        }
+        return passCheck;
+
+    }
+
+    @Override
+    public boolean checkTrack(SeedTrack track) {
+//        System.out.format("track with %d hits\n", track.getTrackerHits().size());
+        tracksChecked++;
+        int nStrips = 0;
+        double rmsTime = 0;
+        for (TrackerHit hit : track.getTrackerHits()) {
+            for (HelicalTrackStrip hts : ((HelicalTrackCross) hit).getStrips()) {
+                nStrips++;
+                rmsTime += hts.time() * hts.time();
+            }
+        }
+        rmsTime = Math.sqrt(rmsTime / nStrips);
+        System.out.format("track RMS %f on %d hits\n", rmsTime, nStrips);
+        boolean passCheck = (rmsTime < rmsTimeCut);
+        if (passCheck) {
+            tracksPassed++;
+        }
+        if (tracksChecked % 100 == 0) {
+            System.out.format("Checked %d tracks, %d passed (%d failed)\n", tracksChecked, tracksPassed, tracksChecked - tracksPassed);
+        }
+        return passCheck;
+    }
+}

java/trunk/tracking/src/main/java/org/hps/recon/tracking
TrackerReconDriver.java 1069 -> 1070
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java	2014-09-19 23:36:59 UTC (rev 1069)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java	2014-09-20 01:51:19 UTC (rev 1070)
@@ -15,10 +15,10 @@
 import org.lcsim.util.Driver;
 
 /**
- * This class runs the Track Reconstruction for the HPS Test Proposal detector. The tracker
- * digitization must be run in front of it. It is intended to work with the
- * {@link TrackerDigiDriver} digitization Driver.
- * 
+ * This class runs the Track Reconstruction for the HPS Test Proposal detector.
+ * The tracker digitization must be run in front of it. It is intended to work
+ * with the {@link TrackerDigiDriver} digitization Driver.
+ *
  * @author Matt Graham
  */
 public final class TrackerReconDriver extends Driver {
@@ -47,6 +47,7 @@
     private boolean _useHPSMaterialManager = true;
     // enable the use of sectoring using sector binning in SeedTracker
     private boolean _applySectorBinning = true;
+    private double rmsTimeCut = -1;
 
     public TrackerReconDriver() {
     }
@@ -57,8 +58,9 @@
 
     /**
      * Set the tracking strategy resource.
-     * 
-     * @param strategyResource The absolute path to the strategy resource in the hps-java jar.
+     *
+     * @param strategyResource The absolute path to the strategy resource in the
+     * hps-java jar.
      */
     public void setStrategyResource(String strategyResource) {
         this.strategyResource = strategyResource;
@@ -78,7 +80,7 @@
 
     /**
      * Set to enable the use of the HPS material manager implementation
-     * 
+     *
      * @param useHPSMaterialManager switch
      */
     public void setUseHPSMaterialManager(boolean useHPSMaterialManager) {
@@ -90,8 +92,9 @@
     }
 
     /**
-     * Set to enable the sectoring to use the sector bins in checking for consistent hits.
-     * 
+     * Set to enable the sectoring to use the sector bins in checking for
+     * consistent hits.
+     *
      * @param applySectorBinning apply sector binning switch
      */
     public void setApplySectorBinning(boolean applySectorBinning) {
@@ -99,6 +102,14 @@
     }
 
     /**
+     * Set time cut.
+     * @param rmsTimeCut
+     */
+    public void setRmsTimeCut(double rmsTimeCut) {
+        this.rmsTimeCut = rmsTimeCut;
+    }
+
+    /**
      * This is used to setup the Drivers after XML config.
      */
     @Override
@@ -126,7 +137,6 @@
         //
         // 1) Driver to run Seed Tracker.
         //
-
         if (!strategyResource.startsWith("/")) {
             strategyResource = "/org/hps/recon/tracking/strategies/" + strategyResource;
         }
@@ -146,10 +156,15 @@
         // stFinal.setSectorParams(false); //this doesn't actually seem to do anything
         stFinal.setSectorParams(1, 10000);
         add(stFinal);
+
+        if (rmsTimeCut > 0) {
+            stFinal.setTrackCheck(new HitTimeTrackCheck(rmsTimeCut));
+        }
     }
 
     /**
-     * This method is used to run the reconstruction and print debug information.
+     * This method is used to run the reconstruction and print debug
+     * information.
      */
     @Override
     public void process(EventHeader event) {
@@ -174,7 +189,7 @@
                 System.out.println(this.getClass().getSimpleName() + ": chi2 = " + track.getChi2());
             }
         }
-        
+
         // Set the type of track to indicate B-field in Y e.g. for swimming in Wired.
         List<Track> tracks = event.get(Track.class, trackCollectionName);
         setTrackType(tracks);
@@ -185,14 +200,15 @@
         // Add to tracks found.
         ntracks += event.get(Track.class, trackCollectionName).size();
     }
-    
+
     /**
      * Set the track type to Y_FIELD so swimming is done correctly in Wired.
+     *
      * @param tracks The list of <code>Track</code> objects.
      */
     private void setTrackType(List<Track> tracks) {
         for (Track track : tracks) {
-            ((BaseTrack)track).setTrackType(BaseTrack.TrackType.Y_FIELD.ordinal());
+            ((BaseTrack) track).setTrackType(BaseTrack.TrackType.Y_FIELD.ordinal());
         }
     }
 
@@ -203,4 +219,4 @@
             System.out.println(this.getName() + " found " + ntracks + " tracks in " + nevents + " events which is " + ((double) ntracks / (double) nevents) + " tracks per event.");
         }
     }
-}
\ No newline at end of file
+}
SVNspam 0.1