Source code for schrodinger.application.combiglide.utils
"""
This module contains the utility functions for CombiGlide.
"""
# Copyright Schrodinger, LLC. All rights reserved.
import re
[docs]def get_spec_dict(
filename,
delimiter=':',
pat_replace={}, # noqa: M511
ignore_case=True):
r"""
Reads the file, tokenizes the each line with delimiter, and returns the
dict. It ignores the lines which start with '#'.
:type filename: string
:param filename: The name of the input file.
:type delimiter: str
:param delimiter: line is divided from delimiter to create the <key,value>
of dict.
:type pat_replace: dict
:param pat_replace: this dict can be used to replace pattern, if specified.
For example: pat_replace={'#.*':'', '\s+':' '} would do replace all
characters starting from '#' to end of the line with '' and replace
multiple spaces with one space.
:type ignore_case: bool
:param ignore_case: it is used to create the lowercase keys to make case
insensitive search
Illustration::
A call to get_spec_dict(filename, pat_replace={'#.*':'', '\s+':' '})
with following file..
file content = "
#CombGen input file
#Core molecule
Core: cg_singledock_run1_tproj38171a23586-core.mae
#Attachment AcCl
Chain: AcCl 1 1 1f 1t
Frag: AcCl 1 cg_acid_chlorides_Acid_Cl_C_C
#Attachment Hyd
Chain: Hyd 1 1 2f 2t
Frag: Hyd 1 cg_hydrazines_Hydrazine_C_N
#Attachment NCO
Chain: NCO 1 1 3f 3t
Frag: NCO 1 cg_isocyanates_Isocyanate_C_N
"
would return spec_dict as follow...
{'frag': ['AcCl', '1', 'cg_acid_chlorides_Acid_Cl_C_C',
'Hyd', '1', 'cg_hydrazines_Hydrazine_C_N',
'NCO', '1', 'cg_isocyanates_Isocyanate_C_N'],
'core': ['cg_singledock_run1_tproj38171a23586-core.mae'],
'chain': ['AcCl', '1', '1', '1f', '1t',
'Hyd', '1', '1', '2f', '2t',
'NCO', '1', '1', '3f', '3t']}
"""
spec_dict = {}
file = open(filename)
for line in file:
line = line.strip()
if line and not line.startswith('#'):
key, val = line.split(delimiter)
key = key.strip()
if ignore_case:
key = key.lower()
for pat, replace in pat_replace.items():
val = re.sub(pat, replace, val)
val = re.split(' ', val.strip())
if key in spec_dict:
spec_dict[key] += val
else:
spec_dict[key] = val
file.close()
return spec_dict
# EOF