Commit in hps-java/src/main/java/org/lcsim/hps/recon/tracking on MAIN | |||
HPSSVTRawTrackerHitMaker.java | +130 | added 1.1 |
Driver to convert HPSSVTData to RawTrackerHits
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); + } +}
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