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

WidgetFunctionalityParametersIs-a DependencyComments


GWViewmoving/zooming viewport for scenerscene, origin='UL', scale_ctl='HV'GWView < QGraphicsView



GWViewExt+ adds update speed and signals to GWView+ signal_fastGWViewExt < GWView



GWViewImage+ QPixmap to QGraphicsScene of GWViewExt
GWViewImage < GWViewExt



GWViewHist+ Histogram to ...
GWViewHist < GWViewExt



GWViewAxis+ Axis to ...
GWViewAxis < GWViewExt



GWViewColorBar+ ColorBar to ...
GWViewColorBar < GWViewExt



GWImageAxesQWidget with image and x-y axes
GWImageAxes < QWidget



GWSpectrumQWidget with histogram x-y axes and color bar
GWSpectrum < QWidget



GWViewImageROI+ ROI to GWImageAxes
GWViewImageROI < GWImageAxes











Control

Handles and ROI

Control Handles

Handle TypeFunctionalityParametersIs-a DependencyComments
OriginROI origin position


TranslationHandle for entire ROI translation


RotationHandle for ROI rotation


MoveHandle for moving of particular ROI's point


MenuPop-up menu on mouse click

Invert/delete/change lookout
CenterThe same as Move?


Q: Anything else?



ROI

ROI TypeFunctionalityParametersIs-a DependencyComments
Pixelsingle pixel maskposition

Linepixels along lineposition1, 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

  1. 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...
  2. 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



  • No labels