Print

Print


Commit in hps-java/src/main on MAIN
resources/org/lcsim/hps/steering/users/meeg/HitTimes.lcsim+14added 1.1
java/org/lcsim/hps/readout/ecal/ReadoutTimestamp.java+107added 1.1
                               /TriggerDriver.java+22-11.2 -> 1.3
                               /EcalReadoutDriver.java+9-11.2 -> 1.3
                               /TriggerableDriver.java+5-241.1 -> 1.2
java/org/lcsim/hps/recon/tracking/SimpleSvtReadout.java+9-11.9 -> 1.10
java/org/lcsim/hps/evio/TestRunTriggeredReconToLcio.java+21.12 -> 1.13
java/org/lcsim/hps/users/meeg/HitTimePrintDriver.java+31added 1.1
+199-27
3 added + 5 modified, total 8 files
readout timestamps and example driver

hps-java/src/main/resources/org/lcsim/hps/steering/users/meeg
HitTimes.lcsim added at 1.1
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
ReadoutTimestamp.java added at 1.1
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
TriggerDriver.java 1.2 -> 1.3
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
EcalReadoutDriver.java 1.2 -> 1.3
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
TriggerableDriver.java 1.1 -> 1.2
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
SimpleSvtReadout.java 1.9 -> 1.10
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
TestRunTriggeredReconToLcio.java 1.12 -> 1.13
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
HitTimePrintDriver.java added at 1.1
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


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