Source code for schrodinger.application.watermap.utils
"""
General WaterMap utilities
Copyright Schrodinger, LLC. All rights reserved.
"""
import os
import zipfile
from schrodinger import structure
[docs]def archive_wm(wm_fname, out_path=None, trj=False):
if not os.path.exists(wm_fname):
raise OSError('"%s" does not exist.' % wm_fname)
# If there is no watermap property in the file then this is not
# a valid watermap file
st_reader = structure.StructureReader(wm_fname)
for st in st_reader:
try:
if st.property['s_watermap_type'] == 'watermap':
break
except:
pass
else:
raise OSError('Watermap structure does not exist in "%s".' % wm_fname)
base_dir = os.path.dirname(wm_fname)
base_name = os.path.basename(wm_fname)
cwd = os.getcwd()
if not base_dir:
base_dir = os.getcwd()
os.chdir(base_dir)
trj_list = []
for k in list(st.property):
if k == 's_watermap_idx_file' or k == 's_watermap_trj_file':
fname = st.property[k]
trj_list.append(fname)
del st.property[k]
file_list = []
file_list.append(base_name)
for k in list(st.property):
if k.find('_file') > 0:
fname = st.property[k]
if os.path.exists(fname):
file_list.append(fname)
else:
print('"%s" is not found. Skipping to archive this file.' %
fname)
# If the out_path is just a directory we will add the
# jobname to the output .zip, otherwise we would end up
# with a file /path/to/_wm.zip
if out_path:
if os.path.isdir(out_path):
out_path = os.path.join(out_path,
base_name[:base_name.find('_wm.mae')])
if not out_path.endswith('_wm.zip'):
archive_fname = out_path + '_wm.zip'
else:
archive_fname = out_path
else:
archive_fname = base_name[:base_name.find('_wm.mae')] + '_wm.zip'
# Compress the file
with zipfile.ZipFile(archive_fname, 'w') as ar_file:
for f in file_list:
ar_file.write(f)
if trj:
for f in trj_list:
ar_file.write(f)
os.chdir(cwd)
return archive_fname