hps-java/src/main/java/org/lcsim/hps/recon/tracking
diff -u -r1.5 -r1.6
--- HPSSVTDataBuffer.java 27 Apr 2012 22:13:53 -0000 1.5
+++ HPSSVTDataBuffer.java 29 Apr 2012 17:00:12 -0000 1.6
@@ -13,7 +13,7 @@
/**
*
* @author Omar Moreno <[log in to unmask]>
- * @version $Id: HPSSVTDataBuffer.java,v 1.5 2012/04/27 22:13:53 meeg Exp $
+ * @version $Id: HPSSVTDataBuffer.java,v 1.6 2012/04/29 17:00:12 omoreno Exp $
*/
public class HPSSVTDataBuffer {
@@ -22,16 +22,17 @@
// Singleton
private static final HPSSVTDataBuffer instance = new HPSSVTDataBuffer();
-
- int[] header = new int[7];
+ private static int eventNumber = 0;
+
+ int[] header = new int[6];
int temp = 23; // C
- int nErrors = 0;
+
+ boolean debug = false;
/**
* Default constructor; Set to private to prevent instantiation
*/
- private HPSSVTDataBuffer()
- {
+ private HPSSVTDataBuffer(){
//
for(int fpgaNumber = 0; fpgaNumber <= SVT_TOTAL_FPGAS; fpgaNumber++)
fpgaToData.put(fpgaNumber, new ArrayList<Integer>());
@@ -43,8 +44,7 @@
* @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)
- {
+ public static void addToBuffer(List<HPSSVTData> svtData, int fpga){
// If the FPGA data block is empty, add header information and data, otherwise
// just add the data
instance.encapsulateSVTData(svtData, fpga);
@@ -57,8 +57,10 @@
* @return data : An FPGA data packet
*
*/
- public static int[] readoutBuffer(int fpga)
- {
+ public static int[] readoutBuffer(int fpga){
+ // Add the event number to the beginning
+ instance.addEventNumber(fpga);
+
// Add the tail to the data
instance.addTail(fpga);
@@ -83,43 +85,45 @@
* @param svtData : List of SVT data packets
* @param fpga : FPGA from which the data emerges from
*/
- private void encapsulateSVTData(List<HPSSVTData> svtData, int fpga)
- {
+ private void encapsulateSVTData(List<HPSSVTData> svtData, int fpga){
// Ignore FPGA 7 for now
if(fpga == 7) return;
- // If the FPGA data block is empty, add the header information
+ // If the FPGA data block is empty, add the header information and increment the event number
if(instance.fpgaToData.get(fpga).isEmpty()){
- header[0] = 0; //TODO: figure out what this is actually supposed to be - probably event number
-
+
// 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);
-
for(int index = 0; index < header.length; index++) fpgaToData.get(fpga).add(header[index]);
+ eventNumber++;
}
-
+
// Add all samples emerging from this FPGA
if(!svtData.isEmpty()){
for(HPSSVTData svtDatum : svtData){
- System.out.println("FPGA: " + svtDatum.getFPGAAddress() + " Hybrid: " + svtDatum.getHybridNumber() + " APV: " + svtDatum.getAPVNumber() + " Channel: " + svtDatum.getChannelNumber());
+ if(debug){
+ System.out.println("FPGA: " + svtDatum.getFPGAAddress() + " Hybrid: " + svtDatum.getHybridNumber() + " APV: "
+ + svtDatum.getAPVNumber() + " Channel: " + svtDatum.getChannelNumber());
+ }
for(int index = 0; index < svtDatum.getData().length; index++){
fpgaToData.get(fpga).add(svtDatum.getData()[index]);
}
@@ -128,11 +132,24 @@
}
/**
+ * Add a tail to the FPGA data packet. In real data, this may be
+ * non-zero which would indicate an error.
*
+ * @param fpga : FPGA from which the data emerges from
*/
- private void addTail(int fpga)
- {
+ private void addTail(int fpga){
+
// For now just make it zero
instance.fpgaToData.get(fpga).add(0);
}
+
+ /**
+ * Add an SVT event number to the top of the FPGA data packet.
+ *
+ * @param fpga : FPGA from which the data emerges from
+ */
+ private void addEventNumber(int fpga){
+
+ instance.fpgaToData.get(fpga).add(0, eventNumber);
+ }
}