Author: [log in to unmask] Date: Wed Mar 25 11:54:34 2015 New Revision: 2539 Log: Add scalar utility methods for computing live time from standard scalar data. Added: java/trunk/record-util/src/main/java/org/hps/record/scalars/ScalarUtilities.java Added: java/trunk/record-util/src/main/java/org/hps/record/scalars/ScalarUtilities.java ============================================================================= --- java/trunk/record-util/src/main/java/org/hps/record/scalars/ScalarUtilities.java (added) +++ java/trunk/record-util/src/main/java/org/hps/record/scalars/ScalarUtilities.java Wed Mar 25 11:54:34 2015 @@ -0,0 +1,90 @@ +package org.hps.record.scalars; + +/** + * Utilities methods for scalar data. + * <p> + * Currently this is used only for computing live time measurements from standard + * scalar data. + * + * @author Jeremy McCormick <[log in to unmask]> + */ +public class ScalarUtilities { + + /** + * This class shouldn't be instantiated. + */ + private ScalarUtilities() { + } + + /** + * Indices for getting live time measurements. + */ + public enum LiveTimeIndex { + FCUP_TDC, /* Faraday cup TDC */ + FCUP_TRG, /* Faraday cup TRG */ + CLOCK; /* clock */ + } + + /** + * Get the live time measurements from standard scalar data. + * <p> + * This is returned as a double array of size 3 containing:</br> + * <pre> + * [0] = FCUP TDC measurement + * [1] = FCUP TRG measurement + * [2] = CLOCK measurement + * </pre> + * This method assumes the standard scalar data structure as outlined in + * <a href="https://jira.slac.stanford.edu/browse/HPSJAVA-470">HPSJAVA-470</a>. + * + * @param data The scalar data. + * @return The live time measurements. + */ + public static double[] getLiveTimes(ScalarData data) { + + // [03] - gated faraday cup with "TDC" threshold + int word03 = data.getValue(3); + + // [19] - gated faraday cup with "TRG" threshold + int word19 = data.getValue(19); + + // [35] - ungated faraday cup with "TDC" threshold + int word35 = data.getValue(35); + + // [51] - ungated faraday cup with "TRG" threshold + int word51 = data.getValue(51); + + // [67] - gated clock + int word67 = data.getValue(67); + + // [68] - ungated clock + int word68 = data.getValue(68); + + // [03]/[35] = FCUP TDC + double fcupTdc = (double) word03 / (double) word35; + + // [19]/[51] = FCUP TRG + double fcupTrg = (double) word19 / (double) word51; + + // [67]/[68] = CLOCK + double clock = (double) word67 / (double) word68; + + // Compute the live times. + double[] liveTimes = new double[3]; + liveTimes[0] = fcupTdc; + liveTimes[1] = fcupTrg; + liveTimes[2] = clock; + + return liveTimes; + } + + /** + * Get a specific live time measurement by index. + * @param index The enum of the index type. + * + * @see LiveTimeIndex + */ + public static double getLiveTime(ScalarData data, LiveTimeIndex index) { + return getLiveTimes(data)[index.ordinal()]; + } +}