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