Code: Select all
#time interval for steps (comparable to camera fps)
dt = 1/485
#total measurement time (comparable to video length)
totalT = 4850
#Theoretical diffusion constant for a particle of size 30nm
diffC = 16e-12
track = np.zeros((totalT,3))
for i in range(1,len(track)):
track[i,0] = track[i-1,0]+dt
track[i,1] = track[i-1,1] + np.sqrt(2*diffC*dt)*np.random.normal(0,1)
track[i,2] = track[i-1,2] + np.sqrt(2*diffC*dt)*np.random.normal(0,1)
< /code>
I berechnen Sie die MSD dann manuell über alle möglichen Zeitintervalle mit dem folgenden Code: < /p>
MSD = np.zeros((len(track),4))
for tau in range(1,len(track)):
step = 1
displacements = track[0:-tau:step,1:]-track[tau::step,1:]
MSD[tau,0] = tau*dt
MSD[tau,1] = np.mean(displacements[:,0]**2)-np.mean(displacements[:,0])**2
MSD[tau,2] = np.mean(displacements[:,1]**2)-np.mean(displacements[:,1])**2
MSD[tau,3] = MSD[tau, 1] + MSD[tau, 2]
Da die Anzahl der Datenpunkte in beiden Methoden genau gleich sind, kann ich nicht erkennen, warum meine manuelle Methode mir keine lineare Beziehung zwischen der MSD und der Zeitverzögerung geben sollte. Bedeutet dies, dass der Trackpy -Algorithmus mit den Daten etwas Unzuverlässiges tut? Oder ist mit meiner manuellen Berechnung etwas grundlegend falsch? Dies sollte eine schnellere Methode sein, aber nicht unbedingt genauer, wenn ich sie richtig verstehe.