Print

Print


Author: [log in to unmask]
Date: Fri Jan 30 14:46:49 2015
New Revision: 2011

Log:
add prescale option for trigger drivers

Modified:
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerDriver.java

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerDriver.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerDriver.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerDriver.java	Fri Jan 30 14:46:49 2015
@@ -1,6 +1,7 @@
 package org.hps.readout.ecal;
 
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.PrintStream;
 import java.io.PrintWriter;
@@ -24,12 +25,14 @@
  */
 public abstract class TriggerDriver extends TriggerableDriver {
 
-    private boolean _DEBUG = false;
+    private final boolean _DEBUG = false;
     protected String outputFileName = null;
     protected PrintWriter outputStream = null;
     protected int numTriggers;
     private static int lastTrigger = Integer.MIN_VALUE;
     private int deadTime = 0;
+    private int prescale = 1;
+    private int prescaleCounter = 0;
     private static boolean triggerBit = false;
     private String lcioFile = null;
     LCIOWriter lcioWriter = null;
@@ -52,6 +55,16 @@
         this.deadTime = deadTime;
     }
 
+    /**
+     * Set prescale. Only trigger on every Nth event that passes the trigger
+     * decision. The default is 1 (no prescale - trigger on every event).
+     *
+     * @param prescale
+     */
+    public void setPrescale(int prescale) {
+        this.prescale = prescale;
+    }
+
     public void setOutputFileName(String outputFileName) {
         this.outputFileName = outputFileName;
     }
@@ -63,7 +76,7 @@
         if (outputFileName != null) {
             try {
                 outputStream = new PrintWriter(new PrintStream(outputFileName), true);
-            } catch (IOException ex) {
+            } catch (FileNotFoundException ex) {
                 throw new RuntimeException("Invalid outputFilePath!");
             }
         } else {
@@ -88,37 +101,41 @@
 //        triggerBit = false; //reset trigger
         //System.out.println(this.getClass().getCanonicalName() + " - process");
         if ((lastTrigger == Integer.MIN_VALUE || ClockSingleton.getClock() - lastTrigger > deadTime) && triggerDecision(event)) {
-            sendTrigger();
-            this.addTrigger();
-            for (TriggerableDriver triggerable : triggerables) {
-                ReadoutTimestamp.addTimestamp(triggerable, event);
-            }
-            ReadoutTimestamp.addTimestamp(this, event);
-            triggerBit = true;
-            lastTrigger = ClockSingleton.getClock();
-            numTriggers++;
-            if (_DEBUG) {
-                System.out.printf(this.getClass().getSimpleName() + ": Trigger on event %d\n", event.getEventNumber());
-            }
-            if (outputStream != null) {
-                outputStream.printf("Trigger on event %d\n", event.getEventNumber());
-            }
-
-            // If an ECal trigger signal has been sent store the trigger
-            // time offset by the trigger latencies
-            if (_DEBUG) {
-                System.out.println(this.getClass().getSimpleName() + ": Trigger added on event " + event.getEventNumber());
-            }
-
-            if (outputStream != null) {
-                outputStream.printf("trigger sent to ET event builder on event %d\n", event.getEventNumber());
-            }
-            makeTriggerData(event, "TriggerStatus");
-            if (lcioWriter != null) {
-                try {
-                    lcioWriter.write(event);
-                } catch (IOException ex) {
-                    Logger.getLogger(TriggerDriver.class.getName()).log(Level.SEVERE, null, ex);
+            prescaleCounter++;
+            if (prescaleCounter == prescale) {
+                prescaleCounter = 0;
+                sendTrigger();
+                this.addTrigger();
+                for (TriggerableDriver triggerable : triggerables) {
+                    ReadoutTimestamp.addTimestamp(triggerable, event);
+                }
+                ReadoutTimestamp.addTimestamp(this, event);
+                triggerBit = true;
+                lastTrigger = ClockSingleton.getClock();
+                numTriggers++;
+                if (_DEBUG) {
+                    System.out.printf(this.getClass().getSimpleName() + ": Trigger on event %d\n", event.getEventNumber());
+                }
+                if (outputStream != null) {
+                    outputStream.printf("Trigger on event %d\n", event.getEventNumber());
+                }
+
+                // If an ECal trigger signal has been sent store the trigger
+                // time offset by the trigger latencies
+                if (_DEBUG) {
+                    System.out.println(this.getClass().getSimpleName() + ": Trigger added on event " + event.getEventNumber());
+                }
+
+                if (outputStream != null) {
+                    outputStream.printf("trigger sent to ET event builder on event %d\n", event.getEventNumber());
+                }
+                makeTriggerData(event, "TriggerStatus");
+                if (lcioWriter != null) {
+                    try {
+                        lcioWriter.write(event);
+                    } catch (IOException ex) {
+                        Logger.getLogger(TriggerDriver.class.getName()).log(Level.SEVERE, null, ex);
+                    }
                 }
             }
         }
@@ -188,6 +205,7 @@
         triggerBit = false;
     }
 
+    @Override
     public int getTimestampType() {
         return ReadoutTimestamp.SYSTEM_TRIGGERBITS;
     }