Pre-history of graphical applications
"All creatures great and small..."
LCLS
Most of them implemented in python using PyQt widgets and graphics in matplotlib
- calibman - calibration constant producer and manager, motivated by Amedeo Perazzo
- hdf5explorer - hdf5 file browser, motivated by Marc Messerschmidt
- corana - pipeline control and presenter for time correlation analysis, motivated by Marcin Sikorski
- loggrabber - weblogger population tool, motivated by Igor Gaponenko
- plims - image plotter
- med - mask editor
- iv - image viewer with PyQt graphics
- geo - PyQt in C++ - geometry alignment tool
LCLS-II
All of them implemented in python using PyQt widgets for GUI and graphics
- calibman - calibration constant monitoring and management in MongoDB
- hdf5explorer - survived part after LCLS
- timeconverter - converter between UNIX epoch seconds and human readable date-time
- screengrabber - screen grabber - survived aftyer LCLS loggrabber
- DAQ Control GUI
- iv - adapted from LCLS almost as is
- med - this project, official approval date 2023-05-23
Code location
- Modules: lcls2/psana/psana/graphqt/GW*.py and other
- Examples: lcls2/psana/psana/graphqt/examples/ex_GW*.py and other
PyQt Widgets
GWView
GWViewExt
GWViewImage
GWViewHist
GWViewAxis
GWViewColorBar
GWImageAxes
GWSpectrum
GWViewImageROI
Summary for Widgets
Widget | Functionality | Parameters | Is-a Dependency | Comments | |||
---|---|---|---|---|---|---|---|
GWView | moving/zooming viewport for scene | rscene, origin='UL', scale_ctl='HV' | GWView < QGraphicsView | ||||
GWViewExt | + adds update speed and signals to GWView | + signal_fast | GWViewExt < GWView | ||||
GWViewImage | + QPixmap to QGraphicsScene of GWViewExt | GWViewImage < GWViewExt | |||||
GWViewHist | + Histogram to ... | GWViewHist < GWViewExt | |||||
GWViewAxis | + Axis to ... | GWViewAxis < GWViewExt | |||||
GWViewColorBar | + ColorBar to ... | GWViewColorBar < GWViewExt | |||||
GWImageAxes | QWidget with image and x-y axes | GWImageAxes < QWidget | |||||
GWSpectrum | QWidget with histogram x-y axes and color bar | GWSpectrum < QWidget | |||||
GWViewImageROI | + ROI to GWImageAxes | GWViewImageROI < GWImageAxes | |||||
Control
Handles and ROI
Control Handles
Handle Type | Functionality | Parameters | Is-a Dependency | Comments |
---|---|---|---|---|
Origin | ROI origin position | |||
Translation | Handle for entire ROI translation | |||
Rotation | Handle for ROI rotation | |||
Move | Handle for moving of particular ROI's point | |||
Menu | Pop-up menu on mouse click | Invert/delete/change lookout | ||
Center | The same as Move? | |||
Q: Anything else? |
ROI
ROI Type | Functionality | Parameters | Is-a Dependency | Comments |
---|---|---|---|---|
Pixel | single pixel mask | position | ||
Line | pixels along line | position1, position2 | Q: width? | |
Rectangle | position(T,L), size (W,H), rotation | |||
Ellipse | position(center), size (W,H), rotation | |||
Closed Polyline | position[N-points] | |||
Arche | 3-points like in AMI2 | |||
Q: Circle? | position and radius | Q: subcase of Ellipse | ||
Q: Square? | position, size, rotation | Q: subcase of Rectangle | ||
Q: Polygone? | Q: subcase of Polyline | |||
Q: Anything else? |
Behavior
Q: how many handles per ROI - minimal or in each corner?
Q: how to add ROI to image
- select ROI type from GUI - draws default ROI - then move and re-shape it (like in ami2 or Chuck's Psocake) - intuitive but needs more clicks...
- select ROI type from GUI - then click and drag on image - less intuitive but less number of clicks (like in Power point, AutoCAD)
Q: what is the most convenient control behavior?
- mask on/off - shows image with/without ROIs
- in regular case ROIs are shown by boarder lines only
- on mouse click close to ROI boarder line > control points shows-up/disappears for one ROI at a time
- click and drag handle to change ROI position/size/rotation or see a menu of actions
- bottom to convert ROIs to mask
Implementation pattern
- factory for control handles
- factory for ROIs
References
Overview
Content Tools