java/trunk/tracking/src/main/java/org/hps/recon/tracking
--- 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
--- 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
+}