hps-java/src/main/java/org/lcsim/hps/evio
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) {