Commit in hps-java/src/main/java/org/lcsim/hps/monitoring/svt on MAIN | |||
TrackTimePlots.java | +182 | added 1.1 |
SVT timing plots
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; + } +}
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