hps-java/src/main/java/org/lcsim/hps/users/phansson
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
hps-java/src/main/java/org/lcsim/hps/recon/tracking
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() {