# Deskew
General programming/thinking flow on how to deskew.
### This diagram describes the big picture.

1) We know that data acquisition happens on an angle, as described in this figure.

For more details of how the acquisition geometry works and why we need to deskew, please watch this video https://cbmf.hms.harvard.edu/avada_faq/deskewing/ (highly recommended)
if you compare these two figures carefully
| Figure 1 | Figure 2 |
| -------- | -------- |
|  |  |
In the volume, we are translating each slice on the x-axis by some factor to make it look proper (deskew).
We calculate this factor as follow.
Known values from the microscope
- Aqusition angle = 31.8°
- xy pixel size (dx) = 0.104 µm
- step size (dz) = 0.4 µm
Known values from tiff stack:
- nx = image_width
- ny = image_height
- nz = image_length (depth in z)
> shift_factor = dz * np.abs(np.cos(angle * np.pi / 180)) / dx
then we multiply it by the index of the slice to get the correct shift factor
//considering i starts with 0
```
for i in range(nz):
traslate_on_x(image[i], shift_factor * i)
```
- Here are the Cuda kernel and the kernel launch function
https://github.com/dmilkie/cudaDecon/blob/master/src/geometryTransform.cu
- This the deskew initiation https://github.com/dmilkie/cudaDecon/blob/8218b26fd345cd870acc008696dd7ce243996d9c/src/linearDecon.cpp#L656
- Here is a python wrapper for the same.
https://github.com/tlambert03/pycudadecon/blob/master/pycudadecon/affine.py