"""
This module documents all possible Macro-pKa input keywords.
"""
# Contributors: Mark A. Watson
import schrodinger.application.jaguar.macro_pka_constants as constants
from schrodinger.application.jaguar.workflow_keywords import Choices
from schrodinger.application.jaguar.workflow_keywords import WorkflowKeyword
MACROKA_KEYWORDS = {}
INPUT_MOLECULE = 'infile'
AUTOCONF_INPUT = 'autoconf_config'
TRAINING_INPUT = 'training_data'
CONFORMER_INPUT = 'conformer_files'
GAS_GEOPT = 'gas_geopt'
QM_PROTOCOL = 'qm_protocol'
RELATIVE_CHARGES = 'relative_charges'
ACTIVE_ATOMS = 'active_atoms'
[docs]def keyword(name, valid_type, default, description):
"""
Convenience function to create a dictionary of WorkflowKeyword's
"""
if name in MACROKA_KEYWORDS:
raise ValueError('keyword %s is duplicated' % name)
# Define all keywords in lower case
MACROKA_KEYWORDS[name.lower()] = WorkflowKeyword(name=name.lower(),
valid_type=valid_type,
default=default,
description=description)
[docs]def generate_all_keywords():
#------------------------------------------------------------------------------
# Add new "list of strings" Macro-pKa keywords here
#------------------------------------------------------------------------------
description = '.mae files containing precomputed conformations for each charge.'
description += f' These keywords are mutually exclusive: {constants.MUTUALLY_EXCLUSIVE_1}'
keyword(name=CONFORMER_INPUT,
valid_type=[str],
default=[],
description=description)
#------------------------------------------------------------------------------
# Add new "list of int" Macro-pKa keywords here
#------------------------------------------------------------------------------
keyword(name=RELATIVE_CHARGES,
valid_type=[int],
default=constants.SCAN_CHARGES,
description='Included charge states relative to input structure.')
keyword(name=ACTIVE_ATOMS,
valid_type=[int],
default=[],
description='Atom indices of tautomeric active sites.')
keyword(name='chiral_atoms',
valid_type=[int],
default=[],
description='Atom indices for chiral centers to racemize.')
#------------------------------------------------------------------------------
# Add new "list of float" Macro-pKa keywords here
#------------------------------------------------------------------------------
# keyword(name='do_pka_delta_filtering',
# valid_type=[float],
# default=FIXME,
# description='Enable filtering of tautomers using fast-pKa delta values.')
#------------------------------------------------------------------------------
# Add new "boolean" Macro-pKa keywords here
#------------------------------------------------------------------------------
keyword(name='debug',
valid_type=bool,
default=False,
description='Print extra debugging information.')
keyword(name='protonate',
valid_type=bool,
default=False,
description='Protonate input structure.')
keyword(name='deprotonate',
valid_type=bool,
default=False,
description='Deprotonate input structure.')
keyword(
name=GAS_GEOPT,
valid_type=bool,
default=False,
description='Use gas-phase for QM geometry optimizations instead of PCM.'
)
keyword(name='add_extended_confs',
valid_type=bool,
default=False,
description='Add extended structures to the pool of conformers.')
keyword(
name='use_opls2005',
valid_type=bool,
default=False,
description=
'Use OPLS2005 forcefield for conformational search (no license required).'
)
keyword(name='truncate',
valid_type=bool,
default=False,
description="Compute micro-pKa's using truncation.")
keyword(name='qrnn_csrch',
valid_type=bool,
default=False,
description=
"Use QRNN to accelerate the filtering of conformers and tautomers.")
#------------------------------------------------------------------------------
# Add new "integer" Macro-pKa keywords here
#------------------------------------------------------------------------------
description = 'Do conformational search with <N> confs per tautomer.'
description += f' These keywords are mutually exclusive: {constants.MUTUALLY_EXCLUSIVE_1}'
keyword(name='csrch', valid_type=int, default=0, description=description)
description = 'Do MD-QM conf search with <N> confs per tautomer.'
description += f' These keywords are mutually exclusive: {constants.MUTUALLY_EXCLUSIVE_1}'
keyword(name='md_csrch', valid_type=int, default=0, description=description)
#------------------------------------------------------------------------------
# Add new "float" Macro-pKa keywords here
#------------------------------------------------------------------------------
keyword(name='pka_min',
valid_type=float,
default=constants.PKA_MIN_DEFAULT,
description='Minimum macro-pKa sweep cut-off value.')
keyword(name='pka_max',
valid_type=float,
default=constants.PKA_MAX_DEFAULT,
description='Maximum macro-pKa sweep cut-off value.')
keyword(name='pH',
valid_type=float,
default=constants.PH_DEFAULT,
description='pH for tautomer populations.')
#------------------------------------------------------------------------------
# Add new "string" Macro-pKa keywords here
#------------------------------------------------------------------------------
keyword(name=INPUT_MOLECULE,
valid_type=str,
default='',
description='Input .mae file containing one structure.')
keyword(name=QM_PROTOCOL,
valid_type=Choices(*constants.QM_PROTOCOL_CHOICES),
default=constants.QM_PROTOCOL_DEFAULT,
description='Choice of DFT functional to compute the raw pKa')
description = 'Custom AutoConf config file for generating conformers and tautomers.'
description += f' These keywords are mutually exclusive: {constants.MUTUALLY_EXCLUSIVE_1}'
keyword(name=AUTOCONF_INPUT,
valid_type=str,
default='',
description=description)
keyword(name=TRAINING_INPUT,
valid_type=str,
default='',
description='Custom .mae file for empirical training data.')