Print

Print


Author: [log in to unmask]
Date: Tue Nov  1 07:42:04 2016
New Revision: 4552

Log:
Driver used to filter out event by trigger type.

Added:
    java/trunk/users/src/main/java/org/hps/users/omoreno/TriggerFilter.java   (with props)

Added: java/trunk/users/src/main/java/org/hps/users/omoreno/TriggerFilter.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/TriggerFilter.java	(added)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/TriggerFilter.java	Tue Nov  1 07:42:04 2016
@@ -0,0 +1,116 @@
+package org.hps.users.omoreno;
+
+import java.util.List;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.GenericObject;
+import org.lcsim.util.Driver;
+
+import org.hps.record.triggerbank.AbstractIntData;
+import org.hps.record.triggerbank.TIData;
+
+/**
+ * An LCSim driver used to filter out events by trigger type.
+ *  
+ * @author <a href="mailto:[log in to unmask]">Omar Moreno</a> 
+ */
+public class TriggerFilter extends Driver {
+
+    //----------------------//
+    //   Collection Names   //
+    //----------------------//
+    private static final String TRIGGER_BANK_COL_NAME = "TriggerBank";
+   
+    //-------------------//
+    //   Trigger flags   //
+    //-------------------//
+    
+    private boolean enableTriggerFilter = false;
+    private boolean filterPulserTriggers = true;
+    private boolean filterSingle0Triggers = true;
+    private boolean filterSingle1Triggers = true;
+    private boolean filterPair0Triggers = true;
+    private boolean filterPair1Triggers = true;
+    
+    protected boolean triggerFound = false; 
+  
+    /** Enable/disable filtering by trigger. */
+    public void setEnableTriggerFilter(boolean enableTriggerFilter) {
+        this.enableTriggerFilter = enableTriggerFilter;
+    }
+
+    /** Enable/disable filtering pulser triggers. */
+    public void setFilterPulserTriggers(boolean filterPulserTriggers) {
+        this.filterPulserTriggers = filterPulserTriggers;
+    }
+
+    /** Enable/disable filtering singles0 triggers. */
+    public void setFilterSingle0Triggers(boolean filterSingle0Triggers) {
+        this.filterSingle0Triggers = filterSingle0Triggers;
+    }
+
+    /** Enable/disable filtering of singles1 triggers. */
+    public void setFilterSingle1Triggers(boolean filterSingle1Triggers) {
+        this.filterSingle1Triggers = filterSingle1Triggers;
+    }
+    
+    /** Enable/disable filtering of pair0 triggers. */
+    public void setFilterPair0Triggers(boolean filterPair0Triggers) {
+        this.filterPair0Triggers = filterPair0Triggers;
+    }
+
+    /** Enable/disable filtering of pair1 triggers. */
+    public void setFilterPair1Triggers(boolean filterPair1Triggers) {
+        this.filterPair1Triggers = filterPair1Triggers;
+    }
+    
+    /** 
+     * Method to check if the event was due to the specified trigger filter.
+     * 
+     * @param triggerBanks Collection containing trigger bank information.
+     * @return True if event was due to specified trigger, false otherwise.
+     * 
+     */
+    private boolean passTriggerFilter(List<GenericObject> triggerBanks) {
+
+        // Loop through the collection of banks and get the TI banks.
+        for (GenericObject triggerBank : triggerBanks) {
+
+            // If the bank contains TI data, process it
+            if (AbstractIntData.getTag(triggerBank) == TIData.BANK_TAG) {
+
+                TIData tiData = new TIData(triggerBank);
+
+                if (filterPulserTriggers && tiData.isPulserTrigger()) {
+                    return false;
+                } else if (filterSingle0Triggers && tiData.isSingle0Trigger()) {
+                    return false;
+                } else if (filterSingle1Triggers && tiData.isSingle1Trigger()) {
+                    return false;
+                } else if (filterPair0Triggers && tiData.isPair0Trigger()) {
+                    return false;
+                } else if (filterPair1Triggers && tiData.isPair1Trigger()) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+    
+    @Override
+    public void process(EventHeader event) {
+   
+        triggerFound = false;
+        //System.out.println("Event: " + event.getEventNumber());
+        if (enableTriggerFilter && event.hasCollection(GenericObject.class, TRIGGER_BANK_COL_NAME)) {
+
+            // Get the list of trigger banks from the event
+            List<GenericObject> triggerBanks = event.get(GenericObject.class, TRIGGER_BANK_COL_NAME);
+
+            // Apply the trigger filter
+            if (passTriggerFilter(triggerBanks)) {
+                triggerFound = true;
+            }
+        }
+    }
+}