Skip to content

Commit c7ae572

Browse files
committed
Handle normalised lambda and lambda_grad metadata entries.
1 parent f6c9979 commit c7ae572

1 file changed

Lines changed: 14 additions & 9 deletions

File tree

src/BioSimSpace/FreeEnergy/_relative.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,15 +1059,20 @@ def _somd2_extract(parquet_file, T=None, estimator="MBAR"):
10591059
raise ValueError("Parquet metadata does not contain 'lambda'.")
10601060
if not is_mbar:
10611061
try:
1062-
lambda_grad = metadata["lambda_grad"]
1062+
# Normalise to :.5f strings to match sire energy trajectory column names.
1063+
lambda_grad = [f"{float(v):.5f}" for v in metadata["lambda_grad"]]
10631064
except:
10641065
raise ValueError("Parquet metadata does not contain 'lambda grad'")
10651066
else:
10661067
try:
1067-
lambda_grad = metadata["lambda_grad"]
1068+
# Normalise to :.5f strings to match sire energy trajectory column names.
1069+
lambda_grad = [f"{float(v):.5f}" for v in metadata["lambda_grad"]]
10681070
except:
10691071
lambda_grad = []
10701072

1073+
# Key used to index the simulated lambda column in the dataframe.
1074+
lam_key = f"{lam:.5f}"
1075+
10711076
# Make sure that the temperature is correct.
10721077
if not T == temperature:
10731078
raise ValueError(
@@ -1083,7 +1088,7 @@ def _somd2_extract(parquet_file, T=None, estimator="MBAR"):
10831088
df = df[[x for x in df.columns if x not in lambda_grad]]
10841089

10851090
# Subtract the potential at the simulated lambda.
1086-
df = df.subtract(df[lam], axis=0)
1091+
df = df.subtract(df[lam_key], axis=0)
10871092

10881093
# Apply the existing attributes.
10891094
df.attrs = attrs
@@ -1096,19 +1101,19 @@ def _somd2_extract(parquet_file, T=None, estimator="MBAR"):
10961101
lam_delta = lambda_grad[0]
10971102

10981103
# Forward difference.
1099-
if lam_delta > lam:
1100-
incr = lam_delta - lam
1101-
grad = (df[lam_delta] - df[lam]) / incr
1104+
if float(lam_delta) > lam:
1105+
incr = float(lam_delta) - lam
1106+
grad = (df[lam_delta] - df[lam_key]) / incr
11021107

11031108
# Backward difference.
11041109
else:
1105-
incr = lam - lam_delta
1106-
grad = (df[lam] - df[lam_delta]) / incr
1110+
incr = lam - float(lam_delta)
1111+
grad = (df[lam_key] - df[lam_delta]) / incr
11071112

11081113
# Central difference.
11091114
else:
11101115
lam_below, lam_above = lambda_grad
1111-
double_incr = lam_above - lam_below
1116+
double_incr = float(lam_above) - float(lam_below)
11121117
grad = (df[lam_above] - df[lam_below]) / double_incr
11131118

11141119
# Create a DataFrame with the multi-index

0 commit comments

Comments
 (0)