Print

Print


Author: [log in to unmask]
Date: Tue Dec  1 12:13:47 2015
New Revision: 3996

Log:
tweaks for time cal

Added:
    java/trunk/users/src/main/java/org/hps/users/meeg/TrackCleanupDriver.java
      - copied, changed from r3232, java/trunk/users/src/main/java/org/hps/users/meeg/ReconParticleCleanupDriver.java
Modified:
    java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/HelicalTrackHitDriver.java

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java	Tue Dec  1 12:13:47 2015
@@ -571,7 +571,7 @@
             IHistogram1D hitTimeResidual = getSensorPlot(plotDir + trackCollectionName + "/" + triggerType + "/" + timeresidDir + "hitTimeResidual_", getNiceSensorName(sensor));
             IFitResult result = fitGaussian(hitTimeResidual, fitter, "range=\"(-20.0,20.0)\"");
             if (result != null) {
-                LOGGER.info(String.format("%s\t%f\t%f\t%d\t%d", getNiceSensorName(sensor), result.fittedParameters()[1], result.fittedParameters()[2], sensor.getFebID(), sensor.getFebHybridID()));
+                System.out.format("%s\t%f\t%f\t%d\t%d\t%f\n", getNiceSensorName(sensor), result.fittedParameters()[1], result.fittedParameters()[2], sensor.getFebID(), sensor.getFebHybridID(), sensor.getT0Shift());
             }
         }
 

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 Dec  1 12:13:47 2015
@@ -427,7 +427,7 @@
                     Collection<TrackerHit> htsList = hittostrip.allFrom(cross);
                     for (TrackerHit strip : htsList) {
                         Set<HelicalTrackHit> sharedCrosses = hittostrip.allTo(strip);
-                        System.out.println(sharedCrosses.size());
+//                        System.out.println(sharedCrosses.size());
                         if (sharedCrosses.size() > 1) {
 //                    this.getLogger().warning(String.format("removing possible ghost hit"));
                             iter.remove();

Copied: java/trunk/users/src/main/java/org/hps/users/meeg/TrackCleanupDriver.java (from r3232, java/trunk/users/src/main/java/org/hps/users/meeg/ReconParticleCleanupDriver.java)
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/meeg/ReconParticleCleanupDriver.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/meeg/TrackCleanupDriver.java	Tue Dec  1 12:13:47 2015
@@ -1,13 +1,14 @@
 package org.hps.users.meeg;
 
-import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
-import org.hps.recon.ecal.cluster.ClusterUtilities;
 import org.hps.recon.tracking.TrackUtils;
 import org.lcsim.event.EventHeader;
-import org.lcsim.event.ReconstructedParticle;
 import org.lcsim.event.RelationalTable;
+import org.lcsim.event.Track;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
 import org.lcsim.util.Driver;
 
 /**
@@ -17,119 +18,142 @@
  * @author Sho Uemura <[log in to unmask]>
  * @version $Id: $
  */
-public class ReconParticleCleanupDriver extends Driver {
+public class TrackCleanupDriver extends Driver {
 
-    private final String finalStateParticlesColName = "FinalStateParticles";
-    private final String[] v0ColNames = {"UnconstrainedV0Candidates", "BeamspotConstrainedV0Candidates", "TargetConstrainedV0Candidates"};
+    private final String trackColName = "MatchedTracks";
+//    private final String finalStateParticlesColName = "FinalStateParticles";
+//    private final String[] v0ColNames = {"UnconstrainedV0Candidates", "BeamspotConstrainedV0Candidates", "TargetConstrainedV0Candidates"};
 
-    private double fsDeltaT = 43.5;
-    private double fsDeltaTCut = -1;
-    private double maxTrackDt = -1;
-    private boolean discardUnmatchedTracks = false;
-
-    public void setDiscardUnmatchedTracks(boolean discardUnmatchedTracks) {
-        this.discardUnmatchedTracks = discardUnmatchedTracks;
-    }
-
-    /**
-     * Center value for (cluster - track) time cut.
-     *
-     * @param fsDeltaT
-     */
-    public void setFsDeltaT(double fsDeltaT) {
-        this.fsDeltaT = fsDeltaT;
-    }
-
-    /**
-     * Cut window half-width for (cluster - track) time cut. Negative value
-     * disables this cut.
-     *
-     * @param fsDeltaTCut
-     */
-    public void setFsDeltaTCut(double fsDeltaTCut) {
-        this.fsDeltaTCut = fsDeltaTCut;
-    }
-
-    /**
-     * Cut window half-width for (track - track) time cut. Negative value
-     * disables this cut.
-     *
-     * @param maxTrackDt
-     */
-    public void setMaxTrackDt(double maxTrackDt) {
-        this.maxTrackDt = maxTrackDt;
-    }
+//    private double fsDeltaT = 43.5;
+//    private double fsDeltaTCut = -1;
+//    private double maxTrackDt = -1;
+//    private boolean discardUnmatchedTracks = false;
+//
+//    public void setDiscardUnmatchedTracks(boolean discardUnmatchedTracks) {
+//        this.discardUnmatchedTracks = discardUnmatchedTracks;
+//    }
+//
+//    /**
+//     * Center value for (cluster - track) time cut.
+//     *
+//     * @param fsDeltaT
+//     */
+//    public void setFsDeltaT(double fsDeltaT) {
+//        this.fsDeltaT = fsDeltaT;
+//    }
+//
+//    /**
+//     * Cut window half-width for (cluster - track) time cut. Negative value
+//     * disables this cut.
+//     *
+//     * @param fsDeltaTCut
+//     */
+//    public void setFsDeltaTCut(double fsDeltaTCut) {
+//        this.fsDeltaTCut = fsDeltaTCut;
+//    }
+//
+//    /**
+//     * Cut window half-width for (track - track) time cut. Negative value
+//     * disables this cut.
+//     *
+//     * @param maxTrackDt
+//     */
+//    public void setMaxTrackDt(double maxTrackDt) {
+//        this.maxTrackDt = maxTrackDt;
+//    }
 
     @Override
     public void process(EventHeader event) {
         RelationalTable hitToStrips = TrackUtils.getHitToStripsTable(event);
         RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
 
-        for (Iterator<ReconstructedParticle> iter = event.get(ReconstructedParticle.class, finalStateParticlesColName).listIterator(); iter.hasNext();) {
-            ReconstructedParticle fs = iter.next();
-            if (discardUnmatchedTracks && fs.getClusters().isEmpty()) {//track without cluster, discard
-                iter.remove();
-                continue;
-            }
-
-            if (fs.getTracks().isEmpty()) {//cluster without track (photon), keep
-                continue;
-            }
-
-            if (!fs.getClusters().isEmpty() && !fs.getTracks().isEmpty()) {
-                double deltaT = ClusterUtilities.getSeedHitTime(fs.getClusters().get(0)) - TrackUtils.getTrackTime(fs.getTracks().get(0), hitToStrips, hitToRotated);
-                if (fsDeltaTCut > 0 && Math.abs(deltaT - fsDeltaT) > fsDeltaTCut) {//bad track-cluster time match, discard
-                    iter.remove();
-                }
-            }
-        }
-
-        Set<ReconstructedParticle> fsParticles = new HashSet<ReconstructedParticle>(event.get(ReconstructedParticle.class, finalStateParticlesColName));
-
-        for (String colName : v0ColNames) {
-            v0Loop:
-            for (Iterator<ReconstructedParticle> iter = event.get(ReconstructedParticle.class, colName).listIterator(); iter.hasNext();) {
-                ReconstructedParticle v0 = iter.next();
-
-                ReconstructedParticle[] particles = new ReconstructedParticle[2];
-                for (ReconstructedParticle particle : v0.getParticles()) //                tracks.addAll(particle.getTracks());  //add add electron first, then positron...down below
-                {
-                    if (particle.getCharge() < 0) {
-                        particles[0] = particle;
-                    } else if (particle.getCharge() > 0) {
-                        particles[1] = particle;
-                    } else {
-                        throw new RuntimeException("expected only electron and positron in vertex, got something with charge 0");
-                    }
-                }
-                if (particles[0] == null || particles[1] == null) {
-                    throw new RuntimeException("vertex needs e+ and e- but is missing one or both");
-                }
-                double deltaT = TrackUtils.getTrackTime(particles[0].getTracks().get(0), hitToStrips, hitToRotated) - TrackUtils.getTrackTime(particles[1].getTracks().get(0), hitToStrips, hitToRotated); //electron time - positron time
-
-                if (hasSharedStrips(v0, hitToStrips, hitToRotated)) {
-                    iter.remove();
-                    continue;
-                }
-                if (maxTrackDt > 0 && Math.abs(deltaT) > maxTrackDt) {
-                    iter.remove();
-                    continue;
-                }
-                for (ReconstructedParticle particle : v0.getParticles()) {
-                    if (!fsParticles.contains(particle)) {
-                        iter.remove();
-                        continue v0Loop;
+        List<Track> tracks = event.get(Track.class, trackColName);
+        
+        {
+            Iterator<Track> iter = tracks.iterator();
+            trackLoop:
+            while (iter.hasNext()) {
+                Track track = iter.next();
+                for (TrackerHit hit : track.getTrackerHits()) {
+                    Set<TrackerHit> htsList = hitToStrips.allFrom(hitToRotated.from(hit));
+                    for (TrackerHit strip : htsList) {
+//                        System.out.println(hittostrip.allTo(strip).size());
+                        Set<HelicalTrackHit> sharedCrosses = hitToStrips.allTo(strip);
+                        if (sharedCrosses.size() > 1) {
+//                            this.getLogger().warning(String.format("removing track with possible ghost hit"));
+                            iter.remove();
+                            continue trackLoop;
+                        }
                     }
                 }
             }
         }
+        
+//        for (Iterator<ReconstructedParticle> iter = event.get(ReconstructedParticle.class, finalStateParticlesColName).listIterator(); iter.hasNext();) {
+//            ReconstructedParticle fs = iter.next();
+//            if (discardUnmatchedTracks && fs.getClusters().isEmpty()) {//track without cluster, discard
+//                iter.remove();
+//                continue;
+//            }
+//
+//            if (fs.getTracks().isEmpty()) {//cluster without track (photon), keep
+//                continue;
+//            }
+//
+//            if (!fs.getClusters().isEmpty() && !fs.getTracks().isEmpty()) {
+//                double deltaT = ClusterUtilities.getSeedHitTime(fs.getClusters().get(0)) - TrackUtils.getTrackTime(fs.getTracks().get(0), hitToStrips, hitToRotated);
+//                if (fsDeltaTCut > 0 && Math.abs(deltaT - fsDeltaT) > fsDeltaTCut) {//bad track-cluster time match, discard
+//                    iter.remove();
+//                }
+//            }
+//        }
+//
+//        Set<ReconstructedParticle> fsParticles = new HashSet<ReconstructedParticle>(event.get(ReconstructedParticle.class, finalStateParticlesColName));
+//
+//        for (String colName : v0ColNames) {
+//            v0Loop:
+//            for (Iterator<ReconstructedParticle> iter = event.get(ReconstructedParticle.class, colName).listIterator(); iter.hasNext();) {
+//                ReconstructedParticle v0 = iter.next();
+//
+//                ReconstructedParticle[] particles = new ReconstructedParticle[2];
+//                for (ReconstructedParticle particle : v0.getParticles()) //                tracks.addAll(particle.getTracks());  //add add electron first, then positron...down below
+//                {
+//                    if (particle.getCharge() < 0) {
+//                        particles[0] = particle;
+//                    } else if (particle.getCharge() > 0) {
+//                        particles[1] = particle;
+//                    } else {
+//                        throw new RuntimeException("expected only electron and positron in vertex, got something with charge 0");
+//                    }
+//                }
+//                if (particles[0] == null || particles[1] == null) {
+//                    throw new RuntimeException("vertex needs e+ and e- but is missing one or both");
+//                }
+//                double deltaT = TrackUtils.getTrackTime(particles[0].getTracks().get(0), hitToStrips, hitToRotated) - TrackUtils.getTrackTime(particles[1].getTracks().get(0), hitToStrips, hitToRotated); //electron time - positron time
+//
+//                if (hasSharedStrips(v0, hitToStrips, hitToRotated)) {
+//                    iter.remove();
+//                    continue;
+//                }
+//                if (maxTrackDt > 0 && Math.abs(deltaT) > maxTrackDt) {
+//                    iter.remove();
+//                    continue;
+//                }
+//                for (ReconstructedParticle particle : v0.getParticles()) {
+//                    if (!fsParticles.contains(particle)) {
+//                        iter.remove();
+//                        continue v0Loop;
+//                    }
+//                }
+//            }
+//        }
     }
 
-    private static boolean hasSharedStrips(ReconstructedParticle vertex, RelationalTable hittostrip, RelationalTable hittorotated) {
-        return hasSharedStrips(vertex.getParticles().get(0), vertex.getParticles().get(1), hittostrip, hittorotated);
-    }
-
-    private static boolean hasSharedStrips(ReconstructedParticle fs1, ReconstructedParticle fs2, RelationalTable hittostrip, RelationalTable hittorotated) {
-        return TrackUtils.hasSharedStrips(fs1.getTracks().get(0), fs2.getTracks().get(0), hittostrip, hittorotated);
-    }
+//    private static boolean hasSharedStrips(ReconstructedParticle vertex, RelationalTable hittostrip, RelationalTable hittorotated) {
+//        return hasSharedStrips(vertex.getParticles().get(0), vertex.getParticles().get(1), hittostrip, hittorotated);
+//    }
+//
+//    private static boolean hasSharedStrips(ReconstructedParticle fs1, ReconstructedParticle fs2, RelationalTable hittostrip, RelationalTable hittorotated) {
+//        return TrackUtils.hasSharedStrips(fs1.getTracks().get(0), fs2.getTracks().get(0), hittostrip, hittorotated);
+//    }
 }