Commit in hps-java/src/main/java/org/lcsim/hps/evio on MAIN
EvioConsumer.java+94-491.2 -> 1.3
EvioFileProducer.java+17-51.4 -> 1.5
+111-54
2 modified files
current working versions

hps-java/src/main/java/org/lcsim/hps/evio
EvioConsumer.java 1.2 -> 1.3
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
EvioFileProducer.java 1.4 -> 1.5
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.
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