Source code for schrodinger.application.canvas.fingerprintgui

"""

Higher-level wrappers to the Canvas Fingerprint generation and manipulation
classes with GUI components.

Copyright Schrodinger, LLC. All rights reserved.

"""

# Contributors: Quentin McDonald

import schrodinger.ui.qt.swidgets as swidgets
from schrodinger.application.canvas import fingerprint
from schrodinger.Qt import QtWidgets

#################### GUI Classes start here ###########################


[docs]class CanvasFingerprintGeneratorGUI(fingerprint.CanvasFingerprintGenerator): """ A subclass of the canvas fingerprint generator which is to be used from a program with a TKInter interface. This class has methods for creating a component which displays all the fingerprint generation options and takes care of managing the internal state """
[docs] def __init__(self, logger, default_type='Linear'): fingerprint.CanvasFingerprintGenerator.__init__(self, logger, default_type)
[docs] def getGUI(self): """ Returns a GUI component which displays the fingerprint generation options """ self.base_group = swidgets.SGroupBox('Fingerprint Settings') # Precision rb_layout = swidgets.SHBoxLayout() rb_layout.addWidget(QtWidgets.QLabel('Precision:')) labels = ["%d-bit" % int(x) for x in self.PRECISION] self.bits_radio = swidgets.SRadioButtonGroup(command=self.bitCB, labels=labels, layout=rb_layout, nocall=True) self.bitCB(True) rb_layout.addStretch() self.base_group.layout.addLayout(rb_layout) # Fingerprint type combo_layout = swidgets.SHBoxLayout() combo_layout.addWidget(QtWidgets.QLabel('Fingerprint type:')) combo = swidgets.SComboBox(items=self.FINGERPRINT_TYPES, nocall=True, command=self.FPTypeCB, layout=combo_layout) combo_layout.addStretch() self.base_group.layout.addLayout(combo_layout) # Scheme self.base_group.layout.addWidget( QtWidgets.QLabel('Atom Typing Scheme:')) self.listw = swidgets.SListWidget(items=self.ATOM_TYPING_SCHEMES, command=self.atomTypingCB, layout=self.base_group.layout) # Note that "7" is the default atom typing scheme for linear # fingerprints, but this is index 6 in the list of names: self.listw.setCurrentRow(6) self.FPTypeCB(self.FINGERPRINT_TYPES[0]) return self.base_group
[docs] def bitCB(self, value): """ A callback function for the Bitsize radio buttons :type value: unused :param value: unused """ precision = self.bits_radio.checkedText() bits = precision.replace('-bit', "") self.setPrecision(int(bits))
[docs] def atomTypingCB(self, row): """ Called when the atom typing selection changes :type row: int :param row: the row of the listwidget that was selected """ self.setAtomBondTyping(row + 1)
[docs] def FPTypeCB(self, fp_type): """ A callback for the fingerprint type. Sets the default option in the list of atom typing schemes based on the fingerprint type :type fp_type: str :param fp_type: the text selected in the combobox """ self.setType(fp_type) def_ab_scheme = self.getDefaultAtomTypingScheme() self.setAtomBondTyping(def_ab_scheme) self.listw.setCurrentRow(def_ab_scheme - 1)
[docs] def resetfp(self): """ Allow reset of the fingerprint generator between cluster calculations. See EV:91489 and 101763 """ if self._fingerprinter is not None: del self._fingerprinter self._fingerprinter = None