Commit in hps-java/src/main/java/org/lcsim/hps/recon/ecal on MAIN
HPSTriggerDriver.java+4-51.16 -> 1.17
HPSEcalTriggerFilterDriver.java+41-151.2 -> 1.3
TestRunTriggerDriver.java+1-41.7 -> 1.8
+46-24
3 modified files
move trigger delays into TriggerFilterDriver so hit times make sense

hps-java/src/main/java/org/lcsim/hps/recon/ecal
HPSTriggerDriver.java 1.16 -> 1.17
diff -u -r1.16 -r1.17
--- HPSTriggerDriver.java	15 Sep 2012 00:43:47 -0000	1.16
+++ HPSTriggerDriver.java	21 Sep 2012 23:16:02 -0000	1.17
@@ -19,7 +19,7 @@
  * Applies SVT trigger latency and sends trigger signal to SVT
  *
  * @author Sho Uemura <[log in to unmask]>
- * @version $Id: HPSTriggerDriver.java,v 1.16 2012/09/15 00:43:47 omoreno Exp $
+ * @version $Id: HPSTriggerDriver.java,v 1.17 2012/09/21 23:16:02 meeg Exp $
  */
 public abstract class HPSTriggerDriver extends Driver {
 
@@ -29,9 +29,8 @@
     protected int numTriggers;
     private int lastTrigger;
     private int deadTime = 0;
-    protected int triggerDelay = 0;
     // FIFO queue to store the svt trigger time stamp 
-    public Queue<Double> svtTriggerTimeStamp = new LinkedList<Double>();
+    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 
@@ -100,7 +99,7 @@
 
                 // If an ECal trigger signal has been sent store the trigger
                 // time offset by the trigger latencies
-                svtTriggerTimeStamp.offer(ClockSingleton.getTime() + svtTriggerLatency + triggerDelay);
+                svtTriggerTimeStamp.add(ClockSingleton.getTime() + svtTriggerLatency);
                 ecalTriggerTimestamps.add(ClockSingleton.getTime() + ecalTriggerLatency);
                 triggerTriggerTimestamps.add(ClockSingleton.getTime() + triggerTriggerLatency);
                 System.out.println(this.getClass().getSimpleName() + ": Trigger added on event " + event.getEventNumber());
@@ -117,7 +116,7 @@
 
         // Check if there are any pending SVT triggers to process
         if (svtTriggerTimeStamp.peek() != null
-                && ClockSingleton.getTime() == svtTriggerTimeStamp.peek()) {
+                && ClockSingleton.getTime() >= svtTriggerTimeStamp.peek()) {
 
             if (outputStream != null) {
                 outputStream.printf("SVT trigger sent on event %d\n", event.getEventNumber());

hps-java/src/main/java/org/lcsim/hps/recon/ecal
HPSEcalTriggerFilterDriver.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- HPSEcalTriggerFilterDriver.java	27 Aug 2012 21:53:47 -0000	1.2
+++ HPSEcalTriggerFilterDriver.java	21 Sep 2012 23:16:02 -0000	1.3
@@ -2,6 +2,8 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Queue;
+import java.util.concurrent.ArrayBlockingQueue;
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.EventHeader;
 import org.lcsim.geometry.Detector;
@@ -13,51 +15,74 @@
  * phansson Exp $
  */
 public class HPSEcalTriggerFilterDriver extends Driver {
-    
+
     private String ecalReadoutName = "EcalHits";
     private String inputCollection = "EcalReadoutHits";
     private String outputCollection = "EcalCalHits";
-    
+    private int topDelay = 0;
+    private int bottomDelay = 5;
+    private Queue<List<CalorimeterHit>> topHitsQueue = null;
+    private Queue<List<CalorimeterHit>> bottomHitsQueue = null;
+
     public HPSEcalTriggerFilterDriver() {
     }
-    
+
     public void setOutputCollection(String outputCollection) {
         this.outputCollection = outputCollection;
     }
-    
+
     public void setInputCollection(String inputCollection) {
         this.inputCollection = inputCollection;
     }
-    
+
     @Override
     public void startOfData() {
         if (outputCollection == null) {
             throw new RuntimeException("The parameter ecalCollectionName was not set!");
         }
+
+        topHitsQueue = new ArrayBlockingQueue<List<CalorimeterHit>>(topDelay + 1);
+        for (int i = 0; i < topDelay; i++) {
+            topHitsQueue.add(new ArrayList<CalorimeterHit>());
+        }
+        bottomHitsQueue = new ArrayBlockingQueue<List<CalorimeterHit>>(bottomDelay + 1);
+        for (int i = 0; i < bottomDelay; i++) {
+            bottomHitsQueue.add(new ArrayList<CalorimeterHit>());
+        }
     }
-    
+
     @Override
     public void detectorChanged(Detector detector) {
     }
-    
+
     @Override
     public void process(EventHeader event) {
-        ArrayList<CalorimeterHit> newHits = new ArrayList<CalorimeterHit>();
-        
         if (event.hasCollection(CalorimeterHit.class, inputCollection)) {
+            ArrayList<CalorimeterHit> newHits = new ArrayList<CalorimeterHit>();
+
+            ArrayList<CalorimeterHit> topHits = new ArrayList<CalorimeterHit>();
+            ArrayList<CalorimeterHit> bottomHits = new ArrayList<CalorimeterHit>();
+
             List<CalorimeterHit> hits = event.get(CalorimeterHit.class, inputCollection);
-            
             for (CalorimeterHit hit : hits) {
                 CalorimeterHit newHit = filterHit(hit);
                 if (newHit != null) {
-                    newHits.add(newHit);
+                    if (hit.getIdentifierFieldValue("iy") > 0) { //should really be checking newHit, but it doesn't have metadata yet
+                        topHits.add(newHit);
+                    } else {
+                        bottomHits.add(newHit);
+                    }
                 }
             }
+            topHitsQueue.add(topHits);
+            bottomHitsQueue.add(bottomHits);
+            newHits.addAll(topHitsQueue.poll());
+            newHits.addAll(bottomHitsQueue.poll());
+            int flags = 0;
+            event.put(outputCollection, newHits, CalorimeterHit.class, flags, ecalReadoutName);
         }
-        int flags = 0;
-        event.put(outputCollection, newHits, CalorimeterHit.class, flags, ecalReadoutName);
     }
-    
+
     private CalorimeterHit filterHit(CalorimeterHit hit) {
         int ix = hit.getIdentifierFieldValue("ix");
         int iy = hit.getIdentifierFieldValue("iy");
@@ -66,6 +91,7 @@
         short slot = HPSEcalConditions.getSlot(daqID);
         short channel = HPSEcalConditions.getChannel(daqID);
 
+        int delay = iy>0?topDelay:bottomDelay;
         // no triggers from crate 1, slot 3 
         if (crate == 1 && slot == 3) {
             return null;
@@ -77,6 +103,6 @@
         }
         long newID = HPSEcalConditions.makePhysicalID(ix, iy);
         //make new hit; set position to null so it gets recalculated
-        return new HPSRawCalorimeterHit(hit.getRawEnergy(), hit.getTime(), newID, hit.getType());
+        return new HPSRawCalorimeterHit(hit.getRawEnergy(), hit.getTime()+delay*4, newID, hit.getType());
     }
 }

hps-java/src/main/java/org/lcsim/hps/recon/ecal
TestRunTriggerDriver.java 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- TestRunTriggerDriver.java	15 Sep 2012 00:43:47 -0000	1.7
+++ TestRunTriggerDriver.java	21 Sep 2012 23:16:02 -0000	1.8
@@ -1,7 +1,6 @@
 package org.lcsim.hps.recon.ecal;
 
 import java.util.ArrayList;
-import java.util.LinkedList;
 import java.util.List;
 import org.lcsim.event.EventHeader;
 import org.lcsim.hps.evio.TriggerData;
@@ -12,7 +11,7 @@
  *
  * @author Omar Moreno <[log in to unmask]>
  * @author Sho Uemura <[log in to unmask]>
- * @version $Id: TestRunTriggerDriver.java,v 1.7 2012/09/15 00:43:47 omoreno Exp $
+ * @version $Id: TestRunTriggerDriver.java,v 1.8 2012/09/21 23:16:02 meeg Exp $
  */
 public class TestRunTriggerDriver extends HPSTriggerDriver {
 
@@ -73,10 +72,8 @@
             if (cluster.getEnergy() > clusterEnergyLow) {
                 if (cluster.getPosition()[1] > 0) {
                     topBits |= 1;
-                    triggerDelay = 0;
                 } else {
                     botBits |= 1;
-                    triggerDelay = 20;
                 }
                 trigger = true;
             }
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