3 added + 5 modified, total 8 files
hps-java/src/main/resources/org/lcsim/hps/steering/users/meeg
diff -N HitTimes.lcsim
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ HitTimes.lcsim 20 Mar 2013 00:09:42 -0000 1.1
@@ -0,0 +1,14 @@
+
+<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
+ <execute>
+ <driver name="EventMarkerDriver"/>
+ <driver name="HitTimePrintDriver"/>
+ </execute>
+ <drivers>
+ <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
+ <eventInterval>1</eventInterval>
+ </driver>
+ <driver name="HitTimePrintDriver" type="org.lcsim.hps.users.meeg.HitTimePrintDriver"/>
+ </drivers>
+</lcsim>
hps-java/src/main/java/org/lcsim/hps/readout/ecal
diff -N ReadoutTimestamp.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ReadoutTimestamp.java 20 Mar 2013 00:09:42 -0000 1.1
@@ -0,0 +1,107 @@
+package org.lcsim.hps.readout.ecal;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.GenericObject;
+import org.lcsim.hps.recon.tracking.SimpleSvtReadout;
+
+/**
+ *
+ * @author Sho Uemura <[log in to unmask]>
+ * @version $Id: ReadoutTimestamp.java,v 1.1 2013/03/20 00:09:42 meeg Exp $
+ */
+public class ReadoutTimestamp implements GenericObject {
+
+ public static final String collectionName = "ReadoutTimestamps";
+ public static final int SYSTEM_TRIGGER = 0;
+ public static final int SYSTEM_TRACKER = 1;
+ public static final int SYSTEM_ECAL = 2;
+ private int system;
+ private double time;
+
+ public ReadoutTimestamp(int system, double time) {
+ this.system = system;
+ this.time = time;
+ }
+
+ public static void addTimestamp(TriggerableDriver triggerable, EventHeader event) {
+ ReadoutTimestamp timestamp = null;
+ if (TriggerDriver.class.isInstance(triggerable)) {
+ timestamp = new ReadoutTimestamp(SYSTEM_TRIGGER, triggerable.readoutDeltaT());
+ } else if (SimpleSvtReadout.class.isInstance(triggerable)) {
+ timestamp = new ReadoutTimestamp(SYSTEM_TRACKER, triggerable.readoutDeltaT());
+ } else if (EcalReadoutDriver.class.isInstance(triggerable)) {
+ timestamp = new ReadoutTimestamp(SYSTEM_ECAL, triggerable.readoutDeltaT());
+ }
+ addTimestamp(timestamp, event);
+ }
+
+ public static void addTimestamp(ReadoutTimestamp timestamp, EventHeader event) {
+ List<ReadoutTimestamp> timestamps;
+ if (event.hasCollection(ReadoutTimestamp.class, collectionName)) {
+ timestamps = event.get(ReadoutTimestamp.class, collectionName);
+ } else {
+ timestamps = new ArrayList<ReadoutTimestamp>();
+ event.put(collectionName, timestamps, ReadoutTimestamp.class, 0);
+ }
+ timestamps.add(timestamp);
+ }
+
+ public static double getTimestamp(int system, EventHeader event) {
+ if (event.hasCollection(GenericObject.class, collectionName)) {
+ List<GenericObject> timestamps = event.get(GenericObject.class, collectionName);
+ for (GenericObject timestamp : timestamps) {
+ if (timestamp.getIntVal(0) == system) {
+ return timestamp.getDoubleVal(0);
+ }
+ }
+ return 0;
+ } else {
+ return 0;
+ }
+ }
+
+ @Override
+ public int getNInt() {
+ return 1;
+ }
+
+ @Override
+ public int getNFloat() {
+ return 0;
+ }
+
+ @Override
+ public int getNDouble() {
+ return 1;
+ }
+
+ @Override
+ public int getIntVal(int index) {
+ if (index == 0) {
+ return system;
+ } else {
+ throw new ArrayIndexOutOfBoundsException();
+ }
+ }
+
+ @Override
+ public float getFloatVal(int index) {
+ throw new ArrayIndexOutOfBoundsException();
+ }
+
+ @Override
+ public double getDoubleVal(int index) {
+ if (index == 0) {
+ return time;
+ } else {
+ throw new ArrayIndexOutOfBoundsException();
+ }
+ }
+
+ @Override
+ public boolean isFixedSize() {
+ return true;
+ }
+}
hps-java/src/main/java/org/lcsim/hps/readout/ecal
diff -u -r1.2 -r1.3
--- TriggerDriver.java 19 Mar 2013 22:24:07 -0000 1.2
+++ TriggerDriver.java 20 Mar 2013 00:09:42 -0000 1.3
@@ -4,6 +4,7 @@
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
+import java.util.ArrayList;
import java.util.List;
@@ -20,7 +21,7 @@
* Applies SVT trigger latency and sends trigger signal to SVT
*
* @author Sho Uemura <[log in to unmask]>
- * @version $Id: TriggerDriver.java,v 1.2 2013/03/19 22:24:07 meeg Exp $
+ * @version $Id: TriggerDriver.java,v 1.3 2013/03/20 00:09:42 meeg Exp $
*/
public abstract class TriggerDriver extends TriggerableDriver {
@@ -34,6 +35,7 @@
private static boolean triggerBit = false;
private String lcioFile = null;
LCIOWriter lcioWriter = null;
+ private static final List<TriggerableDriver> triggerables = new ArrayList<TriggerableDriver>();
public TriggerDriver() {
latency = 50.0;
@@ -96,6 +98,9 @@
if (ClockSingleton.getClock() - lastTrigger > deadTime && triggerDecision(event)) {
sendTrigger();
+ for (TriggerableDriver triggerable : triggerables) {
+ ReadoutTimestamp.addTimestamp(triggerable, event);
+ }
triggerBit = true;
lastTrigger = ClockSingleton.getClock();
numTriggers++;
@@ -129,6 +134,22 @@
checkTrigger(event);
}
+ 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);
+ }
+
@Override
protected void processTrigger(EventHeader event) {
if (outputStream != null) {
hps-java/src/main/java/org/lcsim/hps/readout/ecal
diff -u -r1.2 -r1.3
--- EcalReadoutDriver.java 19 Mar 2013 22:24:07 -0000 1.2
+++ EcalReadoutDriver.java 20 Mar 2013 00:09:42 -0000 1.3
@@ -12,7 +12,7 @@
* Performs readout of ECal hits.
*
* @author Sho Uemura <[log in to unmask]>
- * @version $Id: EcalReadoutDriver.java,v 1.2 2013/03/19 22:24:07 meeg Exp $
+ * @version $Id: EcalReadoutDriver.java,v 1.3 2013/03/20 00:09:42 meeg Exp $
*/
public abstract class EcalReadoutDriver<T> extends TriggerableDriver {
@@ -145,6 +145,14 @@
protected void processTrigger(EventHeader event) {
}
+ @Override
+ public double readoutDeltaT() {
+ double triggerTime = ClockSingleton.getTime() + latency;
+ int cycle = (int) Math.floor((triggerTime - readoutOffset + ClockSingleton.getDt()) / readoutPeriod);
+ double readoutTime = cycle * readoutPeriod + readoutOffset - ClockSingleton.getDt();
+ return readoutTime;
+ }
+
//initialize buffers
protected abstract void initReadout();
}
\ No newline at end of file
hps-java/src/main/java/org/lcsim/hps/readout/ecal
diff -u -r1.1 -r1.2
--- TriggerableDriver.java 19 Mar 2013 22:24:07 -0000 1.1
+++ TriggerableDriver.java 20 Mar 2013 00:09:42 -0000 1.2
@@ -1,8 +1,6 @@
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;
@@ -12,13 +10,12 @@
* 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.
+ * readoutDeltaT() 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 $
+ * @version $Id: TriggerableDriver.java,v 1.2 2013/03/20 00:09:42 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]
@@ -28,10 +25,10 @@
/**
*
- * @return next time checkTrigger() will be called
+ * @return time reference for hits written by this driver in response to a trigger
*/
- public double nextReadoutTime() {
- return ClockSingleton.getTime() + ClockSingleton.getDt();
+ public double readoutDeltaT() {
+ return ClockSingleton.getTime() + latency;
}
@Override
@@ -55,20 +52,4 @@
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/recon/tracking
diff -u -r1.9 -r1.10
--- SimpleSvtReadout.java 19 Mar 2013 22:24:07 -0000 1.9
+++ SimpleSvtReadout.java 20 Mar 2013 00:09:43 -0000 1.10
@@ -28,7 +28,7 @@
/**
*
* @author Omar Moreno <[log in to unmask]>
- * @version $Id: SimpleSvtReadout.java,v 1.9 2013/03/19 22:24:07 meeg Exp $
+ * @version $Id: SimpleSvtReadout.java,v 1.10 2013/03/20 00:09:43 meeg Exp $
*/
public class SimpleSvtReadout extends TriggerableDriver {
@@ -321,6 +321,14 @@
}
}
+ @Override
+ public double readoutDeltaT() {
+ double triggerTime = ClockSingleton.getTime() + latency;
+ int cycle = (int) Math.floor((triggerTime - readoutOffset + ClockSingleton.getDt()) / Apv25Constants.SAMPLING_INTERVAL);
+ double readoutTime = cycle * Apv25Constants.SAMPLING_INTERVAL + readoutOffset - ClockSingleton.getDt();
+ return readoutTime;
+ }
+
private class APV25Pipeline extends RingBuffer {
private int _trigger_latency = (int) Math.floor(270 / Apv25Constants.SAMPLING_INTERVAL);
hps-java/src/main/java/org/lcsim/hps/evio
diff -u -r1.12 -r1.13
--- TestRunTriggeredReconToLcio.java 1 Mar 2013 01:30:25 -0000 1.12
+++ TestRunTriggeredReconToLcio.java 20 Mar 2013 00:09:43 -0000 1.13
@@ -14,6 +14,7 @@
import org.lcsim.event.SimTrackerHit;
import org.lcsim.hps.conditions.QuietBaseLCSimEvent;
import org.lcsim.hps.monitoring.CalibrationDriver;
+import org.lcsim.hps.readout.ecal.ReadoutTimestamp;
import org.lcsim.hps.readout.ecal.TriggerDriver;
import org.lcsim.util.Driver;
import org.lcsim.util.lcio.LCIOWriter;
@@ -118,6 +119,7 @@
lcsimEvent.put(MCEvent.MC_PARTICLES, mcParticles);
lcsimEvent.put(ecalCollectionName, ecalHits, SimCalorimeterHit.class, 0xe0000000);
lcsimEvent.put(trackerCollectionName, trackerHits, SimTrackerHit.class, 0xc0000000);
+ lcsimEvent.put(ReadoutTimestamp.collectionName, event.get(ReadoutTimestamp.class, ReadoutTimestamp.collectionName));
System.out.println("Adding " + mcParticles.size() + " MCParticles, " + ecalHits.size() + " SimCalorimeterHits, " + trackerHits.size() + " SimTrackerHits");
++eventNum;
}
hps-java/src/main/java/org/lcsim/hps/users/meeg
diff -N HitTimePrintDriver.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ HitTimePrintDriver.java 20 Mar 2013 00:09:43 -0000 1.1
@@ -0,0 +1,31 @@
+package org.lcsim.hps.users.meeg;
+
+import java.util.List;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.hps.readout.ecal.ReadoutTimestamp;
+import org.lcsim.util.Driver;
+
+/**
+ *
+ * @author Sho Uemura <[log in to unmask]>
+ * @version $Id: HitTimePrintDriver.java,v 1.1 2013/03/20 00:09:43 meeg Exp $
+ */
+public class HitTimePrintDriver extends Driver {
+
+ @Override
+ protected void process(EventHeader event) {
+
+ List<TrackerHit> trackerHits = event.get(TrackerHit.class, "StripClusterer_SiTrackerHitStrip1D");
+ List<CalorimeterHit> ecalHits = event.get(CalorimeterHit.class, "EcalCalHits");
+
+ System.out.println("Event with ECal timestamp " + ReadoutTimestamp.getTimestamp(ReadoutTimestamp.SYSTEM_ECAL, event) + ", SVT timestamp " + ReadoutTimestamp.getTimestamp(ReadoutTimestamp.SYSTEM_TRACKER, event));
+ for (CalorimeterHit hit : ecalHits) {
+ System.out.println("Ecal: " + (hit.getTime() + ReadoutTimestamp.getTimestamp(ReadoutTimestamp.SYSTEM_ECAL, event)));
+ }
+ for (TrackerHit hit : trackerHits) {
+ System.out.println("SVT: " + (hit.getTime() + ReadoutTimestamp.getTimestamp(ReadoutTimestamp.SYSTEM_TRACKER, event)));
+ }
+ }
+}
CVSspam 0.2.12