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; }