Skip to content

Commit

Permalink
Merge pull request #204 from zhujun98/make_special_suite_more_self_co…
Browse files Browse the repository at this point in the history
…ntained

Make special suite more self-contained
  • Loading branch information
zhujun98 committed May 14, 2020
2 parents 575e58e + 2a96598 commit 6a23b12
Show file tree
Hide file tree
Showing 28 changed files with 144 additions and 95 deletions.
3 changes: 0 additions & 3 deletions extra_foam/logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,3 @@ def create_logger(name):

logger_stream = create_logger("EXtra-foam-stream")
logger_stream.setLevel(logging.INFO)

logger_suite = create_logger("EXtra-foam-special-suite")
logger_suite.setLevel(logging.INFO)
21 changes: 20 additions & 1 deletion extra_foam/special_suite/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,20 @@
from .facade import SpecialSuiteController
from PyQt5.QtWidgets import QApplication

import logging

from extra_foam import __version__
from extra_foam.logger import create_logger


logger = create_logger("EXtra-foam-special-suite")
logger.setLevel(logging.INFO)


def mkQApp(args=None):
app = QApplication.instance()
if app is None:
if args is None:
return QApplication([])
return QApplication(args)

return app
2 changes: 1 addition & 1 deletion extra_foam/special_suite/cam_view_w.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@
from PyQt5.QtGui import QIntValidator
from PyQt5.QtWidgets import QSplitter

from extra_foam.gui.plot_widgets import HistMixin, ImageViewF, PlotWidgetF
from extra_foam.gui.ctrl_widgets.smart_widgets import (
SmartBoundaryLineEdit, SmartLineEdit, SmartStringLineEdit
)
from extra_foam.gui.plot_widgets import HistMixin, ImageViewF, PlotWidgetF

from .cam_view_proc import (
CamViewProcessor, _DEFAULT_N_BINS, _DEFAULT_BIN_RANGE
Expand Down
58 changes: 48 additions & 10 deletions extra_foam/special_suite/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,56 @@
Copyright (C) European X-Ray Free-Electron Laser Facility GmbH.
All rights reserved.
"""
import collections

import numpy as np

_MAX_N_PULSES_PER_TRAIN = 2700
from extra_foam.config import config as _core_config


class Config(collections.abc.Mapping):

__data = {
"TOPIC": "",
"MAX_N_PULSES_PER_TRAIN": 2700,
"EXTENSION_PORT": _core_config["EXTENSION_PORT"],
"USE_KARABO_GATE_CLIENT": False,
"DEFAULT_CLIENT_PORT": 45454,
"CLIENT_TIME_OUT": 0.1, # second
# initial (width, height) of a special analysis window
"GUI_SPECIAL_WINDOW_SIZE": (1680, 1080),
# interval for polling new processed data, in milliseconds
"GUI_PLOT_UPDATE_TIMER": 10,
}

def __getitem__(self, idx):
"""Overload."""
return self.__data.__getitem__(idx)

def __iter__(self):
"""Overload."""
return self.__data.__iter__()

def __len__(self):
"""overload."""
return self.__data.__len__()

def load(self, topic, **kwargs):
self.__data.__setitem__("TOPIC", topic)

for k, v in kwargs.items():
if k in self:
self.__data.__setitem__(k, v)
else:
raise KeyError

@property
def topics(self):
return _core_config.topics + ('DET',)


config = Config()


_MAX_INT32 = np.iinfo(np.int32).max
_MIN_INT32 = np.iinfo(np.int32).min
Expand All @@ -24,12 +71,3 @@
"MID": "MID_EXP_DES/DET/GOTTHARD_RECEIVER:daqOutput",
"SCS": "SCS_PAM_XOX/DET/GOTTHARD_RECEIVER1:daqOutput",
}

_DEFAULT_CLIENT_PORT = 45454

_CLIENT_TIME_OUT = 0.1 # second

# initial (width, height) of a special analysis window
_GUI_SPECIAL_WINDOW_SIZE = (1680, 1080)
# interval for polling new processed data, in milliseconds
_GUI_PLOT_UPDATE_TIMER = 10
5 changes: 3 additions & 2 deletions extra_foam/special_suite/facade.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
QGridLayout, QLabel, QMainWindow, QVBoxLayout, QWidget
)

from extra_foam.gui.gui_helpers import create_icon_button

from . import __version__
from .cam_view_w import CamViewWindow
from .multicam_view_w import MultiCamViewWindow
from .gotthard_w import GotthardWindow
Expand All @@ -22,8 +25,6 @@
from .xas_tim_w import XasTimWindow
from .xas_tim_xmcd_w import XasTimXmcdWindow
from .module_scan_w import ModuleScanWindow
from ..gui.gui_helpers import create_icon_button
from .. import __version__


class SpecialSuiteController:
Expand Down
2 changes: 1 addition & 1 deletion extra_foam/special_suite/gotthard_proc.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
from extra_foam.algorithms import hist_with_stats
from extra_foam.pipeline.data_model import MovingAverageArray

from .special_analysis_base import ProcessingError, profiler, QThreadWorker
from .config import _MAX_INT32, _PIXEL_DTYPE
from .special_analysis_base import ProcessingError, profiler, QThreadWorker

_DEFAULT_N_BINS = 10
_DEFAULT_BIN_RANGE = "-inf, inf"
Expand Down
2 changes: 1 addition & 1 deletion extra_foam/special_suite/gotthard_pump_probe_proc.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@

from extra_foam.pipeline.data_model import MovingAverageArray

from .special_analysis_base import profiler, ProcessingError, QThreadWorker
from .config import _PIXEL_DTYPE
from .special_analysis_base import profiler, ProcessingError, QThreadWorker


class GotthardPpProcessor(QThreadWorker):
Expand Down
6 changes: 3 additions & 3 deletions extra_foam/special_suite/gotthard_pump_probe_w.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,18 @@
from PyQt5.QtGui import QIntValidator
from PyQt5.QtWidgets import QSplitter

from extra_foam.gui.plot_widgets import ImageViewF, PlotWidgetF
from extra_foam.gui.misc_widgets import FColor
from extra_foam.gui.ctrl_widgets import (
SmartLineEdit, SmartSliceLineEdit, SmartStringLineEdit
)
from extra_foam.gui.misc_widgets import FColor
from extra_foam.gui.plot_widgets import ImageViewF, PlotWidgetF

from .config import _MAX_N_GOTTHARD_PULSES, GOTTHARD_DEVICE
from .gotthard_pump_probe_proc import GotthardPpProcessor
from .special_analysis_base import (
create_special, QThreadKbClient, _BaseAnalysisCtrlWidgetS,
_SpecialAnalysisBase
)
from .config import _MAX_N_GOTTHARD_PULSES, GOTTHARD_DEVICE


class GotthardPpCtrlWidget(_BaseAnalysisCtrlWidgetS):
Expand Down
10 changes: 5 additions & 5 deletions extra_foam/special_suite/gotthard_w.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,23 +13,23 @@
from PyQt5.QtGui import QDoubleValidator, QIntValidator
from PyQt5.QtWidgets import QCheckBox, QSplitter

from extra_foam.gui.plot_widgets import (
HistMixin, ImageViewF, PlotWidgetF
)
from extra_foam.gui.misc_widgets import FColor
from extra_foam.gui.ctrl_widgets.smart_widgets import (
SmartBoundaryLineEdit, SmartLineEdit, SmartSliceLineEdit,
SmartStringLineEdit
)
from extra_foam.gui.misc_widgets import FColor
from extra_foam.gui.plot_widgets import (
HistMixin, ImageViewF, PlotWidgetF
)

from .config import _MAX_N_GOTTHARD_PULSES, GOTTHARD_DEVICE
from .gotthard_proc import (
GotthardProcessor, _DEFAULT_BIN_RANGE, _DEFAULT_N_BINS
)
from .special_analysis_base import (
create_special, QThreadKbClient, _BaseAnalysisCtrlWidgetS,
_SpecialAnalysisBase
)
from .config import _MAX_N_GOTTHARD_PULSES, GOTTHARD_DEVICE

_MAX_N_BINS = 999

Expand Down
5 changes: 3 additions & 2 deletions extra_foam/special_suite/multicam_view_w.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,14 @@

from PyQt5.QtWidgets import QGridLayout, QWidget

from extra_foam.gui.ctrl_widgets.smart_widgets import SmartLineEdit
from extra_foam.gui.plot_widgets import ImageViewF

from .multicam_view_proc import MultiCamViewProcessor
from .special_analysis_base import (
create_special, QThreadKbClient, _BaseAnalysisCtrlWidgetS,
_SpecialAnalysisBase
)
from ..gui.plot_widgets import ImageViewF
from ..gui.ctrl_widgets.smart_widgets import SmartLineEdit


_N_CAMERAS = 4
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,17 @@
import argparse
import faulthandler

from . import __version__
from . import logger, mkQApp, __version__
from .config import config
from .logger import logger_suite as logger
from .gui import mkQApp
from .special_suite import SpecialSuiteController
from .facade import SpecialSuiteController


def application():
parser = argparse.ArgumentParser(prog="extra-foam-special-suite")
parser.add_argument('-V', '--version', action='version',
version="%(prog)s " + __version__)
parser.add_argument("topic", help="Name of the instrument",
choices=config.topics + ('DET',),
choices=config.topics,
type=lambda s: s.upper())
parser.add_argument('--debug', action='store_true',
help="Run in debug mode")
Expand Down
37 changes: 18 additions & 19 deletions extra_foam/special_suite/special_analysis_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,31 +22,27 @@
from PyQt5.QtGui import QColor, QIntValidator
from PyQt5.QtWidgets import (
QCheckBox, QFileDialog, QFormLayout, QFrame, QGridLayout, QLabel,
QMainWindow, QPushButton, QSizePolicy, QSplitter, QWidget
QMainWindow, QPushButton, QSizePolicy, QSplitter
)

from extra_data import RunDirectory
from karabo_bridge import Client as KaraboBridgeClient

from extra_foam import __version__
from extra_foam.algorithms import intersection
from extra_foam.config import config as __core_config
from extra_foam.database import SourceCatalog
from extra_foam.gui.ctrl_widgets import _SingleRoiCtrlWidget, SmartLineEdit
from extra_foam.gui.plot_widgets import ImageViewF
from extra_foam.gui.misc_widgets import GuiLogger, set_button_color
from extra_foam.logger import logger_suite as logger
from extra_foam.pipeline.f_queue import SimpleQueue
from extra_foam.pipeline.f_transformer import DataTransformer
from extra_foam.pipeline.f_zmq import FoamZmqClient
from extra_foam.pipeline.exceptions import ProcessingError

_EXTENSION_PORT = __core_config["EXTENSION_PORT"]
from . import __version__

from .config import (
_IMAGE_DTYPE, _DEFAULT_CLIENT_PORT, _CLIENT_TIME_OUT,
_GUI_PLOT_UPDATE_TIMER, _GUI_SPECIAL_WINDOW_SIZE
)

from . import logger
from .config import _IMAGE_DTYPE, config


class _SharedCtrlWidgetS(QFrame):
Expand Down Expand Up @@ -75,7 +71,7 @@ def __init__(self, parent=None, *, with_dark=True, with_levels=True):

self._hostname_le = SmartLineEdit("127.0.0.1")
self._hostname_le.setMinimumWidth(100)
self._port_le = SmartLineEdit(str(_DEFAULT_CLIENT_PORT))
self._port_le = SmartLineEdit(str(config["DEFAULT_CLIENT_PORT"]))
self._port_le.setValidator(QIntValidator(0, 65535))

self.start_btn = QPushButton("Start")
Expand Down Expand Up @@ -573,8 +569,8 @@ def onResetST(self):
def updateParamsST(self, params):
"""Update internal states of the client."""
self._endpoint_st = params["endpoint"]
ctl = self._catalog_st

ctl = self._catalog_st
ctl.clear()
for name, ppt in params["sources"]:
ctl.add_item(None, name, None, ppt, None, None)
Expand All @@ -588,7 +584,7 @@ def run(self):
self.onResetST()

with self._client_instance_type(
self._endpoint_st, timeout=_CLIENT_TIME_OUT) as client:
self._endpoint_st, timeout=config["CLIENT_TIME_OUT"]) as client:

self.log.info(f"Connected to {self._endpoint_st}")

Expand Down Expand Up @@ -629,7 +625,7 @@ def run(self):
self.onResetST()

with self._client_instance_type(
self._endpoint_st, timeout=_CLIENT_TIME_OUT) as client:
self._endpoint_st, timeout=config["CLIENT_TIME_OUT"]) as client:
self.log.info(f"Connected to {self._endpoint_st}")
correlated = None
while not self.isInterruptionRequested():
Expand Down Expand Up @@ -676,7 +672,7 @@ class _SpecialAnalysisBase(QMainWindow):
It should be inherited by all concrete windows.
"""

_TOTAL_W, _TOTAL_H = _GUI_SPECIAL_WINDOW_SIZE
_TOTAL_W, _TOTAL_H = config["GUI_SPECIAL_WINDOW_SIZE"]

started_sgn = pyqtSignal()
stopped_sgn = pyqtSignal()
Expand All @@ -690,7 +686,8 @@ def __init__(self, topic, **kwargs):

self._topic_st = topic

self.setWindowTitle(f"EXtra-foam {__version__} - {self._title}")
self.setWindowTitle(f"EXtra-foam {__version__} - " +
f"special suite - {self._title}")

self._com_ctrl_st = _SharedCtrlWidgetS(**kwargs)

Expand All @@ -703,10 +700,12 @@ def __init__(self, topic, **kwargs):
self._ctrl_widget_st = self._ctrl_instance_type(topic)

if isinstance(self._client_st, QThreadFoamClient):
self._com_ctrl_st.updateDefaultPort(_EXTENSION_PORT)
self._com_ctrl_st.updateDefaultPort(config["EXTENSION_PORT"])

self._plot_widgets_st = WeakKeyDictionary() # book-keeping plot widgets
self._image_views_st = WeakKeyDictionary() # book-keeping ImageView widget
# book-keeping plot widgets
self._plot_widgets_st = WeakKeyDictionary()
# book-keeping ImageView widget
self._image_views_st = WeakKeyDictionary()

self._data_st = None

Expand All @@ -718,7 +717,7 @@ def __init__(self, topic, **kwargs):
self.setCentralWidget(self._cw_st)

self._plot_timer_st = QTimer()
self._plot_timer_st.setInterval(_GUI_PLOT_UPDATE_TIMER)
self._plot_timer_st.setInterval(config["GUI_PLOT_UPDATE_TIMER"])
self._plot_timer_st.timeout.connect(self.updateWidgetsST)

# init UI
Expand Down
3 changes: 1 addition & 2 deletions extra_foam/special_suite/tests/test_camview.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,9 @@
from PyQt5.QtCore import Qt
from PyQt5.QtTest import QSignalSpy, QTest

from extra_foam.logger import logger_suite as logger
from extra_foam.gui import mkQApp
from extra_foam.pipeline.tests import _RawDataMixin

from extra_foam.special_suite import logger, mkQApp
from extra_foam.special_suite.cam_view_proc import CamViewProcessor
from extra_foam.special_suite.cam_view_w import (
CamViewWindow, CameraView, CameraViewRoiHist
Expand Down
3 changes: 1 addition & 2 deletions extra_foam/special_suite/tests/test_facade.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import unittest

from extra_foam.logger import logger_suite as logger
from extra_foam.gui import mkQApp
from extra_foam.special_suite import logger, mkQApp
from extra_foam.special_suite.facade import _SpecialSuiteFacadeBase


Expand Down

0 comments on commit 6a23b12

Please sign in to comment.