Skip to content

zdomke/sc_mps_gui

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

# SC MPS Display  

## Directory Structure  
.  
|-- README  
|-- RELEASE_NOTES  
|-- sc_mps_gui.bash  
`-- gui/  
    |-- mps_cud_main.ui  
    |-- mps_gui_main.ui  
    |-- mps_gui_main.py  
    |-- enums.py  
    |-- mixins/  
    |   |-- __init__.py  
    |   |-- summary.py  
    |   |-- logic.py  
    |   |-- selection_detail.py  
    |   |-- ignore.py  
    |   |-- app_status.py  
    |   `-- configure.py  
    |-- models_pkg/  
    |   |-- __init__.py  
    |   |-- mps_model.py  
    |   |-- logic_model.py
    |   |-- app_status_model.py
    |   `-- configure_model.py
    `-- resources/  
        |-- __init__.py  
        |-- mps_permit_panel.ui  
        |-- widgets.py  
        |-- conf_def_embed.ui  
        |-- conf_err_embed.ui  
        |-- conf_bpm_embed.py  
        `-- conf_bpm_embed.ui  


### sc_mps_gui.bash  
  - Run the MPS Display with the specified DB file (if one is specified)  
  - Usage:  
    `` sc_mps_gui.bash [ -c | --cud ] [ -d | --dbfile filename ] ``  

  - Examples:  
    `` sc_mps_gui.bash ``  

    - To use a specific SQLite database:  
      `` sc_mps_gui.bash -d faults.db ``  
      `` sc_mps_gui.bash --dbfile faults.db ``  

    - To use "CUD mode":
      `` sc_mps_gui.bash -c ``  
      `` sc_mps_gui.bash --cud ``  


### mps_gui_main.py & mps_gui_main.ui & mps_cud_main.ui 
  - This is the main display for the SC MPS Display  
  - Contains a tab widget with 4 tabs:  
    - The Summary tab contains 6 embedded displays, 3 'check engine lights', and 2 tables, one containing faulted PVs and one containing bypassed faults  
    - The Logic tab contains a table of all faults in the database  
      - The searchbar shows only faults containing that substring  
      - The checkbox shows the user all inactive faults  
      - Selecting a fault opens a panel with more details on that fault  
    - The Ignore Logic tab displays which faults are ignored and the conditions in which they are ignored  
    - The Configure tab allows the user to set thresholds for multiple devices at once  
  - mps_cud_main.ui is the UI for the CUD mode, consisting of the
    summary tab contents (without interactivity) in a CUD-ified UI


### enums.py  
  - Contains enums for use in the application  
  - Used by the Selection Details and the Configure tab  


### summary.py  
  - This file contains a python mixin to manage the Summary tab  
  - Manage the faults table and the bypass table  
  - Right-clicking a fault allows the user to open more details in the Logic tab  
  - Middle-clicking a fault copies the fault's name or fault's pv based on which column is clicked  
  - Minor interactions with Logic tab:  
    - When a fault is right-clicking
    - On fault status change and/or bypass status change, alter the associated cell in Logic tab table  
    - When a fault is right-clicked, present an option to open the fault in the Logic tab  


### logic.py  
  - This file contains a python mixin to manage the Logic tab  
  - Manage the logic table and open a details pane when a fault is selected  
  - Allow for searching and sorting in the main table  
  - Allow the user to filter out all inactive faults
  - Faults can be bypassed from the selection details pane  
  - Middle-clicking a fault copies the fault's name or fault's pv based on which column is clicked  


### selection_detail.py  
  - Manage the Selection Details section used in the Logic tab  
  - The section is shown and populated when a selection is made in the logic table  
  - Details shown:  
    - Name  
    - Current State  
    - Ignore Conditions  
    - Truth Table  
    - PV Table  


### ignore.py  
  - This file contains a python mixin to manage the Ignore Logic tab  
  - Right-clicking a fault allows the user to open more details in the Logic tab  
  - Middle-clicking a fault copies the fault's name or fault's pv based on which column is clicked  


### app_status.py  
  - This file contains a python mixin to manage the App Status tab  
  - Show all apps and their Link Node, Location, Slot, ID, Type, and Status  
  - Includes Related Display Buttons to open the app's MPS Group  


### configure.py  
  - This file contains the python mixin to manage the Configure tab 
  - Manage the table of all devices and add/remove them from the selected devices table on user interaction  
  - When devices are (un)selected, sets the macros and file for the embedded display on the right  
  - Display 'error' file when multiple device types are selected or an unsupported device type  
  - Supported Device Types:  
    - BPMS  


### mps_model.py  
  - Using MPSConfig, establish a connection to the MPS Database  
    - If a filename is not provided, then MPSModel will locate the default file to use  
  - The object stores all necessary information from the database  


### logic_model.py  
  - Create a custom QAbstractTableModel, QSortFilterProxyModel, and QStyledItemDelegate for use in the Logic tab and Summary tab  


### app_status_model.py  
  - Create a custom QAbstractTableModel for managing all MPS Apps used by the App Status tab  
  - Create a custom QStyledItemDelegate to create PyDMRelatedDisplayButtons for each application  


### configure_model.py  
  - Create a custom QAbstractTableModel used to manage the table of all devices and selected devices in the Configure tab  


### mps_permit_panel.ui  
  - The permit panel display embedded in the Summary tab  
  - Shows the Beam Class, Timing Beam Class, and Timing Rate  


### widgets.py  
  - Contains two subclasses of PyDM widgets that are used by the Configure tab  
  - PyDMMultiCheckbox:  
    - A PyDMCheckbox that connects to multiple channels  
    - Only checked if all channels are True  
  - PyDMMultiLineEdit:  
    - A PyDMLineEdit that connects to multiple channels  


### conf_def_embed.ui & conf_err_embed.ui  
  - Static files that display messages to the user  


### conf_bpm_embed.py & conf_bpm_embed.ui  
  - Allow the user to alter the threshold values on the selected BPMS(s)  
  - Make use of subclassed PyDM Widgets to write to multiple channels at once