Print

Print


Commit in hps-java/src/main/java/org/lcsim/hps on MAIN
readout/ecal/TriggerableDriver.java+74added 1.1
            /EcalReadoutDriver.java+6-81.1 -> 1.2
            /TriggerDriver.java+13-631.1 -> 1.2
recon/tracking/SimpleSvtReadout.java+45-421.8 -> 1.9
+138-113
1 added + 3 modified, total 4 files
clean up trigger driver, prepare to add readout timestamps

hps-java/src/main/java/org/lcsim/hps/readout/ecal
TriggerableDriver.java added at 1.1
diff -N TriggerableDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ TriggerableDriver.java	19 Mar 2013 22:24:07 -0000	1.1
@@ -0,0 +1,74 @@
+package org.lcsim.hps.readout.ecal;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Queue;
+import org.lcsim.event.EventHeader;
+import org.lcsim.hps.util.ClockSingleton;
+import org.lcsim.util.Driver;
+
+/**
+ * A driver that accepts triggers from TriggerDriver.
+ * To implement, write your own processTrigger(), and call checkTrigger() somewhere in process().
+ * You might want to set your own default latency in your constructor.
+ * nextReadoutTime() and isLive() are meant to be overridden if you're doing something unusual.
+ * @author Sho Uemura <[log in to unmask]>
+ * @version $Id: TriggerableDriver.java,v 1.1 2013/03/19 22:24:07 meeg Exp $
+ */
+public abstract class TriggerableDriver extends Driver {
+
+    private static final List<TriggerableDriver> triggerables = new ArrayList<TriggerableDriver>();
+    private Queue<Double> triggerTimestamps = new LinkedList<Double>();
+    protected double latency = 0.0; // [ns]
+
+    public void setLatency(double latency) {
+        this.latency = latency;
+    }
+
+    /**
+     * 
+     * @return next time checkTrigger() will be called
+     */
+    public double nextReadoutTime() {
+        return ClockSingleton.getTime() + ClockSingleton.getDt();
+    }
+
+    @Override
+    public void startOfData() {
+        TriggerDriver.addTriggerable(this);
+    }
+
+    protected abstract void processTrigger(EventHeader event);
+
+    protected void checkTrigger(EventHeader event) {
+        if (triggerTimestamps.peek() != null && ClockSingleton.getTime() >= triggerTimestamps.peek()) {
+            processTrigger(event);
+            triggerTimestamps.remove();
+        }
+    }
+
+    public void addTrigger() {
+        triggerTimestamps.add(ClockSingleton.getTime() + latency);
+    }
+
+    public boolean isLive() {
+        return true;
+    }
+
+    protected static boolean sendTrigger() {
+        for (TriggerableDriver triggerable : triggerables) {
+            if (!triggerable.isLive()) {
+                return false;
+            }
+        }
+        for (TriggerableDriver triggerable : triggerables) {
+            triggerable.addTrigger();
+        }
+        return true;
+    }
+
+    public static void addTriggerable(TriggerableDriver triggerable) {
+        triggerables.add(triggerable);
+    }
+}

hps-java/src/main/java/org/lcsim/hps/readout/ecal
EcalReadoutDriver.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- EcalReadoutDriver.java	25 Feb 2013 22:39:26 -0000	1.1
+++ EcalReadoutDriver.java	19 Mar 2013 22:24:07 -0000	1.2
@@ -6,16 +6,15 @@
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.EventHeader;
 import org.lcsim.hps.util.ClockSingleton;
-import org.lcsim.util.Driver;
 import org.lcsim.util.lcio.LCIOConstants;
 
 /**
  * Performs readout of ECal hits.
  *
  * @author Sho Uemura <[log in to unmask]>
- * @version $Id: EcalReadoutDriver.java,v 1.1 2013/02/25 22:39:26 meeg Exp $
+ * @version $Id: EcalReadoutDriver.java,v 1.2 2013/03/19 22:24:07 meeg Exp $
  */
-public abstract class EcalReadoutDriver<T> extends Driver {
+public abstract class EcalReadoutDriver<T> extends TriggerableDriver {
 
     String ecalCollectionName;
     String ecalRawCollectionName = "EcalRawHits";
@@ -41,7 +40,7 @@
     public EcalReadoutDriver() {
         flags += 1 << LCIOConstants.CHBIT_LONG; //store position
         flags += 1 << LCIOConstants.RCHBIT_ID1; //store cell ID
-
+        latency = 100.0;
     }
 
     public void setDebug(boolean debug) {
@@ -82,6 +81,7 @@
 
     @Override
     public void startOfData() {
+        super.startOfData();
         if (ecalCollectionName == null) {
             throw new RuntimeException("The parameter ecalCollectionName was not set!");
         }
@@ -127,10 +127,7 @@
             event.put(ecalRawCollectionName, newHits, hitClass, flags, ecalReadoutName);
         }
 
-        if (readoutBit) {
-            processTrigger(event);
-            readoutBit = false;
-        }
+        checkTrigger(event);
     }
 
     protected double readoutTime() {
@@ -144,6 +141,7 @@
     //must be run every event, even if the list is empty
     protected abstract void putHits(List<CalorimeterHit> hits);
 
+    @Override
     protected void processTrigger(EventHeader event) {
     }
 

hps-java/src/main/java/org/lcsim/hps/readout/ecal
TriggerDriver.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- TriggerDriver.java	25 Feb 2013 22:39:26 -0000	1.1
+++ TriggerDriver.java	19 Mar 2013 22:24:07 -0000	1.2
@@ -4,19 +4,14 @@
 import java.io.IOException;
 import java.io.PrintStream;
 import java.io.PrintWriter;
-import java.util.LinkedList;
 import java.util.List;
-import java.util.Queue;
 
 
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import org.lcsim.event.EventHeader;
 import org.lcsim.hps.recon.ecal.HPSEcalCluster;
-import org.lcsim.hps.recon.tracking.apv25.Apv25Full;
-import org.lcsim.hps.recon.tracking.apv25.HPSAPV25;
 import org.lcsim.hps.util.ClockSingleton;
-import org.lcsim.util.Driver;
 import org.lcsim.util.lcio.LCIOWriter;
 
 /**
@@ -25,9 +20,9 @@
  * Applies SVT trigger latency and sends trigger signal to SVT
  *
  * @author Sho Uemura <[log in to unmask]>
- * @version $Id: TriggerDriver.java,v 1.1 2013/02/25 22:39:26 meeg Exp $
+ * @version $Id: TriggerDriver.java,v 1.2 2013/03/19 22:24:07 meeg Exp $
  */
-public abstract class TriggerDriver extends Driver {
+public abstract class TriggerDriver extends TriggerableDriver {
 
     private boolean _DEBUG = false;
     protected String clusterCollectionName = "EcalClusters";
@@ -36,23 +31,12 @@
     protected int numTriggers;
     private int lastTrigger;
     private int deadTime = 0;
-    // FIFO queue to store the svt trigger time stamp 
-    private Queue<Double> svtTriggerTimeStamp = new LinkedList<Double>();
-    // SVT trigger latency
-    public static final double svtTriggerLatency = 100.0; // [ns]
-    // FIFO queue to store the ECal trigger time stamp 
-    private Queue<Double> ecalTriggerTimestamps = null;
-    // ECal trigger latency
-    private static final double ecalTriggerLatency = 100.0; // [ns]
-    // FIFO queue to store the trigger bank trigger time stamp 
-    private Queue<Double> triggerTriggerTimestamps = null;
-    // trigger bank trigger latency
-    public static final double triggerTriggerLatency = 50.0; // [ns]
     private static boolean triggerBit = false;
     private String lcioFile = null;
     LCIOWriter lcioWriter = null;
 
     public TriggerDriver() {
+        latency = 50.0;
     }
 
     public void setLcioFile(String lcioFile) {
@@ -77,6 +61,7 @@
 
     @Override
     public void startOfData() {
+        addTriggerable(this);
         if (clusterCollectionName == null) {
             throw new RuntimeException("The parameter clusterCollectionName was not set!");
         }
@@ -102,9 +87,6 @@
         }
 
         numTriggers = 0;
-
-        ecalTriggerTimestamps = new LinkedList<Double>();
-        triggerTriggerTimestamps = new LinkedList<Double>();
     }
 
     @Override
@@ -113,6 +95,7 @@
         //System.out.println(this.getClass().getCanonicalName() + " - process");
 
         if (ClockSingleton.getClock() - lastTrigger > deadTime && triggerDecision(event)) {
+            sendTrigger();
             triggerBit = true;
             lastTrigger = ClockSingleton.getClock();
             numTriggers++;
@@ -125,9 +108,6 @@
 
             // If an ECal trigger signal has been sent store the trigger
             // time offset by the trigger latencies
-            svtTriggerTimeStamp.add(ClockSingleton.getTime() + svtTriggerLatency);
-            ecalTriggerTimestamps.add(ClockSingleton.getTime() + ecalTriggerLatency);
-            triggerTriggerTimestamps.add(ClockSingleton.getTime() + triggerTriggerLatency);
             if (_DEBUG) {
                 System.out.println(this.getClass().getSimpleName() + ": Trigger added on event " + event.getEventNumber());
             }
@@ -145,46 +125,16 @@
             }
         }
 
-        // Check if there are any pending SVT triggers to process
-        if (svtTriggerTimeStamp.peek() != null
-                && ClockSingleton.getTime() >= svtTriggerTimeStamp.peek()) {
-
-            if (outputStream != null) {
-                outputStream.printf("SVT trigger sent on event %d\n", event.getEventNumber());
-            }
-
-            // Send a trigger signal to the SVT
-            HPSAPV25.readoutBit = true;
-            Apv25Full.readoutBit = true;
-            svtTriggerTimeStamp.remove();
-        }
-
-        // Check if there are any pending ECal triggers to process
-        if (ecalTriggerTimestamps.peek() != null
-                && ClockSingleton.getTime() >= ecalTriggerTimestamps.peek()) {
-
-            if (outputStream != null) {
-                outputStream.printf("ECal trigger sent on event %d\n", event.getEventNumber());
-            }
-
-            // Send a trigger signal to the ECal
-            EcalReadoutDriver.readoutBit = true;
-            ecalTriggerTimestamps.remove();
-        }
-
-
         // Check if there are any pending trigger bank triggers to process
-        if (triggerTriggerTimestamps.peek() != null
-                && ClockSingleton.getTime() >= triggerTriggerTimestamps.peek()) {
-
-            if (outputStream != null) {
-                outputStream.printf("Trigger bank trigger sent on event %d\n", event.getEventNumber());
-            }
+        checkTrigger(event);
+    }
 
-            // Make trigger bank
-            makeTriggerData(event, "TriggerBank");
-            triggerTriggerTimestamps.remove();
+    @Override
+    protected void processTrigger(EventHeader event) {
+        if (outputStream != null) {
+            outputStream.printf("Trigger bank trigger sent on event %d\n", event.getEventNumber());
         }
+        makeTriggerData(event, "TriggerBank");
     }
 
     protected boolean triggerDecision(EventHeader event) {
@@ -196,7 +146,7 @@
         }
     }
 
-    public abstract boolean testTrigger(List<HPSEcalCluster> clusters);
+    protected abstract boolean testTrigger(List<HPSEcalCluster> clusters);
 
     protected void makeTriggerData(EventHeader event, String collectionName) {
     }

hps-java/src/main/java/org/lcsim/hps/recon/tracking
SimpleSvtReadout.java 1.8 -> 1.9
diff -u -r1.8 -r1.9
--- SimpleSvtReadout.java	1 Mar 2013 22:34:25 -0000	1.8
+++ SimpleSvtReadout.java	19 Mar 2013 22:24:07 -0000	1.9
@@ -13,8 +13,8 @@
 import org.lcsim.event.RawTrackerHit;
 import org.lcsim.event.base.BaseRawTrackerHit;
 import org.lcsim.geometry.Detector;
+import org.lcsim.hps.readout.ecal.TriggerableDriver;
 import org.lcsim.hps.recon.tracking.apv25.Apv25Constants;
-import org.lcsim.hps.recon.tracking.apv25.HPSAPV25;
 import org.lcsim.hps.util.ClockSingleton;
 import org.lcsim.hps.util.RandomGaussian;
 import org.lcsim.hps.util.RingBuffer;
@@ -23,15 +23,14 @@
 import org.lcsim.recon.tracking.digitization.sisim.SiElectrodeDataCollection;
 import org.lcsim.recon.tracking.digitization.sisim.SiSensorSim;
 import org.lcsim.recon.tracking.digitization.sisim.config.SimTrackerHitReadoutDriver;
-import org.lcsim.util.Driver;
 import org.lcsim.util.lcio.LCIOConstants;
 
 /**
  * 
  * @author Omar Moreno <[log in to unmask]>
- * @version $Id: SimpleSvtReadout.java,v 1.8 2013/03/01 22:34:25 meeg Exp $
+ * @version $Id: SimpleSvtReadout.java,v 1.9 2013/03/19 22:24:07 meeg Exp $
  */
-public class SimpleSvtReadout extends Driver {
+public class SimpleSvtReadout extends TriggerableDriver {
 
     private SimTrackerHitReadoutDriver readoutDriver = new SimTrackerHitReadoutDriver();
     private SiSensorSim siSimulation = new CDFSiSensorSim();
@@ -53,6 +52,7 @@
 
     public SimpleSvtReadout() {
         add(readoutDriver);
+        latency = 100.0;
     }
 
     public void setAddNoise(boolean addNoise) {
@@ -145,44 +145,7 @@
             }
 
             // If an ECal trigger is received, make hits from pipelines
-            if (HPSAPV25.readoutBit) {
-//            System.out.println("Got trigger");
-
-                HPSAPV25.readoutBit = false;
-
-                // Create a list to hold the analog data
-                List<RawTrackerHit> hits = new ArrayList<RawTrackerHit>();
-
-                for (SiSensor sensor : SvtUtils.getInstance().getSensors()) {
-                    APV25Pipeline[] pipelines = pipelineMap.get(sensor);
-                    for (int channel = 0; channel < pipelines.length; channel++) {
-                        if (pipelines[channel] != null) {
-                            short[] samples = new short[6];
-                            if (addNoise) {
-                                double[] noise = makeNoise(sensor, channel);
-                                for (int i = 0; i < 6; i++) {
-                                    samples[i] = (short) Math.round(pipelines[channel].getValue(i) + HPSSVTCalibrationConstants.getPedestal(sensor, channel) + noise[i]);
-                                }
-                            } else {
-                                for (int i = 0; i < 6; i++) {
-                                    samples[i] = (short) Math.round(pipelines[channel].getValue(i) + HPSSVTCalibrationConstants.getPedestal(sensor, channel));
-                                }
-                            }
-                            long cell_id = SvtUtils.makeCellID(sensor, channel);
-
-                            RawTrackerHit hit = new BaseRawTrackerHit(0, cell_id, samples, null, sensor);
-//                        System.out.println("Making RTH");
-                            if (readoutCuts(hit)) {
-                                hits.add(hit);
-                            }
-                        }
-                    }
-                }
-
-                int flags = 1 << LCIOConstants.TRAWBIT_ID1;
-                event.put(outputCollection, hits, RawTrackerHit.class, flags, readout);
-                System.out.println("Made " + hits.size() + " RawTrackerHits");
-            }
+            checkTrigger(event);
         } else {
             // Create a list to hold the analog data
             List<RawTrackerHit> hits = new ArrayList<RawTrackerHit>();
@@ -318,6 +281,46 @@
         return count >= samplesAboveThreshold;
     }
 
+    @Override
+    protected void processTrigger(EventHeader event) {
+        if (!noPileup) {
+//            System.out.println("Got trigger");
+
+            // Create a list to hold the analog data
+            List<RawTrackerHit> hits = new ArrayList<RawTrackerHit>();
+
+            for (SiSensor sensor : SvtUtils.getInstance().getSensors()) {
+                APV25Pipeline[] pipelines = pipelineMap.get(sensor);
+                for (int channel = 0; channel < pipelines.length; channel++) {
+                    if (pipelines[channel] != null) {
+                        short[] samples = new short[6];
+                        if (addNoise) {
+                            double[] noise = makeNoise(sensor, channel);
+                            for (int i = 0; i < 6; i++) {
+                                samples[i] = (short) Math.round(pipelines[channel].getValue(i) + HPSSVTCalibrationConstants.getPedestal(sensor, channel) + noise[i]);
+                            }
+                        } else {
+                            for (int i = 0; i < 6; i++) {
+                                samples[i] = (short) Math.round(pipelines[channel].getValue(i) + HPSSVTCalibrationConstants.getPedestal(sensor, channel));
+                            }
+                        }
+                        long cell_id = SvtUtils.makeCellID(sensor, channel);
+
+                        RawTrackerHit hit = new BaseRawTrackerHit(0, cell_id, samples, null, sensor);
+//                        System.out.println("Making RTH");
+                        if (readoutCuts(hit)) {
+                            hits.add(hit);
+                        }
+                    }
+                }
+            }
+
+            int flags = 1 << LCIOConstants.TRAWBIT_ID1;
+            event.put(outputCollection, hits, RawTrackerHit.class, flags, readout);
+            System.out.println("Made " + hits.size() + " RawTrackerHits");
+        }
+    }
+
     private class APV25Pipeline extends RingBuffer {
 
         private int _trigger_latency = (int) Math.floor(270 / Apv25Constants.SAMPLING_INTERVAL);
CVSspam 0.2.12


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