Print

Print


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