A **Weiner process**, $W(t)\,$, is a continuos-time stocastic process. By definition, the value of the process at time $t$ is:

$$W(t) \sim \mathcal{N}(0,t)$$

where $\mathcal{N}(0,t)$ is a Normally-distributed random variable (RV) with $\mu$=0 and $\sigma^2=t$.

From the definition follows that $W(0)=0$.

Also, for any time instant $t$ and time delay $\tau$ >0 the following is true:

$$W(t+\tau)-W(t) \sim \mathcal{N}(0,\tau)$$

In **Brownian motion** of a freely diffusing particle, the mean squared displacement of a particle $\langle|\vec{r}(t)-\vec{r}(t+\tau)|^2\rangle$ is proportional to the time interval $\tau$ according to

$$\langle|\vec{r}(t)-\vec{r}(t+\tau)|^2\rangle = 2 D N \tau$$

- $\vec{r}(t)$ position at time $t$
- $N$ number of dimensions ($N$=3 for 3D simulations)
- $D$ diffusion coefficient
- $\tau$ time interval.

When using a Weiner process to describe a Brownian motion we must set a physical link between the variance of the Weineer process and the diffusion coefficient.

Remembering that

$$k \mathcal{N}(\mu,\sigma^2) = \mathcal{N}(\mu,k\sigma^2)$$

if we build a process in which "dispacements" are normally distributed with variance equal to $2DN\tau$:

$$W(t+\tau)-W(t) \sim \mathcal{N}(0,2DN\tau)$$

than we are describing the Brownian motion of a particle with diffusion coefficient $D$. To simulate this process we must choose the times at which to evauate the position. For example we can sample the time at uniform intervals with step = $\Delta t$.

The choice of the step depends on which properties we want to simulate. For example, let assume we want to simulate a colloidal particle diffusing through a confocal excitation volume of lateral dimension $S_{spot}$. In order to gather significant information we want to sample the particle position may times during the average diffusion time. The average diffusion time can be estimated setting the standard deviation of the displacement ($W(t+\tau)-W(t)\quad$) equal to $S_{spot}$ and solving for $\tau$

$$S_{spot} = \sqrt{2DN\tau_{spot}} \quad \rightarrow \quad \tau_{spot} = \frac{S_{spot}^2}{2ND}$$

so we want our simulation step to be $<< \tau_{spot}$.

Although $\tau_{spot}$ can be derived theorically from $D$ and from the knowledge of the PSF, we know that for typical biomolecules of few nanometers, diffusing through a diffraction limited exciation spot (of visible light), the diffusion time is of the order of 1ms. Therefore we can safely set the simulation step to 0.5-1μs.

The diffusion coefficient $D$ is given by: $$ D = \frac{k_B T}{3 \pi \eta d} $$

- $k_B$ Boltzman constant
- $T$ temperature in Kelvin
- $\eta$ viscosity (in SI units: Pa/s)
- $d$ radius of the particle in meters

See also Theory - On Browniam motion and Diffusion coefficient

Note that the units of $D$ are $\mathrm{m}^2/\mathrm{s}\;$. Using some reasonable number we obtain:

In [1]:

```
import numpy as np
```

In [2]:

```
d = 5e-9 # particle radius in meters
eta = 1.0e-3 # viscosity of water in SI units (Pascal-seconds) at 293 K
kB = 1.38e-23 # Boltzmann constant
T = 293 # Temperature in degrees Kelvin
D = kB*T/(3*np.pi*eta*d) # [m^2 / s]
D
```

Out[2]:

Or expressing $D$ in $\textrm{nm}^2 /\mu s$

In [3]:

```
Du = D*(1e6)**2/(1e3) # [um^2 / ms]
Du
```

Out[3]:

In [4]:

```
Du = D*(1e9)**2/(1e6) # [nm^2 / us]
Du
```

Out[4]:

We can also estimate $D$ experimentally from the knowledge of the PSF and the diffusion time $\tau_{spot}$

$$S_{spot} = \sqrt{2DN\tau_{spot}} \quad \rightarrow \quad D = \frac{S_{spot}^2}{2N\tau_{spot}}$$

Putting some reasonable number we obtain:

In [5]:

```
S_spot = 0.8e-6
N = 3
tau_spot = 1e-3
D = S_spot**2 / (2*N*tau_spot) # [m^2 / s]
D
```

Out[5]:

In [6]:

```
Du = D*(1e6)**2/(1e3) # [um^2 / ms]
Du
```

Out[6]:

not very different from what we obtained before from the viscosity model.

*How far we travel in X seconds (hint standard deviation of displacement)?*

In [7]:

```
time = 10. # seconds
sigma = np.sqrt(2*D*3*time)
print('Displacement (std_dev): %.2f um' % (sigma*1e6))
```

*How long we need to diffuse an X distance?*

In [8]:

```
space = 1e-6 # m
time = 1.*space**2/(2*D*3)
print('Time for %.1f um displacement: %.1g s' % (space*1e6, time))
```