4 modified files
hps-java/src/main/java/org/lcsim/hps/monitoring
diff -u -r1.2 -r1.3
--- SensorOccupancyPlotsDriver.java 23 Mar 2012 23:47:05 -0000 1.2
+++ SensorOccupancyPlotsDriver.java 25 Mar 2012 07:23:20 -0000 1.3
@@ -12,6 +12,7 @@
import org.lcsim.detector.tracker.silicon.SiSensor;
import org.lcsim.event.EventHeader;
import org.lcsim.event.RawTrackerHit;
+import org.lcsim.detector.identifier.*;
import org.lcsim.geometry.Detector;
import org.lcsim.util.Driver;
import org.lcsim.util.aida.AIDA;
@@ -27,10 +28,16 @@
private String trackerName = "Tracker";
private int eventCount = 0;
private int eventRefreshRate = 1;
+ private boolean debug = true;
+ Map<SiSensor,Integer> sensorRegionMap;
public SensorOccupancyPlotsDriver()
{}
+ public void setDebug(boolean debug) {
+ this.debug = debug;
+ }
+
public void setRawTrackerHitCollectionName(String rawTrackerHitCollectionName) {
this.rawTrackerHitCollectionName = rawTrackerHitCollectionName;
}
@@ -38,7 +45,23 @@
public void setEventRefreshRate(int eventRefreshRate) {
this.eventRefreshRate = eventRefreshRate;
}
-
+ /*
+ private int computeRegion(SiSensor sensor, IIdentifierHelper helper) {
+ IIdentifier id = sensor.getIdentifier();
+ int layer = sensor.getIdentifierHelper().getValue(id, "layer"); // 1-10; axial layers are odd layers; stereo layers are even
+ int module = sensor.getIdentifierHelper().getValue(id, "module"); // 0-1; module number is top or bottom
+ int ix = (layer - 1) / 2;
+ int iy = 0;
+ if (module > 0) {
+ iy += 2;
+ }
+ if (layer % 2 == 0) {
+ iy += 1;
+ }
+ int region = iy * 4 + ix;
+ return region;
+ }
+ */
protected void detectorChanged(Detector detector) {
// If called > 1 then destroy plots that might be currently up.
@@ -63,46 +86,65 @@
// Make a list of SiSensors in the SVT.
sensors = this.detector.getSubdetector(trackerName).getDetectorElement().findDescendants(SiSensor.class);
-
+
// For now throw an error if there are "too many" sensors.
if (sensors.size() > 20) {
throw new RuntimeException("Can't handle > 20 sensors at a time.");
}
-
- // Reset or setup the data structure for occupancy calculations by sensor.
+
+ // Map a map of sensors to their region numbers in the plotter.
+ IIdentifierHelper helper = sensors.get(0).getIdentifierHelper();
+ sensorRegionMap = new HashMap<SiSensor,Integer>();
+ for (SiSensor sensor : sensors) {
+
+ IIdentifier id = sensor.getIdentifier();
+
+ int layer = helper.getValue(id, "layer"); // 1-10; axial layers are odd layers; stereo layers are even
+ int module = helper.getValue(id, "module"); // 0-1; module number is top or bottom
+
+ int ix = (layer - 1) / 2;
+ int iy = 0;
+ if (module > 0) {
+ iy += 2;
+ }
+ if (layer % 2 == 0) {
+ iy += 1;
+ }
+ int region = ix * 4 + iy;
+
+ System.out.println(sensor.getName() + "; lyr=" + layer + "; mod=" + module + " -> xy[" + ix + "][" + iy + "] -> reg="+region);
+ sensorRegionMap.put(sensor,region);
+ }
+
resetOccupancyMap();
// Setup the occupancy plots.
- int region = 0;
aida.tree().cd("/");
for (SiSensor sensor : sensors) {
IHistogram1D occupancyPlot = aida.histogram1D(sensor.getName(), 640, 0, 639);
- occuPlotter.region(region).plot(occupancyPlot);
- ++region;
+ occuPlotter.region(sensorRegionMap.get(sensor)).plot(occupancyPlot);
}
occuPlotter.show();
}
public void process(EventHeader event) {
+ if (debug)
+ System.out.println("SensorOccupancyPlots.process");
+
// Increment event counter.
++eventCount;
// Get RawTrackerHit collection from event.
List<RawTrackerHit> rawTrackerHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
- // Loop over RawTrackerHit collection and increment occupancies.
+ // Increment hit count of each strip.
for (RawTrackerHit hit : rawTrackerHits) {
- // Increment hit counts for each strip.
int[] strips = occupancyMap.get((SiSensor) hit.getDetectorElement());
strips[hit.getIdentifierFieldValue("strip")] += 1;
}
if (eventCount % this.eventRefreshRate == 0) {
-
- // Occupancy plots are redrawn each time.
- occuPlotter.clearRegions();
- int region = 0;
for (SiSensor sensor : sensors) {
IHistogram1D sensorHist = aida.histogram1D(sensor.getName());
sensorHist.reset();
@@ -113,15 +155,12 @@
sensorHist.fill(i, stripOccupancy);
}
}
- occuPlotter.region(region).plot(aida.histogram1D(sensor.getName()));
- ++region;
}
- occuPlotter.show();
+ //occuPlotter.show();
}
}
private void resetOccupancyMap() {
- // Data structure for occupancy calculations by sensor.
occupancyMap = new HashMap<SiSensor,int[]>();
for (SiSensor sensor : sensors) {
occupancyMap.put(sensor, new int[640]);
hps-java/src/main/java/org/lcsim/hps/monitoring
diff -u -r1.1 -r1.2
--- MonitoringConsumer.java 22 Mar 2012 22:03:35 -0000 1.1
+++ MonitoringConsumer.java 25 Mar 2012 07:23:20 -0000 1.2
@@ -35,12 +35,13 @@
// TODO Integrate the ConnectionPanel so that it can be used for changing connection parameters.
public class MonitoringConsumer {
- // TODO Next two should be job options.
+ // TODO Next two should be job options or at least CL options.
private static final String detectorName = "HPS-Test-JLAB-v4pt0";
- private static final String lcsimXml = "/org/lcsim/hps/steering/EtTest.lcsim";
-
+ //private static final String lcsimXml = "/org/lcsim/hps/steering/EtTest.lcsim";
+ private static final String lcsimXml = "/org/lcsim/hps/steering/EtSensorOccupancy.lcsim";
+
private MonitoringGui gui;
- private int eventCount;
+ //private int eventCount;
private JobControlManager jobMgr;
@@ -53,7 +54,9 @@
}
public void run(String[] args) {
-
+
+ boolean debug = false;
+
// Create ET system connection parameters.
ConnectionParameters cn = new ConnectionParameters();
try {
@@ -87,9 +90,6 @@
// attach to new station
EtAttachment att = sys.attach(stat);
-
- // array of events
- EtEvent[] mevs = null;
// Job manager to run LCSim.
jobMgr = new JobControlManager();
@@ -112,7 +112,7 @@
// Make the builder for creating LCSim events from EVIO data.
LCSimEventBuilder eventBuilder = new LCSimEventBuilder(detectorName);
- eventBuilder.setDebug(true);
+ eventBuilder.setDebug(false);
// Show GUI.
MonitoringGui.main(new String[]{});
@@ -120,28 +120,36 @@
gui = MonitoringGui.getMonitoringGui();
gui.setJobControlManager(jobMgr);
- ConnectionPanel.main(new String[]{});
+ //ConnectionPanel.main(new String[]{});
// Start job timer.
gui.updateJobStartTime();
-
// Event loop.
+ // array of events
+ EtEvent[] mevs = null;
+ int eventCount = 0;
while (true) {
-
- // Use these arguments for unlimited wait time.
- //mevs = sys.getEvents(att, Mode.SLEEP, null, 0, chunk);
- boolean timedOut = false;
+ //System.out.println("top of EtEvent loop");
+ //boolean timedOut = false;
try {
- mevs = sys.getEvents(att, Mode.TIMED, Modify.NOTHING, 10000000, cn.chunk);
+ if (debug)
+ System.out.println("waiting for EtEvents");
+ //mevs = sys.getEvents(att, Mode.SLEEP, Modify.NOTHING, 0, cn.chunk);
+ mevs = sys.getEvents(att, Mode.TIMED, Modify.NOTHING, 20000000, cn.chunk);
+ eventCount += mevs.length;
+ if (debug) {
+ System.out.println("event count <" + eventCount + ">");
+ System.out.println("got " + mevs.length + " EtEvents");
+ }
} catch (EtTimeoutException e) {
- timedOut = true;
- }
+ // timedOut = true;
+ //}
// When timeout occurs, do cleanup and exit.
- if (timedOut) {
-
+ //if (timedOut) {
+ //System.out.println("timed out");
// Call wrapper to Driver.endOfData() on DriverAdapter.
driverAdapter.finish(null);
-
+ //System.exit(0);
// Exit after user presses enter.
System.out.println("Press ENTER to exit ...");
System.console().readLine();
@@ -150,9 +158,10 @@
// Loop over retrieved EtEvents.
for (EtEvent mev : mevs) {
-
+ gui.updateEventCount();
// Increment GUI event count.
- gui.incrEventCount();
+ //if (gui.)
+ //
// Get EvioEvent and check for errors.
ByteBuffer buf = mev.getDataBuffer();
@@ -161,21 +170,34 @@
try {
evioEvent = reader.parseNextEvent();
} catch (java.nio.BufferUnderflowException e) {
- System.out.println("Caught underflow!");
+ if (debug)
+ System.out.println("Caught underflow!");
}
if (evioEvent == null) {
- System.out.println("Failed to build EVIO event <" + eventCount + ">. Skipping this EtEvent!");
+ if (debug)
+ System.out.println("Failed to build EVIO event. Skipping this EtEvent!");
continue;
}
-
+
// Create LCSim event from EVIO data.
+ if (debug)
+ System.out.println("building lcsim event");
+ long lcsimStartTime = System.nanoTime();
EventHeader lcsimEvent = eventBuilder.makeLCSimEvent(evioEvent);
// Make a new event for DriverAdapter.
RecordSuppliedEvent loopEvent = new RecordSuppliedEvent(new Object(), lcsimEvent);
// Call process methods via Driver Adapter.
+ if (debug)
+ System.out.println("running lcsim");
driverAdapter.recordSupplied(loopEvent);
+ long lcsimEndTime = System.nanoTime();
+ long lcsimEventTime = lcsimEndTime - lcsimStartTime;
+ if (debug)
+ System.out.println("lcsim proc time [ns]: " + lcsimEventTime);
+
+ //System.out.println("done running lcsim");
// Update elapsed time.
gui.updateElapsedTime();
@@ -183,7 +205,8 @@
// Update the average event rate in the GUI.
gui.updateAverageEventRate();
}
-
+ if (debug)
+ System.out.println("putting events back");
// Put events back into the ET system.
sys.putEvents(att, mevs);
}
hps-java/src/main/java/org/lcsim/hps/monitoring
diff -u -r1.1 -r1.2
--- MonitoringGui.java 22 Mar 2012 22:03:35 -0000 1.1
+++ MonitoringGui.java 25 Mar 2012 07:23:20 -0000 1.2
@@ -23,19 +23,25 @@
public class MonitoringGui extends JPanel implements ActionListener {
- private JButton resetButton;
- private JButton saveButton;
- private JButton quitButton;
private JTextField eventCounterField;
private JTextField elapsedTimeField;
//private JTextField eventRateField;
private JTextField avgEventRateField;
+ private JTextField refreshField;
private DecimalFormat rateFormat = new DecimalFormat("#.##");
-
+
+ private JButton resetButton;
+ private JButton saveButton;
+ private JButton quitButton;
+
private static JobControlManager jobMgr;
private static MonitoringGui monitoringGui;
+ // Refresh every 1000 events by default.
+ private int eventRefresh = 1000;
+
private long jobStartTime;
+ private int eventCount;
MonitoringGui() {
@@ -131,6 +137,24 @@
avgEventRateField.setEditable(false);
avgEventRateField.setBackground(Color.WHITE);
fieldsPanel.add(avgEventRateField, c);
+
+ c = new GridBagConstraints();
+ c.gridx = 0;
+ c.gridy = 3;
+ c.anchor = GridBagConstraints.WEST;
+ JLabel refreshLabel = new JLabel("Event Refresh:");
+ refreshLabel.setHorizontalAlignment(JLabel.LEFT);
+ fieldsPanel.add(refreshLabel, c);
+
+ c = new GridBagConstraints();
+ c.gridx = 1;
+ c.gridy = 3;
+ c.anchor = GridBagConstraints.EAST;
+ refreshField = new JTextField(Integer.toString(eventRefresh), 4);
+ refreshField.setHorizontalAlignment(JTextField.RIGHT);
+
+ fieldsPanel.add(refreshField, c);
+
// Button padding.
Insets buttonInsets = new Insets(1, 1, 1, 1);
@@ -168,7 +192,7 @@
quitButton.setToolTipText("Quit the job.");
buttonsPanel.add(quitButton, c);
}
-
+
public static MonitoringGui getMonitoringGui() {
return MonitoringGui.monitoringGui;
}
@@ -177,27 +201,48 @@
MonitoringGui.jobMgr = jobMgr;
}
- public void incrEventCount() {
- int e = Integer.parseInt(eventCounterField.getText());
- e += 1;
- eventCounterField.setText(Integer.toString(e));
+ public int getEventCount() {
+ return eventCount;
+ }
+
+ public int getEventRefresh() {
+ return Integer.parseInt(refreshField.getText());
+ }
+
+ public void updateEventCount() {
+ ++eventCount;
+ if (updateEvent()) {
+ eventCounterField.setText(Integer.toString(eventCount));
+ }
}
public void updateJobStartTime() {
this.jobStartTime = System.currentTimeMillis();
}
- public void updateAverageEventRate() {
- double avgProcTime = (System.currentTimeMillis() - jobStartTime) / Double.parseDouble(eventCounterField.getText());
- double avgEventRate = 1000 / avgProcTime;
- avgEventRateField.setText(rateFormat.format(avgEventRate));
+ public boolean updateEvent() {
+ return (eventCount % getEventRefresh()) == 0;
}
+ public void updateAverageEventRate() {
+ if (updateEvent()) {
+ double jobTime = System.currentTimeMillis() - jobStartTime;
+ if (jobTime > 0) {
+ double avgProcTime = jobTime / eventCount;
+ double avgEventRate = 10e3 / avgProcTime;
+ avgEventRateField.setText(rateFormat.format(avgEventRate));
+ }
+ }
+ }
+
public void updateElapsedTime() {
- this.elapsedTimeField.setText(Long.toString(System.currentTimeMillis() - jobStartTime));
+ if (updateEvent()) {
+ this.elapsedTimeField.setText(Long.toString(System.currentTimeMillis() - jobStartTime));
+ }
}
-
+
private void resetEventCount() {
+ eventCount = 0;
eventCounterField.setText("0");
}
hps-java/src/main/resources/org/lcsim/hps/steering
diff -u -r1.1 -r1.2
--- EtSensorOccupancy.lcsim 24 Mar 2012 00:06:49 -0000 1.1
+++ EtSensorOccupancy.lcsim 25 Mar 2012 07:23:21 -0000 1.2
@@ -11,19 +11,17 @@
<execute>
<driver name="SVTSetupDriver"/>
<driver name="EventMarkerDriver"/>
- <driver name="OccupancyPlots"
+ <driver name="OccupancyPlots"/>
</execute>
<drivers>
- <driver name="SVTSetupDriver"
- type="org.lcsim.hps.recon.tracking.HPSSVTSensorSetup">
+ <driver name="SVTSetupDriver" type="org.lcsim.hps.recon.tracking.HPSSVTSensorSetup">
</driver>
- <driver name="EventMarkerDriver"
- type="org.lcsim.job.EventMarkerDriver">
- <eventInterval>1</eventInterval>
+ <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
+ <eventInterval>10000</eventInterval>
</driver>
- <driver name="OccupancyPlots">
- type="org.lcsim.hps.monitoring.SensorOccupancyPlotsDriver">
- <eventRefreshRate>10</eventRefreshRate>
+ <driver name="OccupancyPlots" type="org.lcsim.hps.monitoring.SensorOccupancyPlotsDriver">
+ <debug>false</debug>
+ <eventRefreshRate>4000</eventRefreshRate>
</driver>
</drivers>
-</lcsim>
+</lcsim>
\ No newline at end of file
CVSspam 0.2.12