Author: [log in to unmask] Date: Mon Nov 9 13:19:04 2015 New Revision: 3940 Log: Added a simple driver to count the instances of each trigger type in a data file. Added: java/trunk/users/src/main/java/org/hps/users/kmccarty/CountTriggersDriver.java Added: java/trunk/users/src/main/java/org/hps/users/kmccarty/CountTriggersDriver.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/kmccarty/CountTriggersDriver.java (added) +++ java/trunk/users/src/main/java/org/hps/users/kmccarty/CountTriggersDriver.java Mon Nov 9 13:19:04 2015 @@ -0,0 +1,79 @@ +package org.hps.users.kmccarty; + +import java.util.List; + +import org.hps.record.triggerbank.AbstractIntData; +import org.hps.record.triggerbank.TIData; +import org.lcsim.event.EventHeader; +import org.lcsim.event.GenericObject; +import org.lcsim.util.Driver; + +/** + * Class <code>CountTriggersDriver</code> counts the number times the + * TI trigger bit was active for each trigger type and outputs the + * result in text at the end of the data processing run. + * + * @author Kyle McCarty <[log in to unmask]> + */ +public class CountTriggersDriver extends Driver { + // Store programmable parameters. + private String bankCollectionName = "TriggerBank"; + + // Track the number of triggers seen for each trigger type. + private int[] triggers = new int[6]; + private static final int PULSER = 0; + private static final int SINGLES0 = 1; + private static final int SINGLES1 = 2; + private static final int PAIR0 = 3; + private static final int PAIR1 = 4; + private static final int COSMIC = 5; + + /** + * Outputs the total number of triggers seen for each trigger type. + */ + @Override + public void endOfData() { + System.out.println("Trigger Counts:"); + System.out.printf("Singles 0 :: %d%n", triggers[SINGLES0]); + System.out.printf("Singles 1 :: %d%n", triggers[SINGLES1]); + System.out.printf("Pair 0 :: %d%n", triggers[PAIR0]); + System.out.printf("Pair 1 :: %d%n", triggers[PAIR1]); + System.out.printf("Pulser :: %d%n", triggers[PULSER]); + System.out.printf("Cosmic :: %d%n", triggers[COSMIC]); + } + + /** + * Checks whether a trigger of each given type was seen by the TI + * for each event and increments the total trigger count for that + * type as appropriate. + */ + @Override + public void process(EventHeader event) { + // Extract the TI bank from the data stream. + TIData tiBank = null; + if(event.hasCollection(GenericObject.class, bankCollectionName)) { + // Get the bank list. + List<GenericObject> bankList = event.get(GenericObject.class, bankCollectionName); + + // Search through the banks and get the TI bank. + for(GenericObject obj : bankList) { + if(AbstractIntData.getTag(obj) == TIData.BANK_TAG) { + tiBank = new TIData(obj); + } + } + } + + // If there is no TI bank, the event can not be processed. + if(tiBank == null) { + return; + } + + // Otherwise, increment the relevant trigger counts. + if(tiBank.isPulserTrigger()) { triggers[PULSER]++; } + else if(tiBank.isSingle0Trigger()) { triggers[SINGLES0]++; } + else if(tiBank.isSingle1Trigger()) { triggers[SINGLES1]++; } + else if(tiBank.isPair0Trigger()) { triggers[PAIR0]++; } + else if(tiBank.isPair1Trigger()) { triggers[PAIR1]++; } + else if(tiBank.isCalibTrigger()) { triggers[COSMIC]++; } + } +}