Skip to content

Commit accabaf

Browse files
committed
FIX Issue #772 without leaving dangling NaN
1 parent b9a43fc commit accabaf

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

trackpy/motion.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,22 @@ def _msd_gaps(traj, mpp, fps, max_lagtime=100, detail=False, pos_columns=None):
108108

109109
result = pd.DataFrame(_msd_iter(pos.values, lagtimes),
110110
columns=result_columns, index=lagtimes)
111-
result['msd'] = result[result_columns[-len(pos_columns):]].sum(1, skipna=False)
111+
112112
if detail:
113+
result['msd'] = result[result_columns[-len(pos_columns):]].sum(1, skipna=False)
114+
113115
# effective number of measurements
114116
# approximately corrected with number of gaps
115117
result['N'] = _msd_N(len(pos), lagtimes) * len(traj) / len(pos)
116118
# If MSD is nan that's because there were zero datapoints. Reset N to 0.
117119
result['N'] = np.where(result['msd'].isna(), 0, result['N'])
118120
# An alternative option at this point would be to scale up N for the rest of the column
119121

122+
# remove np.nan because it causes problems
123+
result['msd'] = np.where(result['msd'].isna(), 0, result['msd'])
124+
else:
125+
result['msd'] = result[result_columns[-len(pos_columns):]].sum(1, skipna=True)
126+
120127
result['lagt'] = result.index.values/float(fps)
121128
result.index.name = 'lagt'
122129
return result
@@ -236,10 +243,6 @@ def emsd(traj, mpp, fps, max_lagtime=100, detail=False, pos_columns=None):
236243
msds.append(msd(ptraj, mpp, fps, max_lagtime, True, pos_columns))
237244
ids.append(pid)
238245
msds = pandas_concat(msds, keys=ids, names=['particle', 'frame'])
239-
240-
# remove np.nan because it would make the rest of the calculation break
241-
msds['msd'] = np.where(msds['msd'].isna(), 0, msds['msd'])
242-
243246
results = msds.mul(msds['N'], axis=0).groupby(level=1).mean() # weighted average
244247
results = results.div(msds['N'].groupby(level=1).mean(), axis=0) # weights normalized
245248
# Above, lagt is lumped in with the rest for simplicity and speed.

0 commit comments

Comments
 (0)