Source code for schrodinger.application.desmond.constants

"""
Define common numerical constants, CT and atom property names, and keyword
values (enums).

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

from schrodinger.infra.mm import FFIO_DATA_CT_TYPE
from schrodinger.infra.mm import FFIO_FULL_SYSTEM


class _ConstantsMeta(type):

    def __iter__(self):
        for k, v in self.__dict__.items():
            if not k.startswith("_"):
                yield v

    def __str__(self):
        """
        Prints all constant members defined in the `_ConstantsMeta` class into a
        string.
        """
        return " ".join([str(e) for e in self])


[docs]class Constants(object, metaclass=_ConstantsMeta): """ Related constants can inherit from `Constants` to make them iterable in the order of their declarations. """
class _MaePropertyValue: """ This class defines a container for values associated with `MaePropertyName`. This makes the values iterable in the order of their declarations. """ def __init__(self, **kwargs): self._kwargs = kwargs for k, v in kwargs.items(): setattr(self, k, v) def __iter__(self): for v in self._kwargs.values(): yield v def __str__(self): return " ".join([str(e) for e in self._kwargs.values()])
[docs]class MaePropertyName(str): """ This class defines a container for structure or atom level properties. The property key can be accessed directly, while enum values are accessed via the `VAL` attribute. Example usage: CT_TYPE = MaePropertyName(FFIO_DATA_CT_TYPE, FULL_SYSTEM=FFIO_FULL_SYSTEM) ct.property[CT_TYPE] = CT_TYPE.VAL.FULL_SYSTEM valid_ct_types = list(CT_TYPE.VAL) """ def __new__(cls, name: str, **kwargs): # Validation checks can be added here. return str.__new__(cls, name)
[docs] def __init__(self, name: str, **kwargs): self.VAL = _MaePropertyValue(**kwargs)
# Physical constants # References: # - GAS_CONSTANT / BOLTZMANN: # - https://en.wikipedia.org/wiki/Gas_constant # - https://physics.nist.gov/cgi-bin/cuu/Value?r BOLTZMANN = 1.9872036E-3 # kcal/mol/K GAS_CONSTANT = BOLTZMANN GAS_CONSTANT_JOUL = 8.3144598 # J/mol/K ONE_ATMOSPHERE = 1.01325 # bar # Unit conversion factors
[docs]class Conversion: KCAL_TO_JOUL = 4184.0 CAL_CM_TO_MPA = 0.48888 # From (cal/cm^3)^1/2 to MPa^(1/2) AU_TO_KG = 1.6605655 # Mass: 1 mole of AU to kg
# Misc. constants LIGAND_TOTAL_ATOMS_LIMIT = 150 # Force Field CT block FFIO_FF = 'ffio_ff'
[docs]class EXISTING_RESTRAINT(Constants): RETAIN = 'retain' IGNORE = 'ignore' IGNORE_POSRE = 'ignore_posre'
[docs]class WATER_MODELS(Constants): SPC = 'SPC' SPCE = 'SPCE' TIP3P = 'TIP3P' TIP3P_CHARMM = 'TIP3P_CHARMM' TIP4P = 'TIP4P' TIP4PEW = 'TIP4PEW' TIP4P2005 = 'TIP4P2005' TIP5P = 'TIP5P' TIP4PD = 'TIP4PD'
# Map water model name to pdb residue FFLD_WATER = { WATER_MODELS.SPC: "SPC", WATER_MODELS.SPCE: "SPCE", WATER_MODELS.TIP3P: "T3P", WATER_MODELS.TIP4P: "T4P", WATER_MODELS.TIP4P2005: "T4P5", WATER_MODELS.TIP4PEW: "T4PE", WATER_MODELS.TIP4PD: "T4PD", WATER_MODELS.TIP5P: "T5P" }
[docs]class CUSTOM_CHARGE_MODE(Constants): KEEP = 'keep' CLEAR = 'clear' ASSIGN = 'assign'
# graph constants
[docs]class FEP_TYPES(Constants): PROTEIN_STABILITY = 'prm_stability' PROTEIN_SELECTIVITY = 'protein_selectivity' COVALENT_LIGAND = 'covalent_ligand' SMALL_MOLECULE = 'small_molecule' METALLOPROTEIN = 'metalloprotein' LIGAND_SELECTIVITY = 'ligand_selectivity' BINDING_POSE = "binding_pose" ABSOLUTE_BINDING = "absolute_binding" SOLUBILITY = 'solubility'
PROTEIN_FEP_TYPES = (FEP_TYPES.PROTEIN_STABILITY, FEP_TYPES.PROTEIN_SELECTIVITY, FEP_TYPES.LIGAND_SELECTIVITY) SELECTIVITY_FEP_TYPES = (FEP_TYPES.PROTEIN_SELECTIVITY, FEP_TYPES.LIGAND_SELECTIVITY) # Per edge simulation protocol
[docs]class SIMULATION_PROTOCOL(Constants): DEFAULT = 'default' CHARGED = "charge" FORMALCHARGED = "charge0" COREHOPPING = "core-hopping" MACROCYCLE_COREHOPPING = "macrocycle-core-hopping" FRAGMENT_LINKING = "fragment-linking"
# Structure level ct properties NUM_COMPONENT = 'i_ffio_num_component' USE_CUSTOM_OPLSDIR = 'b_ffio_use_custom_oplsdir' IS_INFINITE = 'b_matsci_is_infinite' # (MATSCI-2544, MATSCI-6234) CT_INDEX = 'i_ffio_ct_index' CT_TYPE = MaePropertyName(FFIO_DATA_CT_TYPE, FULL_SYSTEM=FFIO_FULL_SYSTEM, SOLUTE='solute', SOLVENT='solvent', MEMBRANE='membrane', ION='ion', COSOLVENT='cosolvent', CRYSTAL_WATER='crystal water', POSITIVE_SALT='positive salt', NEGATIVE_SALT='negative salt', LIGAND='ligand', RECEPTOR='receptor', ALCHEMICAL_WATER='alchemical_water') # there may be more.. FEP_STRUC_TAG = MaePropertyName( 's_fep_struc_tag', LIGAND='ligand', RECEPTOR='receptor', MEMBRANE='membrane', SOLVENT='solvent', # ct with solvent, not leg COMPLEX='complex') # ct with protein-ligand complex, not leg MOLTYPE = MaePropertyName("s_leadoptmap_moltype", LIGAND='ligand') VISIBILITY = "i_m_visibility" FEP_FRAGNAME = "s_fep_fragname" FEP_WRTFRAG = 's_fep_wrtfrag' FEP_PERTDB = 's_fep_pertdb' FEPMAPPER_BIAS = "i_fepmapper_bias" FEP_SUITABILITY = "r_bioluminate_delta_FEP_Suitability" COVALENT_LIGAND = 's_fep_covalent_ligand' FEP_COVALENT_PROTEIN_BB_ATOM = 'i_fep_cov_protein_bb_atom' FEP_DG_PREFIX = "s_des_dG" FEP_DDG_PREFIX = "s_des_ddG" FEP_DG_CROSSLINK_CORRECTION_REF = FEP_DG_PREFIX + "_crosslink_correction_ref" FEP_DG_CROSSLINK_CORRECTION_MUT = FEP_DG_PREFIX + "_crosslink_correction_mut" FEP_DDG_CROSSLINK_CORRECTION = FEP_DDG_PREFIX + "_crosslink_correction" # For the absolute binding fep workflow FEP_DG_CROSSLINK_CORRECTION = FEP_DG_PREFIX + "_crosslink_correction" FEP_PRED_DG = "r_fepplus_pred_dg" # FIXME: PANEL should use this contant FEP_PRED_DG_ERROR = "r_fepplus_pred_dg_error" # FIXME: PANEL should use this contant # Used to set node experimental dg on initial graph creation. FEPMAPPER_EXP_DG = "r_fepmapper_exp_dG" # Used to keep track of the mutations for protein fep. BIOLUMINATE_MUTATION = "s_bioluminate_Mutations" # Marker for the WT structure. BIOLUMINATE_WT = 'NONE' ABFEP_DUMMY_LIGAND = "b_fep_ab_dummy_ligand" # Marker for dummy ligand in AB FEP and Solubility DUMMY_LIGAND = "b_fep_dummy_ligand" LIGAND_ORIGINAL_TITLE = "s_ligand_original_title" PROTEIN_ORIGINAL_TITLE = "s_protein_original_title" # Selection bias correction properties. CORRECTED_PREDICTED_AFFINITY_KCAL = 'r_fep_Corrected_Predicted_Affinity_(kcal/mol)' CORRECTED_PREDICTED_UNCERTAINTY_KCAL = 'r_fep_Corrected_Predicted_Uncertainty_(kcal/mol)' CORRECTED_PREDICTED_AFFINITY_nM = 'r_fep_Corrected_Predicted_Affinity_(nM)' FOLD_UNCERTAINTY = 'r_fep_Fold_Uncertainty' # Mixed solvent properties. MXMD_COSOLVENT_PROBE = 's_mxmd_cosolvent_probe' MXMD_GRID_SPACING = 'r_mxmd_grid_spacing' MXMD_BOX_LENGTH = 'r_mxmd_box_length' MXMD_NUM_PROBES = 'i_mxmd_num_probes' MXMD_CENTER_X = 'r_mxmd_center_x' MXMD_CENTER_Y = 'r_mxmd_center_y' MXMD_CENTER_Z = 'r_mxmd_center_z' # Simulation box _SIM_BOX_BASENAME = 'r_chorus_box' SIM_BOX = tuple(f"{_SIM_BOX_BASENAME}_{abc}{xyz}" for abc in ['a', 'b', 'c'] for xyz in ['x', 'y', 'z']) SIM_BOX_DIAGONAL = tuple( f"{_SIM_BOX_BASENAME}_{val}" for val in ('ax', 'by', 'cz')) # Trajectory TRJ_POINTER = 's_chorus_trajectory_file' # Solubility FEP properties. FEP_ORIGINAL_TITLE = 's_fep_original_title' FEP_HASH_ID = 's_fep_hash_id' FEP_SOLUBILITY = "s_des_dG_dissolution" FEP_SOLUBILITY_MICROMOLAR = 'r_des_solubility_[uM]' FEP_TRANSFER_FREE_ENERGY = "s_des_dG_transfer" SOLUBILITY_SUBJOB = MaePropertyName('s_fep_solubility_subjob', MD='md', HYDRATION='hydration', SUBLIMATION='sublimation', SOLVATION='solvation', SOLUBLE='soluble') SOLUBILITY_STATUS = MaePropertyName('s_fep_solubility_status', FINISHED='finished', FAILED='failed') # Atom level ct properties FEP_MAPPING = "i_fep_mapping" FEP_RESTRAIN = "i_fep_restrain" FEPIO_STAGE = 'i_fepio_stage' FEP_SUBST = 'i_fep_subst' # Marks the ligand atoms for protein ligand mutation LIGAND_MARKER = "i_protmap_nochange" CRYSTAL_WATER_PROP = 'i_desmond_crystal_water' FF_USE_EXISTING_CHARGE = "i_ff_skip_cm1a" # TODO: What is the difference between these? FEP_ATOM_INDEX = "i_fep_pa_atomindex" ORIGINAL_INDEX = 'i_m_original_index' ORIGINAL_MOLECULE_NUMBER = 'i_m_original_molecule' # atom property added in captermini.CapTermini PPW_ATOM_INDEX = "i_ppw_original_index" # atom property added in Epik generated titration states FEP_TMP_IDX = "i_fep_tmp_idx" # Atom charge FF_CUSTOM_CHARGE = 'r_ffio_custom_charge' DES_ATOM_DOMAIN = MaePropertyName('i_des_atom_domain', SOLUTE=1, SOLVENT=2, ION=3, MEMBRANE=4, CRYSTAL_WATER=5, ALCHEM_A=7, ALCHEM_B=8, INACTIVE=9) # REST region definition REST_HOTREGION = "i_rest_hotregion"
[docs]class REST_PROPERTIES(Constants): SOLVENT_HOTREGION = 'i_rest_solvent_hotregion' COMPLEX_HOTREGION = 'i_rest_complex_hotregion'
[docs]class REST_COMPONENT(Constants): ENVIRONMENT = "environment" RECEPTOR = "receptor" MEMBRANE = "membrane" LIGAND = "ligand" COMPLEX = "complex"
[docs]class REST_REGION_RULE(Constants): DEFAULT = 'default' ALL = 'all'
# Absolute FEP properties. FEP_ABSOLUTE_ENERGY = "i_ffio_grp_energy" FEP_ABSOLUTE_LIGAND = "i_ffio_grp_ligand" # Protein FEP properties. # PROT_LIGAND_REGION signifies the subset of the protein that # is mutating in protein fep, analogous to the ligand in normal FEP # (no guarantee that all atoms are mutated) PROT_LIGAND_REGION = "i_fep_protein_mutating_subset" # Original coordinates REFERENCE_COORD_BASENAME = 'r_fep_original_coord' REFERENCE_COORD_PROPERTIES = [ REFERENCE_COORD_BASENAME + '_x', REFERENCE_COORD_BASENAME + '_y', REFERENCE_COORD_BASENAME + '_z' ] # Only for the analysis, not used to determine restraints _ANALYSIS_REFERENCE_COORD_BASENAME = 'r_fep_analysis_original_coord' ANALYSIS_REFERENCE_COORD_PROPERTIES = [ _ANALYSIS_REFERENCE_COORD_BASENAME + '_x', _ANALYSIS_REFERENCE_COORD_BASENAME + '_y', _ANALYSIS_REFERENCE_COORD_BASENAME + '_z' ] # yapf: disable # alchemical ion # FIXME: Note there is also a `CT_TYPE.VAL.ALCHEMICAL_WATER` ALCHEMICAL_ION = 'b_fep_alchemical_ion' ALCHEMICAL_WATER = 'i_fep_alchemical_water' ALCHEMICAL_WATER_CHARGE = 'i_fep_alchemical_water_charge' # Maestro subgroup M_SUBGROUP_TITLE = 's_m_subgroup_title' M_SUBGROUPID = 's_m_subgroupid' M_SUBGROUP_COLLAPSED = 'b_m_subgroup_collapsed' # FEP schedule names POSE_DIHEDRAL_RESTRAINT = 'pose_dihedral_restraint'
[docs]class IsotropyPolicy(Constants): ISOTROPIC = 'isotropic' SEMI_ISOTROPIC = 'semi_isotropic' CONSTANT_AXIS_A = "constant_axis_a" CONSTANT_AXIS_B = "constant_axis_b" CONSTANT_AXIS_C = "constant_axis_c" ANISOTROPIC = "anisotropic" FLEXIBLE = "flexible"
# Conformation restraint types
[docs]class ConfRestraintType(Constants): BACKBONE = "backbone" SIDECHAIN = "sidechain" CALPHA_RUNG = "calpha_rung"
# Fragment linking FRAGMENT_LINKING_JOBS = MaePropertyName( 's_fep_frag_linking_job', COMPLEX='complex', SOLVENT='solvent', FRAGMENT_HYDRATION='solvent_fragment_hydration', RESTRAINED_FRAGMENT_HYDRATION='solvent_restrained_fragment_hydration') FRAGMENT_LINKING_SOLVENT_JOBS = ( FRAGMENT_LINKING_JOBS.VAL.SOLVENT, FRAGMENT_LINKING_JOBS.VAL.FRAGMENT_HYDRATION, FRAGMENT_LINKING_JOBS.VAL.RESTRAINED_FRAGMENT_HYDRATION) FRAGMENT_LINKING_HYDRATION_JOBS = ( FRAGMENT_LINKING_JOBS.VAL.FRAGMENT_HYDRATION, FRAGMENT_LINKING_JOBS.VAL.RESTRAINED_FRAGMENT_HYDRATION) FEP_RESTRAINT_CORRECTION = 'r_fep_restraint_correction' FRAGMENT_LINKING_SIGN = 'i_fep_frag_linking_sign' FEP_ENCODED_RESTRAINTS = 's_fep_encoded_restraints' ABFE_LIGAND = 'b_fep_abfe' FEP_ABSOLUTE_BINDING_LIGAND = 'i_fep_absolute_binding_ligand' # protein backbone atom pdbname PROTEIN_BACKBONE_PDB_NAMES = [ ' H ', ' N ', ' O ', ' CA ', ' HA ', ' C ', ' HA3', ' HA2' ] # Absolute Binding FEP ABSOLUTE_BINDING_LEGS = MaePropertyName('s_fep_absolute_binding_leg', COMPLEX='complex', SOLVENT='solvent')
[docs]class FepLegTypes(Constants): COMPLEX = 'complex' SOLVENT = 'solvent' VACUUM = 'vacuum' SUBLIMATION = 'sublimation' HYDRATION = 'hydration' SOLVATION = SOLUBILITY_SUBJOB.VAL.SOLVATION FRAGMENT_HYDRATION = FRAGMENT_LINKING_JOBS.VAL.FRAGMENT_HYDRATION RESTRAINED_FRAGMENT_HYDRATION = FRAGMENT_LINKING_JOBS.VAL.RESTRAINED_FRAGMENT_HYDRATION
[docs]class Ensembles(Constants): NVT = "NVT" NPT = "NPT" MUVT = "muVT"
[docs]class RestrainTypes(Constants): POS = 'pos' POS_FBHW = 'posfbhw' STRETCH_FBHW = 'stretchfbhw' ANGLE_FBHW = 'anglefbhw' IMPROPER_FBHW = 'improperfbhw'
# Default ABSOLUTE_BINDING_COMPLEX_LAMBDAS = 68 ABSOLUTE_BINDING_SOLVENT_LAMBDAS = 60 # ABFEP with restraints uses a different number of lambdas ABSOLUTE_BINDING_RESTRAINED_COMPLEX_LAMBDAS = 80 ABSOLUTE_BINDING_RESTRAINED_SOLVENT_LAMBDAS = 68 # Default number of lambdas
[docs]class Schedule(Constants): DEFAULT = "default" FLEXIBLE = "flexible" CHARGE = "charge"
DEFAULT_LAMBDAS_BY_SCHEDULE = { Schedule.DEFAULT: 12, Schedule.FLEXIBLE: 16, Schedule.CHARGE: 24, } # Absolute hydration windows FRAGMENT_LINKING_HYDRATION_LAMBDAS = 24 DEFAULT_LAMBDAS_BY_SIMULATION_PROTOCOL = { SIMULATION_PROTOCOL.DEFAULT: DEFAULT_LAMBDAS_BY_SCHEDULE[Schedule.DEFAULT], SIMULATION_PROTOCOL.CHARGED: DEFAULT_LAMBDAS_BY_SCHEDULE[Schedule.CHARGE], SIMULATION_PROTOCOL.FORMALCHARGED: DEFAULT_LAMBDAS_BY_SCHEDULE[ Schedule.CHARGE], SIMULATION_PROTOCOL.COREHOPPING: DEFAULT_LAMBDAS_BY_SCHEDULE[ Schedule.FLEXIBLE], SIMULATION_PROTOCOL.MACROCYCLE_COREHOPPING: DEFAULT_LAMBDAS_BY_SCHEDULE[ Schedule.FLEXIBLE], SIMULATION_PROTOCOL.FRAGMENT_LINKING: FRAGMENT_LINKING_HYDRATION_LAMBDAS } FFIO_NUM_PSEUDOS = 'i_ffio_num_pseudos' FFIO_PARENT2PSEUDO = 's_ffio_parent_to_pseudo' FEP_TITRATION_STATES = 's_fep_TITRATION_STATES' FEP_STATE_INFO = 's_fep_STATE_INFO' FEP_AID2GID = 's_fep_aid2gid' FEP_ALCHEMICAL_CHANGE = 's_fep_ALCHEMICAL_CHANGE' DESMOND_WRITE_JSON = 'b_desmond_write_json'
[docs]class IdConversion(Constants): COMPONENT_TO_COMBINED = 'component_to_combined' ATOM_TOTAL = 'atom_total' PSEUDO_END = 'pseudo_end' PARENT2PSEUDO = 'parent_to_pseudo' PSEUDO2PARENT = 'pseudo_to_parent' TOPOLOGY = 'topology'
GCMC_BATCH_SIZE_DEFAULT = 1600 GCMC_LIGAND = 'i_gcmc_ligand' # keys are (water model, inner timestep fs) # values are: (chemical_potential: kcal/mol, molecule number density: 1/A^3) # exclusion_radius = 1.5 A GCMC_CHEMICAL_POTENTIALS = { ("SPC", 4): (-6.137, 0.032480), ("TIP3P", 4): (-6.011, 0.032722), ("TIP4P", 4): (-5.997, 0.033041), ("TIP4PEW", 4): (-6.858, 0.033145), ("TIP4PD", 4): (-7.694, 0.033083), ("TIP5P", 4): (-5.569, 0.032731), ("SPCE", 4): (-6.958, 0.033), ("TIP4P2005", 4): (-7.064, 0.033), ("SPC", 2): (-6.189, 0.03262), ("TIP3P", 2): (-6.060, 0.0329), ("TIP4P", 2): (-6.051, 0.03315), ("TIP4PEW", 2): (-6.940, 0.03323), ("TIP4PD", 2): (-7.821, 0.03316), ("TIP5P", 2): (-5.628, 0.03285), ("SPCE", 2): (-7.016, 0.033), ("TIP4P2005", 2): (-7.122, 0.033), } # Water models that only work with S-OPLS and not OPLS2005 S_OPLS_WATER_MODELS = { "TIP4P", "TIP4P2005", "TIP4PEW", "TIP4PD", "TIP5P", "SCPE" } # FEP advanced options GUI lambda window option aliases ALIAS_FEP_NUM_LW_DEFAULT = 'num_lw_default' ALIAS_FEP_NUM_LW_CORE = 'num_lw_core' ALIAS_FEP_NUM_LW_CHARGE = 'num_lw_charge' # FFIO velocity _FFIO_PREFIX = 'r_ffio_' _VELOCITY_POSTFIX = '_vel' VELOCITY_PROPERTIES = [ _FFIO_PREFIX + 'x' + _VELOCITY_POSTFIX, _FFIO_PREFIX + 'y' + _VELOCITY_POSTFIX, _FFIO_PREFIX + 'z' + _VELOCITY_POSTFIX ] # FFIO coordinate _COORD_POSTFIX = '_coord' COORD_PROPERTIES = [ _FFIO_PREFIX + 'x' + _COORD_POSTFIX, _FFIO_PREFIX + 'y' + _COORD_POSTFIX, _FFIO_PREFIX + 'z' + _COORD_POSTFIX ]
[docs]class CorrectionTerm(Constants): PKA = "pKa" STATE_PENALTY = "State Penalty" UNKNOWN = "Unknown" BORESCH_RESTRAINT = "Boresch Restraint" FRAGMENT_SOLVATION = "Fragment Solvation"
# keys used in interaction match
[docs]class FEP_STATE_KEYS(Constants): WT = 'wt' MUT = 'mut'
# ASL BACKBONE_CA_ASL = "(backbone and atom.ptype ' CA ')"
[docs]class ENERGY_GROUPS(Constants): PRESSURE_TENSOR = 'pressure_tensor' CORR_ENERGY = 'corr_energy' SELF_ENERGY_ONLY = 'self_energy_only' CROSS_ENERGY_ONLY = 'cross_energy_only' GCMC_INFO = 'gcmc_info' SIMULATION_BOX = 'simulation_box'
# type of cms.Cms
[docs]class SystemType(Constants): ALCHEMICAL = 1 # requires desmond gibbs plugin for alchemical changes BINDING = 2 # requires desmond gibbs plugin for binding FEP OTHER = 0
# property to use titration code for fep USE_TITRATION = 'b_fep_use_titration' # Lambda Dynamics FEP_TITRATABLE_GROUP = 'i_fep_titratable_group' CONSTANT_PH_UNMAP_SIDECHAIN = 'b_titration_unmap_sidechain' CONSTANT_PH_TITRATABLE_WATER = 'b_fep_TITRATABLE_H2O' CONSTANT_PH_PMF_ORDER = 4 # key for conf-pose restraints CONF_POST_RESTRAINTS = "conf_pose_restraints" # For model2 license
[docs]class PRODUCT(Constants): FEP = 'fep' CONSTANT_PH = 'constant_ph' IFD_MD = 'ifd-md'
# For OPLS_DIR SCHRODINGER_MULTISIM_DONT_COPY_OPLS = 'SCHRODINGER_MULTISIM_DONT_COPY_OPLS' # For memory, linear fit is for mem in MB vs num atoms * num lambdas # Data comes from GraphDB runs # For small molecule, abfep, prm stability fep CPU_SLOPE_INTERCEPT = (0.002214250636309, 4162.26530542264) GPU_SLOPE_INTERCEPT = (0.004060048145001, 879.10326851197) # For covalent and selectivity fep COVALENT_CPU_SLOPE_INTERCEPT = (0.00427170019974, 4056.80282331548) COVALENT_GPU_SLOPE_INTERCEPT = (0.010131291639133, -232.357871994725)