Commit in hps-java/src/main/java/org/lcsim/hps on MAIN | |||
users/phansson/ecalGainAna.java | +3 | -1 | 1.5 -> 1.6 |
/ECalGainDriver.java | +157 | -65 | 1.7 -> 1.8 |
recon/tracking/EcalTrackMatch.java | +6 | -10 | 1.2 -> 1.3 |
+166 | -76 |
fix bug in track matching; rewrite ECalGainDriver
diff -u -r1.5 -r1.6 --- ecalGainAna.java 27 Aug 2012 20:02:04 -0000 1.5 +++ ecalGainAna.java 29 Aug 2012 20:49:23 -0000 1.6 @@ -120,6 +120,8 @@
IHistogramFactory hf = af.createHistogramFactory(null); IPlotter plotter = af.createPlotterFactory().create();
+ plotter.setParameter("plotterWidth", "600"); + plotter.setParameter("plotterHeight", "400");
plotter.createRegion(); IHistogram2D ecalPlot = hf.createHistogram2D("ECal map", 47, -23.5, 23.5, 11, -5.5, 5.5); plotter.region(0).plot(ecalPlot);
@@ -213,7 +215,7 @@
if (peSim.allEntries() >= minCount && peReal.allEntries() >= minCount) { gain *= (peSim.mean() / peReal.mean()); } else if (peHVSim.allEntries() >= minCount && peHVReal.allEntries() >= minCount) {
-// gain *= (peHVSim.mean() / peHVReal.mean());
+ gain *= (peHVSim.mean() / peHVReal.mean());
} gainStream.format("%d\t%d\t%f\n", x, y, gain); ecalPlot.fill(x, y, gain);
diff -u -r1.7 -r1.8 --- ECalGainDriver.java 28 Aug 2012 20:31:55 -0000 1.7 +++ ECalGainDriver.java 29 Aug 2012 20:49:23 -0000 1.8 @@ -22,6 +22,7 @@
import org.lcsim.hps.monitoring.Resettable; import org.lcsim.hps.recon.ecal.HPSEcalCluster; import org.lcsim.hps.recon.tracking.EcalTrackMatch;
+import org.lcsim.hps.users.omoreno.ExtendTrack;
import org.lcsim.util.Driver; import org.lcsim.util.aida.AIDA;
@@ -42,7 +43,6 @@
private boolean simTrigger = false; //Print out cluster and track to file private PrintWriter gainWriter = null;
- private EcalTrackMatch trkMatchTool = null;
private boolean hideFrame = false; private int refreshRate = 100; private AIDA aida = AIDA.defaultInstance();
@@ -62,6 +62,14 @@
private IHistogram2D hitmap; private IHistogram1D[] h_PE_t = new IHistogram1D[5]; private IHistogram1D[] h_PE_b = new IHistogram1D[5];
+ int clTop = 0; + int clBot = 0; + int trTop = 0; + int trBot = 0; + int trigTop = 0; + int trigBot = 0; + int matchTop = 0; + int matchBot = 0;
@Override public void detectorChanged(Detector detector) {
@@ -185,12 +193,10 @@
} public ECalGainDriver() {
- trkMatchTool = new EcalTrackMatch(debug);
} public void setDebug(boolean flag) { this.debug = flag;
- trkMatchTool.setDebug(flag);
} public void setSimTrigger(boolean simTrigger) {
@@ -211,12 +217,32 @@
@Override public void process(EventHeader event) {
+ List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, ecalClusterCollectionName); + + List<Track> tracks = null; + if (event.hasCollection(Track.class, trackCollectionName)) { + tracks = event.get(Track.class, trackCollectionName); + } else { + return; + } +
if (simTrigger) { boolean trigger = false; if (event.hasCollection(HPSEcalCluster.class, triggerClusterCollection)) {
- for (HPSEcalCluster cluster : event.get(HPSEcalCluster.class, triggerClusterCollection)) {
+ List<HPSEcalCluster> triggerClusters = event.get(HPSEcalCluster.class, triggerClusterCollection); + if (debug) { + System.out.println("Found " + triggerClusters.size() + " trigger clusters and " + clusters.size() + " readout clusters"); + } + for (HPSEcalCluster cluster : triggerClusters) {
if (cluster.getEnergy() > triggerThreshold) { trigger = true;
+ int[] pos = getCrystalPair(cluster); + int side = pos[1] > 0 ? 0 : 1; //top or bottom + if (side == 0) { + trigTop++; + } else { + trigBot++; + }
} } }
@@ -237,58 +263,122 @@
redraw(); }
- List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, ecalClusterCollectionName); - - if (debug) { - System.out.println(clusters.size() + " clusters found"); - } - - List<Track> tracks = null; - if (event.hasCollection(Track.class, trackCollectionName)) { - tracks = event.get(Track.class, trackCollectionName); - } else { - return; - } -
for (Track track : tracks) { BaseTrack trk = (BaseTrack) track;
-// trk.setTrackParameters(trk.getTrackStates().get(0).getParameters(), 0.491);
+// trk.setTrackParameters(trk.getTrackStates().get(0).getParameters(), -0.491);
+ if (debug) {
+ ExtendTrack extender = new ExtendTrack();
+ extender.setTrack(trk);
+ if (extender.positionAtEcal().z() > 0) {
+ trTop++;
+ } else {
+ trBot++;
+ }
+ }
}
-
+
if (debug) {
+ System.out.println(clusters.size() + " clusters in this event"); + for (HPSEcalCluster cl : clusters) { + int[] pos = getCrystalPair(cl); + int side = pos[1] > 0 ? 0 : 1; //top or bottom + if (side == 0) { + clTop++; + } else { + clBot++; + } + System.out.format("[%f\t%f\t%f], ix = %d, iy = %d\n", cl.getPosition()[2], cl.getPosition()[0], cl.getPosition()[1], pos[0], pos[1]); + } +
System.out.println(tracks.size() + " tracks in this event");
+ for (Track track : tracks) { + ExtendTrack extender = new ExtendTrack(); + extender.setTrack(track); + System.out.println(extender.positionAtEcal()); + }
}
- for (HPSEcalCluster cl : clusters) { - int[] pos = getCrystalPair(cl); - int side = pos[1] > 0 ? 0 : 1; //top or bottom - - if (debug) { - System.out.println("Looking at cluster at ix=" + pos[0] + " iy=" + pos[1]); - }
- trkMatchTool.setCluster(cl); - trkMatchTool.match(tracks);
+ while (!tracks.isEmpty() && !clusters.isEmpty()) { + HPSEcalCluster bestCl = null; + Track bestTrk = null; + double minDist = Double.POSITIVE_INFINITY;
- if (!trkMatchTool.isMatchedY(50)) {
+ for (HPSEcalCluster cl : clusters) { + EcalTrackMatch trkMatchTool = new EcalTrackMatch(debug); + int[] pos = getCrystalPair(cl);
if (debug) {
- System.out.println("Cluster not matched to a track");
+ System.out.println("Looking at cluster at ix=" + pos[0] + " iy=" + pos[1]); + } + + trkMatchTool.setCluster(cl); + trkMatchTool.match(tracks); +// double dist = trkMatchTool.getDistanceToTrackInY(); + double dist = trkMatchTool.getDistanceToTrack(); + if (dist < minDist) { + minDist = dist; + bestCl = cl; + bestTrk = trkMatchTool.getMatchedTrack();
}
- continue;
}
+ tracks.remove(bestTrk); + clusters.remove(bestCl);
- if (debug) { - System.out.println("Cluster matched to track at distance Y " + trkMatchTool.getDistanceToTrackInY() + " and X " + trkMatchTool.getDistanceToTrackInX());
+ if (bestCl != null & bestTrk != null && minDist < 100.0) { + if (debug) { + int[] pos = getCrystalPair(bestCl); + System.out.format("Matched cluster: [%f\t%f\t%f], ix = %d, iy = %d\n", bestCl.getPosition()[2], bestCl.getPosition()[0], bestCl.getPosition()[1], pos[0], pos[1]); + ExtendTrack extender = new ExtendTrack(); + extender.setTrack(bestTrk); + System.out.println("Matched track: " + extender.positionAtEcal()); + System.out.println("Distance: " + minDist); + } + processMatchedPair(event, bestCl, bestTrk); + } else { + if (debug) { + System.out.println("Couldn't find a good match"); + }
}
+ } + }
- double P = trkMatchTool.getMatchedTrack().getPX() * 1000; - double E = cl.getEnergy(); - double Ep = E; - double Eoverp = Ep / P;
+ private void processMatchedPair(EventHeader event, HPSEcalCluster bestCl, Track bestTrk) {
- if (debug) { - System.out.println("P " + P + " E " + E); - }
+ int[] pos = getCrystalPair(bestCl); + int side = pos[1] > 0 ? 0 : 1; //top or bottom +// if (!trkMatchTool.isMatchedY(50)) { +// if (debug) { +// System.out.println("Cluster not matched to a track"); +// } +// if (!tracks.isEmpty()) { +// System.out.format("Unmatched cluster: "); +// } else { +// System.out.format("No tracks to match to this cluster: "); +// } +// System.out.format("[%f\t%f\t%f], ix = %d, iy = %d\n", bestCl.getPosition()[2], bestCl.getPosition()[0], bestCl.getPosition()[1], pos[0], pos[1]); +// ExtendTrack extender = new ExtendTrack(); +// extender.setTrack(bestTrk); +// System.out.println(extender.positionAtEcal()); +// return; +// } + +// if (debug) { +// System.out.println("Cluster matched to track at distance Y " + trkMatchTool.getDistanceToTrackInY() + " and X " + trkMatchTool.getDistanceToTrackInX()); +// } + if (debug && side == 0) { + matchTop++; + } else { + matchBot++; + } + + double P = bestTrk.getPX() * 1000; + double E = bestCl.getEnergy(); + double Ep = E; + double Eoverp = Ep / P; + + if (debug) { + System.out.println("P " + P + " E " + E); + }
// double Eseed = cl.getSeedHit().getRawEnergy(); // double ErawSum = 0;
@@ -298,38 +388,37 @@
// // if(Eseed/ErawSum<0.6) continue; //
- int ebin = -1; - if (P > 500 && P <= 700) { - ebin = 1; - } else if (P > 700 && P <= 900) { - ebin = 2; - } else if (P > 900 && P <= 1100) { - ebin = 3; - } else { - ebin = 4; - }
+ int ebin = -1; + if (P > 500 && P <= 700) { + ebin = 1; + } else if (P > 700 && P <= 900) { + ebin = 2; + } else if (P > 900 && P <= 1100) { + ebin = 3; + } else { + ebin = 4; + }
- if (side == 0) { - h_PE_t[0].fill(Eoverp); - h_PE_t[ebin].fill(Eoverp);
+ if (side == 0) { + h_PE_t[0].fill(Eoverp); + h_PE_t[ebin].fill(Eoverp);
- } else { - h_PE_b[0].fill(Eoverp); - h_PE_b[ebin].fill(Eoverp); - }
+ } else { + h_PE_b[0].fill(Eoverp); + h_PE_b[ebin].fill(Eoverp); + }
- hitmap.fill(pos[0], pos[1]);
+ hitmap.fill(pos[0], pos[1]);
- pePlots[pos[0] + 23][pos[1] + 5][0].fill(Eoverp);
+ pePlots[pos[0] + 23][pos[1] + 5][0].fill(Eoverp);
- pePlots[pos[0] + 23][pos[1] + 5][ebin].fill(Eoverp);
+ pePlots[pos[0] + 23][pos[1] + 5][ebin].fill(Eoverp);
- gainWriter.print(event.getEventNumber() + " " + P + " " + E + " " + pos[0] + " " + pos[1]); - for (CalorimeterHit hit : cl.getCalorimeterHits()) { - gainWriter.print(" " + hit.getIdentifierFieldValue("ix") + " " + hit.getIdentifierFieldValue("iy") + " " + hit.getRawEnergy() + " " + HPSEcalConditions.physicalToGain(hit.getCellID())); - } - gainWriter.println("");
+ gainWriter.print(event.getEventNumber() + " " + P + " " + E + " " + pos[0] + " " + pos[1]); + for (CalorimeterHit hit : bestCl.getCalorimeterHits()) { + gainWriter.print(" " + hit.getIdentifierFieldValue("ix") + " " + hit.getIdentifierFieldValue("iy") + " " + hit.getRawEnergy() + " " + HPSEcalConditions.physicalToGain(hit.getCellID()));
}
+ gainWriter.println("");
} private int[] getCrystalPair(HPSEcalCluster cluster) {
@@ -363,6 +452,9 @@
} gainWriter.close();
+ if (debug) { + System.out.format("trigTop %d trigBot %d trTop %d trBot %d clTop %d clBot %d matchTop %d matchBot %d\n", trigTop, trigBot, trTop, trBot, clTop, clBot, matchTop, matchBot); + }
} @Override
diff -u -r1.2 -r1.3 --- EcalTrackMatch.java 27 Aug 2012 20:02:04 -0000 1.2 +++ EcalTrackMatch.java 29 Aug 2012 20:49:23 -0000 1.3 @@ -1,13 +1,9 @@
-/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */
package org.lcsim.hps.recon.tracking; import hep.physics.vec.Hep3Vector; import java.util.List;
+import org.lcsim.event.Cluster;
import org.lcsim.event.Track;
-import org.lcsim.hps.recon.ecal.HPSEcalCluster;
import org.lcsim.hps.users.omoreno.ExtendTrack; /**
@@ -16,11 +12,11 @@
*/ public class EcalTrackMatch {
- public static final double crystalSizeX = (13.3 + 16.0) / 2; - public static final double crystalSizeY = (13.3 + 16.0) / 2;
+// public static final double crystalSizeX = (13.3 + 16.0) / 2; +// public static final double crystalSizeY = (13.3 + 16.0) / 2;
// private double RADIUS = crystalSizeX; // private String trackCollectionName = "MatchedTracks";
- HPSEcalCluster cluster;
+ Cluster cluster;
Track matchedTrack; ExtendTrack extrapolator; //SvtTrackExtrapolator extrapolator;
@@ -50,7 +46,7 @@
return matchedTrack; }
- public void setCluster(HPSEcalCluster cl) {
+ public void setCluster(Cluster cl) {
this.cluster = cl; }
@@ -139,7 +135,7 @@
return false; } double dy = dY(matchedTrack);
- return (dy < max ? true : false);
+ return (Math.abs(dy) < max);
} public double getDistanceToTrack() {
Use REPLY-ALL to reply to list
To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1