Print

Print


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;
+    }
+
+}