added fake _xdr attributes in case the trajectory was constructed by other means than reading a gromacs xtc file
This commit is contained in:
@@ -23,6 +23,8 @@ from .logging_util import logger
|
||||
from . import atoms
|
||||
from .coordinates import Coordinates
|
||||
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
CSR_ATTRS = ("data", "indices", "indptr")
|
||||
NOJUMP_MAGIC = 2016
|
||||
Group_RE = re.compile(r"\[ ([-+\w]+) \]")
|
||||
@@ -240,7 +242,18 @@ def generate_nojump_matrices(trajectory: Coordinates):
|
||||
save_nojump_matrices(trajectory.frames)
|
||||
|
||||
|
||||
def _ensure_xdr(reader: BaseReader):
|
||||
"""Patch missing _xdr attribute for non-XDR readers (e.g. LAMMPS DumpReader)
|
||||
with a stable mock so checksums are consistent across runs."""
|
||||
if not hasattr(reader.rd, '_xdr'):
|
||||
mock_xdr = MagicMock()
|
||||
mock_xdr.offsets = np.arange(len(reader))
|
||||
print(f"Adding mock _xdr attribute for to reader of length {len(reader)}.")
|
||||
reader.rd._xdr = mock_xdr
|
||||
|
||||
|
||||
def save_nojump_matrices(reader: BaseReader, matrices: npt.ArrayLike = None):
|
||||
_ensure_xdr(reader)
|
||||
if matrices is None:
|
||||
matrices = reader.nojump_matrices
|
||||
data = {"checksum": checksum(NOJUMP_MAGIC, checksum(reader))}
|
||||
@@ -253,6 +266,7 @@ def save_nojump_matrices(reader: BaseReader, matrices: npt.ArrayLike = None):
|
||||
|
||||
|
||||
def load_nojump_matrices(reader: BaseReader):
|
||||
_ensure_xdr(reader)
|
||||
zipname = nojump_load_filename(reader)
|
||||
try:
|
||||
data = np.load(zipname, allow_pickle=True)
|
||||
|
||||
Reference in New Issue
Block a user