Print

Print


Commit in hps-java/src/main/java/org/lcsim/hps on MAIN
users/phansson/ecalGainAna.java+3-11.5 -> 1.6
              /ECalGainDriver.java+157-651.7 -> 1.8
recon/tracking/EcalTrackMatch.java+6-101.2 -> 1.3
+166-76
3 modified files
fix bug in track matching; rewrite ECalGainDriver

hps-java/src/main/java/org/lcsim/hps/users/phansson
ecalGainAna.java 1.5 -> 1.6
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);

hps-java/src/main/java/org/lcsim/hps/users/phansson
ECalGainDriver.java 1.7 -> 1.8
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
EcalTrackMatch.java 1.2 -> 1.3
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() {
CVSspam 0.2.12


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