Print

Print


Author: [log in to unmask]
Date: Fri Mar 13 15:35:23 2015
New Revision: 2436

Log:
Add plots displaying hit counts and end of run statistics.

Modified:
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java

Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java	(original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java	Fri Mar 13 15:35:23 2015
@@ -36,14 +36,19 @@
 	
 	protected Map<String, IPlotter> plotters = new HashMap<String, IPlotter>(); 
     private List<HpsSiSensor> sensors;
-    protected Map<HpsSiSensor, IHistogram1D> hitsPerSensorPlots 
-        = new HashMap<HpsSiSensor, IHistogram1D>();
-    protected Map<HpsSiSensor, int[]> hitsPerSensor 
-        = new HashMap<HpsSiSensor, int[]>();
+    protected Map<HpsSiSensor, IHistogram1D> hitsPerSensorPlots = new HashMap<HpsSiSensor, IHistogram1D>();
+    protected Map<HpsSiSensor, int[]> hitsPerSensor = new HashMap<HpsSiSensor, int[]>();
     protected Map<String, IHistogram1D> layersHitPlots = new HashMap<String, IHistogram1D>();
-	
+	protected Map<String, IHistogram1D> hitCountPlots = new HashMap<String, IHistogram1D>();
+    
     private static final String SUBDETECTOR_NAME = "Tracker";
     private String rawTrackerHitCollectionName = "SVTRawTrackerHits";
+   
+    // Counters
+    double eventCount = 0;
+    double totalHitCount = 0; 
+    double totalTopHitCount = 0; 
+    double totalBotHitCount = 0; 
 
     private int computePlotterRegion(HpsSiSensor sensor) {
 
@@ -73,6 +78,12 @@
 		return -1; 
     }
     
+    private void clearHitMaps() { 
+        for (HpsSiSensor sensor : sensors) {
+            hitsPerSensor.get(sensor)[0] = 0; 
+        }
+    }
+
     protected void detectorChanged(Detector detector) {
 
         sensors 
@@ -103,6 +114,18 @@
 		        histogramFactory.createHistogram1D("Bottom Layers Hit", 12, 0, 12));
 		plotters.get("Number of layers hit").region(1).plot(layersHitPlots.get("Bottom"));
 	
+		plotters.put("Raw hit counts/Event", plotterFactory.create("Raw hit counts/Event")); 
+		plotters.get("Raw hit counts/Event").createRegions(2, 2);
+
+		hitCountPlots.put("Raw hit counts/Event", 
+		        histogramFactory.createHistogram1D("Raw hit counts", 40, 0, 40));
+		plotters.get("Raw hit counts/Event").region(0).plot(hitCountPlots.get("Raw hit counts/Event"));
+		hitCountPlots.put("SVT top raw hit counts/Event", 
+		        histogramFactory.createHistogram1D("SVT top raw hit counts", 40, 0, 40));
+		plotters.get("Raw hit counts/Event").region(1).plot(hitCountPlots.get("SVT top raw hit counts/Event"));
+		hitCountPlots.put("SVT bottom raw hit counts/Event", 
+		        histogramFactory.createHistogram1D("SVT bottom raw hit counts", 40, 0, 40));
+		plotters.get("Raw hit counts/Event").region(2).plot(hitCountPlots.get("SVT bottom raw hit counts/Event"));
 		
 		for (IPlotter plotter : plotters.values()) { 
 			plotter.show();
@@ -113,6 +136,8 @@
         
     	if (!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName))
     		return;
+    
+    	eventCount++;
     	
         // Get RawTrackerHit collection from event.
         List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
@@ -125,15 +150,35 @@
         
         int[] topLayersHit = new int[12];
         int[] botLayersHit = new int[12]; 
+        int eventHitCount = 0;
+        int topEventHitCount = 0;
+        int botEventHitCount = 0;
         for (HpsSiSensor sensor : sensors) { 
-            hitsPerSensorPlots.get(sensor).fill(hitsPerSensor.get(sensor)[0]);
+            int hitCount = hitsPerSensor.get(sensor)[0];
+            hitsPerSensorPlots.get(sensor).fill(hitCount);
+            
+            eventHitCount += hitCount;
             
             if (hitsPerSensor.get(sensor)[0] > 0) { 
-                if (sensor.isTopLayer()) topLayersHit[sensor.getLayerNumber() - 1]++;
-                else botLayersHit[sensor.getLayerNumber() - 1]++; 
+                if (sensor.isTopLayer()) { 
+                    topLayersHit[sensor.getLayerNumber() - 1]++;
+                    topEventHitCount += hitCount;
+                }
+                else { 
+                    botLayersHit[sensor.getLayerNumber() - 1]++; 
+                    botEventHitCount += hitCount;
+                }
             }
         }
-       
+      
+        totalHitCount += eventHitCount; 
+        totalTopHitCount += topEventHitCount; 
+        totalBotHitCount += botEventHitCount;
+    
+        hitCountPlots.get("Raw hit counts/Event").fill(eventHitCount);
+        hitCountPlots.get("SVT top raw hit counts/Event").fill(topEventHitCount);
+        hitCountPlots.get("SVT bottom raw hit counts/Event").fill(botEventHitCount);
+        
         int totalTopLayersHit = 0; 
         int totalBotLayersHit = 0; 
         for(int layerN = 0; layerN < 12; layerN++) { 
@@ -145,10 +190,16 @@
         layersHitPlots.get("Bottom").fill(totalBotLayersHit);
         
     }
-    
-    private void clearHitMaps() { 
-        for (HpsSiSensor sensor : sensors) {
-            hitsPerSensor.get(sensor)[0] = 0; 
-        }
-    }
+   
+    @Override
+    protected void endOfData() {
+        
+        System.out.println("%================================================%");
+        System.out.println("%============ SVT Raw Hit Statistics ============%");
+        System.out.println("%================================================%\n%");
+        System.out.println("% Total Hits/Event: " + totalHitCount/eventCount);
+        System.out.println("% Total Top SVT Hits/Event: " + totalTopHitCount/eventCount);
+        System.out.println("% Total Bottom SVT Hits/Event: " + totalBotHitCount/eventCount);
+        System.out.println("\n%================================================%");
+    }    
 }