Thanks for the updates. I only have minor cosmetic changes.
While reviewing, I also realized that your code can solve a problem that has been inherent in the existing code: The run() method can take the frames=[0, 20, 25, 100, 1001, ...]` kwarg to select any frames instead of start/stop/step and if that's the case, the "linear" approach is incorrect (but that case is not being caught). We should select your new code path for un-even frame separations.
I am not asking for this to be resolved in this PR. If you agree that this is a problem and that your code could solve it, could you raise an issue for it so that it's not forgotten.
Originally posted by @orbeckst in #5066 (review)
This issue recognizes that while calculating msd of randomly picked frames (specified by kwarg by user in run), the newly added _conclude_non_linear() should be used instead of the previous _conclude_simple() method which is inaccurate when frames are non linearly placed. In most cases picking frames randomly results in picking frames that are non-linearly spaced so the _conclude_simple() method is not the right way to calculate msd.
This issue recognizes that while calculating msd of randomly picked frames (specified by kwarg by user in run), the newly added
_conclude_non_linear()should be used instead of the previous_conclude_simple()method which is inaccurate when frames are non linearly placed. In most cases picking frames randomly results in picking frames that are non-linearly spaced so the_conclude_simple()method is not the right way to calculate msd.