In [2]:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

In [3]:
# Multiple Particles
def Deff_calc(x,y,t):
    row_ct = x.shape[0]
    col_ct = x.shape[1]
    N = row_ct
    SD = np.zeros((row_ct,col_ct-1))
    MSD = np.zeros((row_ct,col_ct-1))
    D_eff = np.zeros((row_ct,col_ct-1))
    q = 1
    while q <= N:
        i = 1
        while i <= col_ct-1:
            SD[q-1][i-1] = (abs(x[0][0]-x[q-1][i]) ** 2 + abs(y[0][0]-y[q-1][i]) ** 2)
            total_SD = 0
            p = i
            while p >= 1:
                total_SD = total_SD + SD[q-1][p-1]
                p -= 1
            MSD[q-1][i-1] = total_SD
            D_eff[q-1][i-1] = MSD[q-1][i-1]/4/t[i]
            i += 1
        q += 1
    MSD_avg = np.average(MSD, axis=0)
    D_eff_avg = np.average(D_eff, axis=0)
    #print(SD)
    #print(MSD)
    #print(D_eff)
    #print(D_eff_avg)
    #print(MSD_avg)
    plt.figure(1)
    plt.subplot(211)
    plt.xlabel("time")
    plt.ylabel("MSD")
    plt.title("MSD vs. time")
    plt.plot(t[1:len(t)],MSD_avg)
    plt.tight_layout()
    #plt.show()
    
    plt.subplot(212)
    plt.xlabel("time")
    plt.ylabel("D_eff")
    plt.title("D_eff vs. time")
    plt.plot(t[1:len(t)],D_eff_avg)
    plt.tight_layout()
    plt.show()
Deff_calc(np.array([[0,-3.00,-0.5,-3.00,2.00,-2.50,2.50],[3,-2.5,6,-2,-4,-1,2],[-2,-4,-6,-1,3,1,0]]), np.array([[0,2.50,3.50,-4.0,0.00,-0.50,2.50],[2,5,4,6,-2,-1,0],[-2,-5,-7,-1,1,-3,-1]]), np.array([0,1,2,3,4,5,6]))