Commit in hps-java on MAIN | |||
src/main/java/org/lcsim/hps/evio/SVTHitWriter.java | +132 | -48 | 1.1 -> 1.2 |
/TestRunTriggeredReconToLcio.java | +2 | -2 | 1.11 -> 1.12 |
/LCSimTestRunEventBuilder.java | +3 | -3 | 1.23 -> 1.24 |
/SVTEvioReader.java | +38 | -21 | 1.8 -> 1.9 |
/TestRunTriggeredReconToEvio.java | +2 | -2 | 1.22 -> 1.23 |
/SVTEvioReader_RTH.java | -163 | 1.3 removed | |
/SVTHitWriter_RTH.java | -158 | 1.2 removed | |
sandbox/SVTHitWriter.java | +74 | added 1.1 | |
/SVTEvioReader.java | +146 | added 1.1 | |
+397 | -397 |
sandbox old SVT EVIO classes
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);
} }
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();
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
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); + }
}
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();
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); - } -}
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); - } -}
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."); + } +}
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; + } +}
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