hps-java/src/main/java/org/lcsim/hps/evio
diff -u -r1.2 -r1.3
--- EvioConsumer.java 12 Mar 2012 17:47:13 -0000 1.2
+++ EvioConsumer.java 12 Mar 2012 21:09:07 -0000 1.3
@@ -16,6 +16,8 @@
import org.jlab.coda.et.EtSystem;
import org.jlab.coda.et.EtSystemOpenConfig;
import org.jlab.coda.et.enums.Mode;
+import org.jlab.coda.et.enums.Modify;
+import org.jlab.coda.et.exception.EtTimeoutException;
import org.jlab.coda.jevio.CompositeData;
import org.jlab.coda.jevio.EvioEvent;
import org.jlab.coda.jevio.EvioReader;
@@ -58,6 +60,7 @@
public static void main(String[] args) {
+ boolean debug = true;
int position = 1, pposition = 0, qSize = 0, chunk = 1;
boolean blocking = true, verbose = false;
String etName = null, host = null, statName = null;
@@ -196,79 +199,121 @@
EtAttachment att = sys.attach(stat);
// array of events
- EtEvent[] mevs;
+ EtEvent[] mevs = null;
// Test plots.
AIDA aida = AIDA.defaultInstance();
//ICloud1D idsPlot = aida.cloud1D("Cell IDs");
//ICloud1D timePlot = aida.cloud1D("Time");
ICloud1D adcValuePlot = aida.cloud1D("ADC Value");
+ ICloud1D eventRatePlot = aida.cloud1D("Event Rate [Hz]");
+ ICloud1D hitCountPlot = aida.cloud1D("Number of RawTrackerHits in Event");
IAnalysisFactory fac = aida.analysisFactory();
IPlotter plotter = fac.createPlotterFactory().create("Plot");
- plotter.createRegion();
+ plotter.createRegions(2,2);
plotter.region(0).plot(adcValuePlot);
+ plotter.region(1).plot(eventRatePlot);
+ plotter.region(2).plot(hitCountPlot);
plotter.show();
-
- // Number of events to read off ET Ring before exiting.
- // TODO Make this a CL parameter.
- int ntoread = 1000;
-
- // Number of events read so far.
- int nread = 0;
+
+ // Number of current event from 0.
+ int eventCount = 0;
while (true) {
+ long startTime = System.nanoTime();
+
// get events from ET system
- mevs = sys.getEvents(att, Mode.SLEEP, null, 0, chunk);
+ //mevs = sys.getEvents(att, Mode.SLEEP, null, 0, chunk);
+ boolean timedOut = false;
+ try {
+ mevs = sys.getEvents(att, Mode.TIMED, Modify.NOTHING, 5000000, chunk);
+ } catch (EtTimeoutException e) {
+ System.out.println("timed out!!!");
+ timedOut = true;
+ }
+ if (timedOut) {
+ System.out.println("press any key to exit");
+ System.console().readLine();
+ System.exit(0);
+ }
- nread += mevs.length;
+ if (debug)
+ System.out.println("EvioConsumer read event #" + eventCount);
+
+ if (mevs.length > 1) {
+ throw new RuntimeException("Did not expect more than 1 event!");
+ }
+
+ EtEvent mev = mevs[0];
- System.out.println("got " + mevs.length + " events from ET Ring");
-
// example of reading & printing event data
- for (EtEvent mev : mevs) {
-
- if (mev.needToSwap()) {
- System.out.println("data needs swapping");
- }
-
- // Get CompositeData using event buffer.
- ByteBuffer buf = mev.getDataBuffer();
- EvioReader reader = new EvioReader(buf);
- EvioEvent evioEvent = reader.parseNextEvent();
- CompositeData cdata = evioEvent.getCompositeData();
+ //for (EtEvent mev : mevs) {
- // Make RawTrackerHits from composite data.
- List<RawTrackerHit> hits = new ArrayList<RawTrackerHit>();
- List<Object> items = cdata.getItems();
- int n = items.size();
- for (int i=0; i<n; i+=3) {
- Long id = (Long)items.get(i);
- int time = (Integer)items.get(i+1);
- int adcValue = (Integer)items.get(i+2);
- //System.out.println("EvioConsumer --> id=0x"+Long.toHexString(id)+"; time="+time+"; adcValue="+adcValue);
- RawTrackerHit hit = new BaseRawTrackerHit(id, time, new short[] {(short)adcValue});
- hits.add(hit);
- }
- System.out.println("Made " + hits.size() + " RawTrackerHits from EtEvent");
-
- // Make some test plots from tracker data.
- for (RawTrackerHit hit : hits) {
- //idsPlot.fill(hit.getCellID());
- //timePlot.fill(hit.getTime());
- adcValuePlot.fill(hit.getADCValues()[0]);
- }
+ // This may be applicable when reading off the actual C-based ET server.
+ if (mev.needToSwap()) {
+ System.out.println("data needs swapping");
+ }
+
+ // Get CompositeData using event buffer.
+ ByteBuffer buf = mev.getDataBuffer();
+ //System.out.println("buf.pos = " + buf.position());
+ EvioReader reader = new EvioReader(buf);
+ EvioEvent evioEvent = null;
+ try {
+ evioEvent = reader.parseNextEvent();
+ } catch (java.nio.BufferUnderflowException e) {
+ System.out.println("caught underflow");
}
+ // Something bad happened and event was not built. Skip it.
+ if (evioEvent == null) {
+ System.out.println("failed to build EVIO event; skipping this EtEvent");
+ continue;
+ }
+
+ // Build composite data.
+ CompositeData cdata = evioEvent.getCompositeData();
+
+ // Make RawTrackerHits from composite data.
+ List<RawTrackerHit> hits = new ArrayList<RawTrackerHit>();
+ List<Object> items = cdata.getItems();
+ int n = items.size();
+ for (int i=0; i<n; i+=3) {
+ Long id = (Long)items.get(i);
+ int time = (Integer)items.get(i+1);
+ int adcValue = (Integer)items.get(i+2);
+ //System.out.println("EvioConsumer --> id=0x"+Long.toHexString(id)+"; time="+time+"; adcValue="+adcValue);
+ RawTrackerHit hit = new BaseRawTrackerHit(id, time, new short[] {(short)adcValue});
+ hits.add(hit);
+ }
+ if (debug)
+ System.out.println("Made " + hits.size() + " RawTrackerHits from EtEvent");
+
+ hitCountPlot.fill(hits.size());
+
+ // Make some test plots from tracker data.
+ for (RawTrackerHit hit : hits) {
+ adcValuePlot.fill(hit.getADCValues()[0]);
+ }
+ //}
// put events back into ET system
sys.putEvents(att, mevs);
- // Break out of read loop if max events events equaled or exceeded.
- if (nread >= ntoread) {
- System.out.println("breaking after " + ntoread + " events");
- break;
- }
+ // Compute event processing time.
+ long endTime = System.nanoTime();
+ long elapsed = endTime - startTime;
+ System.out.println("processed event in " + elapsed + " ns");
+
+ double eventRate = 10e9 / elapsed;
+ System.out.println("instantaneous event rate = " + eventRate + " hz");
+
+ eventRatePlot.fill(eventRate);
+
+ ++eventCount;
+
+ System.out.println("----------------------");
}
}
catch (Exception ex) {
hps-java/src/main/java/org/lcsim/hps/evio
diff -u -r1.4 -r1.5
--- EvioFileProducer.java 12 Mar 2012 17:47:13 -0000 1.4
+++ EvioFileProducer.java 12 Mar 2012 21:09:07 -0000 1.5
@@ -11,7 +11,6 @@
import org.jlab.coda.et.enums.Mode;
import org.jlab.coda.jevio.EventWriter;
import org.jlab.coda.jevio.EvioEvent;
-import org.jlab.coda.jevio.EvioException;
import org.jlab.coda.jevio.EvioReader;
// This is copied and modified from Carl Timmer's EvioProducer class in et 12 org.jlab.coda.et.apps package.
@@ -24,7 +23,7 @@
int port = EtConstants.serverPort;
int group = 1;
- int size = 1000; // Default event size.
+ int size = 10000; // Default event size.
EvioFileProducer()
{}
@@ -136,7 +135,7 @@
reader = new EvioReader(evioFileName);
// Loop until event source is exhausted.
- //int eventCount = 0;
+ int eventCount = 0;
EvioEvent event = reader.parseNextEvent();
while (true) {
@@ -149,11 +148,18 @@
size, // size of event but overwritten later
group); // group number; default value is arbitrary
+ System.out.println("Made Et event with length " + mevs[0].getLength());
+
// Write EVIO event to EtEvent's buffer.
ByteBuffer buf = mevs[0].getDataBuffer();
EventWriter writer = new EventWriter(buf, 100000, 100, null, null);
writer.writeEvent(event);
- writer.close();
+ try {
+ writer.close();
+ } catch (Exception x) {
+ System.out.println("caught exception while closing writer");
+ System.out.println(x.getLocalizedMessage());
+ }
mevs[0].setLength(buf.position());
// Put events onto ET ring.
@@ -163,8 +169,14 @@
if (reader.getNumEventsRemaining() == 0)
break;
+ System.out.println("Wrote event #" + eventCount + " to ET");
+
+ System.out.println("-------------------------------");
+
+ ++eventCount;
+
// Get next event.
- event = reader.parseNextEvent();
+ event = reader.parseNextEvent();
}
// Cleanup.