Print

Print


Author: [log in to unmask]
Date: Wed Dec  3 15:55:26 2014
New Revision: 1643

Log:
Test run SVT EVIO reader used to convert SVT bank integer data to LCIO objects.

Added:
    java/trunk/evio/src/main/java/org/hps/evio/TestRunSvtEvioReader.java   (with props)

Added: java/trunk/evio/src/main/java/org/hps/evio/TestRunSvtEvioReader.java
 =============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/TestRunSvtEvioReader.java	(added)
+++ java/trunk/evio/src/main/java/org/hps/evio/TestRunSvtEvioReader.java	Wed Dec  3 15:55:26 2014
@@ -0,0 +1,143 @@
+package org.hps.evio;
+
+import java.util.List;
+
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
+import org.lcsim.detector.tracker.silicon.HpsTestRunSiSensor;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.base.BaseRawTrackerHit;
+import org.lcsim.geometry.Subdetector;
+
+import org.hps.util.Pair;
+
+import static org.hps.evio.EventConstants.TEST_RUN_SVT_BANK_TAG;
+
+/**
+ *	Test run SVT EVIO reader used to convert SVT bank raw integers to LCIO
+ *	objects.
+ * 
+ * 	@author Omar Moreno <[log in to unmask]>
+ * 	@date November 20, 2014
+ *
+ */
+public class TestRunSvtEvioReader extends AbstractSvtEvioReader {
+
+	//-----------------//
+	//--- Constants ---//
+	//-----------------//
+
+	private static final int DATA_HEADER_LENGTH = 7;
+	private static final int DATA_TAIL_LENGTH = 1; 
+	private static final int MAX_FPGA_ID = 6;
+	
+	/** 
+	 * Default Constructor
+	 */
+	public TestRunSvtEvioReader() { }; 
+	
+	/**
+	 *	Get the maximum data bank tag in the event.  For the test run, this
+	 *	corresponds to the maximum FPGA ID of 6.  The data contained an 
+	 *	additional FPGA bank with tag = 7, but this wasn't used.
+	 *
+	 *	@return Maximum FPGA ID
+	 */
+	@Override
+	protected int getMaxDataBankTag() {
+		return MAX_FPGA_ID;
+	}
+	
+	/**
+	 *	Get the SVT bank tag.  For the test run, the bank tag was set to 0x3.
+	 *
+	 *	@return The SVT bank tag.
+	 */
+	@Override
+	protected int getSvtBankTag() { 
+		return TEST_RUN_SVT_BANK_TAG; 
+	}
+	
+	/**
+	 *	Get the number of 32 bit integers composing the data block header. For
+	 * 	the test run, the header consisted of 7 32 bit integers.
+	 *
+	 *	@return The header length. 
+	 */
+	@Override
+	protected int getDataHeaderLength() {
+		return DATA_HEADER_LENGTH;
+	}
+	
+	/**
+	 * 	Get the number of 32 bit integers composing the data block tail.  For
+	 * 	the test run, the tail consisted of a single 32 bit integer.
+	 * 
+	 *	@return The tail length
+	 */
+	@Override
+	protected int getDataTailLength() {
+		return DATA_TAIL_LENGTH;
+	}
+
+	/**
+	 *	A method to setup a mapping between a DAQ pair (FPGA/Hybrid) and the 
+	 *	corresponding sensor.
+	 *
+	 *	@param subdetector - The tracker {@link Subdetector} object
+	 */
+	// TODO: This can probably be done when the conditions are loaded.
+	@Override
+	protected void setupDaqMap(Subdetector subdetector) { 
+	
+        List<HpsTestRunSiSensor> sensors 
+        	= subdetector.getDetectorElement().findDescendants(HpsTestRunSiSensor.class);
+		for (HpsTestRunSiSensor sensor : sensors) { 
+			Pair<Integer, Integer> daqPair 
+				= new Pair<Integer, Integer>(sensor.getFpgaID(), sensor.getHybridID());
+			daqPairToSensor.put(daqPair, sensor);
+		}
+		this.isDaqMapSetup = true;
+	}
+
+	/**
+	 *	Get the sensor associated with a set of samples.  The sample block of
+	 *	data is used to extract the FPGA ID and Hybrid ID corresponding to 
+	 *	the samples. 
+	 *
+	 *	@param data - sample block of data
+	 *	@return The sensor associated with a set of sample 
+	 */
+	@Override
+	protected HpsSiSensor getSensor(int[] data) {
+		//System.out.println("[ " + this.getClass().getSimpleName() + " ]: FPGA ID: " + SvtEvioUtils.getFpgaID(data));
+		//System.out.println("[ " + this.getClass().getSimpleName() + " ]: Hybrid ID: " + SvtEvioUtils.getHybridID(data));
+		
+        Pair<Integer, Integer> daqPair 
+        	= new Pair<Integer, Integer>(SvtEvioUtils.getFpgaID(data),
+        								 SvtEvioUtils.getHybridID(data));
+		return daqPairToSensor.get(daqPair);
+	}
+
+
+	/**
+	 * 	Make a {@link RawTrackerHit} from a set of samples.
+	 * 
+	 *	@param data - sample block of data
+	 * 	@return A raw hit
+	 */
+	@Override
+	protected RawTrackerHit makeHit(int[] data) {
+		
+		HpsSiSensor sensor = this.getSensor(data); 
+		int channel = SvtEvioUtils.getChannelNumber(data);
+		//System.out.println("[ " + this.getClass().getSimpleName() + " ]: Channel ID: " + SvtEvioUtils.getChannelNumber(data));
+		long cellID = sensor.makeChannelID(channel);
+		int hitTime = 0;
+		//short[] samples = SvtEvioUtils.getSamples(data);
+		//for(int sampleN = 0; sampleN < 6; sampleN++) { 
+		//	System.out.println("[ " + this.getClass().getSimpleName() + " ]: Sample " + sampleN + ": " + samples[sampleN]);
+		//}
+		
+		return new BaseRawTrackerHit(hitTime, cellID, SvtEvioUtils.getSamples(data), null, sensor);
+	}
+}