hps-java/src/main/java/org/lcsim/hps/recon/ecal
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
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
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;
}