java/branches/hps-java_HPSJAVA-88/evio/src/main/java/org/hps/evio
--- java/branches/hps-java_HPSJAVA-88/evio/src/main/java/org/hps/evio/SVTEvioReader.java 2014-10-09 18:48:15 UTC (rev 1160)
+++ java/branches/hps-java_HPSJAVA-88/evio/src/main/java/org/hps/evio/SVTEvioReader.java 2014-10-09 19:30:52 UTC (rev 1161)
@@ -1,40 +1,51 @@
package org.hps.evio;
-//--- java ---//
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
-import org.hps.conditions.deprecated.HPSSVTConstants;
-import org.hps.conditions.deprecated.SvtUtils;
-import org.hps.readout.svt.FpgaData;
-import org.hps.readout.svt.SVTData;
-//--- Coda ---//
import org.jlab.coda.jevio.BaseStructure;
import org.jlab.coda.jevio.EvioEvent;
-//--- org.lcsim ---//
+
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
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.geometry.Subdetector;
+import org.lcsim.lcio.LCIOUtil;
+import org.hps.conditions.deprecated.HPSSVTConstants;
+//import org.hps.conditions.deprecated.SvtUtils;
+import org.hps.readout.svt.FpgaData;
+import org.hps.readout.svt.SVTData;
import org.hps.util.Pair;
-import org.lcsim.lcio.LCIOUtil;
-
-//--- Constants ---//
import static org.hps.evio.EventConstants.SVT_BANK_TAG;
/**
*
* @author Omar Moreno <[log in to unmask]>
- * @version $Id: SVTEvioReader.java,v 1.10 2013/07/27 01:52:49 omoreno Exp $
*/
public class SVTEvioReader extends EvioReader {
- String fpgaDataCollectionName = "FPGAData";
+
+ // A Map from FPGA and Hybrid daq pair to the corresponding sensor
+ private Map<Pair<Integer /* FPGA */, Integer /* Hybrid */>,
+ HpsSiSensor /* Sensor*/> daqPairToSensor = new HashMap<Pair<Integer, Integer>, HpsSiSensor>();
+
+
+ // Subdetector name
+ private static final String subdetectorName = "Tracker";
+
+ // Flag indicating whether the DAQ map has been setup
+ boolean isDaqMapSetup = false;
+
+ // Collection names
+ String fpgaDataCollectionName = "FPGAData";
String readoutName = "TrackerHits";
-
+
/**
*
*/
@@ -46,6 +57,20 @@
public void setReadoutName(String readoutName) {
this.readoutName = readoutName;
}
+
+ // TODO: Move this class to the DaqMapping class instead
+ private void setupDaqMap(Subdetector subdetector){
+ List<HpsSiSensor> sensors = subdetector.getDetectorElement().findDescendants(HpsSiSensor.class);
+
+ for(HpsSiSensor sensor : sensors){
+ // FIXME: For now, use the FEB ID and FEB Hybrid ID. This will need to be changed to
+ // use the Fpga and hybrid number once HpsTestRunSensor is ready
+ Pair<Integer, Integer> daqPair
+ = new Pair<Integer, Integer>(sensor.getFebID(), sensor.getFebHybridID());
+ daqPairToSensor.put(daqPair, sensor);
+ }
+ isDaqMapSetup = true;
+ }
/**
*
@@ -53,10 +78,15 @@
@Override
public boolean makeHits(EvioEvent event, EventHeader lcsimEvent) {
// Create DAQ Maps
- if (!SvtUtils.getInstance().isSetup()) {
- SvtUtils.getInstance().setup(lcsimEvent.getDetector());
- }
+ //===> if (!SvtUtils.getInstance().isSetup()) {
+ //===> SvtUtils.getInstance().setup(lcsimEvent.getDetector());
+ //===> }
+ // TODO: This needs to be done in a smarter way
+ if(!isDaqMapSetup){
+ setupDaqMap(lcsimEvent.getDetector().getSubdetector(subdetectorName));
+ }
+
// Create a list to hold the temperatures
List<FpgaData> fpgaDataCollection = new ArrayList<FpgaData>();
@@ -149,14 +179,18 @@
return foundBank;
}
- private static RawTrackerHit makeHit(int[] data) {
+ private RawTrackerHit makeHit(int[] data) {
int hitTime = 0;
Pair<Integer, Integer> daqPair = new Pair<Integer, Integer>(SVTData.getFPGAAddress(data), SVTData.getHybridNumber(data));
- SiSensor sensor = SvtUtils.getInstance().getSensor(daqPair);
+ HpsSiSensor sensor = daqPairToSensor.get(daqPair);
+ //===> SiSensor sensor = SvtUtils.getInstance().getSensor(daqPair);
int sensorChannel = SVTData.getSensorChannel(data);
- long cell_id = SvtUtils.makeCellID(sensor, sensorChannel);
+ long cell_id = sensor.makeChannelID(sensorChannel);
+ //===> long cell_id = SvtUtils.makeCellID(sensor, sensorChannel);
+
return new BaseRawTrackerHit(hitTime, cell_id, SVTData.getAllSamples(data), null, sensor);
}
+
}
java/branches/hps-java_HPSJAVA-88/evio/src/main/java/org/hps/evio
--- java/branches/hps-java_HPSJAVA-88/evio/src/main/java/org/hps/evio/SVTHitWriter.java 2014-10-09 18:48:15 UTC (rev 1160)
+++ java/branches/hps-java_HPSJAVA-88/evio/src/main/java/org/hps/evio/SVTHitWriter.java 2014-10-09 19:30:52 UTC (rev 1161)
@@ -5,36 +5,46 @@
import java.util.List;
import java.util.Map;
-import org.hps.conditions.deprecated.HPSSVTConstants;
-import org.hps.conditions.deprecated.SvtUtils;
-import org.hps.readout.svt.FpgaData;
-import org.hps.readout.svt.SVTData;
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.detector.tracker.silicon.HpsSiSensor;
import org.lcsim.event.EventHeader;
import org.lcsim.event.LCRelation;
import org.lcsim.event.RawTrackerHit;
+import org.lcsim.geometry.Subdetector;
import org.lcsim.lcio.LCIOConstants;
+import org.hps.conditions.deprecated.HPSSVTConstants;
+//===> import org.hps.conditions.deprecated.SvtUtils;
+import org.hps.readout.svt.FpgaData;
+import org.hps.readout.svt.SVTData;
+
import static org.hps.evio.EventConstants.SVT_BANK_NUMBER;
import static org.hps.evio.EventConstants.SVT_BANK_TAG;
/**
*
* @author Sho Uemura <[log in to unmask]>
- * @version $Id: SVTHitWriter.java,v 1.5 2013/05/22 18:45:33 jeremy Exp $
*/
public class SVTHitWriter implements HitWriter {
boolean debug = false;
+
+ // Subdetector name
+ private static final String subdetectorName = "Tracker";
+
+ // Collection names
private String hitCollectionName = "SVTRawTrackerHits";
private String fpgaDataCollectionName = "FPGAData";
private String relationCollectionName = "SVTTrueHitRelations";
- String readoutName = "TrackerHits";
-
+ private String readoutName = "TrackerHits";
+
+ List<Integer> fpgaNumbers = new ArrayList<Integer>();
+
public SVTHitWriter() {
}
@@ -46,15 +56,26 @@
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 Map<Integer, FpgaData> makeFpgaData() {
+ private Map<Integer, FpgaData> makeFpgaData(Subdetector subdetector) {
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;
}
+
Map<Integer, FpgaData> fpgaData = new HashMap<Integer, FpgaData>();
- for (Integer fpgaNumber : SvtUtils.getInstance().getFpgaNumbers()) {
+ List<HpsSiSensor> sensors = subdetector.getDetectorElement().findDescendants(HpsSiSensor.class);
+
+ // FIXME: For now, just fill the FPGA numbers list using the sensors.
+ // This should be moved to the daqMapping class.
+ for(HpsSiSensor sensor : sensors){
+ if(!fpgaNumbers.contains(sensor.getFebID())){
+ fpgaNumbers.add(sensor.getFebID());
+ }
+ }
+ //===> for (Integer fpgaNumber : SvtUtils.getInstance().getFpgaNumbers()) {
+ for (Integer fpgaNumber : fpgaNumbers) {
fpgaData.put(fpgaNumber, new FpgaData(fpgaNumber, temps, 0));
}
@@ -65,21 +86,26 @@
public void writeData(EventHeader event, EventBuilder builder) {
List<RawTrackerHit> hits = event.get(RawTrackerHit.class, hitCollectionName);
- Map<Integer, FpgaData> fpgaData = makeFpgaData();
+ Map<Integer, FpgaData> fpgaData = makeFpgaData(event.getDetector().getSubdetector(subdetectorName));
System.out.println("Writing " + hits.size() + " SVT hits");
System.out.println("Writing " + fpgaData.size() + " FPGA data");
Map<Integer, List<int[]>> fpgaHits = new HashMap<Integer, List<int[]>>();
- for (Integer fpgaNumber : SvtUtils.getInstance().getFpgaNumbers()) {
+ //===> for (Integer fpgaNumber : SvtUtils.getInstance().getFpgaNumbers()) {
+ for (Integer fpgaNumber : fpgaNumbers) {
fpgaHits.put(fpgaNumber, 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 fpgaAddress = SvtUtils.getInstance().getFPGA((SiSensor) hit.getDetectorElement());
+ // FIXME: For now use the FEB ID until HpsTestRunSensor is ready
+ int fpgaAddress = ((HpsSiSensor) hit.getDetectorElement()).getFebID();
+ //int hybridNumber = SvtUtils.getInstance().getHybrid((SiSensor) hit.getDetectorElement());
+ // FIXME: For now use the FEB Hybrid ID until HpsTestRunSensor is ready
+ int hybridNumber = ((HpsSiSensor) hit.getDetectorElement()).getFebHybridID();
+ int sensorChannel = hit.getIdentifierFieldValue("strip");
int apvNumber = SVTData.getAPV(sensorChannel);
int channelNumber = SVTData.getAPVChannel(sensorChannel);
@@ -93,7 +119,8 @@
// Iterate over FPGA's 0 - 6
// for (int fpgaNumber = 0; fpgaNumber < SVT_TOTAL_NUMBER_FPGAS; fpgaNumber++) {
- for (Integer fpgaNumber : SvtUtils.getInstance().getFpgaNumbers()) {
+ //===> for (Integer fpgaNumber : SvtUtils.getInstance().getFpgaNumbers()) {
+ for (Integer fpgaNumber : fpgaNumbers) {
FpgaData fpgaDatum = fpgaData.get(fpgaNumber);
int[] header = fpgaDatum.extractData();