Commit in java/trunk on MAIN
ecal-readout-sim/src/main/java/org/hps/readout/ecal/ClockDriver.java+1836 -> 837
                                                   /EcalReadoutDriver.java+8-6836 -> 837
                                                   /ReadoutTimestamp.java+2-1836 -> 837
                                                   /TriggerDriver.java+17-10836 -> 837
                                                   /TriggerableDriver.java+2-2836 -> 837
evio/src/main/java/org/hps/evio/TestRunTriggeredReconToEvio.java+33-22836 -> 837
                               /TestRunTriggeredReconToLcio.java+48-41836 -> 837
tracking/src/main/java/org/hps/recon/tracking/RawTrackerHitFitterDriver.java+1-1836 -> 837
+112-83
8 modified files
readout drivers all use callbacks instead of trigger bit to allow multiple trigger drivers to run in parallel

java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal
ClockDriver.java 836 -> 837
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/ClockDriver.java	2014-08-06 01:10:51 UTC (rev 836)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/ClockDriver.java	2014-08-06 02:21:42 UTC (rev 837)
@@ -16,6 +16,7 @@
 
     public void process(EventHeader event) {
         ClockSingleton.step();
+        TriggerDriver.resetTrigger();
     }
 
     public void startOfData() {

java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal
EcalReadoutDriver.java 836 -> 837
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/EcalReadoutDriver.java	2014-08-06 01:10:51 UTC (rev 836)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/EcalReadoutDriver.java	2014-08-06 02:21:42 UTC (rev 837)
@@ -94,12 +94,14 @@
     public void process(EventHeader event) {
         //System.out.println(this.getClass().getCanonicalName() + " - process");
         // Get the list of ECal hits.        
+        List<CalorimeterHit> hits;
         if (event.hasCollection(CalorimeterHit.class, ecalCollectionName)) {
-            List<CalorimeterHit> hits = event.get(CalorimeterHit.class, ecalCollectionName);
-
-            //write hits into buffers
-            putHits(hits);
+            hits = event.get(CalorimeterHit.class, ecalCollectionName);
+        } else {
+            hits = new ArrayList<CalorimeterHit>();
         }
+        //write hits into buffers
+        putHits(hits);
 
         ArrayList<T> newHits = null;
 
@@ -146,8 +148,8 @@
 
     //initialize buffers
     protected abstract void initReadout();
-    
+
     public int getTimestampType() {
         return ReadoutTimestamp.SYSTEM_ECAL;
     }
-}
\ No newline at end of file
+}

java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal
ReadoutTimestamp.java 836 -> 837
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/ReadoutTimestamp.java	2014-08-06 01:10:51 UTC (rev 836)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/ReadoutTimestamp.java	2014-08-06 02:21:42 UTC (rev 837)
@@ -14,9 +14,10 @@
 public class ReadoutTimestamp implements GenericObject {
 
     public static final String collectionName = "ReadoutTimestamps";
-    public static final int SYSTEM_TRIGGER = 0;
+    public static final int SYSTEM_TRIGGERBITS = 0;
     public static final int SYSTEM_TRACKER = 1;
     public static final int SYSTEM_ECAL = 2;
+    public static final int SYSTEM_TRIGGERTIME = 3;
     private int system;
     private double time;
 

java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal
TriggerDriver.java 836 -> 837
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerDriver.java	2014-08-06 01:10:51 UTC (rev 836)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerDriver.java	2014-08-06 02:21:42 UTC (rev 837)
@@ -13,10 +13,10 @@
 import org.lcsim.lcio.LCIOWriter;
 
 /**
- * Makes trigger decision and sends trigger to readout drivers.
- * Prints triggers to file if file path specified.
- * Writes trigger events to LCIO if file path specified.
- * To implement: extend this class and write your own triggerDecision().
+ * Makes trigger decision and sends trigger to readout drivers. Prints triggers
+ * to file if file path specified. Writes trigger events to LCIO if file path
+ * specified. To implement: extend this class and write your own
+ * triggerDecision().
  *
  * @author Sho Uemura <[log in to unmask]>
  * @version $Id: TriggerDriver.java,v 1.7 2013/09/02 21:56:56 phansson Exp $
@@ -27,7 +27,7 @@
     protected String outputFileName = null;
     protected PrintWriter outputStream = null;
     protected int numTriggers;
-    private int lastTrigger = Integer.MIN_VALUE;
+    private static int lastTrigger = Integer.MIN_VALUE;
     private int deadTime = 0;
     private static boolean triggerBit = false;
     private String lcioFile = null;
@@ -44,6 +44,7 @@
 
     /**
      * Set dead time; 0 for no dead time
+     *
      * @param deadTime Minimum number of clock ticks between triggers
      */
     public void setDeadTime(int deadTime) {
@@ -56,7 +57,7 @@
 
     @Override
     public void startOfData() {
-        addTriggerable(this);
+//        addTriggerable(this);
 
         if (outputFileName != null) {
             try {
@@ -83,10 +84,11 @@
 
     @Override
     public void process(EventHeader event) {
-        triggerBit = false; //reset trigger
+//        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);
             }
@@ -175,11 +177,16 @@
         System.out.printf(this.getClass().getSimpleName() + ": Trigger count: %d\n", numTriggers);
     }
 
+    @Deprecated
     public static boolean triggerBit() {
         return triggerBit;
     }
-    
+
+    public static void resetTrigger() {
+        triggerBit = false;
+    }
+
     public int getTimestampType() {
-        return ReadoutTimestamp.SYSTEM_TRIGGER;
+        return ReadoutTimestamp.SYSTEM_TRIGGERBITS;
     }
-}
\ No newline at end of file
+}

java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal
TriggerableDriver.java 836 -> 837
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerableDriver.java	2014-08-06 01:10:51 UTC (rev 836)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerableDriver.java	2014-08-06 02:21:42 UTC (rev 837)
@@ -31,14 +31,14 @@
     }
 
     @Override
-    public void startOfData() {
+    protected void startOfData() {
         TriggerDriver.addTriggerable(this);
     }
 
     protected abstract void processTrigger(EventHeader event);
 
     protected void checkTrigger(EventHeader event) {
-        if (triggerTimestamps.peek() != null && ClockSingleton.getTime() >= triggerTimestamps.peek()) {
+        while (triggerTimestamps.peek() != null && ClockSingleton.getTime() >= triggerTimestamps.peek()) {
             processTrigger(event);
             triggerTimestamps.remove();
         }

java/trunk/evio/src/main/java/org/hps/evio
TestRunTriggeredReconToEvio.java 836 -> 837
--- java/trunk/evio/src/main/java/org/hps/evio/TestRunTriggeredReconToEvio.java	2014-08-06 01:10:51 UTC (rev 836)
+++ java/trunk/evio/src/main/java/org/hps/evio/TestRunTriggeredReconToEvio.java	2014-08-06 02:21:42 UTC (rev 837)
@@ -5,10 +5,11 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Queue;
-
 import org.hps.conditions.deprecated.CalibrationDriver;
 import org.hps.conditions.deprecated.EcalConditions;
+import org.hps.readout.ecal.ReadoutTimestamp;
 import org.hps.readout.ecal.TriggerDriver;
+import org.hps.readout.ecal.TriggerableDriver;
 import org.jlab.coda.jevio.DataType;
 import org.jlab.coda.jevio.EventBuilder;
 import org.jlab.coda.jevio.EventWriter;
@@ -24,7 +25,7 @@
  *
  * @author Jeremy McCormick <[log in to unmask]>
  */
-public class TestRunTriggeredReconToEvio extends Driver {
+public class TestRunTriggeredReconToEvio extends TriggerableDriver {
 
     EventWriter writer;
     String rawCalorimeterHitCollectionName = "EcalReadoutHits";
@@ -40,6 +41,7 @@
     private int ecalMode = EventConstants.ECAL_PULSE_INTEGRAL_MODE;
 
     public TestRunTriggeredReconToEvio() {
+        setTriggerDelay(0);
     }
 
     public void setEcalMode(int ecalMode) {
@@ -65,6 +67,7 @@
 
     @Override
     protected void startOfData() {
+        super.startOfData();
         try {
             writer = new EventWriter(evioOutputFile);
         } catch (EvioException e) {
@@ -92,30 +95,13 @@
     @Override
     protected void endOfData() {
         System.out.println(this.getClass().getSimpleName() + " - wrote " + eventsWritten + " EVIO events in job; " + builderQueue.size() + " incomplete events in queue.");
-        writer.close();        
+        writer.close();
     }
 
     @Override
     protected void process(EventHeader event) {
-        if (TriggerDriver.triggerBit()) {
-            // Make a new EVIO event.
-            EventBuilder builder = new EventBuilder(EventConstants.PHYSICS_EVENT_TAG, DataType.BANK, EventConstants.EVENT_BANK_NUM);
-            builderQueue.add(new QueuedEtEvent(builder, writers.size(), eventNum));
-            EvioBank eventIDBank = new EvioBank(EventConstants.EVENTID_BANK_TAG, DataType.UINT32, 0);
-            int[] eventID = new int[3];
-            eventID[0] = event.getEventNumber();
-            eventID[1] = 1; //trigger type
-            eventID[2] = 0; //status
+        checkTrigger(event);
 
-            eventNum++;
-            try {
-                eventIDBank.appendIntData(eventID);
-                builder.addChild(builder.getEvent(), eventIDBank);
-            } catch (EvioException e) {
-                throw new RuntimeException(e);
-            }
-        }
-
         for (int i = 0; i < writers.size(); i++) {
             HitWriter evioWriter = writers.get(i);
             if (evioWriter.hasData(event)) {
@@ -181,6 +167,31 @@
         }
     }
 
+    @Override
+    protected void processTrigger(EventHeader event) {
+        // Make a new EVIO event.
+        EventBuilder builder = new EventBuilder(EventConstants.PHYSICS_EVENT_TAG, DataType.BANK, EventConstants.EVENT_BANK_NUM);
+        builderQueue.add(new QueuedEtEvent(builder, writers.size(), eventNum));
+        EvioBank eventIDBank = new EvioBank(EventConstants.EVENTID_BANK_TAG, DataType.UINT32, 0);
+        int[] eventID = new int[3];
+        eventID[0] = event.getEventNumber();
+        eventID[1] = 1; //trigger type
+        eventID[2] = 0; //status
+
+        eventNum++;
+        try {
+            eventIDBank.appendIntData(eventID);
+            builder.addChild(builder.getEvent(), eventIDBank);
+        } catch (EvioException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public int getTimestampType() {
+        return ReadoutTimestamp.SYSTEM_TRIGGERTIME;
+    }
+
     private class QueuedEtEvent {
 
         private EventBuilder builder;
@@ -220,4 +231,4 @@
             return true;
         }
     }
-}
\ No newline at end of file
+}

java/trunk/evio/src/main/java/org/hps/evio
TestRunTriggeredReconToLcio.java 836 -> 837
--- java/trunk/evio/src/main/java/org/hps/evio/TestRunTriggeredReconToLcio.java	2014-08-06 01:10:51 UTC (rev 836)
+++ java/trunk/evio/src/main/java/org/hps/evio/TestRunTriggeredReconToLcio.java	2014-08-06 02:21:42 UTC (rev 837)
@@ -1,20 +1,18 @@
 package org.hps.evio;
 
 import hep.physics.event.generator.MCEvent;
-
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Queue;
-
 import org.hps.conditions.deprecated.CalibrationDriver;
 import org.hps.conditions.deprecated.QuietBaseLCSimEvent;
 import org.hps.readout.ecal.ClockSingleton;
 import org.hps.readout.ecal.ReadoutTimestamp;
 import org.hps.readout.ecal.TriggerDriver;
-
+import org.hps.readout.ecal.TriggerableDriver;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.LCRelation;
 import org.lcsim.event.MCParticle;
@@ -29,9 +27,10 @@
  * the test run.
  *
  * @author Jeremy McCormick <[log in to unmask]>
- * @version $Id:$
+ * @version $Id: TestRunTriggeredReconToLcio.java 779 2014-07-16 16:24:34Z
+ * omoreno $
  */
-public class TestRunTriggeredReconToLcio extends Driver {
+public class TestRunTriggeredReconToLcio extends TriggerableDriver {
 
     String rawCalorimeterHitCollectionName = "EcalReadoutHits";
     String outputFile = "TestRunData.slcio";
@@ -61,9 +60,9 @@
     static final String trackerCollectionName = "TrackerHits";
     private String relationCollectionName = "SVTTrueHitRelations";
     String ecalScoringPlaneHitsCollectionName = "TrackerHitsECal";
-    
-    
+
     public TestRunTriggeredReconToLcio() {
+        setTriggerDelay(0);
     }
 
     public void setEcalMode(int ecalMode) {
@@ -97,6 +96,7 @@
 
     @Override
     protected void startOfData() {
+        super.startOfData();
         writers = new ArrayList<HitWriter>();
 
         ecalWriter = new ECalHitWriter();
@@ -134,54 +134,28 @@
             mcParticles = event.getMCParticles();
             ecalHits = event.getSimCalorimeterHits(ecalCollectionName);
             trackerHits = event.getSimTrackerHits(trackerCollectionName);
-           	if(event.hasCollection(SimTrackerHit.class, ecalScoringPlaneHitsCollectionName)){
-           		ecalScoringPlaneHits = event.get(SimTrackerHit.class, ecalScoringPlaneHitsCollectionName);
-           	}
+            if (event.hasCollection(SimTrackerHit.class, ecalScoringPlaneHitsCollectionName)) {
+                ecalScoringPlaneHits = event.get(SimTrackerHit.class, ecalScoringPlaneHitsCollectionName);
+            }
         }
         if (ClockSingleton.getClock() % triggerSpacing == 0) {
             if (event.hasCollection(MCParticle.class)) {
                 triggerMCParticles = event.getMCParticles();
                 triggerECalHits = event.getSimCalorimeterHits(ecalCollectionName);
                 triggerTrackerHits = event.getSimTrackerHits(trackerCollectionName);
-                if(event.hasCollection(SimTrackerHit.class, ecalScoringPlaneHitsCollectionName)){
-                	triggerECalScoringPlaneHits = event.get(SimTrackerHit.class, ecalScoringPlaneHitsCollectionName);
+                if (event.hasCollection(SimTrackerHit.class, ecalScoringPlaneHitsCollectionName)) {
+                    triggerECalScoringPlaneHits = event.get(SimTrackerHit.class, ecalScoringPlaneHitsCollectionName);
                 }
             } else {
                 triggerMCParticles = null;
                 triggerECalHits = null;
                 triggerTrackerHits = null;
-                triggerECalScoringPlaneHits = null; 
+                triggerECalScoringPlaneHits = null;
             }
         }
 
+        checkTrigger(event);
 
-        if (TriggerDriver.triggerBit()) {
-            EventHeader lcsimEvent = new QuietBaseLCSimEvent(CalibrationDriver.runNumber(), event.getEventNumber(), event.getDetectorName());
-            events.add(lcsimEvent);
-            System.out.println("Creating LCIO event " + eventNum);
-            if (triggerMCParticles == null || triggerMCParticles.isEmpty()) {
-                lcsimEvent.put(MCEvent.MC_PARTICLES, mcParticles);
-                lcsimEvent.put(ecalCollectionName, ecalHits, SimCalorimeterHit.class, 0xe0000000);
-                lcsimEvent.put(trackerCollectionName, trackerHits, SimTrackerHit.class, 0xc0000000);
-                System.out.println("Adding " +  mcParticles.size() + " MCParticles, " + ecalHits.size() + " SimCalorimeterHits, " + trackerHits.size() + " SimTrackerHits");
-                if(ecalScoringPlaneHits != null){
-                	lcsimEvent.put(ecalScoringPlaneHitsCollectionName, ecalScoringPlaneHits, SimTrackerHit.class, 0);
-                	System.out.println("Adding " + ecalScoringPlaneHits.size() + " ECalTrackerHits");
-                }
-            } else {
-                lcsimEvent.put(MCEvent.MC_PARTICLES, triggerMCParticles);
-                lcsimEvent.put(ecalCollectionName, triggerECalHits, SimCalorimeterHit.class, 0xe0000000);
-                lcsimEvent.put(trackerCollectionName, triggerTrackerHits, SimTrackerHit.class, 0xc0000000);
-                System.out.println("Adding " +  triggerMCParticles.size() + " MCParticles, " + triggerECalHits.size() + " SimCalorimeterHits, " + triggerTrackerHits.size() + " SimTrackerHits");
-                if(triggerECalScoringPlaneHits != null){
-                	lcsimEvent.put(ecalScoringPlaneHitsCollectionName, triggerECalScoringPlaneHits, SimTrackerHit.class, 0);
-                	System.out.println("Adding " + triggerECalScoringPlaneHits.size() + " ECalTrackerHits");
-                }
-            }
-            lcsimEvent.put(ReadoutTimestamp.collectionName, event.get(ReadoutTimestamp.class, ReadoutTimestamp.collectionName));
-            ++eventNum;
-        }
-
         writerLoop:
         for (HitWriter hitWriter : writers) {
             if (hitWriter.hasData(event)) {
@@ -236,4 +210,37 @@
             }
         }
     }
-}
\ No newline at end of file
+
+    @Override
+    protected void processTrigger(EventHeader event) {
+        EventHeader lcsimEvent = new QuietBaseLCSimEvent(CalibrationDriver.runNumber(), event.getEventNumber(), event.getDetectorName());
+        events.add(lcsimEvent);
+        System.out.println("Creating LCIO event " + eventNum);
+        if (triggerMCParticles == null || triggerMCParticles.isEmpty()) {
+            lcsimEvent.put(MCEvent.MC_PARTICLES, mcParticles);
+            lcsimEvent.put(ecalCollectionName, ecalHits, SimCalorimeterHit.class, 0xe0000000);
+            lcsimEvent.put(trackerCollectionName, trackerHits, SimTrackerHit.class, 0xc0000000);
+            System.out.println("Adding " + mcParticles.size() + " MCParticles, " + ecalHits.size() + " SimCalorimeterHits, " + trackerHits.size() + " SimTrackerHits");
+            if (ecalScoringPlaneHits != null) {
+                lcsimEvent.put(ecalScoringPlaneHitsCollectionName, ecalScoringPlaneHits, SimTrackerHit.class, 0);
+                System.out.println("Adding " + ecalScoringPlaneHits.size() + " ECalTrackerHits");
+            }
+        } else {
+            lcsimEvent.put(MCEvent.MC_PARTICLES, triggerMCParticles);
+            lcsimEvent.put(ecalCollectionName, triggerECalHits, SimCalorimeterHit.class, 0xe0000000);
+            lcsimEvent.put(trackerCollectionName, triggerTrackerHits, SimTrackerHit.class, 0xc0000000);
+            System.out.println("Adding " + triggerMCParticles.size() + " MCParticles, " + triggerECalHits.size() + " SimCalorimeterHits, " + triggerTrackerHits.size() + " SimTrackerHits");
+            if (triggerECalScoringPlaneHits != null) {
+                lcsimEvent.put(ecalScoringPlaneHitsCollectionName, triggerECalScoringPlaneHits, SimTrackerHit.class, 0);
+                System.out.println("Adding " + triggerECalScoringPlaneHits.size() + " ECalTrackerHits");
+            }
+        }
+        lcsimEvent.put(ReadoutTimestamp.collectionName, event.get(ReadoutTimestamp.class, ReadoutTimestamp.collectionName));
+        ++eventNum;
+    }
+
+    @Override
+    public int getTimestampType() {
+        return ReadoutTimestamp.SYSTEM_TRIGGERTIME;
+    }
+}

java/trunk/tracking/src/main/java/org/hps/recon/tracking
RawTrackerHitFitterDriver.java 836 -> 837
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/RawTrackerHitFitterDriver.java	2014-08-06 01:10:51 UTC (rev 836)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/RawTrackerHitFitterDriver.java	2014-08-06 02:21:42 UTC (rev 837)
@@ -113,7 +113,7 @@
             }
             if (useTimestamps) {
                 double t0Svt = ReadoutTimestamp.getTimestamp(ReadoutTimestamp.SYSTEM_TRACKER, event);
-                double t0Trig = ReadoutTimestamp.getTimestamp(ReadoutTimestamp.SYSTEM_TRIGGER, event);
+                double t0Trig = ReadoutTimestamp.getTimestamp(ReadoutTimestamp.SYSTEM_TRIGGERBITS, event);
                 double corMod = (t0Svt - t0Trig) + 200.0;
                 fit.setT0(fit.getT0() + corMod);
             }
SVNspam 0.1