Source code for schrodinger.application.matsci.msconst

"""
Contains common MatSci constants

Copyright Schrodinger, LLC. All rights reserved.
"""

import enum

from schrodinger.application.desmond import constants as dconst

CMS = 'cms'
CMS_OUT_EXT = f'-out.{CMS}'

ENSEMBLE_NVE = 'NVE'
ENSEMBLE_NVT = dconst.Ensembles.NVT
ENSEMBLE_NPT = dconst.Ensembles.NPT
ENSEMBLES = [ENSEMBLE_NVE, ENSEMBLE_NVT, ENSEMBLE_NPT]

SPC = 'SPC'
SPCE = 'SPCE'
TIP3P = 'TIP3P'
TIP4P = 'TIP4P'
TIP4P2005 = 'TIP4P2005'
TIP4PEW = 'TIP4PEW'
TIP5P = 'TIP5P'
TIP4PD = "TIP4PD"
NONE = "none"

ISOTROPIC = dconst.IsotropyPolicy.ISOTROPIC.title()
SEMI_ISOTROPIC = dconst.IsotropyPolicy.SEMI_ISOTROPIC.title()
CONSTANT_AXIS_A = dconst.IsotropyPolicy.CONSTANT_AXIS_A.title()
CONSTANT_AXIS_B = dconst.IsotropyPolicy.CONSTANT_AXIS_B.title()
CONSTANT_AXIS_C = dconst.IsotropyPolicy.CONSTANT_AXIS_C.title()
ANISOTROPIC = dconst.IsotropyPolicy.ANISOTROPIC.title()

# All barostat coupling methods accepted by Desmond
ISOTROPIC_DICT = {
    ISOTROPIC: dconst.IsotropyPolicy.ISOTROPIC,
    SEMI_ISOTROPIC: dconst.IsotropyPolicy.SEMI_ISOTROPIC,
    CONSTANT_AXIS_A: dconst.IsotropyPolicy.CONSTANT_AXIS_A,
    CONSTANT_AXIS_B: dconst.IsotropyPolicy.CONSTANT_AXIS_B,
    CONSTANT_AXIS_C: dconst.IsotropyPolicy.CONSTANT_AXIS_C,
    ANISOTROPIC: dconst.IsotropyPolicy.ANISOTROPIC
}

# Most commonly used barostat coupling method.
COMMON_ISOTROPIC_DICT = {
    ISOTROPIC: dconst.IsotropyPolicy.ISOTROPIC,
    ANISOTROPIC: dconst.IsotropyPolicy.ANISOTROPIC
}

NOSE_HOOVER_CHAIN = 'Nose-Hoover chain'
LANGEVIN = 'Langevin'
DPD = 'DPD'
MARTYNA_TOBIAS_KLEIN = "Martyna-Tobias-Klein"
NH = 'NH'
MTK = 'MTK'

THERMO_METHOD_DICT = {
    NOSE_HOOVER_CHAIN: NH,
    LANGEVIN: LANGEVIN,
    DPD: DPD,
}

BARO_METHOD_DICT = {MARTYNA_TOBIAS_KLEIN: MTK, LANGEVIN: LANGEVIN, DPD: DPD}

ALL_ATOM = 'all_atom'
COARSE_GRAIN = 'coarse-grain'

# Valid methods for each model. This only provides a template for
# thermo_method input for DesmondMDWidgets
VALID_THERMO_METHODS = {
    ALL_ATOM: [NOSE_HOOVER_CHAIN],
    DPD: [DPD],
    COARSE_GRAIN: [LANGEVIN]
}

VALID_BARO_METHODS = {
    ALL_ATOM: [MARTYNA_TOBIAS_KLEIN],
    DPD: [DPD],
    COARSE_GRAIN: [LANGEVIN]
}

PME = 'pme'
USERIES = 'useries'
COULOMB_METHODS = {"U-Series": USERIES, "PME": PME}

# Extensions
MSJ = 'msj'
ZIP = '.zip'
HDF5 = '.hdf5'
CSV = '.csv'

# Keys are user-facing names, values are pdbres names recognized by
# solvent model (see /mmshare/include/solvent_models.h)
# none is added as the last option to use the generic parameters
WATER_FFTYPES = dconst.FFLD_WATER.copy()
WATER_FFTYPES[NONE] = None

# See MATSCI-11438
VALID_WATER_FFTYPES_OPLS2005 = [SPC, TIP3P, NONE]

# Units
DENSITY_UNIT = 'g/cm3'

ANGSTROM_UNICODE = u'\u00C5'

SMARTS_METHOD = enum.Enum('SMARTS_METHOD', 'internal canvas rdkit')
SMARTS_CHOICES = tuple(x.name for x in SMARTS_METHOD)


[docs]@enum.unique class DIMENSIONALITY(enum.IntEnum): BULK = 111 # This is not Miller indices set. This means non-periodic in Z SLAB_XY = 110 # ISOLATED = 0 # not yet used anywhere
[docs] def __init__(self, value): """ Initialize enum member. :param Any value: Input value """ labels = {111: 'Bulk', 110: 'Slab'} self.label = labels[value]
[docs] @classmethod def getDict(cls, use_labels=False): """ Get dictionary with enum members. """ get_name = lambda member: member.label if use_labels else member.name return {get_name(x): x.value for x in cls}