Author: omoreno Date: Wed Oct 22 00:11:54 2014 New Revision: 1259 Log: Work in progress on a DAQ mapping class for the test run. Added: java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtDaqMapping.java (with props) java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/svt/TestRunSvtDaqMappingTest.java (with props) Modified: java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/SvtDaqMapping.java Modified: java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/SvtDaqMapping.java ============================================================================= --- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/SvtDaqMapping.java (original) +++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/SvtDaqMapping.java Wed Oct 22 00:11:54 2014 @@ -12,7 +12,7 @@ * @author Jeremy McCormick <[log in to unmask]> * @author Omar Moreno <[log in to unmask]> */ -public final class SvtDaqMapping extends AbstractConditionsObject { +public class SvtDaqMapping extends AbstractConditionsObject { public static class SvtDaqMappingCollection extends ConditionsObjectCollection<SvtDaqMapping> { Added: java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtDaqMapping.java ============================================================================= --- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtDaqMapping.java (added) +++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtDaqMapping.java Wed Oct 22 00:11:54 2014 @@ -0,0 +1,121 @@ +package org.hps.conditions.svt; + +import org.lcsim.detector.tracker.silicon.HpsSiSensor; +import org.lcsim.detector.tracker.silicon.HpsTestRunSiSensor; +import org.hps.util.Pair; + +/** + * This class encapsulates the Test run SVT DAQ map. + * + * @author Omar Moreno <[log in to unmask]> + */ +public class TestRunSvtDaqMapping extends SvtDaqMapping { + + public static class SvtDaqMappingCollection extends SvtDaqMapping.SvtDaqMappingCollection { + + /** + * Get a test run DAQ pair (FPGA and Hybrid ID) for the given + * {@linkplain HpsTestRunSiSensor} + * + * @param sensor A sensor of type {@link HpsTestRunSiSensor} + * @return The DAQ pair associated with the sensor + */ + @Override + Pair<Integer, Integer> getDaqPair(HpsSiSensor sensor){ + + String svtHalf = sensor.isTopLayer() ? TOP_HALF : BOTTOM_HALF; + for(SvtDaqMapping daqMapping : this.getObjects()){ + + if(svtHalf.equals(daqMapping.getSvtHalf()) + && daqMapping.getLayerNumber() == sensor.getLayerNumber()){ + + return new Pair<Integer, Integer>(((TestRunSvtDaqMapping) daqMapping).getFpgaID(), + ((TestRunSvtDaqMapping) daqMapping).getHybridID()); + } + } + return null; + } + + /** + * Get the orientation of a sensor using the FPGA and Hybrid ID. + * If the FPGA and Hybrid ID combination is not found, return null. + * + * @param daqPair (Pair<FPGA ID, Hybrid ID>) for a given sensor + * @return If a daqPair is found, return an "A" if the sensor + * orientation is Axial, an "S" if the orientation is Stereo or + * null if the daqPair doesn't exist. + */ + @Override + public String getOrientation(Pair<Integer, Integer> daqPair){ + + for(SvtDaqMapping daqMapping : this.getObjects()){ + + if(daqPair.getFirstElement() == ((TestRunSvtDaqMapping) daqMapping).getFpgaID() + && daqPair.getSecondElement() == ((TestRunSvtDaqMapping) daqMapping).getHybridID()){ + return daqMapping.getOrientation(); + } + } + return null; + } + + + /** + * Convert {@link TestRunSvtDaqMapping} to a string. + * @return This object converted to a string. + */ + public String toString() { + StringBuffer buffer = new StringBuffer(); + buffer.append("FPGA ID: "); + buffer.append(" "); + buffer.append("Hybrid ID: "); + buffer.append(" "); + buffer.append("SVT half: "); + buffer.append(" "); + buffer.append("Layer"); + buffer.append(" "); + buffer.append("Orientation: "); + buffer.append(" "); + buffer.append('\n'); + buffer.append("----------------------"); + buffer.append('\n'); + for (SvtDaqMapping daqMapping : getObjects()){ + TestRunSvtDaqMapping testRunDaqMapping = (TestRunSvtDaqMapping) daqMapping; + buffer.append(testRunDaqMapping.getFpgaID()); + buffer.append(" "); + buffer.append(testRunDaqMapping.getHybridID()); + buffer.append(" "); + buffer.append(testRunDaqMapping.getSvtHalf()); + buffer.append(" "); + buffer.append(String.format("%-2d", testRunDaqMapping.getLayerNumber())); + buffer.append(" "); + buffer.append(testRunDaqMapping.getOrientation()); + buffer.append(" "); + buffer.append('\n'); + } + return buffer.toString(); + } + } + + public int getFpgaID(){ + return getFieldValue("fpga"); + } + + public int getHybridID(){ + return getFieldValue("hybrid"); + } + + // TODO: Instead of throwing an exception, these classes should be pulled out to + // a subclass. + public int getFebID() { + throw new UnsupportedOperationException("The test run DAQ map doesn't use FEB ID's."); + } + + public int getFebHybridID() { + throw new UnsupportedOperationException("The test run DAQ map doesn't use FEB Hybrid ID's."); + } + + public String getSide(){ + throw new UnsupportedOperationException("The test run DAQ map doesn't use a side."); + } + +} Added: java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/svt/TestRunSvtDaqMappingTest.java ============================================================================= --- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/svt/TestRunSvtDaqMappingTest.java (added) +++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/svt/TestRunSvtDaqMappingTest.java Wed Oct 22 00:11:54 2014 @@ -0,0 +1,66 @@ +package org.hps.conditions.svt; + +import junit.framework.TestCase; + +import org.hps.conditions.DatabaseConditionsManager; +import org.hps.conditions.TableMetaData; +import org.hps.conditions.config.TestRunReadOnlyConfiguration; +import org.hps.conditions.svt.TestRunSvtDaqMapping.SvtDaqMappingCollection; + +/** + * This test checks if the test run SVT DAQ map was loaded with reasonable + * values and is being read correctly from the conditions database. + * + * @author Omar Moreno <[log in to unmask]> + */ +public class TestRunSvtDaqMappingTest extends TestCase { + + TableMetaData metaData = null; + DatabaseConditionsManager conditionsManager = null; + + //--- Constants ---// + //-----------------// + + // Total number of SVT sensors + public static final int TOTAL_NUMBER_OF_SENSORS = 20; + // Min and max values of front end boad (FEB) hybrid ID's + public static final int MIN_HYBRID_ID = 0; + public static final int MAX_HYBRID_ID = 2; + + + + public void setUp(){ + new TestRunReadOnlyConfiguration().setup().load("HPS-TestRun-v5", 0); + conditionsManager = DatabaseConditionsManager.getInstance(); + } + + public void test(){ + + metaData = conditionsManager.findTableMetaData(SvtDaqMappingCollection.class); + SvtDaqMappingCollection daqMappingCollection + = conditionsManager.getConditionsData(SvtDaqMappingCollection.class, metaData.getTableName()); + + + int totalSensors = 0; + int fpgaID; + int hybridID; + this.printDebug(""); + for(SvtDaqMapping daqMapping : daqMappingCollection){ + + this.printDebug("Sensor: \n" + ((TestRunSvtDaqMapping) daqMapping).toString()); + + // Check that the Hybrid ID is within the allowable limits + hybridID = ((TestRunSvtDaqMapping) daqMapping).getHybridID(); + assertTrue("Hybrid ID is out of range!.", hybridID >= MIN_HYBRID_ID && hybridID <= MAX_HYBRID_ID); + + totalSensors++; + } + + this.printDebug("Total number of sensors found: " + totalSensors); + assertTrue(totalSensors == TOTAL_NUMBER_OF_SENSORS); + } + + private void printDebug(String debugMessage){ + System.out.println("[ " + this.getClass().getSimpleName() + " ]: " + debugMessage); + } +}