Commit in hps-java/src/main/java/org/lcsim/hps/evio on MAIN
EvioConsumer.java+54-431.5 -> 1.6
current working copy of EVIO consumer example

hps-java/src/main/java/org/lcsim/hps/evio
EvioConsumer.java 1.5 -> 1.6
diff -u -r1.5 -r1.6
--- EvioConsumer.java	16 Mar 2012 19:10:47 -0000	1.5
+++ EvioConsumer.java	16 Mar 2012 21:34:18 -0000	1.6
@@ -85,9 +85,8 @@
     }
 
 
+    private static final boolean debug = false;
     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;
@@ -227,10 +226,33 @@
 
             // array of events
             EtEvent[] mevs = null;
+                                                                       
+            // Job manager to run LCSim.
+            JobControlManager jobMgr = new JobControlManager();
+            jobMgr.checkInputFiles(false);
+            InputStream is = (new EvioConsumer()).getClass().getResourceAsStream(lcsimXml);
+            jobMgr.setup(is);
+            
+            // Get list of Drivers.
+            List<Driver> drivers = jobMgr.getDriverExecList();
+            
+            // Wrap Drivers with DriverAdapter.
+            Driver topDriver = new Driver();
+            for (Driver driver : drivers) {
+                topDriver.add(driver);
+            }
+            DriverAdapter driverAdapter = new DriverAdapter(topDriver);
+                                    
+            // Call wrapper to startOfData() on DriverAdapter.
+            driverAdapter.configure(null);            
+            
+            // Create a dummy event in order to get Detector conditions.
+            BaseLCSimEvent dummyEvent = new BaseLCSimEvent(0, 0, detectorName);
+            Detector detector = dummyEvent.getDetector();
             
             // Data plots.
             AIDA aida = AIDA.defaultInstance();
-            //ICloud1D timePlot = aida.cloud1D("Time");
+            //
             aida.tree().cd("/");
             IHistogram1D adcValuePlot = aida.histogram1D("ADC Value", 500, 0, 1000);            
             ICloud1D eventRatePlot = aida.cloud1D("Event Rate [Hz]");            
@@ -242,6 +264,8 @@
             IHistogram1D tkrMomYPlot = aida.histogram1D("Track Py", 160, -0.2, 0.2);
             IHistogram1D tkrMomZPlot = aida.histogram1D("Track Pz", 160, -0.2, 0.2);
             IHistogram1D tkrMomPlot = aida.histogram1D("Track P", 200, 0, 10.0);
+            ICloud1D timePlot = aida.cloud1D("Time [ns]");
+            ICloud1D badEventPlot = aida.cloud1D("Bad Event Count");
                         
             IAnalysisFactory fac = aida.analysisFactory();
             IPlotter plotter = fac.createPlotterFactory().create("HPS SVT Plots");
@@ -257,30 +281,10 @@
             plotter.region(7).plot(tkrMomYPlot);
             plotter.region(8).plot(tkrMomZPlot);
             plotter.region(9).plot(tkrMomPlot);
-            plotter.show();
-                                                           
-            // Job manager to run LCSim.
-            JobControlManager jobMgr = new JobControlManager();
-            jobMgr.checkInputFiles(false);
-            InputStream is = (new EvioConsumer()).getClass().getResourceAsStream(lcsimXml);
-            jobMgr.setup(is);
-            
-            // Get list of Drivers.
-            List<Driver> drivers = jobMgr.getDriverExecList();
+            plotter.region(10).plot(timePlot);
+            plotter.region(11).plot(badEventPlot);
             
-            // Wrap Drivers with DriverAdapter.
-            Driver topDriver = new Driver();
-            for (Driver driver : drivers) {
-                topDriver.add(driver);
-            }
-            DriverAdapter driverAdapter = new DriverAdapter(topDriver);
-                                    
-            // Call wrapper to startOfData() on DriverAdapter.
-            driverAdapter.configure(null);            
-            
-            // Create a dummy event in order to get Detector conditions.
-            BaseLCSimEvent dummyEvent = new BaseLCSimEvent(0, 0, detectorName);
-            Detector detector = dummyEvent.getDetector();
+            plotter.show();
                                     
             // Make a list of sensors in the SVT.
             List<SiSensor> sensors = detector.getSubdetector("Tracker").getDetectorElement().findDescendants(SiSensor.class);            
@@ -289,7 +293,6 @@
             IPlotter plotter2 = fac.createPlotterFactory().create("HPS SVT Sensor Occupancy Plots");
             IPlotterStyle style = plotter2.style();
             style.dataStyle().fillStyle().setColor("yellow");
-            //style.dataStyle().lineStyle().setColor("yellow");
             style.dataStyle().errorBarStyle().setVisible(false);
             plotter2.createRegions(5, 4);
             int ns = sensors.size();
@@ -320,7 +323,8 @@
             plotter3.show();
                                                                                    
             // Number of current event from 0.
-            int eventCount = 0;                        
+            int eventCount = 0;                     
+            long jobStartTime = System.currentTimeMillis();            
             while (true) {
                 
                 long startTime = System.nanoTime();
@@ -331,32 +335,32 @@
                 try {
                     mevs = sys.getEvents(att, Mode.TIMED, Modify.NOTHING, 5000000, chunk);
                 } catch (EtTimeoutException e) {
-                    System.out.println("Timed out!!!");
                     timedOut = true;
                 }              
-                // Exit point here.
+                // When timeout occurs, do cleanup and exit.
                 if (timedOut) {
                     
-                    // Driver cleanup.
-                    // FIXME This requires that Driver.endOfData() be made public.
-                    //for (Driver driver : drivers) {
-                    //    driver.endOfData();
-                    //}
+                    long jobEndTime = System.currentTimeMillis();                    
+                    long jobTime = jobEndTime - jobStartTime;
+                    System.out.println("Job time: " + jobTime / 1000 + " seconds");
+                    
+                    long avgEventTime = jobTime / (eventCount + 1);
+                    System.out.println("Avg event processing time: " + avgEventTime + " ms");
                     
                     // Call wrapper to endOfData() on DriverAdapter.
                     driverAdapter.finish(null);
                     
                     // Save AIDA plots.
-                    AIDA.defaultInstance().saveAs("EtTestPlots.aida");                   
-                    
+                    AIDA.defaultInstance().saveAs("EtTestPlots.aida");
+                                        
                     // Exit after user pressed enter.
                     System.out.println("Press ENTER to exit ...");
                     System.console().readLine();
                     System.exit(0);
                 }                
                 
-                //if (debug)
-                //    System.out.println("EvioConsumer read event #" + eventCount);
+                if (debug)
+                    System.out.println("EvioConsumer read event #" + eventCount);
                 
                 if (mevs.length > 1) {
                     throw new RuntimeException("Did not expect to get more than one EtEvent!");
@@ -365,7 +369,7 @@
                 // This is the EtEvent corresponding to a single MC event with tracker data.
                 EtEvent mev = mevs[0];
                 
-                // Get EvioEvent and make CompositeData from the EtEvent's data buffer.
+                // Get EvioEvent and check for errors.
                 ByteBuffer buf = mev.getDataBuffer();
                 EvioReader reader = new EvioReader(buf);
                 EvioEvent evioEvent = null;
@@ -377,8 +381,11 @@
                 // Something bad happened and event was not built.  Just skip it.
                 if (evioEvent == null) {
                     System.out.println("Failed to build EVIO event.  Skipping this EtEvent!");
+                    badEventPlot.fill(0);
                     continue;
                 }
+                
+                // Make CompositeData from data buffer.
                 CompositeData cdata = evioEvent.getCompositeData();
 
                 // Make LCSim RawTrackerHits from CompositeData.
@@ -397,11 +404,15 @@
                 // Fill RawTrackerHit count.
                 rawHitCountPlot.fill(hits.size());
 
+                // Loop over RawTrackerHit collection.
                 for (RawTrackerHit hit : hits) {
                     
                     // Fill ADC value plot.
                     adcValuePlot.fill(hit.getADCValues()[0]);
                     
+                    // Fill time plot.
+                    timePlot.fill(hit.getTime());
+                    
                     // Fill basic (non-normalized) occupancy plot.
                     aida.histogram1D(hit.getDetectorElement().getName()).fill(hit.getIdentifierFieldValue("strip"));
                     
@@ -446,7 +457,7 @@
                 tkrHitCountPlot.fill(trackerHits.size());
                                                 
                 // put events back into ET system
-                // TODO Is this even necessary when running in read-only mode???
+                // FIXME Is this even necessary when running in read-only mode?
                 sys.putEvents(att, mevs);
                 
                 // Compute event processing time.
@@ -464,8 +475,8 @@
                 // Increment event count.
                 ++eventCount;
                 
-                //if (debug)
-                //    System.out.println("----------------------");
+                if (debug)
+                    System.out.println("----------------------");
             }
         }
         catch (Exception ex) {
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