Author: [log in to unmask] Date: Fri May 15 03:18:48 2015 New Revision: 2971 Log: update plots, fix status bug Added: java/trunk/users/src/main/java/org/hps/users/meeg/SVTSmallHitsDriver.java Modified: java/trunk/monitoring-app/src/main/java/org/hps/monitoring/application/SystemStatusPanel.java java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SensorOccupancyPlotsDriver.java java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtClusterPlots.java java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/TrackTimePlots.java java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconOutsideIn.lcsim java/trunk/tracking/src/main/java/org/hps/recon/tracking/RawTrackerHitFitterDriver.java Modified: java/trunk/monitoring-app/src/main/java/org/hps/monitoring/application/SystemStatusPanel.java ============================================================================= --- java/trunk/monitoring-app/src/main/java/org/hps/monitoring/application/SystemStatusPanel.java (original) +++ java/trunk/monitoring-app/src/main/java/org/hps/monitoring/application/SystemStatusPanel.java Fri May 15 03:18:48 2015 @@ -78,6 +78,8 @@ // Clear the system status events table. ((SystemStatusEventsTableModel) this.eventsTable.getModel()).clear(); + + this.statuses.clear(); } private class SystemStatusBeeper extends TimerTask { @@ -86,7 +88,7 @@ public void run() { boolean isAlarming = false; for (SystemStatus status : statuses) { - if (status.getStatusCode() == StatusCode.ALARM) { + if (status.isActive() && status.getStatusCode() == StatusCode.ALARM) { isAlarming = true; } } Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SensorOccupancyPlotsDriver.java ============================================================================= --- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SensorOccupancyPlotsDriver.java (original) +++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SensorOccupancyPlotsDriver.java Fri May 15 03:18:48 2015 @@ -91,7 +91,7 @@ private int maxSampleMonitorPeriod = 100; SystemStatus occupancyStatus; - private int occupancyMonitorStart = 2500; + private int occupancyMonitorStart = 5000; private int occupancyMonitorPeriod = 100; private double minPeakOccupancy = 0.0001; private double maxPeakOccupancy = 0.01; @@ -382,7 +382,7 @@ this.createOccupancyPlotStyle("Max Sample Number", sensor, false)); } } - + for (IPlotter plotter : plotters.values()) { for (int regionN = 0; regionN < plotter.numberOfRegions(); regionN++) { PlotterRegion region = ((PlotterRegion) ((Plotter) plotter).region(regionN)); @@ -392,7 +392,7 @@ region.getPanel().addMouseListener(new PopupPlotterListener(region)); } plotter.show(); - } + } } private boolean passTriggerFilter(List<GenericObject> triggerBanks) { @@ -511,7 +511,7 @@ } } } - + if (plotters.get("Occupancy") != null) { plotters.get("Occupancy").refresh(); } @@ -532,17 +532,17 @@ maxSampleStatus.setStatus(StatusCode.ALARM, "Sensor " + sensor.getName() + " looks out of time."); } IPlotterStyle plotterStyle = createOccupancyPlotStyle("Max Sample Number", sensor, true); - region.clear(); - region.plot(maxSamplePlot, plotterStyle); -// region.applyStyle(plotterStyle); +// region.clear(); +// region.plot(maxSamplePlot, plotterStyle); + region.applyStyle(plotterStyle); // region.style().regionBoxStyle().backgroundStyle().setColor("246, 34, 34, 1"); // setBackgroundColor(region.style(),sensor.isAxial(),true); } else { IPlotterStyle plotterStyle = createOccupancyPlotStyle("Max Sample Number", sensor, false); - region.clear(); - region.plot(maxSamplePlot, plotterStyle); -// region.applyStyle(plotterStyle); +// region.clear(); +// region.plot(maxSamplePlot, plotterStyle); + region.applyStyle(plotterStyle); // setBackgroundColor(region.style(),sensor.isAxial(),false); } } @@ -576,15 +576,15 @@ occupancyStatus.setStatus(StatusCode.ALARM, "Sensor " + sensor.getName() + " occupancy abnormal."); } IPlotterStyle plotterStyle = createOccupancyPlotStyle("Max Sample Number", sensor, true); - region.clear(); - region.plot(occupancyPlot, plotterStyle); -// region.applyStyle(plotterStyle); +// region.clear(); +// region.plot(occupancyPlot, plotterStyle); + region.applyStyle(plotterStyle); } else { IPlotterStyle plotterStyle = createOccupancyPlotStyle("Max Sample Number", sensor, false); - region.clear(); - region.plot(occupancyPlot, plotterStyle); -// region.applyStyle(plotterStyle); +// region.clear(); +// region.plot(occupancyPlot, plotterStyle); + region.applyStyle(plotterStyle); } } if (isSystemOK) { @@ -616,7 +616,7 @@ if (apvOccupancy[i] < 0.1 * peakOccupancy || apvOccupancy[i] < minPeakOccupancy) { continue; //skip through the tail end of the sensor } - if (apvOccupancy[i] > apvOccupancy[i - 1]) { + if (0.9 * apvOccupancy[i] > apvOccupancy[i - 1]) { System.out.println("occupancy not monotonic"); return false; } @@ -626,7 +626,7 @@ if (apvOccupancy[i] < 0.1 * peakOccupancy || apvOccupancy[i] < minPeakOccupancy) { continue; //skip through the tail end of the sensor } - if (apvOccupancy[i] > apvOccupancy[i + 1]) { + if (0.9 * apvOccupancy[i] > apvOccupancy[i + 1]) { System.out.println("occupancy not monotonic"); return false; } Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtClusterPlots.java ============================================================================= --- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtClusterPlots.java (original) +++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtClusterPlots.java Fri May 15 03:18:48 2015 @@ -301,7 +301,7 @@ } clusterTimePlots.get(sensor.getName()).fill(cluster.getTime()); - hitTimeTrigTimePlots1D[(int) (event.getTimeStamp() / 4) % 6].fill(cluster.getTime()); + hitTimeTrigTimePlots1D[(int) ((event.getTimeStamp() / 4) % 6)].fill(cluster.getTime()); if (sensor.isTopLayer()) { hitTimeTrigTimePlots.get("Top").fill(cluster.getTime(), event.getTimeStamp() % 24); } else { Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/TrackTimePlots.java ============================================================================= --- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/TrackTimePlots.java (original) +++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/TrackTimePlots.java Fri May 15 03:18:48 2015 @@ -48,11 +48,12 @@ private IHistogram2D[] trackTimeMinMax = new IHistogram2D[4]; private static final String subdetectorName = "Tracker"; - int nlayers=12; - - public void setTrackCollectionName(String name){ - this.trackCollectionName=name; - } + int nlayers = 12; + + public void setTrackCollectionName(String name) { + this.trackCollectionName = name; + } + @Override protected void detectorChanged(Detector detector) { @@ -70,14 +71,13 @@ //style2d.zAxisStyle().setParameter("scale", "log"); style2d.zAxisStyle().setVisible(false); style2d.dataBoxStyle().setVisible(false); - - + IPlotterStyle styleOverlay = store.getStyle("DefaultHistogram1DStyle"); styleOverlay.dataStyle().errorBarStyle().setVisible(true); - styleOverlay.dataStyle().fillStyle().setVisible(false); + styleOverlay.dataStyle().fillStyle().setVisible(false); styleOverlay.legendBoxStyle().setVisible(false); styleOverlay.dataStyle().outlineStyle().setVisible(false); - + plotter = fac.create("Hit Times"); plotter.createRegions(3, 4); @@ -110,16 +110,14 @@ plot(plotter3, trackHitT0[module][layer], styleOverlay, region); trackHitDt[module][layer] = aida.histogram1D(sensor.getName() + "_trackHit_dt", 50, -20, 20.0); plot(plotter4, trackHitDt[module][layer], styleOverlay, region); - - } - - - - for (int i=0; i<nlayers;i++) { - int region = computePlotterRegion(i); - trackHit2D[i] = aida.histogram2D("Layer "+i+" trackHit vs dt", 75, -50, 100.0, 50, -20, 20.0); + + } + + for (int i = 0; i < nlayers; i++) { + int region = computePlotterRegion(i); + trackHit2D[i] = aida.histogram2D("Layer " + i + " trackHit vs dt", 75, -50, 100.0, 50, -20, 20.0); plot(plotter5, trackHit2D[i], style2d, region); - trackHitDtChan[i] = aida.histogram2D("Layer "+i+" dt vs position", 200, -20, 20, 50, -20, 20.0); + trackHitDtChan[i] = aida.histogram2D("Layer " + i + " dt vs position", 200, -20, 20, 50, -20, 20.0); plot(plotter6, trackHitDtChan[i], style2d, region); } plotter.show(); @@ -131,7 +129,7 @@ for (int module = 0; module < 2; module++) { trackT0[module] = aida.histogram1D((module == 0 ? "Top" : "Bottom") + " Track Time", 75, -50, 100.0); plot(plotter2, trackT0[module], null, module); - trackTrigTime[module] = aida.histogram2D((module == 0 ? "Top" : "Bottom") + " Track Time vs. Trig Time", 75, -50, 100.0, 33, -1, 32); + trackTrigTime[module] = aida.histogram2D((module == 0 ? "Top" : "Bottom") + " Track Time vs. Trig Time", 75, -50, 100.0, 6, -2, 22); plot(plotter2, trackTrigTime[module], style2d, module + 2); trackTimeRange[module] = aida.histogram1D((module == 0 ? "Top" : "Bottom") + " Track Hit Time Range", 75, 0, 30.0); @@ -148,47 +146,9 @@ this.hitCollection = hitCollection; } - - @Override public void process(EventHeader event) { - int orTrig = 0; - int topTrig = 0; - int botTrig = 0; - - int orTrigTime = -1; - int topTrigTime = -1; - int botTrigTime = -1; - if (event.hasCollection(GenericObject.class, "TriggerBank")) { - List<GenericObject> triggerList = event.get(GenericObject.class, "TriggerBank"); - for (GenericObject data : triggerList) - if (AbstractIntData.getTag(data) == TestRunTriggerData.BANK_TAG) { - TestRunTriggerData triggerData = new TestRunTriggerData(data); - - orTrig = triggerData.getOrTrig(); - if (orTrig != 0) - for (int i = 0; i < 32; i++) - if ((1 << (31 - i) & orTrig) != 0) { - orTrigTime = i; - break; - } - topTrig = triggerData.getTopTrig(); - if (topTrig != 0) - for (int i = 0; i < 32; i++) - if ((1 << (31 - i) & topTrig) != 0) { - topTrigTime = i; - break; - } - botTrig = triggerData.getBotTrig(); - if (botTrig != 0) - for (int i = 0; i < 32; i++) - if ((1 << (31 - i) & botTrig) != 0) { - botTrigTime = i; - break; - } - break; - } - } + int trigTime = (int) (event.getTimeStamp() % 24); //===> IIdentifierHelper helper = SvtUtils.getInstance().getHelper(); List<SiTrackerHitStrip1D> hits = event.get(SiTrackerHitStrip1D.class, hitCollection); @@ -206,40 +166,46 @@ List<Track> tracks = event.get(Track.class, trackCollectionName); for (Track track : tracks) { int trackModule = -1; - if (track.getTrackerHits().get(0).getPosition()[2] > 0) + if (track.getTrackerHits().get(0).getPosition()[2] > 0) { trackModule = 0; - else + } else { trackModule = 1; + } double minTime = Double.POSITIVE_INFINITY; double maxTime = Double.NEGATIVE_INFINITY; int hitCount = 0; double trackTime = 0; - for (TrackerHit hitCross : track.getTrackerHits()) + for (TrackerHit hitCross : track.getTrackerHits()) { for (HelicalTrackStrip hit : ((HelicalTrackCross) hitCross).getStrips()) { int layer = hit.layer(); trackHitT0[trackModule][layer - 1].fill(hit.dEdx() / DopedSilicon.ENERGY_EHPAIR); trackTime += hit.time(); hitCount++; - if (hit.time() > maxTime) + if (hit.time() > maxTime) { maxTime = hit.time(); - if (hit.time() < minTime) + } + if (hit.time() < minTime) { minTime = hit.time(); + } } + } trackTimeMinMax[trackModule].fill(minTime, maxTime); trackTimeRange[trackModule].fill(maxTime - minTime); trackTime /= hitCount; trackT0[trackModule].fill(trackTime); - if (trackModule == 0) - trackTrigTime[trackModule].fill(trackTime, topTrigTime); - else - trackTrigTime[trackModule].fill(trackTime, botTrigTime); - for (TrackerHit hitCross : track.getTrackerHits()) + if (trackModule == 0) { + trackTrigTime[trackModule].fill(trackTime, trigTime); + } else { + trackTrigTime[trackModule].fill(trackTime, trigTime); + } + for (TrackerHit hitCross : track.getTrackerHits()) { for (HelicalTrackStrip hit : ((HelicalTrackCross) hitCross).getStrips()) { int layer = hit.layer(); trackHitDt[trackModule][layer - 1].fill(hit.time() - trackTime); trackHit2D[layer - 1].fill(trackTime, hit.time() - trackTime); trackHitDtChan[layer - 1].fill(hit.umeas(), hit.time() - trackTime); } + } } } @@ -264,42 +230,57 @@ //and assume plotter is split in 3 columns, 4 rows...L0-5 on top 2 rows; L6-11 on bottom 2 private int computePlotterRegion(int layer) { - if (layer == 0) + if (layer == 0) { return 0; - if (layer == 1) + } + if (layer == 1) { return 1; - if (layer == 2) + } + if (layer == 2) { return 4; - if (layer == 3) + } + if (layer == 3) { return 5; - if (layer == 4) + } + if (layer == 4) { return 8; - if (layer == 5) + } + if (layer == 5) { return 9; - - if (layer == 6) + } + + if (layer == 6) { return 2; - if (layer == 7) + } + if (layer == 7) { return 3; - if (layer == 8) + } + if (layer == 8) { return 6; - if (layer == 9) + } + if (layer == 9) { return 7; - if (layer == 10) + } + if (layer == 10) { return 10; - if (layer == 11) + } + if (layer == 11) { return 11; + } return -1; } - - private String getColor(int module){ - String color="Black"; - if(module==1) - color="Green"; - if(module==2) - color="Blue"; - if(module==3) - color="Red"; + + private String getColor(int module) { + String color = "Black"; + if (module == 1) { + color = "Green"; + } + if (module == 2) { + color = "Blue"; + } + if (module == 3) { + color = "Red"; + } return color; } } Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconOutsideIn.lcsim ============================================================================= --- java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconOutsideIn.lcsim (original) +++ java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconOutsideIn.lcsim Fri May 15 03:18:48 2015 @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd"> <!-- - Offline reconstruction for 2015 (engineering run with SVT+ECal) data. + Offline reconstruction for 2015 (engineering run with SVT+ECal) data, using outside-in tracking strategy optimized for larger opening angles. @author Sho Uemura <[log in to unmask]> --> <execute> @@ -47,7 +47,7 @@ <debug>false</debug> <clusterTimeCut>12.0</clusterTimeCut> <maxDt>16.0</maxDt> - <!--<clusterAmplitudeCut>600.0</clusterAmplitudeCut>--> + <clusterAmplitudeCut>400.0</clusterAmplitudeCut> <maxSeperation>20.0</maxSeperation> <tolerance>1.0</tolerance> </driver> Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/RawTrackerHitFitterDriver.java ============================================================================= --- java/trunk/tracking/src/main/java/org/hps/recon/tracking/RawTrackerHitFitterDriver.java (original) +++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/RawTrackerHitFitterDriver.java Fri May 15 03:18:48 2015 @@ -35,7 +35,7 @@ private boolean useTruthTime = false; private boolean subtractTOF = false; private boolean subtractTriggerTime = false; - private int triggerPhaseOffset = 4; + private int triggerPhaseOffset = 3; private boolean correctChanT0 = true; /** @@ -147,7 +147,7 @@ fit.setT0(fit.getT0() - timeOffset); if (subtractTriggerTime) { - fit.setT0(fit.getT0() - (((event.getTimeStamp() + 4 * triggerPhaseOffset) % 24) - 12)); + fit.setT0(fit.getT0() - (((event.getTimeStamp() - 4 * triggerPhaseOffset) % 24) - 12)); } if (correctChanT0) { fit.setT0(fit.getT0() - sensor.getShapeFitParameters(strip)[HpsSiSensor.T0_INDEX]); Added: java/trunk/users/src/main/java/org/hps/users/meeg/SVTSmallHitsDriver.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/meeg/SVTSmallHitsDriver.java (added) +++ java/trunk/users/src/main/java/org/hps/users/meeg/SVTSmallHitsDriver.java Fri May 15 03:18:48 2015 @@ -0,0 +1,91 @@ +package org.hps.users.meeg; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.lcsim.detector.tracker.silicon.HpsSiSensor; +import org.lcsim.event.EventHeader; +import org.lcsim.event.RawTrackerHit; +import org.lcsim.util.Driver; + +/** + * + * @author uemura + */ +public class SVTSmallHitsDriver extends Driver { + + private String rawTrackerHitCollectionName = "SVTRawTrackerHits"; + private long previousTimestamp = 0; + private boolean printADCValues = false; + Map<HpsSiSensor, Set<Integer>> hitMap; + + public void setPrintADCValues(boolean printADCValues) { + this.printADCValues = printADCValues; + } + + @Override + protected void process(EventHeader event) { + if (event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) { + // Get RawTrackerHit collection from event. + List<RawTrackerHit> rawTrackerHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName); + Map<String, Integer> smallHitCounts = new HashMap<String, Integer>(); + int smallHitCount = 0; + hitMap = new HashMap<HpsSiSensor, Set<Integer>>(); + + for (RawTrackerHit hit : rawTrackerHits) { + HpsSiSensor sensor = (HpsSiSensor) hit.getDetectorElement(); + Set<Integer> hitStrips = hitMap.get(sensor); + if (hitStrips == null) { + hitStrips = new HashSet<Integer>(); + hitMap.put(sensor, hitStrips); + } + int strip = hit.getIdentifierFieldValue("strip"); + hitStrips.add(strip); + } + + for (RawTrackerHit hit : rawTrackerHits) { + HpsSiSensor sensor = (HpsSiSensor) hit.getDetectorElement(); + int strip = hit.getIdentifierFieldValue("strip"); + double pedestal = sensor.getPedestal(strip, 0); + + if (isSmallHit(hit)) { + if (printADCValues) { + System.out.format("%s %d %f %f %f %f %f %f\n", sensor.getName(), strip, hit.getADCValues()[0] - pedestal, hit.getADCValues()[1] - pedestal, hit.getADCValues()[2] - pedestal, hit.getADCValues()[3] - pedestal, hit.getADCValues()[4] - pedestal, hit.getADCValues()[5] - pedestal); + } + smallHitCount++; + Integer count = smallHitCounts.get(sensor.getName()); + if (count == null) { + count = 0; + } + smallHitCounts.put(sensor.getName(), count + 1); + } + } + System.out.format("%d %d %d %d ", event.getEventNumber(), event.getTimeStamp(), event.getTimeStamp() - previousTimestamp, smallHitCount); + previousTimestamp = event.getTimeStamp(); + for (String sensorName : smallHitCounts.keySet()) { + System.out.format("%s:%d ", sensorName, smallHitCounts.get(sensorName)); + } + System.out.println(); + } + } + + private boolean isSmallHit(RawTrackerHit hit) { + HpsSiSensor sensor = (HpsSiSensor) hit.getDetectorElement(); + int strip = hit.getIdentifierFieldValue("strip"); + double pedestal = sensor.getPedestal(strip, 0); + double noise = sensor.getNoise(strip, 0); + + if (hitMap.get(sensor) != null && (hitMap.get(sensor).contains(strip - 1) || hitMap.get(sensor).contains(strip + 1))) { + return false; + } + for (int i = 0; i < 6; i++) { + if (hit.getADCValues()[i] > pedestal + 4.0 * noise) { + return false; + } + } + return true; + } + +}