@@ -108,15 +108,22 @@ def _msd_gaps(traj, mpp, fps, max_lagtime=100, detail=False, pos_columns=None):
108
108
109
109
result = pd .DataFrame (_msd_iter (pos .values , lagtimes ),
110
110
columns = result_columns , index = lagtimes )
111
- result [ 'msd' ] = result [ result_columns [ - len ( pos_columns ):]]. sum ( 1 , skipna = False )
111
+
112
112
if detail :
113
+ result ['msd' ] = result [result_columns [- len (pos_columns ):]].sum (1 , skipna = False )
114
+
113
115
# effective number of measurements
114
116
# approximately corrected with number of gaps
115
117
result ['N' ] = _msd_N (len (pos ), lagtimes ) * len (traj ) / len (pos )
116
118
# If MSD is nan that's because there were zero datapoints. Reset N to 0.
117
119
result ['N' ] = np .where (result ['msd' ].isna (), 0 , result ['N' ])
118
120
# An alternative option at this point would be to scale up N for the rest of the column
119
121
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
+
120
127
result ['lagt' ] = result .index .values / float (fps )
121
128
result .index .name = 'lagt'
122
129
return result
@@ -236,10 +243,6 @@ def emsd(traj, mpp, fps, max_lagtime=100, detail=False, pos_columns=None):
236
243
msds .append (msd (ptraj , mpp , fps , max_lagtime , True , pos_columns ))
237
244
ids .append (pid )
238
245
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
-
243
246
results = msds .mul (msds ['N' ], axis = 0 ).groupby (level = 1 ).mean () # weighted average
244
247
results = results .div (msds ['N' ].groupby (level = 1 ).mean (), axis = 0 ) # weights normalized
245
248
# Above, lagt is lumped in with the rest for simplicity and speed.
0 commit comments