User Tools

Site Tools


macro:basic_diffusion_analysis
//Example macro that does a diffusion analysis on a results table of tracking data
//The required format is as generated by the Manual Tracking plugin 
//http://rsbweb.nih.gov/ij/plugins/track/track.html
//assuming Results Table column headings; Track > Slice > X > Y
//It requires many tracks and many time points!
//Plots the cumulative mean squared displacement (MSD) per time point
//For a more accurate approach see the time ensemble average example

dis2 = 0;
for (i=0; i<nResults(); i++){
	if (getResult("Slice", i)==1) {setResult("Dis^2", i, 0);}

	else{ if (getResult("Track", i)>getResult("Track", i-1)) {setResult("Dis^2", i, 0);} 
	
	else {
	B9 = getResult("X", i);
	B8 = getResult("X", i-1);
	C9 = getResult("Y", i);
	C8 = getResult("Y", i-1);
	disx=(B9-B8)*(B9-B8);
	disy=(C9-C8)*(C9-C8);
	dis2 = (disx+disy);
	setResult("Dis^2", i, dis2);
		}
	}
}
updateResults;

//get last slice
maxslice = 0;
for (b=0; b<nResults(); b++) {
    if (getResult("Slice",b)>maxslice)
    {
     maxslice = getResult("Slice",b);
    	}
    	else{};
}

//get first slice
minslice = maxslice;
for (c=0; c<nResults(); c++) {
    if (getResult("Slice",c)<minslice)
    {
     minslice = getResult("Slice",c);
    	}
    	else{};
}

//Calculate MSD for each slice and append to a new array (MSD)
MSD = newArray();
t=0;
time = newArray();
z = 0;

for (m=minslice; m<maxslice; m++){
	slice = newArray();
	for (l=0; l<nResults(); l++) {if (getResult("Slice", l)==m) {	
		x = getResult("Dis^2", l);
		slice = Array.concat(slice, x);
	}
}
t++;
Array.getStatistics(slice, min, max, mean, std);
z = mean+z;
MSD = Array.concat(MSD, z);
time = Array.concat(time, t);
}
//Plot cumulative MSD against time
Fit.doFit("Straight Line", time, MSD);
Fit.plot();

//Richard Mort 26/01/2013
macro/basic_diffusion_analysis.txt ยท Last modified: 2019/04/12 13:13 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki