Print

Print


Commit in java/branches/hps-java_HPSJAVA-88/evio/src/main/java/org/hps/evio on MAIN
SVTEvioReader.java+54-201160 -> 1161
SVTHitWriter.java+43-161160 -> 1161
+97-36
2 modified files
Remove the use of SvtUtils from both SVTEvioReader and SVTHitWriter.  For now, the methods to retrieve a sensor using a DAQ pair and the FPGA numbers were added to each of these classes.  These should eventually be moved to the DaqMapping class in the conditions package.

java/branches/hps-java_HPSJAVA-88/evio/src/main/java/org/hps/evio
SVTEvioReader.java 1160 -> 1161
--- 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
SVTHitWriter.java 1160 -> 1161
--- 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();
 
SVNspam 0.1