Print

Print


Author: [log in to unmask]
Date: Tue Mar 31 19:29:03 2015
New Revision: 2645

Log:
define hit time cuts relative to other hits, not any absolute time

Modified:
    java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineRecon.lcsim
    java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineTruthRecon.lcsim
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/HitTimeTrackCheck.java

Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineRecon.lcsim
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineRecon.lcsim	(original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineRecon.lcsim	Tue Mar 31 19:29:03 2015
@@ -37,13 +37,15 @@
         </driver>
         <driver name="HelicalTrackHitDriver" type="org.hps.recon.tracking.HelicalTrackHitDriver">
             <debug>false</debug>
-            <clusterTimeCut>12.0</clusterTimeCut>
+            <!--<clusterTimeCut>12.0</clusterTimeCut>-->
+            <maxDt>16.0</maxDt>
             <maxSeperation>20.0</maxSeperation>
             <tolerance>1.0</tolerance>
         </driver>
         <driver name="TrackerReconDriver" type="org.hps.recon.tracking.TrackerReconDriver">
             <strategyResource>HPS-Full.xml</strategyResource>
             <debug>false</debug>
+            <rmsTimeCut>8.0</rmsTimeCut>
         </driver>        
         <driver name="GBLDriver" type="org.hps.recon.tracking.gbl.GBLOutputDriver">
             <debug>0</debug>

Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineTruthRecon.lcsim
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineTruthRecon.lcsim	(original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/recon/HPS2014OfflineTruthRecon.lcsim	Tue Mar 31 19:29:03 2015
@@ -38,13 +38,15 @@
         </driver>
         <driver name="HelicalTrackHitDriver" type="org.hps.recon.tracking.HelicalTrackHitDriver">
             <debug>false</debug>
-            <clusterTimeCut>12.0</clusterTimeCut>
+            <!--<clusterTimeCut>12.0</clusterTimeCut>-->
+            <maxDt>16.0</maxDt>
             <maxSeperation>20.0</maxSeperation>
             <tolerance>1.0</tolerance>
         </driver>
         <driver name="TrackerReconDriver" type="org.hps.recon.tracking.TrackerReconDriver">
             <strategyResource>HPS-Full.xml</strategyResource>
             <debug>false</debug>
+            <rmsTimeCut>8.0</rmsTimeCut>
         </driver>        
         <driver name="GBLDriver" type="org.hps.recon.tracking.gbl.GBLOutputDriver">
             <debug>0</debug>

Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java	Tue Mar 31 19:29:03 2015
@@ -6,6 +6,7 @@
 import hep.physics.vec.VecOp;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import org.hps.recon.tracking.axial.HelicalTrack2DHit;
@@ -49,6 +50,7 @@
     private boolean _debug = false;
     private double _clusterTimeCut = -99; // if negative, don't cut..otherwise,
     // dt cut time in ns
+    private double maxDt = -99; // max time difference between the two hits in a cross
     private String _subdetectorName = "Tracker";
     private final Map<String, String> _stereomap = new HashMap<String, String>();
     private List<SvtStereoLayer> stereoLayers = null;
@@ -87,6 +89,10 @@
      */
     public void setClusterTimeCut(double dtCut) {
         this._clusterTimeCut = dtCut;
+    }
+
+    public void setMaxDt(double maxDt) {
+        this.maxDt = maxDt;
     }
 
     /**
@@ -332,7 +338,12 @@
                 } // Loop over stereo pairs
             }
 
-            for (HelicalTrackCross cross : helicalTrackCrosses) {
+            for (Iterator<HelicalTrackCross> iter = helicalTrackCrosses.listIterator(); iter.hasNext();) {
+                HelicalTrackCross cross = iter.next();
+                if (maxDt > 0 && Math.abs(cross.getStrips().get(0).time() - cross.getStrips().get(1).time()) > maxDt) {
+                    iter.remove();
+                    continue;
+                }
                 if (cross.getMCParticles() != null)
                     for (MCParticle mcp : cross.getMCParticles())
                         mcrelations.add(new MyLCRelation((HelicalTrackHit) cross, mcp));

Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/HitTimeTrackCheck.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/HitTimeTrackCheck.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/HitTimeTrackCheck.java	Tue Mar 31 19:29:03 2015
@@ -16,7 +16,8 @@
 public class HitTimeTrackCheck implements TrackCheck {
 
     private final double rmsTimeCut;
-    private final int minTrackHits = 10;
+//    private final int minTrackHits = 10;
+    private final int minTrackHits = 6;
     private int seedsChecked = 0;
     private int seedsPassed = 0;
     private int tracksChecked = 0;
@@ -29,18 +30,29 @@
     @Override
     public boolean checkSeed(SeedCandidate candidate) {
 //        System.out.format("seed with %d hits\n", candidate.getHits().size());
-        seedsChecked++;
         int nStrips = 0;
+        double meanTime = 0;
+        for (HelicalTrackHit hth : candidate.getHits()) {
+            for (HelicalTrackStrip hts : ((HelicalTrackCross) hth).getStrips()) {
+                nStrips++;
+                meanTime += hts.time();
+            }
+        }
+        meanTime /= nStrips;
         double rmsTime = 0;
         for (HelicalTrackHit hth : candidate.getHits()) {
             for (HelicalTrackStrip hts : ((HelicalTrackCross) hth).getStrips()) {
-                nStrips++;
-                rmsTime += hts.time() * hts.time();
+                rmsTime += Math.pow(hts.time() - meanTime, 2);
+//                rmsTime += hts.time() * hts.time();
+//                rmsTime += Math.abs(hts.time());
             }
         }
+//        if (nStrips<6) return true;
+        seedsChecked++;
 //        rmsTime = Math.sqrt(rmsTime / nStrips);
 //        System.out.format("seed RMS %f on %d hits\n",rmsTime,nStrips);
         boolean passCheck = (rmsTime < minTrackHits * rmsTimeCut * rmsTimeCut);
+//        boolean passCheck = (rmsTime < minTrackHits * rmsTimeCut);
         if (passCheck) {
             seedsPassed++;
         }
@@ -56,15 +68,25 @@
 //        System.out.format("track with %d hits\n", track.getTrackerHits().size());
         tracksChecked++;
         int nStrips = 0;
+        double meanTime = 0;
+        for (TrackerHit hit : track.getTrackerHits()) {
+            for (HelicalTrackStrip hts : ((HelicalTrackCross) hit).getStrips()) {
+                nStrips++;
+                meanTime += hts.time();
+            }
+        }
+        meanTime /= nStrips;
         double rmsTime = 0;
         for (TrackerHit hit : track.getTrackerHits()) {
             for (HelicalTrackStrip hts : ((HelicalTrackCross) hit).getStrips()) {
-                nStrips++;
-                rmsTime += hts.time() * hts.time();
+                rmsTime += Math.pow(hts.time() - meanTime, 2);
+//                rmsTime += hts.time() * hts.time();
+//                rmsTime += Math.abs(hts.time());
             }
         }
         rmsTime = Math.sqrt(rmsTime / nStrips);
-        System.out.format("track RMS %f on %d hits\n", rmsTime, nStrips);
+//        rmsTime = rmsTime / nStrips;
+//        System.out.format("track RMS %f on %d hits\n", rmsTime, nStrips);
         boolean passCheck = (rmsTime < rmsTimeCut);
         if (passCheck) {
             tracksPassed++;