Commit in hps-java/src/main/java/org/lcsim/hps/recon/tracking on MAIN
HPSSVTDAQMaps.java+145added 1.1
Maps SVT sensors to Hybrid/FPGA pairs and vice versa

hps-java/src/main/java/org/lcsim/hps/recon/tracking
HPSSVTDAQMaps.java added at 1.1
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
CVSspam 0.2.12


Use REPLY-ALL to reply to list

To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1