Software
Introduction
To test the effect of our peptides and antibodies on sperm we needed a way to quantify the motility of spermatozoa. Ideally, we would be able to see the decreasing of sperm motility when in contact with our molecules or our bacteria. For this, we developed a software that is able to track spermatozoa frame by frame. This software can give us the speed of each spermatozoon from a video and thus permits us a quantitative analysis of sperm motility. Our tracking tool is based on the “Trackpy” package that contains basic functions for tracking biological elements in sample.
All the functions that we are using are mentioned and described at the end of the page and the commented code is linked below. In this part, we are explaining the general principle and steps of our tracking software.
General steps to analyze the sperm motility :
First of all the video is recorded by the camera and saved in TIFF format (figure 1).
Figure 1 : Video of spermatozoa
The first goal of the tracking is to identify all the spermatozoa. This identification needs to be a good balance sensibility and specificity (figure 2).
Figure 2 : Identification of the spermatozoa thanks to the software
Once all spermatozoa are detected, the software analyzes the position frame by frame and gives as an output the trajectory of each spermatozoa (figure 3).
Figure 3 : Trajectory of spermatozoa predicted by the software
The trajectories unable us to calculate the speed of each spermatozoa. We calculate the mean velocity and the median velocity with the uniform filter. Lastly, in some cases, we plotted a histogram with the percentage of motile spermatozoa depending on their velocity.(figure 4)
The functions used in the script :
We start using the tp.locate function and put the good parameter that fit the circle to the object that has an average diameter.
We detect for each frame spermatozoa by using the tp.batch function and we link each frame with another and annotate the same particle at each frame.
We filter the data that we get by using tp.filter to keep only the spermatozoa that we detect only for 60FPs.
We make other filtration as the filter by intensity to keep only the spermatozoa that have an intensity high specific mass.
We add another filtration that it’s done manually in case the previous filtration doesn’t succeed to delete as the noise of background. Also, we combine the trajectory manually for the same spermatozoa.
We add to the script line of code to make a video with trajectory. To see the efficacity of the tracking.
We use the function tp.compute_drift to delete the drift case by the flux of the medium.
We add to the DataFrame other columns that transform from pixel x and y position, to Um and final we calculate the velocity.
To have more flexibility to use the data for each Spermatozoa we transform the DataFrame to Nestedictionary that contain dictionary and each dictionary contain dx, dy, and velocity for spermatozoa.
Explanation of the script line by line
Here you can find the script and its explanation line by line : tutorial .
You can also download our fully commented script freely on our github page : tutorial on github.