Print

Print


Author: [log in to unmask]
Date: Thu Feb 11 17:17:21 2016
New Revision: 4208

Log:
Add EPICS utility class.

Added:
    java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/epics/EpicsUtilities.java

Added: java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/epics/EpicsUtilities.java
 =============================================================================
--- java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/epics/EpicsUtilities.java	(added)
+++ java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/epics/EpicsUtilities.java	Thu Feb 11 17:17:21 2016
@@ -0,0 +1,84 @@
+package org.hps.record.epics;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Utility methods for {@link EpicsData}.
+ *
+ * @author Jeremy McCormick, SLAC
+ *
+ */
+public final class EpicsUtilities {
+
+    private EpicsUtilities() {
+    }
+    
+    public static Map<String, Double> computeAverageValues(List<EpicsData> epicsDataList) {
+        
+        HashMap<String, Double> values = new HashMap<String, Double>();
+        HashMap<String, Integer> counts = new HashMap<String, Integer>();
+        
+        for (EpicsData data : epicsDataList) {
+            for (String key : data.getKeys()) {
+                if (!values.containsKey(key)) {
+                    values.put(key, 0.);
+                }
+                if (!counts.containsKey(key)) {
+                    counts.put(key, 0);
+                }
+                values.put(key, values.get(key) + data.getValue(key));
+                counts.put(key, counts.get(key) + 1);
+            }
+        }
+        
+        for (String key : values.keySet()) {
+            double averageValue = values.get(key) / counts.get(key);
+            values.put(key, averageValue);
+        }
+        
+        return values;
+    }
+    
+    public static int computeTimeInterval(List<EpicsData> epicsDataList) {
+        if (epicsDataList.size() == 0) {
+            throw new IllegalArgumentException("The EPICS data list is empty.");
+        }
+        ArrayList<EpicsData> sortedList = new ArrayList<EpicsData>(epicsDataList);
+        Collections.sort(sortedList, new SequenceComparator());
+        return sortedList.get(sortedList.size() - 1).getEpicsHeader().getTimestamp() 
+                - sortedList.get(0).getEpicsHeader().getTimestamp();
+    }
+            
+    public static class SequenceComparator implements Comparator<EpicsData> {
+
+        @Override
+        public int compare(EpicsData o1, EpicsData o2) {
+            if (o1 == o2) {
+                return 0;
+            } else if (o1.getEpicsHeader().getSequence() < o2.getEpicsHeader().getSequence()) {
+                return -1;
+            } else {
+                return 1;
+            }
+        }
+    }
+    
+    public static class TimestampComparator implements Comparator<EpicsData> {
+        @Override
+        public int compare(EpicsData o1, EpicsData o2) {
+            if (o1 == o2) {
+                return 0;
+            } else if (o1.getEpicsHeader().getTimestamp() < o2.getEpicsHeader().getTimestamp()) {
+                return -1;
+            } else {
+                return 1;
+            }
+        }
+    }
+
+}