Print

Print


Author: [log in to unmask]
Date: Wed Jan 21 14:36:30 2015
New Revision: 1962

Log:
abstract class for EVIO int banks

Added:
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/AbstractIntData.java

Added: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/AbstractIntData.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/AbstractIntData.java	(added)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/AbstractIntData.java	Wed Jan 21 14:36:30 2015
@@ -0,0 +1,119 @@
+package org.hps.readout.ecal.triggerbank;
+
+import java.util.Arrays;
+import org.lcsim.event.GenericObject;
+
+/**
+ * GenericObject representation of a UINT32 bank read from EVIO. The bank header
+ * tag identifies the type of data, and is stored as the first int in the
+ * GenericObject. The contents of the bank are the remaining N-1 ints.
+ * Constructors are provided from int[] (for reading from EVIO) and from
+ * GenericObject (for reading from LCIO).
+ *
+ * Subclasses must implement the two constructors and two abstract methods, plus
+ * whatever methods are needed to access the parsed data.
+ *
+ * @author Sho Uemura <[log in to unmask]>
+ * @version $Id: $
+ */
+public abstract class AbstractIntData implements GenericObject {
+
+    protected int[] bank;
+
+    /**
+     * Constructor from EVIO int bank. Bank tag must be checked by EVIO reader
+     * before the constructor is called.
+     *
+     * @param bank
+     */
+    protected AbstractIntData(int[] bank) {
+        this.bank = Arrays.copyOf(bank, bank.length);
+    }
+
+    /**
+     * Constructor from LCIO GenericObject. Checks the bank tag; subclass must
+     * set the expected value of the tag.
+     *
+     * @param data
+     * @param expectedTag
+     */
+    protected AbstractIntData(GenericObject data, int expectedTag) {
+        if (getTag(data) != expectedTag) {
+            throw new RuntimeException("expected tag " + expectedTag + ", got " + getTag(data));
+        }
+        this.bank = getBank(data);
+    }
+
+    public int[] getBank() {
+        return bank;
+    }
+
+    public static int[] getBank(GenericObject object) {
+        int N = object.getNInt() - 1;
+        int[] bank = new int[N];
+        for (int i = 0; i < N; i++) {
+            bank[i] = object.getIntVal(i + 1);
+        }
+        return bank;
+    }
+
+    /**
+     * Returns the EVIO bank header tag expected for this data.
+     *
+     * @return
+     */
+    public abstract int getTag();
+
+    /**
+     * Parses the bank so the object can be used in analysis.
+     */
+    protected abstract void decodeData();
+
+    /**
+     * Returns the EVIO bank tag for a data object.
+     *
+     * @param data
+     * @return
+     */
+    public static int getTag(GenericObject data) {
+        return data.getIntVal(0);
+    }
+
+    @Override
+    public int getNInt() {
+        return bank.length + 1;
+    }
+
+    @Override
+    public int getNFloat() {
+        return 0;
+    }
+
+    @Override
+    public int getNDouble() {
+        return 0;
+    }
+
+    @Override
+    public int getIntVal(int index) {
+        if (index == 0) {
+            return getTag();
+        }
+        return bank[index - 1];
+    }
+
+    @Override
+    public float getFloatVal(int index) {
+        throw new UnsupportedOperationException("No float values in " + this.getClass().getSimpleName());
+    }
+
+    @Override
+    public double getDoubleVal(int index) {
+        throw new UnsupportedOperationException("No double values in " + this.getClass().getSimpleName());
+    }
+
+    @Override
+    public boolean isFixedSize() {
+        return true;
+    }
+}