Author: [log in to unmask] Date: Wed Apr 15 14:21:43 2015 New Revision: 2714 Log: Add static method to extract the error bit from a set of APV samples. Modified: java/trunk/evio/src/main/java/org/hps/evio/SvtEvioUtils.java Modified: java/trunk/evio/src/main/java/org/hps/evio/SvtEvioUtils.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/SvtEvioUtils.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/SvtEvioUtils.java Wed Apr 15 14:21:43 2015 @@ -1,26 +1,26 @@ package org.hps.evio; /** - * A set of static utility methods used to decode SVT data. + * A set of static utility methods used to decode SVT data. * - * @author Omar Moreno <[log in to unmask]> - * @date November 20, 2014 + * @author Omar Moreno <[log in to unmask]> + * @date November 20, 2014 */ public class SvtEvioUtils { - //-----------------// - //--- Constants ---// - //-----------------// - - private static final int TOTAL_SAMPLES = 6; + //-----------------// + //--- Constants ---// + //-----------------// + + private static final int TOTAL_SAMPLES = 6; public static final int SAMPLE_MASK = 0xFFFF; // TODO: Move these to constants class public static final int APV25_PER_HYBRID = 5; public static final int CHANNELS_PER_APV25 = 128; - - //--- Test Run ---// - private static final int TEST_RUN_SAMPLE_HEADER_INDEX = 0; + + //--- Test Run ---// + private static final int TEST_RUN_SAMPLE_HEADER_INDEX = 0; public static final int FPGA_MASK = 0xFFFF; public static final int HYBRID_MASK = 0x3; public static final int TEST_RUN_CHANNEL_MASK = 0x7F; @@ -33,60 +33,61 @@ private static final int ENG_RUN_CHANNEL_MASK = 0x7F; private static final int ENG_RUN_APV_HEADER_MASK = 0x1; private static final int ENG_RUN_APV_TAIL_MASK = 0x1; - - /** - * Extract and return the FPGA ID associated with the samples. - * Note: This method should only be used when looking at test run data. - * - * @param data - sample block of data - * @return An FPGA ID in the range 0-7 - */ - public static int getFpgaID(int[] data) { - return data[TEST_RUN_SAMPLE_HEADER_INDEX] & FPGA_MASK; - } - - /** - * Extract and return the hybrid ID associated with the samples - * Note: This method should only be used when looking at test run data. - * - * @param data : sample block of data - * @return A hybrid number in the range 0-2 + private static final int ENG_RUN_ERROR_BIT_MASK = 0x1; + + /** + * Extract and return the FPGA ID associated with the samples. + * Note: This method should only be used when looking at test run data. + * + * @param data - sample block of data + * @return An FPGA ID in the range 0-7 + */ + public static int getFpgaID(int[] data) { + return data[TEST_RUN_SAMPLE_HEADER_INDEX] & FPGA_MASK; + } + + /** + * Extract and return the hybrid ID associated with the samples + * Note: This method should only be used when looking at test run data. + * + * @param data : sample block of data + * @return A hybrid number in the range 0-2 */ public static int getHybridID(int[] data) { return (data[TEST_RUN_SAMPLE_HEADER_INDEX] >>> 28) & HYBRID_MASK; } - - /** - * Extract and return the channel number associated with the samples - * Note: This method should only be used when looking at test run data. - * - * @param data : sample block of data - * @return A channel number in the range 0-127 + + /** + * Extract and return the channel number associated with the samples + * Note: This method should only be used when looking at test run data. + * + * @param data : sample block of data + * @return A channel number in the range 0-127 */ public static int getTestRunChannelNumber(int[] data) { return (data[TEST_RUN_SAMPLE_HEADER_INDEX] >>> 16) & TEST_RUN_CHANNEL_MASK; } /** - * Extract and return the front end board (FEB) ID associated with the - * samples - * - * @param data : sample block of data - * @return A FEB ID in the range 0-10 + * Extract and return the front end board (FEB) ID associated with the + * samples + * + * @param data : sample block of data + * @return A FEB ID in the range 0-10 */ public static int getFebID(int[] data) { - return (data[ENG_RUN_SAMPLE_HEADER_INDEX] >>> 8) & FEB_MASK; - } - - /** - * Extract and return the front end board (FEB) hybrid ID associated with - * the samples - * - * @param data : sample block of data - * @return A FEB hybrid ID in the range 0-3 + return (data[ENG_RUN_SAMPLE_HEADER_INDEX] >>> 8) & FEB_MASK; + } + + /** + * Extract and return the front end board (FEB) hybrid ID associated with + * the samples + * + * @param data : sample block of data + * @return A FEB hybrid ID in the range 0-3 */ public static int getFebHybridID(int[] data) { - return (data[ENG_RUN_SAMPLE_HEADER_INDEX] >>> 26) & FEB_HYBRID_MASK; + return (data[ENG_RUN_SAMPLE_HEADER_INDEX] >>> 26) & FEB_HYBRID_MASK; } /** @@ -100,10 +101,10 @@ } /** - * Extract and return the channel number associated with the samples - * - * @param data : sample block of data - * @return A channel number in the range 0-127 + * Extract and return the channel number associated with the samples + * + * @param data : sample block of data + * @return A channel number in the range 0-127 */ public static int getChannelNumber(int[] data) { return (data[ENG_RUN_SAMPLE_HEADER_INDEX] >>> 16) & ENG_RUN_CHANNEL_MASK; @@ -114,7 +115,7 @@ * * @param data : sample block of data * @return A channel number in the range 0-639 - * @throws RuntimeException if the physical channel number is out of range + * @throws RuntimeException if the physical channel number is out of range */ public static int getPhysicalChannelNumber(int[] data) { @@ -157,14 +158,24 @@ if (((data[ENG_RUN_SAMPLE_HEADER_INDEX] >>> 29) & ENG_RUN_APV_TAIL_MASK) == 1) return true; return false; } - - /** - * Extract and return the nth SVT sample. - * - * @param sampleN : The sample number of interest. Valid values are 0 to 5 - * @param data : sample block of data - * @throws RuntimeException if the sample number is out of range - * @return ADC value of the nth sample + + /** + * Extract the error bit of the samples. + * + * @param data : sample block of data + * @return value of the error bit. This is non-zero if there is an error. + */ + public static int getErrorBit(int[] data) { + return (data[3] >>> 28) & ENG_RUN_ERROR_BIT_MASK; + } + + /** + * Extract and return the nth SVT sample. + * + * @param sampleN : The sample number of interest. Valid values are 0 to 5 + * @param data : sample block of data + * @throws RuntimeException if the sample number is out of range + * @return ADC value of the nth sample * */ public static int getSample(int sampleN, int[] data) { @@ -188,10 +199,10 @@ } /** - * Extract and return all SVT samples as an array - * - * @param data : sample block of data - * @return An array containing all SVT Shaper signal samples + * Extract and return all SVT samples as an array + * + * @param data : sample block of data + * @return An array containing all SVT Shaper signal samples */ public static short[] getSamples(int[] data) { short[] samples = new short[TOTAL_SAMPLES]; @@ -203,7 +214,7 @@ } /** - * Private constructor to prevent the class from being instantiated. + * Private constructor to prevent the class from being instantiated. */ private SvtEvioUtils(){}; }