hps-java/src/main/java/org/lcsim/hps/recon/tracking
diff -N HPSSVTDAQMaps.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ HPSSVTDAQMaps.java 26 Mar 2012 07:10:35 -0000 1.1
@@ -0,0 +1,145 @@
+
+package org.lcsim.hps.recon.tracking;
+
+//--- java ---//
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+//--- org.lcsim ---//
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.identifier.IIdentifier;
+import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.detector.tracker.silicon.SiTrackerIdentifierHelper;
+import org.lcsim.geometry.Detector;
+import org.lcsim.util.Driver;
+
+//--- hps-java ---//
+import org.lcsim.hps.util.Pair;
+
+/**
+ * Creates maps between SVT sensors to FPGA and Hybrid pairs and vice versa
+ *
+ * @author Omar Moreno
+ * @version $Id: HPSSVTDAQMaps.java,v 1.1 2012/03/26 07:10:35 omoreno Exp $
+ */
+public class HPSSVTDAQMaps extends Driver {
+
+ String subdetectorName = "Tracker";
+
+ // Set of sensors
+ Set<SiSensor> sensors = new HashSet<SiSensor>();
+
+ // Map from Sensor to Hybrid/FPGA pair
+ public static Map<SiSensor /* Sensor */, Pair<Integer /* Hybrid */, Integer /* FPGA */>> sensorToDAQPair;
+
+ // Map from Hybrid/FPGA pair
+ public static Map<Pair<Integer /* Hybrid */, Integer /* FPGA */>, SiSensor /* Sensor */> daqPairToSensor;
+
+ // Map from SVT Layer to Hybrid/FPGA pair
+ private Map<Integer /* Layer # */, Pair<Integer /* Hybrid */, Integer /* FPGA */>> layerToDAQ;
+
+ /**
+ * Default Constructor.
+ * NOTE: Currently all hybrid/fpga/layer data is hard coded
+ */
+ public HPSSVTDAQMaps()
+ {
+ layerToDAQ = new HashMap<Integer, Pair<Integer, Integer>>();
+
+ // Hard code the layer to FPGA/Hybrid pair. Eventually, it may be better
+ // to load this information from a text file
+ // NOTE: that the layer numbering is as follows: Top: 1-10, Bottom: 11-20
+
+
+ // Layer # Hybrid # FPGA#
+ //----------------------------------------------------------------------
+ // Top
+ layerToDAQ.put( 1, new Pair( 0, 0 ));
+ layerToDAQ.put( 2, new Pair( 1, 0 ));
+ layerToDAQ.put( 3, new Pair( 2, 0 ));
+ layerToDAQ.put( 4, new Pair( 0, 1 ));
+ layerToDAQ.put( 5, new Pair( 1, 1 ));
+ layerToDAQ.put( 6, new Pair( 2, 1 ));
+ layerToDAQ.put( 7, new Pair( 0, 2 ));
+ layerToDAQ.put( 8, new Pair( 1, 2 ));
+ layerToDAQ.put( 9, new Pair( 2, 3 ));
+ layerToDAQ.put( 10, new Pair( 0, 6 ));
+ // Bottom
+ layerToDAQ.put( 11, new Pair( 0, 3 ));
+ layerToDAQ.put( 12, new Pair( 1, 3 ));
+ layerToDAQ.put( 13, new Pair( 2, 3 ));
+ layerToDAQ.put( 14, new Pair( 0, 4 ));
+ layerToDAQ.put( 15, new Pair( 1, 4 ));
+ layerToDAQ.put( 16, new Pair( 2, 4 ));
+ layerToDAQ.put( 17, new Pair( 0, 5 ));
+ layerToDAQ.put( 18, new Pair( 1, 5 ));
+ layerToDAQ.put( 19, new Pair( 2, 5 ));
+ layerToDAQ.put( 20, new Pair( 1, 6 ));
+
+
+ sensorToDAQPair = new HashMap<SiSensor, Pair<Integer, Integer>>();
+ daqPairToSensor = new HashMap<Pair<Integer, Integer>, SiSensor>();
+
+ }
+
+ /**
+ *
+ * @param detector
+ */
+ @Override
+ public void detectorChanged(Detector detector) {
+ // Call the sub-Driver's detectorChanged methods.
+ super.detectorChanged(detector);
+
+ if(subdetectorName == null){
+ throw new RuntimeException("The subdetector name was not set!");
+ }
+
+ // Get the SVT
+ IDetectorElement detectorElement
+ = detector.getDetectorElement().findDetectorElement(subdetectorName);
+
+ // Get all SVT sensors
+ sensors.addAll(detectorElement.findDescendants(SiSensor.class));
+
+ // Map sensors to
+ createDAQMaps(sensors);
+
+ }
+
+
+ /**
+ * Create maps which relate a DAQ pair (hybrid, FPGA) to a sensor
+ * and vice versa
+ *
+ * @param sensors
+ * A set of all sensors in the detector
+ */
+ private void createDAQMaps(Set<SiSensor> sensors)
+ {
+
+ IIdentifier sensorIdent;
+ SiTrackerIdentifierHelper sensorHelper;
+ Pair daqPair;
+
+ for(SiSensor sensor : sensors){
+
+ // Get the sensor identifier
+ sensorIdent = sensor.getIdentifier();
+
+ // Get the sensor identifier helper
+ sensorHelper = (SiTrackerIdentifierHelper) sensor.getIdentifierHelper();
+
+ // Get the DAQ pair
+ if(sensorHelper.getModuleValue(sensorIdent) == 0){
+ daqPair = layerToDAQ.get(sensorHelper.getLayerValue(sensorIdent));
+ } else daqPair = layerToDAQ.get(sensorHelper.getLayerValue(sensorIdent) + 10);
+
+ sensorToDAQPair.put(sensor, daqPair);
+ daqPairToSensor.put(daqPair, sensor);
+ }
+ }
+
+}
\ No newline at end of file