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