Source code for AlloViz.Wrappers.GetContacts
"""GetContacts wrapper
It calculates contact frequencies.
"""
import os, time, sys
from pkgutil import get_loader
import pandas
from .Base import lazy_import, Multicore
from ..AlloViz.utils import get_pool
sys.path.append(os.path.dirname(get_loader("AlloViz").path) + "/Packages/getcontacts")
imports = {
"_getcontacts_contacts": ".Packages.getcontacts.get_dynamic_contacts",
"_getcontacts_freqs": ".Packages.getcontacts.get_contact_frequencies",
}
for key, val in imports.items():
exec(f"{key} = lazy_import(*{key, val})")
[docs]
class GetContacts(Multicore):
"""GetContacts' contact frequencies
"""
def _computation(self, xtc):
""""""
path = self._path
ctcs = f"{path}/{xtc}.tsv"
freqs = f"{path}/{xtc}_freqs.tsv"
if not os.path.isfile(freqs):
_getcontacts_contacts.main(f"--topology {self._pdbf} --trajectory {self._trajs[xtc]} --output {ctcs} --itypes all --cores {self.taskcpus}".split())
_getcontacts_freqs.main(f"--input_files {ctcs} --output_file {freqs}".split())
return freqs, xtc
def _save_pq(self, args):
freqs, xtc = args
df = pandas.read_csv(freqs, sep="\t", skiprows=2,
index_col = (0, 1), names = [f"{xtc}"])
df.index = df.index.map(lambda idx: tuple(sorted([res.split(":", 1)[-1] for res in idx], key = lambda res: int(res.split(":")[-1]))))
df.to_parquet(self._rawpq(xtc))