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++;