Commit in hps-java/src/main/java/org/lcsim/hps/recon/tracking on MAIN
HPSSVTDataBuffer.java+145added 1.1
Class to create and buffer SVT data banks

hps-java/src/main/java/org/lcsim/hps/recon/tracking
HPSSVTDataBuffer.java added at 1.1
diff -N HPSSVTDataBuffer.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ HPSSVTDataBuffer.java	5 Apr 2012 20:32:09 -0000	1.1
@@ -0,0 +1,145 @@
+
+package org.lcsim.hps.recon.tracking;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author Omar Moreno <[log in to unmask]>
+ * @version $Id: HPSSVTDataBuffer.java,v 1.1 2012/04/05 20:32:09 omoreno Exp $ 
+ */
+public class HPSSVTDataBuffer {
+    
+    private static final HPSSVTDataBuffer instance = new HPSSVTDataBuffer();
+
+    private static List<Integer> data = new ArrayList<Integer>();
+    int[] header = new int[8];
+    int temp = 23; // C
+    int numFpga = 8;
+    
+    // Map the fpga to the data emerging from it
+    private static Map<Integer, List<Integer>> fpgaToData = new HashMap<Integer, List<Integer>>();
+    
+    // Mask used to encode SVT data header information
+    private static final int FPGA_MASK = 0xFFFF;
+    private static final int TEMP_MASK = 0xFFFF;
+    private static final int ID_MASK = 0xFF;
+    
+    
+    /**
+     * Default constructor; Set to private to prevent instantiation
+     */
+    private HPSSVTDataBuffer()
+    {
+        //
+        for(int fpga = 0; fpga < numFpga; fpga++) {
+            fpgaToData.put(fpga, new ArrayList<Integer>());
+        }
+    }
+    
+    /**
+     * 
+     */
+    public static void addToBuffer(List<HPSSVTData> svtData, int fpga)
+    {
+        if(instance.fpgaToData.isEmpty()){
+            
+            //  Create SVT data banks
+            instance.createDataBanks();
+        }
+        
+        instance.fillBank(svtData, fpga);
+    }
+    
+    /**
+     * 
+     */
+    public static Integer[] readoutBuffer(int fpga)
+    {
+        
+        Integer[] datum = (Integer[]) fpgaToData.get(fpga).toArray();
+        fpgaToData.get(fpga).clear();
+        
+        // Return the 
+        return (Integer[]) data.toArray();
+    }
+    
+    /**
+     * 
+     */
+    private void fillBank(List<HPSSVTData> svtData, int fpga)
+    {
+        // Data
+        int[] datum;
+        for(HPSSVTData svtDatum : svtData){
+            datum = svtDatum.getData();
+            for(int index = 0; index < datum.length; index++){
+                fpgaToData.get(fpga).add(datum[index]);
+            }
+        }
+        
+        // Tail
+        fpgaToData.get(fpga).add(0);
+
+        // Frame Size
+        fpgaToData.get(fpga).add(0, fpgaToData.get(fpga).size());
+    
+    }
+    
+    /**
+     * 
+     */
+    private void createDataBanks()
+    {        
+        // Create the headers for each of the banks
+        
+        //--- FPGA 7 ---//
+        fpgaToData.get(7).add(0x00070101); // Tag = 7, UI32, Idx = 1
+            
+        // Insert the temperature information. All temperatures are currently
+        // set to 23 C
+        header[0] = (header[0] &= ~TEMP_MASK) | (temp & TEMP_MASK);
+        header[0] = (header[0] &= ~(TEMP_MASK << 16)) | ((temp & TEMP_MASK) << 16);
+        
+        header[1] = (header[1] &= ~TEMP_MASK) | (temp & TEMP_MASK);
+        header[1] = (header[1] &= ~(TEMP_MASK << 16)) | ((temp & TEMP_MASK) << 16);
+        
+        header[2] = (header[2] &= ~TEMP_MASK) | (temp & TEMP_MASK);
+        header[2] = (header[2] &= ~(TEMP_MASK << 16)) | ((temp & TEMP_MASK) << 16);
+       
+        header[3] = (header[3] &= ~TEMP_MASK) | (temp & TEMP_MASK);
+        header[3] = (header[3] &= ~(TEMP_MASK << 16)) | ((temp & TEMP_MASK) << 16);
+     
+        header[4] = (header[4] &= ~TEMP_MASK) | (temp & TEMP_MASK);
+        header[4] = (header[4] &= ~(TEMP_MASK << 16)) | ((temp & TEMP_MASK) << 16);
+        
+        header[5] = (header[5] &= ~TEMP_MASK) | (temp & TEMP_MASK);
+        header[5] = (header[5] &= ~(TEMP_MASK << 16)) | ((temp & TEMP_MASK) << 16);
+        
+        header[6] = (header[6] &= ~TEMP_MASK) | (temp & TEMP_MASK);
+        header[6] = (header[6] &= ~(TEMP_MASK << 16)) | ((temp & TEMP_MASK) << 16);
+        
+        header[7] = (header[7] &= ~TEMP_MASK) | (temp & TEMP_MASK);
+        header[7] = (header[7] &= ~(TEMP_MASK << 16)) | ((temp & TEMP_MASK) << 16);
+            
+    
+        for(int index = 0; index < header.length; index++){
+            fpgaToData.get(7).add(header[index]);
+        }
+        
+        int buff = 0;
+        
+        //--- FPGA 0-6 ---//
+        for(int fpga = 0; fpga < numFpga - 1; fpga++){
+            buff = (buff &= ~(0x1 << 8)) | ((1 & ID_MASK) << 8);
+            buff = (buff &= ~(FPGA_MASK << 16)) | ((fpga & FPGA_MASK) << 16);
+            buff = (buff &= ~ID_MASK) | (fpga+1 & ID_MASK);
+        
+            fpgaToData.get(fpga).add(buff);
+        }
+    }
+
+}
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