schrodinger.application.matsci.mswidgets module

Contains widgets that are useful in MatSci panels.

Copyright Schrodinger, LLC. All rights reserved.

class schrodinger.application.matsci.mswidgets.SavedASLItem(text, asl)

Bases: PyQt6.QtWidgets.QWidget

Widget that includes atomselector.ASLItem and a button for deleting the asl

itemClicked

pyqtSignal(*types, name: str = …, revision: int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

deleteClicked

pyqtSignal(*types, name: str = …, revision: int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

__init__(text, asl)
Parameters
  • text (str) – Display text of the asl item

  • asl (str) – Asl of the item

class schrodinger.application.matsci.mswidgets.MSAtomSelector(master, title, status_label=True, get_name_func=None, set_name_func=None, command=None, flat=False, layout=None, **kwargs)

Bases: schrodinger.ui.qt.atomselector.AtomSelector, schrodinger.ui.qt.widgetmixins.basicmixins.MessageBoxMixin, schrodinger.ui.qt.swidgets.ItemsManagerMixin

Modify the parent class to support saving ASLs, make the reset button clear asl text only, and add a status label if needed.

ASL_NOT_ALLOWED = {'entry.id', 'entry.name', 'set'}
ASL_ITEMS = {'Displayed Atoms': 'displayed_atoms', 'Heavy Atoms': 'heavy_atoms', 'Hydrogens-All': 'all_hydrogens', 'Hydrogens-Nonpolar': 'non_polar_hydrogens', 'Hydrogens-Polar': 'polar_hydrogens', 'Ions': 'ions', 'Membrane': 'membrane', 'Metal Atoms': 'metals', 'Nucleic Acids': 'nucleic_acids', 'Protein': '(protein) and not ligand', 'Protein Backbone': '(backbone) and not ligand', 'Protein Side Chains': '(withinbonds 1 sidechain) and not ligand', 'Waters': 'water', 'Workspace Selection': 'workspace_selection'}
PREF_KEY = 'asl_selector_saved_asls'
PLUS_TIP_WITH_SAVE = '<nobr>Click to choose from saved ASLs, the Workspace </nobr>selection or predefined atom sets, or to open the Atom Selection dialog'
ITEM_TYPE_TEXT = 'ASL'
__init__(master, title, status_label=True, get_name_func=None, set_name_func=None, command=None, flat=False, layout=None, **kwargs)

See the parent class for documentation

Parameters
  • master (QWidget) – The parent of this atomselector widget

  • title (str) – label over atom selection box

  • status_label (bool) – If True, add a status label to indicate the number of selected atoms.

  • get_name_func (callable) – Function to call to get the suggested name for the asl. Should take no args and return a string.

  • set_name_func (callable) – Function to call to set the name for the selected saved ASL. Should take a string arg.

  • command (function or None) – Command to execute when the asl is modified. Signal is triggered only when editing finishes.

  • flat (bool) – Apply flat style to the groupbox, by default it is false in qt.

  • layout (QBoxLayout) – The layout to put this frame into

clearAslText()

Currently, the reset button is used to clear asl string

pickMolecule()

Set the pick_menu with pick molecule option.

checkASL(asl)

Check if asl contains sets, entry.id or entry.name

Parameters

asl (str) – asl in the line edit

validateAsl(struct=None)

Validate the ASL, optionally against a structure as well

Parameters

struct (structure.Structure or None) – The structure to validate the ASL against

Return type

bool

Returns

True if the ASL is valid, False otherwise

setupSaveWidgets()

Set up the widgets required for saving and loading ASLs

updateSavedASLs()

Update the saved asl items in the menu

aslItemClicked(asl, text=None)

Overwrite parent method to update the name in addition to the asl

Parameters
  • asl (str) – The asl for the item that was clicked

  • text (str) – The name for the item that was clicked

saveASL()

Save the current asl using the name the user provides

class schrodinger.application.matsci.mswidgets.StageFrame(master, layout=None, copy_stage=None, stage_type=None, icons=None)

Bases: schrodinger.ui.qt.swidgets.SFrame

The base frame for a stage in a MultiStageArea

Contains a Toolbutton for a title and some Window-manager-like control buttons in the upper right corner

STAGE_DELETED

pyqtSignal(*types, name: str = …, revision: int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

__init__(master, layout=None, copy_stage=None, stage_type=None, icons=None)

Create a DesmondStageFrame instance

Parameters
  • master (MultiStageArea) – The panel widget

  • layout (QLayout) – The layout the frame should be placed into

  • copy_stage (StageFrame) – The StageFrame this StageFrame should be a copy of. The default is None, which will create a new default stage.

  • stage_type – The type of stage to create, should be something meaningful to the subclass. The value is stored but not used in this parent class.

  • icons (set) – A set of module constants indicating which icons should be made into control buttons in the upper right corner. UP, DOWN, OPEN, CLOSE, DELETE, COPY

property icons
Return type

dict(str=QtGui.QIcon)

Returns

dictionary whose keys are the names of the stage icons and whose values are the icon widgets

layOut(copy_stage=None)

Lay out any custom widgets

Parameters

copy_stage (StageFrame) – The StageFrame this StageFrame should be a copy of. The default is None, which will create a new default stage.

initialize(copy_stage=None)

Perform any custom initialization before the widget is finalized

Parameters

copy_stage (StageFrame) – The StageFrame this StageFrame should be a copy of. The default is None, which will create a new default stage.

createControlButtons()

Create upper-right corner control buttons as requested by the user

toggleVisibility(checked=None, show=None)

Show or hide the stage

Parameters
  • checked (bool) – Not used, but swallows the PyQt clicked signal argument so that show doesn’t get overwritten

  • show (bool) – If True

updateLabel()

Set the label of the title button that toggles the stage open and closed

moveUp()

Move the stage up towards the top of the panel 1 stage

moveDown()

Move the stage down towards the bottom of the panel 1 stage

delete()

Delete this stage

copy()

Create a copy of this stage

reset()

Resets the parameters to their default values.

class schrodinger.application.matsci.mswidgets.MultiStageArea(layout=None, append_button=True, append_stretch=True, stage_class=<class 'schrodinger.application.matsci.mswidgets.StageFrame'>, control_all_buttons=False, start_staged=True)

Bases: PyQt6.QtWidgets.QScrollArea

A scrollable frame meant to hold multiple stages. See the MatSci Desmond Multistage Simulation Workflow as one example.

APPEND = 'Append Stage'
__init__(layout=None, append_button=True, append_stretch=True, stage_class=<class 'schrodinger.application.matsci.mswidgets.StageFrame'>, control_all_buttons=False, start_staged=True)

Create a MultiStageArea instance

Parameters
  • layout (QBoxLayout) – The layout to place this Area into

  • append_button (bool) – Whether to add an “Append Stage” button to a Horizontal layout below the scrolling area

  • append_button – Whether to add a QSpacer to the layout containing the append button. Use False if additional widgets will be added after creating the area.

  • stage_class (StageFrame) – The class used to create new stages

  • control_all_buttons (bool) – True if buttons to control the open/closed state of all stages should be added above the stage area, False if not. Note that if layout is not supplied, the top_control_layout will have to be added to a layout manually.

  • start_staged (bool) – Whether or not resetting this widget should populate the area with a stage. Defaults to True.

addStage(copy_stage=None, stage_type=None, **kwargs)

Add a new stage

Parameters
  • copy_stage (StageFrame) – The stage to copy. The default is None, which will create a new default stage.

  • stage_type – What type of stage to add. Must be dealt with in the StageFrame subclass

Return type

StageFrame

Returns

The newly created stage

Note

All other keyword arguments are passed to the stage class

getStageIndex(stage)

Return which stage number this is

Parameters

stage (StageFrame) – Returns the index for this stage in the stage list

Return type

int

Returns

The stage number (starting at 0)

moveStageUp(stage)

Shift the given stage up one stage

Parameters

stage (StageFrame) – The stage to move up

moveStageDown(stage)

Shift the given stage down one stage

Parameters

stage (StageFrame) – The stage to move down

moveStage(current, new)

Move the a stage

Parameters
  • current (int) – The current position of the stage

  • new (int) – The desired new position of the stage

copyStage(stage, **kwargs)

Create a copy of stage and add it directly below stage

Parameters

stage (StageFrame) – The stage to copy

Note

All keyword arguments are passed to addStage

deleteStage(stage, update=True)

Delete a stage

Parameters
  • stage (StageFrame) – The stage to be deleted

  • update (bool) – True if stage labels should be updated, False if not (use False if all stages are being deleted)

updateStageLabels(start_at=0)

Update stage labels - usually due to a change in stage numbering

Parameters

start_at (int) – All stages from this stage to the end of the stage list will be updated

reset()

Reset the stage area

expandAll()

Expand all stages

collapseAll()

Collapse all stages

class schrodinger.application.matsci.mswidgets.StageControlButton(icon, layout, command)

Bases: PyQt6.QtWidgets.QToolButton

The QToolButtons on the right of each StageFrame

__init__(icon, layout, command)

Create a StageControlButton instance

Parameters
  • icon (QIcon) – The icon for the button

  • layout (QLayout) – The layout the button should be placed in

  • command (callable) – The slot for the clicked() signal

class schrodinger.application.matsci.mswidgets.Divider(layout)

Bases: PyQt6.QtWidgets.QFrame

A raised divider line

__init__(layout)

Create a Divider instance

Parameters

layout (QLayout) – The layout the Divider should be added to

class schrodinger.application.matsci.mswidgets.SaveDesmondFilesWidget(combined_trj=False, layout=None, **kwargs)

Bases: schrodinger.ui.qt.swidgets.SFrame

Widget that provides options for saving intermediate Desmond job files.

__init__(combined_trj=False, layout=None, **kwargs)

Create an instance.

Parameters

combined_trj (bool) – Whether the checkbox for combining trajectory should be added.

Param

layout: Layout to add this widget to

getCommandLineArgs()

Return the command line flags to be used based on the widget state. Note that this expects driver classes to the parserutils.SAVE_FLAG with the allowed options found in parserutils.SAVE_FLAG_OPTS.

Returns

List of command line args to use

Return type

list

getSaveOptions()

Return the save options based on the widget state.

Returns

The save options

Return type

str

setFromCommandLineFlags(flags)

Set the state of these widgets from command line flag values

Parameters

flags (dict) – Keys are command line flags, values are flag values. For flags that take no value, the value is ignored - the presence of the key indicates the flag is present.

setWidgetState(value)

Set the state of save widgets based on the input value.

Parameters

value (str) – The value to set the save widgets to

reset()

Reset the frame

class schrodinger.application.matsci.mswidgets.RandomSeedWidget(layout=None, minimum=0, maximum=2147483647, default=1234, **kwargs)

Bases: schrodinger.ui.qt.swidgets.SCheckBoxWithSubWidget

Standardized checkbox with spinbox to provide option to specify random seed. The spinbox is hidden when the checkbox is not checked.

__init__(layout=None, minimum=0, maximum=2147483647, default=1234, **kwargs)
Parameters
  • layout (QtWidgets.QLayout) – Layout to add this widget to

  • minimum (int) – The minimum acceptable random seed value

  • maximum (int) – The maximum acceptable random seed value

  • default (int) – The default custom random seed value

getSeed()

Return the value specified in the spinbox.

Returns

seed for random number generator

Return type

int

getCommandLineFlag()

Return a list containing the proper random seed flag and argument specified by the state of this widget. Meant to be added onto a command list, e.g.:

cmd = [EXEC, infile_path]
cmd += rs_widget.getCommandLineFlag()
Returns

A list containing the random seed flag followed by either “random”, or the string representation of the seed specified in this widget’s spinbox.

Return type

list of two str

setFromCommandLineFlags(flags)

Set the state of these widgets from command line flag values

Parameters

flags (dict) – Keys are command line flags, values are flag values. For flags that take no value, the value is ignored - the presence of the key indicates the flag is present.

setWidgetFromSeed(seed)

Set the state of widget from the input seed value.

Parameters

seed (str) – The seed value to set the widget to

setVisible(state)

Overwrite the parent method to allow the checkbox state to control the visibility of the subwidget

class schrodinger.application.matsci.mswidgets.DefineASLDialog(master, help_topic='', show_markers=False, struct=None)

Bases: schrodinger.ui.qt.swidgets.SDialog

Manage defining an ASL.

__init__(master, help_topic='', show_markers=False, struct=None)

Create an instance.

Parameters
  • master (QtWidgets.QWidget) – the window to which this dialog should be WindowModal

  • help_topic (str) – an optional help topic

  • show_markers (bool) – whether to show the Markers checkbox

  • struct (schrodinger.structure.Structure) – an optional structure against which the ASL will be validated

layOut()

Lay out the widgets.

getAsl()

Return the ASL.

Return type

str

Returns

the ASL

getIndices()

If a structure was provided at instantiation then return the atom indices of the provided structure that match the specified ASL.

Return type

list

Returns

matching atom indices or None if no structure was provided

isValid()

Return True if valid, (False, msg) otherwise.

Return type

bool, pair tuple

Returns

True if valid, (False, msg) otherwise

accept()

Callback for the Accept (OK) button.

reject()

Callback for the Reject (Cancel) button.

reset()

Reset it.

class schrodinger.application.matsci.mswidgets.StructureLoader(master, label, maestro, parent_layout, *, max_title_len=25, allow_cms=False)

Bases: schrodinger.ui.qt.swidgets.SFrame

A set of widgets that allow the user to load a structure.

structure_changed

pyqtSignal(*types, name: str = …, revision: int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

WORKSPACE = 'Included entry'
FILE = 'From file'
BUTTON_TEXT = {'From file': 'Browse...', 'Included entry': 'Import'}
NOT_LOADED = 'Not loaded'
NOT_LOADED_TIP = 'Structure is not yet loaded'
DIALOG_ID = 'STRUCTURE_LOADER_IR'
__init__(master, label, maestro, parent_layout, *, max_title_len=25, allow_cms=False)

Create StructureLoader object.

Parameters
  • master (QWidget) – Master widget

  • label (str) – Label for the SLabeledComboBox widget

  • maestro (schrodinger.maestro.maestro) – Maestro instance

  • parent_layout (QLayout) – Parent layout

  • max_title_len (int) – Maximum length of the loaded entry label

  • allow_cms (bool) – Whether to try to read CMS and msys instead of structure

typeChanged()

React to a change in the type of scaffold

reset()

Reset the widgets

updateLabel()

Update the status label.

static getStructure(struct)

Return structure.

Parameters

struct (structure.Structure or desmondutils.DesmondModel) – Input structure

Return type

structure.Structure

Returns

Structure

loadStructure()

Load a structure from the selected source.

validate(struct)

Validate structure.

Parameters

struct (structure.Structure) – Structure to be validated

Return type

bool or bool and str

Returns

True if everything is fine, or False and error message

importFromWorkspace()

Import a structure from the workspace.

Return type

bool or None

Returns

True if a structure was loaded successfully, None if not

importFromFile()

Import a structure from a file, including opening the dialog to allow the user to select the file.

Return type

bool or None

Returns

True if the structure was loaded successfully, None if not

getMolecularWeight()

Get the molecular weight of the structure.

Returns

the molecular weight of the structure

Return type

float

class schrodinger.application.matsci.mswidgets.WaterTypesComboBox(ff_combo_box=None, **kwargs)

Bases: schrodinger.ui.qt.swidgets.SLabeledComboBox

Combobox containing all water molecule types available in msconst. Replaces the user-facing ‘None’ with ‘current’.

__init__(ff_combo_box=None, **kwargs)

Create the combobox.

Parameters

ff_combo_box (QtWidgets.QComboBox) – Forcefield QComboBox widget

updateValidWaterModels(name=None)

Update water combobox items based on water force field.

Parameters

name (str) – name of force-field

selectInitialModel(initial_model)

Update combobbox items to initially selected model

Parameters

initial_model (str) – name of the water force field

getWaterModelDict(is_opls_2005=False)

Get valid water models based on force field

Parameters

is_opls_2005 (bool) – True if OPLS2005 force field used else False

Return type

dict

Returns

Dictionary of valid water force field dict

class schrodinger.application.matsci.mswidgets.PlaneSelectorMixin

Bases: object

Set of widgets to create plane and directional arrow using various methods like best fit to selected atoms, crystal vector, and plane using 3 atoms.

NPX = array([1., 0., 0.])
NPY = array([0., 1., 0.])
NPZ = array([0., 0., 1.])
NPO = array([0., 0., 0.])
FIT_SELECTED_ATOMS = 'Best fit to selected atoms'
CRYSTAL_VECTOR = 'Crystal vector:'
CHOOSE_ATOMS = 'Choose at least 3 atoms to define the plane'
PLANE_SCALE = 2.0
addWidgetsToLayout(layout)

Add PlaneSelectorMixin widgets to the passed layout

Parameters

layout (QBoxLayout) – The layout to place this panel into

methodToggled()

React to the plane determination method being changed

flipDirection()

Flip the direction of the interface normal

getBuffer()

Get the buffer between the cell contents and the PBC boundary

Return type

float

Returns

The buffer space

pickToggled()

React to a change in state of the pick atom checkbox

atomPicked(asl)

React to the user picking another atom while defining the plane

Parameters

asl (str) – The asl defining the picked atom

clearPicked()

Clear all the picked atom information, including the WS markers

computePlaneFromAtoms(struct=None, atoms=None)

Compute the interface plane as the best fit plane to a set of atoms

Parameters
  • struct (schrodinger.structure.Structure) – The structure containing the atoms. If not given, the previously loaded structure will be used.

  • atoms (list) – List of atom indexes of the atoms to fit. If not given, all atoms will be fit.

updateArrowAndPlane()

Update the workspace arrow and plane to the new coordinates.

setStructure(struct)

Set the scaffold structure that will define the interface plane

Parameters

struct (schrodinger.structure.Structure) – The scaffold structure that will define the interface

loadStructureIntoWorkspace()

Put the loaded structure into the workspace so the user can view it

crystalVectorPicked()

React to the user choosing one of the crystal lattice vectors to define the plane

computePlaneFromEntry(use_selected_xtal_vector=False)

Compute the interface plane based on an entire entry. In order of preference, this would be the crystal lattice vector most parallel with the moment of inertia. If the lattice vectors are not known, then we fit a plane to the entire structure. In either case, we then move the plane so that the entry lies entirely on one side of the plane and slide the vector to be right over the centroid of the entry.

Parameters

use_selected_xtal_vector (bool) – Instead of picking the best plane based on a heirarchy of options, use the one defined by the currently selected crystal lattice vector.

pointVectorAwayFromStructure(struct, vector, origin)

Pick the 180 degree direction of the vector that points it away from the centroid of the given structure

Parameters
  • struct (schrodinger.structure.Structure) – The structure to point the vector away from

  • vector (numpy.array) – The vector to potentially flip 180

  • origin (numpy.array) – The point the vector will originate from

Return type

numpy.array

Returns

The given vector, possibly flipped 180 degrees so that it points away from the given structure

createPlane()

Create or update the square in the workspace that represents the interface plane

createArrow(head_coords, tail_coords)

Create the arrow that represents the interface plane normal in the workspace

Parameters
  • head_coords (numpy.array) – The coordinates of the tip of the arrow

  • tail_coords (numpy.array) – The coordinates of the base of the arrow

defineNewNormal(vector=None, origin=None, allow_flip=True)

Store the new normal vector and origin for the interface plane, optionally updating the workspace graphics to show the new vector/plane

Parameters
  • vector (numpy.array) – The new xyz values of the plane normal vector. If not given, the previous vector will be used.

  • origin (numpy.array) – The new origin of the vector. If not given, the previous origin will be used.

  • allow_flip (bool) – Whether to potentially flip the vector 180 degrees so that it points away from the structure

setBestXtalVectorProperty()

Set the crystal lattice vector that is most parallel with the largest moment of inertia of the loaded structure in best_btext. This vector most likely aligns with the desired interface plane normal vector.

cleanUp()

Clean up the everything in the workspace from this dialog, including restoring the molecules that were in the workspace prior to it opening. Also resets some properties to their default values

cleanArrowAndPlanes()

Remove the arrow and markers from the workspace

resetFrame()

Reset the dialog widgets and clean up the workspace

class schrodinger.application.matsci.mswidgets.LipidImporter(layout=None, label=None, command=None)

Bases: schrodinger.ui.qt.swidgets.SFrame

Manage importing a forcefield supported lipid into the Maestro workspace.

lipidImported

pyqtSignal(*types, name: str = …, revision: int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

__init__(layout=None, label=None, command=None)

Create an instance.

Parameters
  • layout (QLayout or None) – the layout to which this widget will be added or None if there isn’t one

  • label (str or None) – the label of the button or None if the default is to be used

  • command (function or None) – a function to call on lipid import or None if none to call

setStructureDict()

Set the structure dictionary.

getStructure()

Return the structure for the chosen lipid.

Return type

schrodinger.structure.Structure

Returns

the structure

importLipid()

Import the lipid into the Maestro workspace.

reset()

Reset.

class schrodinger.application.matsci.mswidgets.Stepper(label, units, start, points, step, parent_layout, multiple=False)

Bases: schrodinger.ui.qt.swidgets.SFrame

A set of widgets that allow inputting a start, stepsize and number of points

class StepperData(start, num, stepsize)

Bases: tuple

num

Alias for field number 1

start

Alias for field number 0

stepsize

Alias for field number 2

ADD_TIP = 'This increment will be added to the previous\nstep value to get the new step value.'
MULT_TIP = 'This multiplier will be multiplied times the previous\nstep value to get the new step value.'
__init__(label, units, start, points, step, parent_layout, multiple=False)

Create a Stepper instance

Parameters
  • label (str) – The label for the line of widgets

  • units (str) – The label to put after the starting and stepsize value widgets

  • start (float) – The initial starting value

  • points (int) – The initial number of points

  • step (float) – The initial stepsize

  • parent_layout (swidgets.SBoxLayout) – The layout to place the Stepper into

  • multiple (bool) – Whether the step is a multiplier (True) or additive (False)

numPointsChanged(value)

React to the number of points changing

Parameters

value (int) – The current number of points

getData()

Get the current settings

Return type

StepperData

Returns

The current settings

reset()

Reset the widgets

values()

A generator for the values produced by the current settings

Return type

generator of float

Returns

Each item generated is a value defined by the current settings

class schrodinger.application.matsci.mswidgets.AtomNameWidgetItem(value, type_value=<class 'str'>, default='')

Bases: PyQt6.QtWidgets.QTableWidgetItem

QTableWidgetItem validated as type provided.

__init__(value, type_value=<class 'str'>, default='')

Initialize item object.

Parameters
  • value – Input value

  • type_value – type to which value must be converted. Default type of value is str

  • default – Value default, must be of type type_value

getCurrentValue(value)

Get value of the correct type and save it.

Parameters

value – Input value to be converted to the typed value

Returns

typed value

Return type

type

setData(role, value)

Validates table cell data value by converting it to float.

Parameters
  • role (int) – Item role.

  • value – Value of the item’s data.

userData()

Get user data.

Return type

any or None

Returns

User data or None

class schrodinger.application.matsci.mswidgets.MultiComboWithCount(text=None, item_name='item', layout=None, items=None, max_selected_items=None, command=None, stretch=True, width=80, **kwargs)

Bases: schrodinger.ui.qt.multi_combo_box.MultiComboBox

A MultiComboBox that shows the number of selected items as the combobox text instead of item names.

__init__(text=None, item_name='item', layout=None, items=None, max_selected_items=None, command=None, stretch=True, width=80, **kwargs)

Create a MultiComboWithCount instance

Parameters
  • layout (QBoxLayout) – The layout for this widget

  • items (list) – The items to add to the combobox

  • max_selected_items (int) – The maximum number of items that the user may select before the rest disabled for selection.

  • command (callable) – The command to call when the selection changes

property max_selected_items
recordChange(*args)

Record that the selection has changed

currentText()

Override the parent class to only show the number of selected items rather than all the item names

Return type

str

Returns

The text to display in the combobox

changeToolTip()

Change the tooltip to show all selected items

hideWidgets(hidden)

Hide (or show) the combobox and clear the selection

Parameters

hidden (bool) – Whether to hide the combobox or show it

updateSelectability()

If the number of selected items is greater than or equal to the maximum, then make sure that the remaining, unselected items are disabled. Otherwise, make sure that all items are enabled.

enableAllItems()

Enables all items in the combo box

disableUnselectedItems()

Disables all unselected items in the combo box

setVisible(visible)

Show or hide the combobox

Parameters

visible (bool) – Whether the combobox should be shown

class schrodinger.application.matsci.mswidgets.OPLS5ForceFieldSelector(*args, allow_opls5=None, **kwargs)

Bases: schrodinger.ui.qt.forcefield.ffselector.ForceFieldSelector

A force field selector that obeys the MS_USE_OPLS5 feature flag and also allows panels to overwrite the state of that flag.

Note that regardless of all other parameters, the selector will not show OPLS5 unless the company-wide OPLS5_SELECTABLE flag is on.

__init__(*args, allow_opls5=None, **kwargs)

Create an instance

Parameters

allow_opls5 (bool or None) – If True then ignore the MS_USE_OPLS5 feature flag and whether OPLS5 is available depends only on the OPLS5_SELECTABLE feature flag. If False then ignore MS_USE_OPLS5 and OPLS5 will not be available regardless of OPLS5_SELECTABLE. If None then OPLS5 will be available if and only if both OPLS5_SELECTABLE and MS_USE_OPLS5 are enabled.

class schrodinger.application.matsci.mswidgets.MSForceFieldSelector(*args, **kwargs)

Bases: schrodinger.application.matsci.mswidgets.OPLS5ForceFieldSelector

__init__(*args, **kwargs)

Extend the ForceFieldSelector by applying a Materials-Science-specific default force field

class schrodinger.application.matsci.mswidgets.ProcessBusyDialog(text, process, *args, **kwargs)

Bases: schrodinger.ui.qt.swidgets.SDialog

A dialog that indicates a subprocess is running and gives the user a cancel button to kill it.

The class is designed to show/exec the dialog via the activate function. The dialog is modal and will block until the subprocess finishes.

KILLED = -9
SUCCESS = 0
__init__(text, process, *args, **kwargs)

Create a ProcessBusyDialog instance

Parameters
  • text (str) – The text to display in the dialog

  • process (subprocess.Popen) – The running subprocess

Additional arguments are passed to the parent class

layOut()

Lay out the dialog widgets

setNewData(text, process)

Set the new text and process for this dialog - used for dialogs that have activate called with persistent=True

Parameters
  • text (str) – The new text of the dialog

  • process (subprocess.Popen) – The new running subprocess

activate(persistent=False)

Show the dialog, wait for the process to finish (either naturally or by the user cancelling it) and return the process return code.

Parameters

persistent (bool) – If False, close the dialog before returning. If True, do not close the dialog and caller is responsible for calling dialog.accept() to close.

Return type

int

Returns

0 if the process finished successfully, -9 if killed by the user, or a non-zero integer if the process died with an error

reject()

Called when the user selects the Cancel button or the window manager X button. Kill the process but do not close the dialog. Allow the dialog to close naturally via the activate while loop when the process terminates.

class schrodinger.application.matsci.mswidgets.OptionalInputSelector(parent, **kwargs)

Bases: schrodinger.ui.qt.input_selector.InputSelector

An InputSelector object that does not act when disabled

setEnabled(enable, *args, **kwargs)

Override the parent method to block signals when disabled

validate(*args, **kwargs)

Override the parent method to not validate when disabled

writePTEntries(*args, **kwargs)

Override the parent method to not write when disabled

setup(jobname, *args, **kwargs)

Override the parent method to store the structure file name but do nothing else when disabled

class schrodinger.application.matsci.mswidgets.ConvenientSelectorWithPopUp(label, default_selection, list_items, filter_cbs=(), command=None, layout=None, stretch=True)

Bases: schrodinger.ui.qt.swidgets.SFrame

Convenient selector with popup that doesn’t need subclassing the selector, the button and the popup classes to use.

NOTE: This class hasn’t been tested with filter checkboxes yet, and might need more functionalities NOTE: Can use autowidth option of TemplateSelectorFilterListPopUp

selectionChanged

pyqtSignal(*types, name: str = …, revision: int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

__init__(label, default_selection, list_items, filter_cbs=(), command=None, layout=None, stretch=True)

Create an instance

Parameters
  • label (str) – The selector label

  • default_selection (str) – Default selection in the list

  • list_items (iterable(QListWidgetItem) or iterable(str)) – Items or strings to add to the popup filtered list

  • filter_cbs (tuple(FilterCheckBox)) – tuple of filter checkboxes for the popup

  • command (callable) – The command to call when the selection changes

  • layout (QLayout) – The layout to place the frame in

  • stretch (bool) – Whether to add a stretch after the button

getSelection()

Get the current selection

Return type

str

Returns

The current selection

setSelection(selection)

Set the current selection for the selector

Parameters

selection (str) – The text for the item

Raises

ValueError – If no items are found with the text

updateLineEdit()

Update the line edit text with the list’s current selection

reset()

Reset the selector

class schrodinger.application.matsci.mswidgets.PopupMenu(parent=None, minimum_value=0, maximum_value=100, decimals=1, float_step=1)

Bases: PyQt6.QtWidgets.QWidget

A popup window widget to adjust the thumb positions in the multislider. Fine control is available by using the spinbox to set the value of the thumbs. Button allows to adjust the number of thumbs.

value_changed

pyqtSignal(*types, name: str = …, revision: int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

__init__(parent=None, minimum_value=0, maximum_value=100, decimals=1, float_step=1)
Parameters
  • parent (QtWidgets.Qwidget) – Parent widget

  • minimum_value (float) – Minimum value for spinbox

  • maximum_value (float) – Maximum value for spinbox

  • decimals (float) – Number of decimal places required to represent the float step

  • float_step (float) – Step size on the slider

emitValueChanged()

Emit the valueChanged signal only if the value have changed for spinbox

focusOutEvent(event)

Closes the popup window

Parameters

event (QtGui.QMouseEvent) – Mouse press event

show(pos, value)

Displays the popup window at given location. The spinbox values are updated.

Parameters
  • pos (int) – Pixel position

  • value (int) – Slider value

class schrodinger.application.matsci.mswidgets.MultiSlider(*, parent=None, num_thumbs=2, minimum=0, maximum=100, ticks=True, num_ticks=10, command=None, thumb_name=None, float_step=1, label=None, layout=None)

Bases: PyQt6.QtWidgets.QSlider

A horizontal slider widget with variable number of thumbs that can be moved independently. The slider can be used to select a range of values or to select multiple values. The number of thumbs can be changed by using the spinbox.

SC_HANDLE = 2
SC_GROOVE = 1
CC_SLIDER = 3
GROOVE_THICKNESS = 1
THICKNESS = 4
HIGHLIGHT_COLOR = <PyQt6.QtGui.QColor object>
MAX_THUMBS = 20
valueChanged

pyqtSignal(*types, name: str = …, revision: int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

__init__(*, parent=None, num_thumbs=2, minimum=0, maximum=100, ticks=True, num_ticks=10, command=None, thumb_name=None, float_step=1, label=None, layout=None)
Parameters
  • parent (QtWidgets.QWidget) – Parent widget

  • num_thumbs (int) – The initial number of thumbs

  • minimum (float or int) – Minimum value of the slider

  • maximum (float or int) – Maximum value of the slider

  • ticks (bool) – Whether to show tick marks

  • num_ticks (int) – Number of tick marks to show, excluding the minimum and maximum values of the slider

  • command (callable) – Function to call when the slider values are changed

  • thumb_name (None or str) – The user facing name of the thumbs.

  • float_step (float) – Step size of the slider

  • label (None or str) – label for the slider

  • layout (QtWidgets.QLayout) – Layout to add the slider to

setupLayout(thumb_name)

Adds the multislider, spinboxes and combo box to the layout

Parameters

thumb_name (str) – The user facing name of the thumb

event(event)

Override the event method to show a tooltip when the mouse cursor is over a thumb only.

Parameters

event (QtCore.QEvent) – Event

emitValueChanged()

Emit the valueChanged signal only if the values have changed

property values

List of values of the thumbs in the slider. Note that the values are the actual values and not the slider positions.

Returns

List of values of the thumbs

Return type

list(float)

valueAt(index)

Get the value of the thumb at the specified index

Parameters

index (int) – Index of the thumb

Returns

Value of the thumb

Return type

float

Raises

IndexError – If the index is out of range

getValues()

Get the integer positions of the thumbs in the slider

Returns

List of integer positions of the thumbs

Return type

list(int)

setValues(values)

Set the values of the thumbs in the slider

Parameters

values (list(float)) – List of values

Raises

ValueError – If the number of values does not match the number

setRange(minimum, maximum)

Set the range of the slider.

Parameters
  • minimum (float) – Minimum value

  • maximum (float) – Maximum value

initPositions()

Initialize the positions of the thumbs in the slider such that they are evenly spaced.

setNumThumbs(num_thumbs)

Set the number of thumbs in the slider

Parameters

num_thumbs (int) – Number of thumbs

setSelectedThumb(index)

Update the selected thumb

Parameters

index (int) – Index of the selected thumb

setDraggableThumb(index)

Update the draggable thumb

Parameters

index (int) – Index of the draggable thumb

updateSpinBox()

Update the spin box value, react to the slider value being changed

updateSliderPosition(float_value)

Update the slider position based on the spin box value

Parameters

float_value (float) – New value for the selected thumb set by the spin box

addThumb(value)

Add a thumb to the slider

Parameters

value (int) – Value of the thumb

removeThumb(index)

Remove a thumb from the slider

Parameters

index (int) – Index of the thumb to remove

paintEvent(event)

Paint the slider

Parameters

event (QtGui.QPaintEvent) – Paint event

showMenu(event)

Displays the popup menu to add thumb, remove thumb and change the thumb position. Add a new thumb if the right mouse button is clicked and no thumb was clicked. Remove the thumb if the right mouse button is clicked and a thumb was clicked.

Parameters

event (QtGui.QMouseEvent) – Mouse right click event

mousePressEvent(event)

Handle mouse press events to select, add thumbs, and remove thumbs

Parameters

event (QtGui.QMouseEvent) – Mouse press event

mouseMoveEvent(event)

Move the selected thumb to the new position if the mouse is moved while the left mouse button is pressed down (dragging)

Parameters

event (QtGui.QMouseEvent) – Mouse move event

mouseReleaseEvent(event)

Handle mouse release event

Parameters

event (QtGui.QMouseEvent) – Mouse release event

setDefault()

Redistributes thumbs in the data range, and reset spinboxes and combobox to default.

reset()

Reset the multislider when loaded file in the panel is changed. The slider is set to the default state with updated data range. The numbers of thumbs are reset to initial state and redistributed.

class schrodinger.application.matsci.mswidgets.MSMoleculeSelector(*args, **kwargs)

Bases: schrodinger.application.matsci.mswidgets.MSAtomSelector

Atom selector which only allows selecting whole molecules

__init__(*args, **kwargs)

Create an instance. See parent for argument docs.

class schrodinger.application.matsci.mswidgets.SystemInformationFrame(parent, parent_layout, use_defaults=True, custom_headers=None)

Bases: schrodinger.ui.qt.swidgets.SFrame

A frame which displays some information about the system.

ATOM_NUM = 'Atom #'
MOLECULE_NUM = 'Molecule #'
TOTAL_WEIGHT = 'Total Weight'
TOTAL_CHARGE = 'Total Charge'
DEFAULT_HEADERS = ['Atom #', 'Molecule #', 'Total Weight', 'Total Charge']
__init__(parent, parent_layout, use_defaults=True, custom_headers=None)

Create an instance of the frame.

Parameters
  • parent (QtWidget) – The parent of this frame

  • parent_layout (QBoxLayout) – The layout to place this frame into

  • use_defaults (bool) – Whether to use the default headers

  • custom_headers (list) – A list of custom headers to use

layOut()

Lay out the widgets in the frame.

setSystemInfo(updated_items=None)

Set the system information labels. Note, this should be called after the parent structure has been loaded.

Parameters

updated_items (dict) – A dictionary of headers that are already passed in self.custom_headers and their values.

Raises

ValueError – If using custom headers, updated_items must be provided. Also, updated_items must contain all headers in custom_headers.

setDefaultItems()

Set the default system information labels.

getTotalCharge()

Get the sum of formal charges of atoms in the structure.

Return type

float

Returns

total charge

reset()

Reset all the labels in the frame.