From 6f969c32d2a1ba2c0b83af1d9b5de3615e50a0bb Mon Sep 17 00:00:00 2001 From: Rosa Bulo Date: Tue, 23 Jun 2026 18:57:24 +0200 Subject: [PATCH 1/3] Rosa Bulo (REB) SCMSUITE-- SO107: Bugfix. Could only read single forcefieldpatch from RKF before - An RKF can hold multiple AMBER forcefield patches, which are all needed to accurately run a calculation Data extraction from RKF by PLAMS only extracted a single patch. This resulted in a bug in the atomtyping tool. --- .../plams/interfaces/adfsuite/forcefieldparams.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/scm/plams/interfaces/adfsuite/forcefieldparams.py b/src/scm/plams/interfaces/adfsuite/forcefieldparams.py index 463018b17..6ae6c16ab 100644 --- a/src/scm/plams/interfaces/adfsuite/forcefieldparams.py +++ b/src/scm/plams/interfaces/adfsuite/forcefieldparams.py @@ -152,7 +152,7 @@ def __add__(self, other: "ForceFieldPatch") -> "ForceFieldPatch": return ret - def read_from_kf(self, kf: "KFFile") -> None: + def read_from_kf(self, kf: "KFFile", ipatch: int = 0) -> None: """ Read patch infor from kf """ @@ -161,7 +161,7 @@ def read_from_kf(self, kf: "KFFile") -> None: npatches = kf.read_int("AMSResults", "Config.nPatches") patch = ForceFieldPatch() if npatches > 0: - patchtext = kf.read_string("AMSResults", "Config.FFPatch(1)") + patchtext = kf.read_string("AMSResults", f"Config.FFPatch({ipatch + 1})") patch += ForceFieldPatch(patchtext) for key in vars(patch): @@ -298,8 +298,12 @@ def forcefield_params_from_kf(kf: "KFFile") -> Tuple[List[float], List[str], Opt types = [alltypes[i - 1] for i in indices] # Read the force field patch - patch = ForceFieldPatch() - patch.read_from_kf(kf) - if len(patch) == 0: + npatches = kf.read_int("AMSResults", "Config.nPatches") + if npatches == 0: return charges, types, None + patch = ForceFieldPatch() + for i in range(npatches): + p = ForceFieldPatch() + p.read_from_kf(kf, i) + patch += p return charges, types, patch From 1e5be94f10f0fa3d0262065d5b0df06a1336fdf8 Mon Sep 17 00:00:00 2001 From: Rosa Bulo Date: Wed, 24 Jun 2026 10:36:45 +0200 Subject: [PATCH 2/3] Rosa Bulo (REB) SCMSUITE-- SO107: Changed comment --- src/scm/plams/interfaces/adfsuite/forcefieldparams.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scm/plams/interfaces/adfsuite/forcefieldparams.py b/src/scm/plams/interfaces/adfsuite/forcefieldparams.py index 6ae6c16ab..c732e20e4 100644 --- a/src/scm/plams/interfaces/adfsuite/forcefieldparams.py +++ b/src/scm/plams/interfaces/adfsuite/forcefieldparams.py @@ -297,7 +297,7 @@ def forcefield_params_from_kf(kf: "KFFile") -> Tuple[List[float], List[str], Opt indices = kf.read_ints("AMSResults", "AtomTyping.atomIndexToType") types = [alltypes[i - 1] for i in indices] - # Read the force field patch + # Read the force field patches npatches = kf.read_int("AMSResults", "Config.nPatches") if npatches == 0: return charges, types, None From 7822a4cf9e4dc7534292bca0b1bfc2b5309528ea Mon Sep 17 00:00:00 2001 From: David Ormrod Morley Date: Wed, 24 Jun 2026 15:09:19 +0200 Subject: [PATCH 3/3] Mypy fixes --- src/scm/plams/interfaces/adfsuite/ams.py | 2 +- src/scm/plams/interfaces/adfsuite/crs.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scm/plams/interfaces/adfsuite/ams.py b/src/scm/plams/interfaces/adfsuite/ams.py index 3b7aacbb5..08586982e 100644 --- a/src/scm/plams/interfaces/adfsuite/ams.py +++ b/src/scm/plams/interfaces/adfsuite/ams.py @@ -1215,7 +1215,7 @@ def get_polarizability(self, engine: Optional[str] = None) -> np.ndarray: [p_components[3], p_components[4], p_components[5]], ] ) - elif p_components.shape == (3, 3): + elif p_components.shape == (3, 3): # type: ignore[comparison-overlap] polarizability_matrix = p_components else: raise ValueError( diff --git a/src/scm/plams/interfaces/adfsuite/crs.py b/src/scm/plams/interfaces/adfsuite/crs.py index 173da6688..5cd6351ad 100644 --- a/src/scm/plams/interfaces/adfsuite/crs.py +++ b/src/scm/plams/interfaces/adfsuite/crs.py @@ -267,7 +267,7 @@ def get_structure_energy(self, as_df: bool = False) -> Tuple[Optional[Dict], Opt dict_species["NumRepMonmer"] = NumRepMonmer dict_species["NumStrucPerComp"] = NumStrucPerComp - if np.sum(Assoc) > 0: + if np.sum(Assoc) > 0: # type: ignore[arg-type] Assoc_s_idx = self.readkf(section, "Assoc_s_idx") ReqCompIdxAssoc = self.readkf(section, "ReqCompIdxAssoc") NumReqCompAssoc = self.readkf(section, "NumReqCompAssoc")