Commit in hps-java/src/main/java/org/lcsim/hps/recon/tracking on MAIN
HPSSVTRawTrackerHitMaker.java+130added 1.1
Driver to convert HPSSVTData to RawTrackerHits

hps-java/src/main/java/org/lcsim/hps/recon/tracking
HPSSVTRawTrackerHitMaker.java added at 1.1
diff -N HPSSVTRawTrackerHitMaker.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ HPSSVTRawTrackerHitMaker.java	25 Apr 2012 05:06:46 -0000	1.1
@@ -0,0 +1,130 @@
+package org.lcsim.hps.recon.tracking;
+
+//--- Java --//
+import java.util.List;
+import java.util.ArrayList;
+
+//--- 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.RawTrackerHit;
+import org.lcsim.event.base.BaseRawTrackerHit;
+import org.lcsim.util.Driver;
+import org.lcsim.util.lcio.LCIOUtil;
+
+//--- hps-java ---//
+import org.lcsim.hps.util.Pair;
+
+//--- Constants ---//
+import static org.lcsim.hps.recon.tracking.HPSSVTConstants.TOTAL_STRIPS_PER_SENSOR;
+import static org.lcsim.hps.recon.tracking.HPSSVTConstants.TOTAL_APV25_CHANNELS;
+
+
+/** 
+ * 
+ * @author Omar Moreno <[log in to unmask]>
+ * @version $Id: HPSSVTRawTrackerHitMaker.java,v 1.1 2012/04/25 05:06:46 omoreno Exp $
+ */
+public class HPSSVTRawTrackerHitMaker extends Driver {
+	
+	String svtDataCollectionName = "SVTData";
+	String svtRawTrackerHitCollectionName = "SVTRawTrackerHits";
+	String readoutName = "TrackerHits";
+	
+	public HPSSVTRawTrackerHitMaker(){}
+	
+	/**
+	 * 
+	 */
+	public void process(EventHeader event)
+	{
+		
+		// If the SVT data collection does not exist skip the event
+		if(!event.hasCollection(HPSSVTData.class, svtDataCollectionName)){
+			System.out.println(this.getClass().getSimpleName() + ": " + svtDataCollectionName + " does not exist; skipping event!");
+			return;
+		}
+		
+		// If the SVT data collection is empty skip the event
+		List<HPSSVTData> svtData = event.get(HPSSVTData.class, svtDataCollectionName);
+		if(svtData.isEmpty()){
+			System.out.println(this.getClass().getSimpleName() + ": " + svtDataCollectionName + " is empty; skipping event!");
+			return;
+		}
+		
+		// Create RawTrackerHits
+		List<RawTrackerHit> rawHits = this.makeRawTrackerHits(svtData);
+		
+		// Turn on 64-bit cell ID
+		int flag = LCIOUtil.bitSet(0, 31, true); 
+		
+		// Place the RawTrackerHits collection into the event
+		event.put(svtRawTrackerHitCollectionName, rawHits, RawTrackerHit.class, flag, readoutName);
+		System.out.println("Created " + rawHits.size() + " RawTrackerHits");
+	}
+	
+	/**
+	 * Converts a list of HPSSVTData to a list of RawTrackerHits
+	 * 
+	 * @param svtData : List of HPSSVTData to be converted
+	 * 
+	 * @return List of RawTrackerHits
+	 */
+	public List<RawTrackerHit> makeRawTrackerHits(List<HPSSVTData> svtData)
+	{
+		// Lost of RawTrackerHits
+		List<RawTrackerHit> rawHits = new ArrayList<RawTrackerHit>();
+		
+		for(HPSSVTData svtDatum : svtData){
+			
+			// Get the sensor associated with this hit
+			Pair<Integer, Integer> daqPair 
+				= new Pair<Integer, Integer>(svtDatum.getHybridNumber(), svtDatum.getFPGAAddress());
+			SiSensor sensor = HPSSVTDAQMaps.daqPairToSensor.get(daqPair);
+			
+			// Get the physical channel
+			int physicalChannel 
+				= this.getPhysicalChannel(svtDatum.getAPVNumber(), svtDatum.getChannelNumber());
+			if(physicalChannel < 0 || physicalChannel > 638) 
+				throw new RuntimeException("Channel " + physicalChannel + " is outside of invalid range!");
+			
+			// Get all shaper signal samples associated with this hit
+			short data[] = svtDatum.getAllSamples();
+			
+			// Get the hit time
+			int hitTime = svtDatum.getHitTime(); 
+
+//			System.out.println("Channel: " + svtDatum.getChannelNumber() + ": APV: " + svtDatum.getAPVNumber());
+//			System.out.println(this.getClass().getSimpleName() + ": Charge: " + ChargeCarrier.HOLE.charge());
+//			System.out.println(this.getClass().getSimpleName() + ": " + sensor.hasElectrodesOnSide(ChargeCarrier.HOLE));
+	
+			// Find the side number
+			int sideNumber;
+			if(sensor.hasElectrodesOnSide(ChargeCarrier.HOLE)) sideNumber = ChargeCarrier.HOLE.charge();
+			else sideNumber = ChargeCarrier.ELECTRON.charge();
+			
+			// Get cell ID
+			long cellID = sensor.makeStripId(physicalChannel, sideNumber).getValue();
+			
+			// Create a RawTrackerHit
+			rawHits.add(new BaseRawTrackerHit(hitTime, cellID, data, null, sensor));
+		}
+		
+		return rawHits;
+	}
+	
+	/**
+	 * Get the physical channel corresponding to a raw chip channel
+	 * 
+	 * @param apv : APV25 chip number
+	 * @param channel : APV25 raw channel number
+	 * 
+	 * @return physical channel number
+	 */
+	public int getPhysicalChannel(int apv, int channel)
+	{
+		return TOTAL_STRIPS_PER_SENSOR - (apv*TOTAL_APV25_CHANNELS 
+					+ (TOTAL_APV25_CHANNELS - 1) - channel);
+	}
+}
CVSspam 0.2.12


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