Commit in hps-java/src/main/java/org/lcsim/hps/evio on MAIN | |||
EvioConsumer.java | +94 | -49 | 1.2 -> 1.3 |
EvioFileProducer.java | +17 | -5 | 1.4 -> 1.5 |
+111 | -54 |
current working versions
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) {
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.
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