Skip to content

Commit 34a1102

Browse files
- Fix ts buffer overwrite issue in BufferedTrajectory
- Rename per-frame and batch compute methods to be generic in ROG
1 parent 68448a3 commit 34a1102

2 files changed

Lines changed: 16 additions & 7 deletions

File tree

mdadash/backend/analyses/rog.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ def on_input_change(self, attribute, _old_value, new_value):
145145
self.y_values = deque(maxlen=self.maxlen)
146146
self._set_x_values()
147147

148-
def _compute_rog_per_frame(self):
148+
def _compute_per_frame(self):
149149
"""Compute ROG values for current frame"""
150150
masses = self.ag.masses
151151
total_mass = np.sum(masses)
@@ -169,12 +169,12 @@ def _compute_rog_per_frame(self):
169169
rog,
170170
)
171171

172-
def _compute_rog_batch(self, batch_size):
172+
def _compute_batch(self, batch_size):
173173
"""Compute ROG values for current batch"""
174174
values = []
175175
for i in range(batch_size):
176176
_ = self.u.trajectory[i]
177-
values.append(self._compute_rog_per_frame())
177+
values.append(self._compute_per_frame())
178178
return values
179179

180180
def _create_plot(self, values):
@@ -201,17 +201,17 @@ def _create_plot(self, values):
201201

202202
def run_per_frame(self):
203203
"""per-frame run handler"""
204-
self._create_plot(self._compute_rog_per_frame())
204+
self._create_plot(self._compute_per_frame())
205205

206206
def run_batch(self, batch_size):
207207
"""batch run handler"""
208-
self._create_plot(self._compute_rog_batch(batch_size))
208+
self._create_plot(self._compute_batch(batch_size))
209209

210210
def get_parallel_job(self, batch_size):
211211
"""get parallel job handler"""
212212
if self._run_frequency == "batch":
213-
return delayed(self._compute_rog_batch)(batch_size)
214-
return delayed(self._compute_rog_per_frame)()
213+
return delayed(self._compute_batch)(batch_size)
214+
return delayed(self._compute_per_frame)()
215215

216216
def apply_parallel_results(self, values):
217217
"""apply parallel results handler"""

mdadash/backend/kernel/core.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,14 @@ def next(self):
5151
self._buffer.append(ts.copy())
5252
return ts
5353

54+
def _prepare_for_next(self):
55+
"""IMDReader during `_read_frame` loads the new frame into the current
56+
timestep using `_load_imdframe_into_ts`. This will overwrite the values
57+
if current ts is a reference to a buffer item. Hence make a copy to
58+
prevent current buffer items from getting overwritten during iteration.
59+
"""
60+
self._trajectory.ts = self._buffer[-1].copy()
61+
5462

5563
class CommHandler:
5664
"""Comm Handler
@@ -293,6 +301,7 @@ def _trajectory_next(self, u, step):
293301
# with support for 'Transmission rate' packet
294302
# Burn the timesteps until we reach the desired step
295303
# Don't use next() to avoid unnecessary transformations
304+
u.trajectory._prepare_for_next()
296305
while (u.trajectory._frame + 1) % step != 0:
297306
u.trajectory._read_next_timestep()
298307
u.trajectory.next()

0 commit comments

Comments
 (0)