Commit in hps-java/src/main on MAIN | |||
resources/org/lcsim/hps/steering/users/meeg/HitTimes.lcsim | +14 | added 1.1 | |
java/org/lcsim/hps/readout/ecal/ReadoutTimestamp.java | +107 | added 1.1 | |
/TriggerDriver.java | +22 | -1 | 1.2 -> 1.3 |
/EcalReadoutDriver.java | +9 | -1 | 1.2 -> 1.3 |
/TriggerableDriver.java | +5 | -24 | 1.1 -> 1.2 |
java/org/lcsim/hps/recon/tracking/SimpleSvtReadout.java | +9 | -1 | 1.9 -> 1.10 |
java/org/lcsim/hps/evio/TestRunTriggeredReconToLcio.java | +2 | 1.12 -> 1.13 | |
java/org/lcsim/hps/users/meeg/HitTimePrintDriver.java | +31 | added 1.1 | |
+199 | -27 |
readout timestamps and example driver
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>
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; + } +}
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) {
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
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); - }
}
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);
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; }
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))); + } + } +}
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