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); +// } }