hps-java/src/main/java/org/lcsim/hps/recon/tracking
diff -u -r1.2 -r1.3
--- HPSSVTDataBuffer.java 5 Apr 2012 23:57:51 -0000 1.2
+++ HPSSVTDataBuffer.java 21 Apr 2012 07:37:45 -0000 1.3
@@ -6,148 +6,123 @@
import java.util.List;
import java.util.Map;
+// Constants
+import static org.lcsim.hps.recon.tracking.HPSSVTConstants.SVT_TOTAL_FPGAS;
+import static org.lcsim.hps.recon.tracking.HPSSVTConstants.TEMP_MASK;
+
/**
*
* @author Omar Moreno <[log in to unmask]>
- * @version $Id: HPSSVTDataBuffer.java,v 1.2 2012/04/05 23:57:51 jeremy Exp $
+ * @version $Id: HPSSVTDataBuffer.java,v 1.3 2012/04/21 07:37:45 omoreno Exp $
*/
public class HPSSVTDataBuffer {
- // Map the fpga to the data emerging from it
- private static Map<Integer, List<Integer>> fpgaToData = new HashMap<Integer, List<Integer>>();
+ // Map the FPGA to the data emerging from it
+ private Map<Integer, List<Integer>> fpgaToData = new HashMap<Integer, List<Integer>>();
+ // Singleton
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;
- // 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>());
- }
+ for(int fpgaNumber = 0; fpgaNumber <= SVT_TOTAL_FPGAS; fpgaNumber++)
+ fpgaToData.put(fpgaNumber, new ArrayList<Integer>());
}
/**
+ * Add data to SVT buffer
*
+ * @param svtData : List of SVT data packets
+ * @param fpga : FPGA from which the data emerges from
*/
public static void addToBuffer(List<HPSSVTData> svtData, int fpga)
{
- if(instance.fpgaToData.isEmpty()){
-
- // Create SVT data banks
- instance.createDataBanks();
- }
-
- instance.fillBank(svtData, fpga);
+ // If the FPGA data block is empty, add header information and data, otherwise
+ // just add the data
+ instance.encapsulateSVTData(svtData, fpga);
}
/**
+ * Readout data stored in the SVT buffer
*
+ * @param fpga : FPGA from which data is to be read from
+ * @return data : An FPGA data packet
+ *
*/
public static int[] readoutBuffer(int fpga)
{
- int[] data = new int[fpgaToData.get(fpga).size()];
+ // Copy the data in the map so that the buffer can be cleared
+ int[] data = new int[instance.fpgaToData.get(fpga).size()];
int index = 0;
- for(Integer datum : fpgaToData.get(fpga)){
+ for(Integer datum : instance.fpgaToData.get(fpga)){
data[index] = datum;
index++;
}
// Clear the buffer
- fpgaToData.get(fpga).clear();
+ instance.fpgaToData.get(fpga).clear();
// Return the
return data;
}
/**
+ * Encapsulate SVT data by FPGA
*
+ * @param svtData : List of SVT data packets
+ * @param fpga : FPGA from which the data emerges from
*/
- private void fillBank(List<HPSSVTData> svtData, int fpga)
+ private void encapsulateSVTData(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);
+ // Ignore FPGA 7 for now
+ if(fpga == 7) return;
+
+ // If the FPGA data block is empty, add the header information
+ if(instance.fpgaToData.isEmpty()){
+
+ // 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[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[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[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[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[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[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;
+ header[7] = (header[7] &= ~TEMP_MASK) | (temp & TEMP_MASK);
+ header[7] = (header[7] &= ~(TEMP_MASK << 16)) | ((temp & TEMP_MASK) << 16);
- //--- 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);
+ for(int index = 0; index < header.length; index++) fpgaToData.get(fpga).add(header[index]);
+ }
- fpgaToData.get(fpga).add(buff);
+ // Add all samples emerging from this FPGA
+ if(!svtData.isEmpty()){
+ for(HPSSVTData svtDatum : svtData){
+ for(int index = 0; index < svtDatum.getData().length; index++){
+ fpgaToData.get(fpga).add(svtDatum.getData()[index]);
+ }
+ }
}
- */
}
-
}