Print

Print


Author: [log in to unmask]
Date: Wed Jul 29 17:54:07 2015
New Revision: 3304

Log:
Add class for reading selected scaler data from event parameters.  HPSJAVA-562

Added:
    java/trunk/record-util/src/main/java/org/hps/record/scalers/ScalerParameters.java
    java/trunk/record-util/src/main/java/org/hps/record/scalers/ScalerParametersIndex.java

Added: java/trunk/record-util/src/main/java/org/hps/record/scalers/ScalerParameters.java
 =============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/scalers/ScalerParameters.java	(added)
+++ java/trunk/record-util/src/main/java/org/hps/record/scalers/ScalerParameters.java	Wed Jul 29 17:54:07 2015
@@ -0,0 +1,133 @@
+package org.hps.record.scalers;
+
+import org.hps.record.epics.EpicsData;
+import org.lcsim.event.EventHeader;
+
+/**
+ * Representation of scaler values from the float parameters in an lcsim event header.
+ *
+ * @author Jeremy McCormick, SLAC
+ */
+public final class ScalerParameters {
+
+    /**
+     * Name of the float parameters in the map.
+     */
+    public static final String NAME = "SCALER_PARAMETERS";
+
+    /**
+     * Conversion from scaler FCUP threshold values to nano Coulomb.
+     */
+    private static float NANO_COULOMB = 905.937f;
+
+    /**
+     * Size of the data array.
+     */
+    private static int SIZE = 5;
+
+    /**
+     * Read scaler parameters from an lcsim event.
+     *
+     * @param event the lcsim event
+     * @return the scaler parameters
+     */
+    public static ScalerParameters read(final EventHeader event) {
+        if (event.getFloatParameters().get(NAME) == null) {
+            throw new IllegalArgumentException("Event is missing scaler parameters array.");
+        }
+        return new ScalerParameters(event.getFloatParameters().get(NAME));
+    }
+
+    /**
+     * The float parameter values.
+     */
+    private float[] values = new float[SIZE];
+
+    /**
+     * Public class constructor.
+     */
+    public ScalerParameters() {
+    }
+
+    /**
+     * Create parameters from float array.
+     *
+     * @param values the float array
+     */
+    ScalerParameters(final float[] values) {
+        this.values = values;
+    }
+
+    /**
+     * Get a scaler parameter value.
+     *
+     * @param scalerParametersIndex the parameter index
+     * @return the scaler parameter value
+     */
+    public float getValue(final ScalerParametersIndex scalerParametersIndex) {
+        return this.values[scalerParametersIndex.ordinal()];
+    }
+
+    /**
+     * Read scaler information from {@link org.hps.record.epics.EpicsData}.
+     *
+     * @param epicsData the <code>EpicsData</code> object
+     */
+    public void readEpicsData(final EpicsData epicsData) {
+        if (epicsData.hasKey("hallb_IPM2H02_XPOS")) {
+            this.setValue(ScalerParametersIndex.BEAM_POS_X, (float) (double) epicsData.getValue("hallb_IPM2H02_XPOS"));
+        }
+        if (epicsData.hasKey("hallb_IPM2H02_YPOS")) {
+            this.setValue(ScalerParametersIndex.BEAM_POS_Y, (float) (double) epicsData.getValue("hallb_IPM2H02_YPOS"));
+        }
+        if (epicsData.hasKey("SVT:bias:top:0:v_sens")) {
+            this.setValue(ScalerParametersIndex.SVT_BIAS_VOLTAGE,
+                    (float) (double) epicsData.getValue("SVT:bias:top:0:v_sens"));
+        }
+    }
+
+    /**
+     * Read scaler information from a {@link ScalerData} object.
+     *
+     * @param scalerData the <code>ScalerData</code> object
+     */
+    public void readScalerData(final ScalerData scalerData) {
+        this.setValue(ScalerParametersIndex.FCUP_TDC_GATED, scalerData.getValue(ScalerDataIndex.FCUP_TDC_GATED)
+                / NANO_COULOMB);
+        this.setValue(ScalerParametersIndex.FCUP_TDC_UNGATED, scalerData.getValue(ScalerDataIndex.FCUP_TDC_UNGATED)
+                / NANO_COULOMB);
+    }
+
+    /**
+     * Set a parameter value by its index.
+     *
+     * @param scalerParametersIndex the parameter index
+     * @param value the new value
+     */
+    void setValue(final ScalerParametersIndex scalerParametersIndex, final float value) {
+        this.values[scalerParametersIndex.ordinal()] = value;
+    }
+
+    /**
+     * Write out scaler parameters to the event header.
+     *
+     * @param event the lcsim event
+     */
+    public void write(final EventHeader event) {
+        event.getFloatParameters().put(NAME, values);
+    }
+    
+    /**
+     * Convert to string.
+     * 
+     * @return this object converted to a string
+     */
+    public String toString() {
+        StringBuffer buff = new StringBuffer();
+        for (ScalerParametersIndex index : ScalerParametersIndex.values()) {
+            buff.append(index.name() + " " + this.getValue(index));
+            buff.append('\n');
+        }
+        return buff.toString();
+    }
+}

Added: java/trunk/record-util/src/main/java/org/hps/record/scalers/ScalerParametersIndex.java
 =============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/scalers/ScalerParametersIndex.java	(added)
+++ java/trunk/record-util/src/main/java/org/hps/record/scalers/ScalerParametersIndex.java	Wed Jul 29 17:54:07 2015
@@ -0,0 +1,14 @@
+package org.hps.record.scalers;
+
+/**
+ * Indices into the {@link ScalerParameters} from the event header.
+ * 
+ * @author Jeremy McCormick, SLAC
+ */
+public enum ScalerParametersIndex {    
+    FCUP_TDC_GATED,
+    FCUP_TDC_UNGATED,
+    BEAM_POS_X,
+    BEAM_POS_Y,
+    SVT_BIAS_VOLTAGE;     
+}