hps-java/src/main/java/org/lcsim/hps/monitoring/svt
diff -N TrackTimePlots.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ TrackTimePlots.java 8 Jun 2012 20:15:03 -0000 1.1
@@ -0,0 +1,182 @@
+package org.lcsim.hps.monitoring.svt;
+
+import hep.aida.*;
+import java.util.List;
+import org.lcsim.detector.identifier.IIdentifier;
+import org.lcsim.detector.identifier.IIdentifierHelper;
+import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.Track;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.fit.helicaltrack.HelicalTrackCross;
+import org.lcsim.fit.helicaltrack.HelicalTrackStrip;
+import org.lcsim.geometry.Detector;
+import org.lcsim.hps.monitoring.AIDAFrame;
+import org.lcsim.hps.monitoring.Resettable;
+import org.lcsim.hps.recon.tracking.SvtUtils;
+import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+
+/**
+ *
+ * @author meeg
+ * @version $Id: SVTHitReconstructionPlots.java,v 1.14 2012/05/18 07:41:49 meeg
+ * Exp $
+ */
+public class TrackTimePlots extends Driver implements Resettable {
+
+ private AIDAFrame plotterFrame;
+ private AIDA aida = AIDA.defaultInstance();
+ private String hitCollection = "StripClusterer_SiTrackerHitStrip1D";
+ private String trackCollection = "MatchedTracks";
+ IPlotter plotter, plotter2, plotter3,plotter4;
+ private IHistogram1D[][] t0 = new IHistogram1D[2][10];
+ private IHistogram1D[][] trackHitT0 = new IHistogram1D[2][10];
+ private IHistogram1D[][] trackHitDt = new IHistogram1D[2][10];
+ private IHistogram1D[] trackT0 = new IHistogram1D[2];
+
+ @Override
+ protected void detectorChanged(Detector detector) {
+ plotterFrame = new AIDAFrame();
+ plotterFrame.setTitle("HPS SVT Track Time Plots");
+
+ aida.tree().cd("/");
+
+ IPlotterFactory fac = aida.analysisFactory().createPlotterFactory();
+
+ IPlotterStyle style;
+
+ plotter = fac.create("HPS SVT Timing Plots");
+ plotter.setTitle("Timing");
+ plotterFrame.addPlotter(plotter);
+ style = plotter.style();
+ style.dataStyle().fillStyle().setColor("yellow");
+ style.dataStyle().errorBarStyle().setVisible(false);
+ plotter.createRegions(4, 5);
+
+ plotter2 = fac.create("HPS SVT Track Time");
+ plotter2.setTitle("Track Time");
+ plotterFrame.addPlotter(plotter2);
+ style = plotter2.style();
+ style.dataStyle().fillStyle().setColor("yellow");
+ style.dataStyle().errorBarStyle().setVisible(false);
+ plotter2.createRegions(1, 2);
+
+ plotter3 = fac.create("HPS SVT Timing Plots");
+ plotter3.setTitle("Track Hit Time");
+ plotterFrame.addPlotter(plotter3);
+ style = plotter3.style();
+ style.dataStyle().fillStyle().setColor("yellow");
+ style.dataStyle().errorBarStyle().setVisible(false);
+ plotter3.createRegions(4, 5);
+
+ plotter4 = fac.create("HPS SVT Timing Plots");
+ plotter4.setTitle("Track Hit dt");
+ plotterFrame.addPlotter(plotter4);
+ style = plotter4.style();
+ style.dataStyle().fillStyle().setColor("yellow");
+ style.dataStyle().errorBarStyle().setVisible(false);
+ plotter4.createRegions(4, 5);
+
+ for (int module = 0; module < 2; module++) {
+ for (int layer = 0; layer < 10; layer++) {
+ SiSensor sensor = SvtUtils.getInstance().getSensor(module, layer);
+ int region = computePlotterRegion(layer + 1, module);
+ t0[module][layer] = aida.histogram1D(sensor.getName() + "_timing", 50, -100, 100.0);
+ plotter.region(region).plot(t0[module][layer]);
+ trackHitT0[module][layer] = aida.histogram1D(sensor.getName() + "_trackHit_timing", 50, -100, 100.0);
+ plotter3.region(region).plot(trackHitT0[module][layer]);
+ trackHitDt[module][layer] = aida.histogram1D(sensor.getName() + "_trackHit_dt", 50, -20, 20.0);
+ plotter4.region(region).plot(trackHitDt[module][layer]);
+ }
+ trackT0[module] = aida.histogram1D(module == 0 ? "Top" : "Bottom" + "Track Time", 50, -100, 100.0);
+ plotter2.region(module).plot(trackT0[module]);
+ }
+// shape = aida.histogram2D("Shape", 200, -1, 3, 200, -0.5, 2);
+// plotter5.region(0).plot(shape);
+
+ plotterFrame.pack();
+ plotterFrame.setVisible(true);
+ }
+
+ public void setHitCollection(String hitCollection) {
+ this.hitCollection = hitCollection;
+ }
+
+ public void setTrackCollection(String trackCollection) {
+ this.trackCollection = trackCollection;
+ }
+
+ @Override
+ public void process(EventHeader event) {
+ IIdentifierHelper helper = SvtUtils.getInstance().getHelper();
+ List<SiTrackerHitStrip1D> hits = event.get(SiTrackerHitStrip1D.class, hitCollection);
+ for (SiTrackerHitStrip1D hit : hits) {
+ IIdentifier id = hit.getSensor().getIdentifier();
+ int layer = helper.getValue(id, "layer");
+ int module = helper.getValue(id, "module");
+// System.out.format("%d, %d, %d\n",hit.getCellID(),layer,module);
+ t0[module][layer - 1].fill(hit.getTime());
+ }
+//
+
+ List<Track> tracks = event.get(Track.class, trackCollection);
+ for (Track track : tracks) {
+ int trackModule = -1;
+ if (track.getPY() > 0) {
+ trackModule = 0;
+ } else {
+ trackModule = 1;
+ }
+ int hitCount = 0;
+ double trackTime = 0;
+ for (TrackerHit hitCross : track.getTrackerHits()) {
+ for (HelicalTrackStrip hit : ((HelicalTrackCross) hitCross).getStrips()) {
+ int layer = hit.layer();
+ trackHitT0[trackModule][layer - 1].fill(hit.time());
+ trackTime += hit.time();
+ hitCount++;
+ }
+ }
+ trackTime/=hitCount;
+ trackT0[trackModule].fill(trackTime);
+ for (TrackerHit hitCross : track.getTrackerHits()) {
+ for (HelicalTrackStrip hit : ((HelicalTrackCross) hitCross).getStrips()) {
+ int layer = hit.layer();
+ trackHitDt[trackModule][layer - 1].fill(hit.time()-trackTime);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void endOfData() {
+ plotterFrame.dispose();
+ }
+
+ @Override
+ public void reset() {
+ for (int module = 0; module < 2; module++) {
+ for (int layer = 0; layer < 10; layer++) {
+ trackHitT0[module][layer].reset();
+ trackHitDt[module][layer].reset();
+ t0[module][layer].reset();
+ trackT0[module].reset();
+ }
+ }
+ }
+
+ private int computePlotterRegion(int layer, int module) {
+ int iy = (layer - 1) / 2;
+ int ix = 0;
+ if (module > 0) {
+ ix += 2;
+ }
+ if (layer % 2 == 0) {
+ ix += 1;
+ }
+ int region = ix * 5 + iy;
+ return region;
+ }
+}