2 added + 2 removed + 5 modified, total 9 files
hps-java/src/main/java/org/lcsim/hps/evio
diff -u -r1.1 -r1.2
--- SVTHitWriter.java 30 Jul 2012 23:31:45 -0000 1.1
+++ SVTHitWriter.java 1 Mar 2013 01:30:25 -0000 1.2
@@ -1,74 +1,158 @@
-
package org.lcsim.hps.evio;
+import java.util.ArrayList;
+import java.util.List;
import static org.lcsim.hps.evio.EventConstants.SVT_BANK_NUMBER;
import static org.lcsim.hps.evio.EventConstants.SVT_BANK_TAG;
import static org.lcsim.hps.evio.EventConstants.SVT_TOTAL_NUMBER_FPGAS;
-import java.util.List;
import org.jlab.coda.jevio.DataType;
import org.jlab.coda.jevio.EventBuilder;
import org.jlab.coda.jevio.EvioBank;
import org.jlab.coda.jevio.EvioException;
+import org.lcsim.detector.tracker.silicon.SiSensor;
import org.lcsim.event.EventHeader;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.hps.recon.tracking.FpgaData;
+import org.lcsim.hps.recon.tracking.HPSSVTConstants;
import org.lcsim.hps.recon.tracking.HPSSVTData;
-import org.lcsim.hps.recon.tracking.HPSSVTDataBuffer;
+import org.lcsim.hps.recon.tracking.SvtUtils;
+import org.lcsim.util.lcio.LCIOConstants;
/**
*
* @author Sho Uemura <[log in to unmask]>
- * @version $Id: SVTHitWriter.java,v 1.1 2012/07/30 23:31:45 meeg Exp $
+ * @version $Id: SVTHitWriter.java,v 1.2 2013/03/01 01:30:25 meeg Exp $
*/
public class SVTHitWriter implements HitWriter {
-
- boolean debug = false;
- public SVTHitWriter() {}
+ boolean debug = false;
+ private String hitCollectionName = "SVTRawTrackerHits";
+ private String fpgaDataCollectionName = "FPGAData";
+ String readoutName = "TrackerHits";
+
+ public SVTHitWriter() {
+ }
+
+ public void setHitCollectionName(String hitCollectionName) {
+ this.hitCollectionName = hitCollectionName;
+ }
+
+ @Override
+ public boolean hasData(EventHeader event) {
+ return event.hasCollection(RawTrackerHit.class, hitCollectionName);
+ }
+
+ //make some dummy FpgaData to use in case there isn't any real FpgaData
+ private static List<FpgaData> makeFpgaData() {
+ double[] temps = new double[HPSSVTConstants.TOTAL_HYBRIDS_PER_FPGA * HPSSVTConstants.TOTAL_TEMPS_PER_HYBRID];
+ for (int i = 0; i < HPSSVTConstants.TOTAL_HYBRIDS_PER_FPGA * HPSSVTConstants.TOTAL_TEMPS_PER_HYBRID; i++) {
+ temps[i] = 23.0;
+ }
+ List<FpgaData> fpgaData = new ArrayList<FpgaData>();
+ for (int fpgaNumber = 0; fpgaNumber < SVT_TOTAL_NUMBER_FPGAS; fpgaNumber++) {
+ fpgaData.add(new FpgaData(fpgaNumber, temps, 0));
+ }
- public boolean hasData(EventHeader event) {
- List<List<HPSSVTData>> svtDataList = event.get(HPSSVTData.class);
- return (svtDataList != null && svtDataList.size() > 0 && svtDataList.get(0) != null);
- }
-
- public void writeData(EventHeader event, EventBuilder builder) {
-
- // SVT container bank.
- EvioBank svtBank = new EvioBank(SVT_BANK_TAG, DataType.BANK, SVT_BANK_NUMBER);
-
- // Iterate over FPGA's 0 - 6
- for(int fpgaNumber = 0; fpgaNumber < SVT_TOTAL_NUMBER_FPGAS; fpgaNumber++){
-
- // Skip FPGA 7 for now
- if(fpgaNumber == 7) continue;
-
- // Get the raw int data buffer for this FPGA.
- int[] dataBuffer = HPSSVTDataBuffer.readoutBuffer(fpgaNumber);
-
- if(debug) System.out.println(this.getClass().getSimpleName() + ": FPGA " + fpgaNumber + " : Data size: " + dataBuffer.length);
-
- // Bank for this FPGA's frame data.
- EvioBank frameBank = new EvioBank(fpgaNumber, DataType.UINT32, fpgaNumber);
- try {
- // Add the SVT data to the FPGA bank
- frameBank.appendIntData(dataBuffer);
- // Add the FPGA bank to the SVT bank
- builder.addChild(svtBank, frameBank);
- } catch (EvioException e) {
- throw new RuntimeException(e);
- }
- }
-
- // Add the SVT bank to the Main EVIO bank
- try {
- builder.addChild(builder.getEvent(), svtBank);
- } catch (EvioException e) {
- throw new RuntimeException(e);
- }
- }
+ return fpgaData;
+ }
+
+ @Override
+ public void writeData(EventHeader event, EventBuilder builder) {
+
+ List<RawTrackerHit> hits = event.get(RawTrackerHit.class, hitCollectionName);
+ List<FpgaData> fpgaData = makeFpgaData();
+
+ System.out.println("Writing " + hits.size() + " SVT hits");
+ System.out.println("Writing " + fpgaData.size() + " FPGA data");
+
+ List<List<int[]>> fpgaHits = new ArrayList<List<int[]>>();
+ for (int fpgaNumber = 0; fpgaNumber < SVT_TOTAL_NUMBER_FPGAS; fpgaNumber++) {
+ fpgaHits.add(new ArrayList<int[]>());
+ }
+
+ for (RawTrackerHit hit : hits) {
+ int fpgaAddress = SvtUtils.getInstance().getFPGA((SiSensor) hit.getDetectorElement());
+ int hybridNumber = SvtUtils.getInstance().getHybrid((SiSensor) hit.getDetectorElement());
+ int sensorChannel = hit.getIdentifierFieldValue("strip");
+ int apvNumber = HPSSVTData.getAPV(sensorChannel);
+ int channelNumber = HPSSVTData.getAPVChannel(sensorChannel);
+
+ int[] data = new int[4];
+ HPSSVTData.createSVTDataPacket(hybridNumber, apvNumber, channelNumber, fpgaAddress, hit.getADCValues(), data);
+ fpgaHits.get(fpgaAddress).add(data);
+ }
+
+ // SVT container bank.
+ EvioBank svtBank = new EvioBank(SVT_BANK_TAG, DataType.BANK, SVT_BANK_NUMBER);
+
+ // Iterate over FPGA's 0 - 6
+ for (int fpgaNumber = 0; fpgaNumber < SVT_TOTAL_NUMBER_FPGAS; fpgaNumber++) {
+
+ // Skip FPGA 7 for now
+ if (fpgaNumber == 7) {
+ continue;
+ }
+ FpgaData fpgaDatum = fpgaData.get(fpgaNumber);
+ int[] header = fpgaDatum.extractData();
+
+ // Get the raw int data buffer for this FPGA.
+ int[] dataBuffer = new int[header.length + 4 * fpgaHits.get(fpgaNumber).size() + 2];
+ int ptr = 0;
+
+ dataBuffer[ptr++] = 0;
+
+ System.arraycopy(header, 0, dataBuffer, ptr, header.length);
+ ptr += header.length;
+
+ for (int[] data : fpgaHits.get(fpgaNumber)) {
+ System.arraycopy(data, 0, dataBuffer, ptr, data.length);
+ ptr += data.length;
+ }
+
+ dataBuffer[ptr++] = fpgaDatum.getTail();
+
+ if (ptr != dataBuffer.length) {
+ throw new RuntimeException("tried to fill SVT buffer of length " + dataBuffer.length + " with " + ptr + " ints");
+ }
+
+ if (debug) {
+ System.out.println(this.getClass().getSimpleName() + ": FPGA " + fpgaNumber + " : Data size: " + dataBuffer.length);
+ }
+
+ // Bank for this FPGA's frame data.
+ EvioBank frameBank = new EvioBank(fpgaNumber, DataType.UINT32, fpgaNumber);
+ try {
+ // Add the FPGA bank to the SVT bank
+ builder.addChild(svtBank, frameBank);
+ // Add the SVT data to the FPGA bank
+ frameBank.appendIntData(dataBuffer);
+ } catch (EvioException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ // Add the SVT bank to the Main EVIO bank
+ try {
+ builder.addChild(builder.getEvent(), svtBank);
+ } catch (EvioException e) {
+ throw new RuntimeException(e);
+ }
+ }
@Override
public void writeData(EventHeader event, EventHeader toEvent) {
- System.out.println("Not supported yet.");
+ List<RawTrackerHit> rawTrackerHits = event.get(RawTrackerHit.class, hitCollectionName);
+
+
+
+ System.out.println("Writing " + rawTrackerHits.size() + " SVT hits");
+ int flags = 1 << LCIOConstants.TRAWBIT_ID1;
+ toEvent.put(hitCollectionName, rawTrackerHits, RawTrackerHit.class, flags, readoutName);
+
+ List<FpgaData> fpgaData = makeFpgaData();
+ System.out.println("Writing " + fpgaData.size() + " FPGA data");
+
+ toEvent.put(fpgaDataCollectionName, fpgaData, FpgaData.class, 0);
}
}
hps-java/src/main/java/org/lcsim/hps/evio
diff -u -r1.11 -r1.12
--- TestRunTriggeredReconToLcio.java 25 Feb 2013 22:39:25 -0000 1.11
+++ TestRunTriggeredReconToLcio.java 1 Mar 2013 01:30:25 -0000 1.12
@@ -33,7 +33,7 @@
private int eventNum = 0;
// HPSEcalConditions ecalIDConverter = null;
ECalHitWriter ecalWriter = null;
- SVTHitWriter_RTH svtWriter = null;
+ SVTHitWriter svtWriter = null;
TriggerDataWriter triggerWriter = null;
List<HitWriter> writers = null;
LCIOWriter lcioWriter = null;
@@ -78,7 +78,7 @@
ecalWriter.setHitCollectionName(rawCalorimeterHitCollectionName);
writers.add(ecalWriter);
- svtWriter = new SVTHitWriter_RTH();
+ svtWriter = new SVTHitWriter();
writers.add(svtWriter);
triggerWriter = new TriggerDataWriter();
hps-java/src/main/java/org/lcsim/hps/evio
diff -u -r1.23 -r1.24
--- LCSimTestRunEventBuilder.java 21 Sep 2012 23:22:18 -0000 1.23
+++ LCSimTestRunEventBuilder.java 1 Mar 2013 01:30:25 -0000 1.24
@@ -16,7 +16,7 @@
*
* @author Sho Uemura <[log in to unmask]>
* @author Jeremy McCormick <[log in to unmask]>
- * @version $Id: LCSimTestRunEventBuilder.java,v 1.23 2012/09/21 23:22:18 meeg Exp $
+ * @version $Id: LCSimTestRunEventBuilder.java,v 1.24 2013/03/01 01:30:25 meeg Exp $
*/
public class LCSimTestRunEventBuilder implements LCSimEventBuilder {
@@ -27,13 +27,13 @@
// Debug flag.
private boolean debug = false;
ECalEvioReader ecalReader = null;
- SVTEvioReader_RTH svtReader = null;
+ SVTEvioReader svtReader = null;
private int run = 0; //current run number, taken from prestart and end events
private long time = 0; //most recent event time (ns), taken from prestart and end events, and trigger banks (if any)
public LCSimTestRunEventBuilder() {
ecalReader = new ECalEvioReader();
- svtReader = new SVTEvioReader_RTH();
+ svtReader = new SVTEvioReader();
}
@Override
hps-java/src/main/java/org/lcsim/hps/evio
diff -u -r1.8 -r1.9
--- SVTEvioReader.java 14 Aug 2012 00:58:03 -0000 1.8
+++ SVTEvioReader.java 1 Mar 2013 01:30:25 -0000 1.9
@@ -9,59 +9,60 @@
import org.jlab.coda.jevio.EvioEvent;
//--- org.lcsim ---//
+import org.lcsim.detector.tracker.silicon.SiSensor;
import org.lcsim.event.EventHeader;
import org.lcsim.event.GenericObject;
//--- hps-java ---//
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.base.BaseRawTrackerHit;
import org.lcsim.hps.recon.tracking.FpgaData;
import org.lcsim.hps.recon.tracking.HPSSVTData;
//--- Constants ---//
import static org.lcsim.hps.evio.EventConstants.SVT_BANK_TAG;
import org.lcsim.hps.recon.tracking.HPSSVTConstants;
+import org.lcsim.hps.recon.tracking.SvtUtils;
+import org.lcsim.hps.util.Pair;
+import org.lcsim.util.lcio.LCIOUtil;
/**
*
* @author Omar Moreno <[log in to unmask]>
- * @version $Id: SVTEvioReader.java,v 1.8 2012/08/14 00:58:03 meeg Exp $
+ * @version $Id: SVTEvioReader.java,v 1.9 2013/03/01 01:30:25 meeg Exp $
*/
public class SVTEvioReader extends EvioReader {
String fpgaDataCollectionName = "FPGAData";
+ String readoutName = "TrackerHits";
/**
*
*/
public SVTEvioReader() {
- hitCollectionName = "SVTData";
+ hitCollectionName = "SVTRawTrackerHits";
debug = false;
}
+ public void setReadoutName(String readoutName) {
+ this.readoutName = readoutName;
+ }
+
/**
*
*/
+ @Override
public boolean makeHits(EvioEvent event, EventHeader lcsimEvent) {
- // Create a list of HPSSVTData to extract the
- List<HPSSVTData> svtData = new ArrayList<HPSSVTData>();
+ // Create DAQ Maps
+ if (!SvtUtils.getInstance().isSetup()) {
+ SvtUtils.getInstance().setupDaqMaps(lcsimEvent.getDetector());
+ }
// Create a list to hold the temperatures
- List<FpgaData> fpgaData = new ArrayList<FpgaData>();
-
- boolean foundBank = makeSVTData(event, svtData, fpgaData);
+ List<FpgaData> fpgaDataCollection = new ArrayList<FpgaData>();
- lcsimEvent.put(hitCollectionName, svtData, HPSSVTData.class, 0);
- lcsimEvent.put(fpgaDataCollectionName, fpgaData, GenericObject.class, 0);
+ List<RawTrackerHit> hits = new ArrayList<RawTrackerHit>();
- return foundBank;
- }
-
- /**
- *
- * @param event
- * @return
- */
- public boolean makeSVTData(EvioEvent event, List<HPSSVTData> svtDataCollection,
- List<FpgaData> fpgaDataCollection) {
boolean foundBank = false;
for (BaseStructure crateBank : event.getChildren()) {
int crateTag = crateBank.getHeader().getTag();
@@ -133,14 +134,30 @@
for (int index = 0; index < allSamples.length; index += 4) {
int[] samples = new int[4];
System.arraycopy(allSamples, index, samples, 0, samples.length);
- svtDataCollection.add(new HPSSVTData(samples));
+ hits.add(makeHit(samples));
}
}
}
}
if (debug) {
- System.out.println("Adding SVTData Collection of Size " + svtDataCollection.size());
+ System.out.println("Adding RawTrackerHit Collection of Size " + hits.size());
}
+
+ lcsimEvent.put(fpgaDataCollectionName, fpgaDataCollection, GenericObject.class, 0);
+ int flag = LCIOUtil.bitSet(0, 31, true); // Turn on 64-bit cell ID.
+ lcsimEvent.put(hitCollectionName, hits, RawTrackerHit.class, flag, readoutName);
+
return foundBank;
}
+
+ private static RawTrackerHit makeHit(int[] data) {
+ int hitTime = 0;
+ Pair<Integer, Integer> daqPair = new Pair<Integer, Integer>(HPSSVTData.getFPGAAddress(data), HPSSVTData.getHybridNumber(data));
+ SiSensor sensor = SvtUtils.getInstance().getSensor(daqPair);
+
+ int sensorChannel = HPSSVTData.getSensorChannel(data);
+ long cell_id = SvtUtils.makeCellID(sensor, sensorChannel);
+
+ return new BaseRawTrackerHit(hitTime, cell_id, HPSSVTData.getAllSamples(data), null, sensor);
+ }
}
hps-java/src/main/java/org/lcsim/hps/evio
diff -u -r1.22 -r1.23
--- TestRunTriggeredReconToEvio.java 25 Feb 2013 22:39:25 -0000 1.22
+++ TestRunTriggeredReconToEvio.java 1 Mar 2013 01:30:25 -0000 1.23
@@ -30,7 +30,7 @@
private int eventNum = 0;
EcalConditions ecalIDConverter = null;
ECalHitWriter ecalWriter = null;
- SVTHitWriter_RTH svtWriter = null;
+ SVTHitWriter svtWriter = null;
TriggerDataWriter triggerWriter = null;
List<HitWriter> writers = null;
private int ecalMode = EventConstants.ECAL_PULSE_INTEGRAL_MODE;
@@ -76,7 +76,7 @@
ecalWriter.setHitCollectionName(rawCalorimeterHitCollectionName);
writers.add(ecalWriter);
- svtWriter = new SVTHitWriter_RTH();
+ svtWriter = new SVTHitWriter();
writers.add(svtWriter);
triggerWriter = new TriggerDataWriter();
hps-java/src/main/java/org/lcsim/hps/evio
diff -N SVTEvioReader_RTH.java
--- SVTEvioReader_RTH.java 1 Mar 2013 01:15:20 -0000 1.3
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,163 +0,0 @@
-package org.lcsim.hps.evio;
-
-//--- java ---//
-import java.util.ArrayList;
-import java.util.List;
-
-//--- Coda ---//
-import org.jlab.coda.jevio.BaseStructure;
-import org.jlab.coda.jevio.EvioEvent;
-
-//--- org.lcsim ---//
-import org.lcsim.detector.tracker.silicon.ChargeCarrier;
-import org.lcsim.detector.tracker.silicon.SiSensor;
-import org.lcsim.event.EventHeader;
-import org.lcsim.event.GenericObject;
-
-//--- hps-java ---//
-import org.lcsim.event.RawTrackerHit;
-import org.lcsim.event.base.BaseRawTrackerHit;
-import org.lcsim.hps.recon.tracking.FpgaData;
-import org.lcsim.hps.recon.tracking.HPSSVTData;
-
-//--- Constants ---//
-import static org.lcsim.hps.evio.EventConstants.SVT_BANK_TAG;
-import org.lcsim.hps.recon.tracking.HPSSVTConstants;
-import org.lcsim.hps.recon.tracking.SvtUtils;
-import org.lcsim.hps.util.Pair;
-import org.lcsim.util.lcio.LCIOUtil;
-
-/**
- *
- * @author Omar Moreno <[log in to unmask]>
- * @version $Id: SVTEvioReader_RTH.java,v 1.3 2013/03/01 01:15:20 meeg Exp $
- */
-public class SVTEvioReader_RTH extends EvioReader {
-
- String fpgaDataCollectionName = "FPGAData";
- String readoutName = "TrackerHits";
-
- /**
- *
- */
- public SVTEvioReader_RTH() {
- hitCollectionName = "SVTRawTrackerHits";
- debug = false;
- }
-
- public void setReadoutName(String readoutName) {
- this.readoutName = readoutName;
- }
-
- /**
- *
- */
- public boolean makeHits(EvioEvent event, EventHeader lcsimEvent) {
- // Create DAQ Maps
- if (!SvtUtils.getInstance().isSetup()) {
- SvtUtils.getInstance().setupDaqMaps(lcsimEvent.getDetector());
- }
-
- // Create a list to hold the temperatures
- List<FpgaData> fpgaDataCollection = new ArrayList<FpgaData>();
-
- List<RawTrackerHit> hits = new ArrayList<RawTrackerHit>();
-
- boolean foundBank = false;
- for (BaseStructure crateBank : event.getChildren()) {
- int crateTag = crateBank.getHeader().getTag();
-
- // Process only events inside the SVT Bank
- if (crateTag == SVT_BANK_TAG) {
- foundBank = true;
- if (crateBank.getChildCount() == 0) {
- throw new RuntimeException("No children found in SVT bank!");
- }
-
- // Loop over all FPGA banks
- for (BaseStructure fpgaBank : crateBank.getChildren()) {
- int fpgaID = fpgaBank.getHeader().getTag();
- if (fpgaID < 0 || fpgaID >= HPSSVTConstants.SVT_TOTAL_FPGAS) {
- System.out.println("Unexpected FPGA bank tag " + fpgaID);
- }
-
- // The data contained in FPGA 7 is currently not used
- if (fpgaBank.getHeader().getTag() == 7) {
- continue;
- }
-
- // Get data
- int[] data = fpgaBank.getIntData();
-
- if (debug) {
- System.out.println(this.getClass().getSimpleName() + ": The data size is " + data.length);
- }
-
- if (debug) {
- for (int index = 0; index < data.length; index++) {
- System.out.println("Data " + index + ": " + data[index]);
- }
- }
-
- // Get the hybrid temperature data associated with this FPGA
- int[] temperatureData = new int[6];
- System.arraycopy(data, 1, temperatureData, 0, 6);
- FpgaData fpgaData = new FpgaData(fpgaID, temperatureData, data[data.length - 1]);
- fpgaDataCollection.add(fpgaData);
-
-
- if (debug) {
- System.out.println(this.getClass().getSimpleName() + ": The temperatures are: ");
- double[] temps = HPSSVTData.getTemperature(temperatureData);
- for (int index = 0; index < temps.length; index++) {
- System.out.println("Temp " + index + ": " + temps[index]);
- }
- }
-
- // Get all of the samples
- int sampleLength = data.length - temperatureData.length - 2; // Tail length
- int[] allSamples = new int[sampleLength];
- System.arraycopy(data, 7, allSamples, 0, sampleLength);
-
- if (debug) {
- for (int index = 0; index < allSamples.length; index++) {
- System.out.println("Sample " + index + ": " + allSamples[index]);
- }
- }
-
- // Check whether a complete set of samples exist
- if (allSamples.length % 4 != 0) {
- throw new RuntimeException("Size of samples array is not divisible by 4!");
- }
-
- // Loop over all samples and create HPSSVTData
- for (int index = 0; index < allSamples.length; index += 4) {
- int[] samples = new int[4];
- System.arraycopy(allSamples, index, samples, 0, samples.length);
- hits.add(makeHit(samples));
- }
- }
- }
- }
- if (debug) {
- System.out.println("Adding RawTrackerHit Collection of Size " + hits.size());
- }
-
- lcsimEvent.put(fpgaDataCollectionName, fpgaDataCollection, GenericObject.class, 0);
- int flag = LCIOUtil.bitSet(0, 31, true); // Turn on 64-bit cell ID.
- lcsimEvent.put(hitCollectionName, hits, RawTrackerHit.class, flag, readoutName);
-
- return foundBank;
- }
-
- private static RawTrackerHit makeHit(int[] data) {
- int hitTime = 0;
- Pair<Integer, Integer> daqPair = new Pair<Integer, Integer>(HPSSVTData.getFPGAAddress(data), HPSSVTData.getHybridNumber(data));
- SiSensor sensor = SvtUtils.getInstance().getSensor(daqPair);
-
- int sensorChannel = HPSSVTData.getSensorChannel(data);
- long cell_id = SvtUtils.makeCellID(sensor, sensorChannel);
-
- return new BaseRawTrackerHit(hitTime, cell_id, HPSSVTData.getAllSamples(data), null, sensor);
- }
-}
hps-java/src/main/java/org/lcsim/hps/evio
diff -N SVTHitWriter_RTH.java
--- SVTHitWriter_RTH.java 16 Aug 2012 22:01:30 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,158 +0,0 @@
-package org.lcsim.hps.evio;
-
-import java.util.ArrayList;
-import java.util.List;
-import static org.lcsim.hps.evio.EventConstants.SVT_BANK_NUMBER;
-import static org.lcsim.hps.evio.EventConstants.SVT_BANK_TAG;
-import static org.lcsim.hps.evio.EventConstants.SVT_TOTAL_NUMBER_FPGAS;
-
-
-import org.jlab.coda.jevio.DataType;
-import org.jlab.coda.jevio.EventBuilder;
-import org.jlab.coda.jevio.EvioBank;
-import org.jlab.coda.jevio.EvioException;
-import org.lcsim.detector.tracker.silicon.SiSensor;
-import org.lcsim.event.EventHeader;
-import org.lcsim.event.RawTrackerHit;
-import org.lcsim.hps.recon.tracking.FpgaData;
-import org.lcsim.hps.recon.tracking.HPSSVTConstants;
-import org.lcsim.hps.recon.tracking.HPSSVTData;
-import org.lcsim.hps.recon.tracking.SvtUtils;
-import org.lcsim.util.lcio.LCIOConstants;
-import org.lcsim.util.lcio.LCIOUtil;
-
-/**
- *
- * @author Sho Uemura <[log in to unmask]>
- * @version $Id: SVTHitWriter_RTH.java,v 1.2 2012/08/16 22:01:30 meeg Exp $
- */
-public class SVTHitWriter_RTH implements HitWriter {
-
- boolean debug = false;
- private String hitCollectionName = "SVTRawTrackerHits";
- private String fpgaDataCollectionName = "FPGAData";
- String readoutName = "TrackerHits";
-
- public SVTHitWriter_RTH() {
- }
-
- public void setHitCollectionName(String hitCollectionName) {
- this.hitCollectionName = hitCollectionName;
- }
-
- @Override
- public boolean hasData(EventHeader event) {
- return event.hasCollection(RawTrackerHit.class, hitCollectionName);
- }
-
- //make some dummy FpgaData to use in case there isn't any real FpgaData
- private static List<FpgaData> makeFpgaData() {
- double[] temps = new double[HPSSVTConstants.TOTAL_HYBRIDS_PER_FPGA * HPSSVTConstants.TOTAL_TEMPS_PER_HYBRID];
- for (int i = 0; i < HPSSVTConstants.TOTAL_HYBRIDS_PER_FPGA * HPSSVTConstants.TOTAL_TEMPS_PER_HYBRID; i++) {
- temps[i] = 23.0;
- }
- List<FpgaData> fpgaData = new ArrayList<FpgaData>();
- for (int fpgaNumber = 0; fpgaNumber < SVT_TOTAL_NUMBER_FPGAS; fpgaNumber++) {
- fpgaData.add(new FpgaData(fpgaNumber, temps, 0));
- }
-
- return fpgaData;
- }
-
- public void writeData(EventHeader event, EventBuilder builder) {
-
- List<RawTrackerHit> hits = event.get(RawTrackerHit.class, hitCollectionName);
- List<FpgaData> fpgaData = makeFpgaData();
-
- System.out.println("Writing " + hits.size() + " SVT hits");
- System.out.println("Writing " + fpgaData.size() + " FPGA data");
-
- List<List<int[]>> fpgaHits = new ArrayList<List<int[]>>();
- for (int fpgaNumber = 0; fpgaNumber < SVT_TOTAL_NUMBER_FPGAS; fpgaNumber++) {
- fpgaHits.add(new ArrayList<int[]>());
- }
-
- for (RawTrackerHit hit : hits) {
- int fpgaAddress = SvtUtils.getInstance().getFPGA((SiSensor) hit.getDetectorElement());
- int hybridNumber = SvtUtils.getInstance().getHybrid((SiSensor) hit.getDetectorElement());
- int sensorChannel = hit.getIdentifierFieldValue("strip");
- int apvNumber = HPSSVTData.getAPV(sensorChannel);
- int channelNumber = HPSSVTData.getAPVChannel(sensorChannel);
-
- int[] data = new int[4];
- HPSSVTData.createSVTDataPacket(hybridNumber, apvNumber, channelNumber, fpgaAddress, hit.getADCValues(), data);
- fpgaHits.get(fpgaAddress).add(data);
- }
-
- // SVT container bank.
- EvioBank svtBank = new EvioBank(SVT_BANK_TAG, DataType.BANK, SVT_BANK_NUMBER);
-
- // Iterate over FPGA's 0 - 6
- for (int fpgaNumber = 0; fpgaNumber < SVT_TOTAL_NUMBER_FPGAS; fpgaNumber++) {
-
- // Skip FPGA 7 for now
- if (fpgaNumber == 7) {
- continue;
- }
- FpgaData fpgaDatum = fpgaData.get(fpgaNumber);
- int[] header = fpgaDatum.extractData();
-
- // Get the raw int data buffer for this FPGA.
- int[] dataBuffer = new int[header.length + 4 * fpgaHits.get(fpgaNumber).size() + 2];
- int ptr = 0;
-
- dataBuffer[ptr++] = 0;
-
- System.arraycopy(header, 0, dataBuffer, ptr, header.length);
- ptr += header.length;
-
- for (int[] data : fpgaHits.get(fpgaNumber)) {
- System.arraycopy(data, 0, dataBuffer, ptr, data.length);
- ptr += data.length;
- }
-
- dataBuffer[ptr++] = fpgaDatum.getTail();
-
- if (ptr != dataBuffer.length) {
- throw new RuntimeException("tried to fill SVT buffer of length " + dataBuffer.length + " with " + ptr + " ints");
- }
-
- if (debug) {
- System.out.println(this.getClass().getSimpleName() + ": FPGA " + fpgaNumber + " : Data size: " + dataBuffer.length);
- }
-
- // Bank for this FPGA's frame data.
- EvioBank frameBank = new EvioBank(fpgaNumber, DataType.UINT32, fpgaNumber);
- try {
- // Add the FPGA bank to the SVT bank
- builder.addChild(svtBank, frameBank);
- // Add the SVT data to the FPGA bank
- frameBank.appendIntData(dataBuffer);
- } catch (EvioException e) {
- throw new RuntimeException(e);
- }
- }
- // Add the SVT bank to the Main EVIO bank
- try {
- builder.addChild(builder.getEvent(), svtBank);
- } catch (EvioException e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public void writeData(EventHeader event, EventHeader toEvent) {
- List<RawTrackerHit> rawTrackerHits = event.get(RawTrackerHit.class, hitCollectionName);
-
-
-
- System.out.println("Writing " + rawTrackerHits.size() + " SVT hits");
- int flags = 1 << LCIOConstants.TRAWBIT_ID1;
- toEvent.put(hitCollectionName, rawTrackerHits, RawTrackerHit.class, flags, readoutName);
-
- List<FpgaData> fpgaData = makeFpgaData();
- System.out.println("Writing " + fpgaData.size() + " FPGA data");
-
- toEvent.put(fpgaDataCollectionName, fpgaData, FpgaData.class, 0);
- }
-}
hps-java/sandbox
diff -N SVTHitWriter.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SVTHitWriter.java 1 Mar 2013 01:30:25 -0000 1.1
@@ -0,0 +1,74 @@
+
+package org.lcsim.hps.evio;
+
+import static org.lcsim.hps.evio.EventConstants.SVT_BANK_NUMBER;
+import static org.lcsim.hps.evio.EventConstants.SVT_BANK_TAG;
+import static org.lcsim.hps.evio.EventConstants.SVT_TOTAL_NUMBER_FPGAS;
+
+import java.util.List;
+
+import org.jlab.coda.jevio.DataType;
+import org.jlab.coda.jevio.EventBuilder;
+import org.jlab.coda.jevio.EvioBank;
+import org.jlab.coda.jevio.EvioException;
+import org.lcsim.event.EventHeader;
+import org.lcsim.hps.recon.tracking.HPSSVTData;
+import org.lcsim.hps.recon.tracking.HPSSVTDataBuffer;
+
+/**
+ *
+ * @author Sho Uemura <[log in to unmask]>
+ * @version $Id: SVTHitWriter.java,v 1.1 2013/03/01 01:30:25 meeg Exp $
+ */
+public class SVTHitWriter implements HitWriter {
+
+ boolean debug = false;
+
+ public SVTHitWriter() {}
+
+ public boolean hasData(EventHeader event) {
+ List<List<HPSSVTData>> svtDataList = event.get(HPSSVTData.class);
+ return (svtDataList != null && svtDataList.size() > 0 && svtDataList.get(0) != null);
+ }
+
+ public void writeData(EventHeader event, EventBuilder builder) {
+
+ // SVT container bank.
+ EvioBank svtBank = new EvioBank(SVT_BANK_TAG, DataType.BANK, SVT_BANK_NUMBER);
+
+ // Iterate over FPGA's 0 - 6
+ for(int fpgaNumber = 0; fpgaNumber < SVT_TOTAL_NUMBER_FPGAS; fpgaNumber++){
+
+ // Skip FPGA 7 for now
+ if(fpgaNumber == 7) continue;
+
+ // Get the raw int data buffer for this FPGA.
+ int[] dataBuffer = HPSSVTDataBuffer.readoutBuffer(fpgaNumber);
+
+ if(debug) System.out.println(this.getClass().getSimpleName() + ": FPGA " + fpgaNumber + " : Data size: " + dataBuffer.length);
+
+ // Bank for this FPGA's frame data.
+ EvioBank frameBank = new EvioBank(fpgaNumber, DataType.UINT32, fpgaNumber);
+ try {
+ // Add the SVT data to the FPGA bank
+ frameBank.appendIntData(dataBuffer);
+ // Add the FPGA bank to the SVT bank
+ builder.addChild(svtBank, frameBank);
+ } catch (EvioException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ // Add the SVT bank to the Main EVIO bank
+ try {
+ builder.addChild(builder.getEvent(), svtBank);
+ } catch (EvioException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public void writeData(EventHeader event, EventHeader toEvent) {
+ System.out.println("Not supported yet.");
+ }
+}
hps-java/sandbox
diff -N SVTEvioReader.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SVTEvioReader.java 1 Mar 2013 01:30:25 -0000 1.1
@@ -0,0 +1,146 @@
+package org.lcsim.hps.evio;
+
+//--- java ---//
+import java.util.ArrayList;
+import java.util.List;
+
+//--- Coda ---//
+import org.jlab.coda.jevio.BaseStructure;
+import org.jlab.coda.jevio.EvioEvent;
+
+//--- org.lcsim ---//
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.GenericObject;
+
+//--- hps-java ---//
+import org.lcsim.hps.recon.tracking.FpgaData;
+import org.lcsim.hps.recon.tracking.HPSSVTData;
+
+//--- Constants ---//
+import static org.lcsim.hps.evio.EventConstants.SVT_BANK_TAG;
+import org.lcsim.hps.recon.tracking.HPSSVTConstants;
+
+/**
+ *
+ * @author Omar Moreno <[log in to unmask]>
+ * @version $Id: SVTEvioReader.java,v 1.1 2013/03/01 01:30:25 meeg Exp $
+ */
+public class SVTEvioReader extends EvioReader {
+
+ String fpgaDataCollectionName = "FPGAData";
+
+ /**
+ *
+ */
+ public SVTEvioReader() {
+ hitCollectionName = "SVTData";
+ debug = false;
+ }
+
+ /**
+ *
+ */
+ public boolean makeHits(EvioEvent event, EventHeader lcsimEvent) {
+ // Create a list of HPSSVTData to extract the
+ List<HPSSVTData> svtData = new ArrayList<HPSSVTData>();
+
+ // Create a list to hold the temperatures
+ List<FpgaData> fpgaData = new ArrayList<FpgaData>();
+
+ boolean foundBank = makeSVTData(event, svtData, fpgaData);
+
+ lcsimEvent.put(hitCollectionName, svtData, HPSSVTData.class, 0);
+ lcsimEvent.put(fpgaDataCollectionName, fpgaData, GenericObject.class, 0);
+
+ return foundBank;
+ }
+
+ /**
+ *
+ * @param event
+ * @return
+ */
+ public boolean makeSVTData(EvioEvent event, List<HPSSVTData> svtDataCollection,
+ List<FpgaData> fpgaDataCollection) {
+ boolean foundBank = false;
+ for (BaseStructure crateBank : event.getChildren()) {
+ int crateTag = crateBank.getHeader().getTag();
+
+ // Process only events inside the SVT Bank
+ if (crateTag == SVT_BANK_TAG) {
+ foundBank = true;
+ if (crateBank.getChildCount() == 0) {
+ throw new RuntimeException("No children found in SVT bank!");
+ }
+
+ // Loop over all FPGA banks
+ for (BaseStructure fpgaBank : crateBank.getChildren()) {
+ int fpgaID = fpgaBank.getHeader().getTag();
+ if (fpgaID < 0 || fpgaID >= HPSSVTConstants.SVT_TOTAL_FPGAS) {
+ System.out.println("Unexpected FPGA bank tag " + fpgaID);
+ }
+
+ // The data contained in FPGA 7 is currently not used
+ if (fpgaBank.getHeader().getTag() == 7) {
+ continue;
+ }
+
+ // Get data
+ int[] data = fpgaBank.getIntData();
+
+ if (debug) {
+ System.out.println(this.getClass().getSimpleName() + ": The data size is " + data.length);
+ }
+
+ if (debug) {
+ for (int index = 0; index < data.length; index++) {
+ System.out.println("Data " + index + ": " + data[index]);
+ }
+ }
+
+ // Get the hybrid temperature data associated with this FPGA
+ int[] temperatureData = new int[6];
+ System.arraycopy(data, 1, temperatureData, 0, 6);
+ FpgaData fpgaData = new FpgaData(fpgaID, temperatureData, data[data.length - 1]);
+ fpgaDataCollection.add(fpgaData);
+
+
+ if (debug) {
+ System.out.println(this.getClass().getSimpleName() + ": The temperatures are: ");
+ double[] temps = HPSSVTData.getTemperature(temperatureData);
+ for (int index = 0; index < temps.length; index++) {
+ System.out.println("Temp " + index + ": " + temps[index]);
+ }
+ }
+
+ // Get all of the samples
+ int sampleLength = data.length - temperatureData.length - 2; // Tail length
+ int[] allSamples = new int[sampleLength];
+ System.arraycopy(data, 7, allSamples, 0, sampleLength);
+
+ if (debug) {
+ for (int index = 0; index < allSamples.length; index++) {
+ System.out.println("Sample " + index + ": " + allSamples[index]);
+ }
+ }
+
+ // Check whether a complete set of samples exist
+ if (allSamples.length % 4 != 0) {
+ throw new RuntimeException("Size of samples array is not divisible by 4!");
+ }
+
+ // Loop over all samples and create HPSSVTData
+ for (int index = 0; index < allSamples.length; index += 4) {
+ int[] samples = new int[4];
+ System.arraycopy(allSamples, index, samples, 0, samples.length);
+ svtDataCollection.add(new HPSSVTData(samples));
+ }
+ }
+ }
+ }
+ if (debug) {
+ System.out.println("Adding SVTData Collection of Size " + svtDataCollection.size());
+ }
+ return foundBank;
+ }
+}
CVSspam 0.2.12