Home | Download software | Tutorial | Extra software

*Click here to return to microrheology
summary
page*

JC Crocker, MT Valentine, ER Weeks, T Gisler, PD Kaplan, AG Yodh, and DA Weitz, Phys. Rev. Lett.

A program designed to use multiple particle trajectories
to isolate the correlated motion between particles (i.e. the
motion of one particle due to movement of another). The outputs
are the parallel (denoted as *rr*) and perpendicular (denoted
as *tt* or *theta-theta*) components of the correlation tensor
as a function of lagtime and particle separation distance.
These correspond to the diagonal components of a correlation
tensor that would be called '*S*' in the Fluctuation/Dissipation
Theorem in Chaikin & Lubensky. With some further analysis,
using msdd.pro,
the output can generate shear moduli with
micrheo.pro.

One advantage of using correlated motion instead of single particle motion is that mechanical properties can be accurately determined even if small scale heterogeneities exist in the material of interest. However, the material being probed must act as a continuum on the length scales probed. The correlation tensor should decay as 1/r in a continuum. Therefore, the spatial behavior of the correlated motion must be probed before moduli data can be accurately determined.

**MICPERPIX**: the pixel scale (micron / pixel)**TIMESTEP**: the time step between the trajectory points (often the frame rate of the camera).**MYDTS**: A logarithmically spaced array of lagtimes is used by default in the code. This can be changed with the mydts keyword, where you pass the code an array of dt's that you want used.**DIM**: The code can be run on two and three dimension trajectories. This can be changed with the dimension keyword. The default is two.**OUTFILE**: This keyword is used to specify a filename to write the results to.

where t is a trajectory file, 2 and 8 and are the minimum and maximum particle separation distances to be used in microns, 5 is the number of bins in the spatial data, 10 is the maximum time in seconds, the pixel scale is 0.096 micron / pixel, the frame rate is 1000 fps, and the results will be written to msd2.test.

In 2 dimensions (polar coordinates): res(*,*,0) contains the log-spaced 'dr' values. res(*,*,1) contains the log-spaced 'dt' values. res(*,*,2) is the longitudinal, 'r-r' mean component. res(*,*,3) is the transverse, 'theta-theta' mean component. res(*,*,4:5) stores the *variances* of the r,theta parts. res(*,*,6) contains the total number of points used in each bin. In 3 dimensions (spherical coordinates): res(*,*,0) contains the log-spaced 'dr' values. res(*,*,1) contains the log-spaced 'dt' values. res(*,*,2) is the longitudinal, 'r-r' mean component. res(*,*,3) is the transverse, 'theta-theta' mean component. res(*,*,4) is the transverse, 'phi-phi' mean component. res(*,*,5:7) store the *variances* of the r,theta,phi parts. res(*,*,8) contains the total number of points used in each bin.The means are what you want, the variances and numbers are intended for use in error estimation of the mean values. The units are um^2 if the inputs are in um. The spatial variation of the two point correlation tensor can be checked by plotting the longitudinal or transverse components as a function of r, the particle separation. This operation should be done at several time points to ensure continuum like behavior at all lagtimes. An example is shown below:

**IDL> t=10
IDL> Drr=(m2(*,t,2))
IDL> r=m2(*,t,0)
IDL> plot_oo,r,Drr,psym=circ()
IDL> print,m2(0,t,1); prints the lagtime value this data
corresponds to
**

This would plot Drr as function of *r* at the 10th time point.
The resulting plot should have a slope of negative one.
Different lagtimes can be evaluated by changing the value of
*t*.
Different slopes indicate non-continuum behavior. The range
of particle separations can be set to something large here
and then limited in msdd.pro.

r1 r1 r1 r1 r1 ... r2 r2 r2 r2 r2 ... r3 r3 r3 r3 r3 ... . . .The second plane [m2(*,*,1)] contains the values of

t1 t2 t3 t4 t5 ... t1 t2 t3 t4 t5 ... t1 t2 t3 t4 t5 ... . . .

Thus if you look at the data along the rows in each plane, you
are taking the data at constant r, but varying t. Likewise the
data along the columns is constant t, but varying r. The
correlation functions you want are stored in the higher planes,
m2(*,*,2) etc. Thus, you can generate plots as a function of
*dr* or *dt*:

**
IDL> n = 15
IDL> plot_oo,m2(*,n,0),m2(*,n,2),psym=circ(),xtitle="dr"
IDL> print,"lag time dt = ",m2(0,n,1)
**

**
IDL> n = 20
IDL> plot_oo,m2(n,*,1),m2(n,*,2),psym=circ(),xtitle="dt"
IDL> print,"separation dr = ",m2(n,0,0)
**

In the first example, you're plotting the data from plane 2 (the correlation) as a function of plane 0 (the dr values, taken at constant dt). You take a quick peek at plane 1 to see what the dt is that you've chosen by setting n=15. In the second example, you plot the data from plane 2 as a function of plane 1 (the dt values, at constant dr). You then look at plane 0 to see what the dr is that corresponds to n=20.

Or, you can take the whole thing and feed it into IDL's surface plotter:

**
IDL> surface,m2(*,*,2),m2(*,*,0),m2(*,*,1),/xl,/yl,yr=[0.1,10]
**

And *that* is the benefit of having this in a 3D array, it's
exactly what IDL's surface command wants to see. But, I
personally (Eric) prefer to examine several individual curves rather
than the whole surface. For example, it's nice to check if you
have 1/r behavior, so I like to plot a few curves (at different
dt's) together on a log-log plot to see if they are 1/r.

This program was written by John, and this webpage was written by Brenton Hoffman, a student working with John (with some editing to html-ize it by Eric). Eric wrote the subsection entitled "Array Structure".

*Click here to return to microrheology
summary
page*

- John Crocker: jcrocker(at)seas.upenn.edu
- Eric Weeks: weeks(at)physics.emory.edu