4.1 KiB
Drag Force Particle Tracking
Two-notebook pipeline for measuring drag force on brightfield particles in a viscous fluid.
Drag Force Particle Tracking Automatic.ipynb— Track particle centroids from TIFF image sequencesDrag_auto.ipynb— Load tracking output, define movement regions, and compute drag force vs. displacement
Part 1 — Particle Tracking
Workflow
-
Load images — Scans a main folder for speed subfolders (e.g.
0.1,0.15,0.2,0.25). Each subfolder contains a TIFF image sequence for one stage speed. Images are converted to grayscale, cropped, and inverted. -
Set tracking parameters — Configure the number of particles, bounding radius, mask radius, and initial ring radius guess in the setup cell.
-
Click particle centers — An interactive figure opens for each speed. Click the center of each particle in frame 0. Clicks are stored and used as the initial guess for tracking.
-
Test run — Tracks the first 10 frames per speed to verify settings before committing to a full run.
-
Verify — Overlays the fitted rings on frame 0 for each speed. If the circles look off, adjust click positions or tracking parameters and re-run the test.
-
Full tracking — Runs the centroid-fitting algorithm across all frames for every speed. Each frame uses the previous frame's result as the next initial guess.
-
Save output — Choose an output folder using the widget. Saves one CSV and one JSON metadata file per speed.
Key Parameters
| Parameter | Description |
|---|---|
MAIN_FOLDER |
Path to the folder containing speed subfolders |
TIFF_PATTERN |
Glob pattern for images (default: *.tiff) |
crop_dimensions |
Pixel crop region applied to every frame |
num_particles |
Number of particles to track per frame |
particle_r_bound |
Search radius (px) around each particle centroid |
mask_r |
Masks bright pixels near the particle center (px) |
r0 |
Initial guess for the bright ring radius (px) |
Output Format
For each speed subfolder, two files are saved:
{speed} mms.csv— No header. Each row is one frame. Columns arecx0, cy0, r0, cx1, cy1, r1, cx2, cy2, r2, ...(3 columns per particle).{speed} mms.json— Metadata: tracking parameters and initial click positions.
Part 2 — Drag Force Analysis
Workflow
-
Load CSVs — Reads all
*.csvfiles from a folder (output from Part 1). Automatically detects the number of particles from the column count. -
Set regions (slider cell) — For each speed, an interactive plot shows the x-position traces for all particles over time. Use the three sliders to define:
- Stationary — frames where the stage is not moving (baseline)
- Movement 1 — first direction of stage movement
- Movement 2 — second direction of stage movement (return)
Click Confirm All & Continue when all speeds are set.
-
Analyze — Computes the mean displacement of each particle relative to its stationary baseline and the expected Stokes drag force at each speed. Fits a linear spring constant
k(pN/µm) per particle per direction through the origin.
Key Parameters
| Parameter | Description |
|---|---|
folder |
Path to folder containing {speed} mms.csv files |
PIXELS_PER_MICRON |
Pixel-to-micron conversion factor |
ETA |
Fluid viscosity (Pa·s); default: 0.001 (water) |
R |
Particle radius (m); default: 1e-6 (1 µm) |
TRIM |
Frames trimmed from each edge of a region to remove transients |
Output Plot
- Color = particle (each particle gets a unique color)
- Filled circles = Direction 1, open circles = Direction 2
- Solid fit line = Direction 1, dotted fit line = Direction 2
- Separate origin-constrained fit per particle per direction with 95% confidence interval shading
- Printed spring constant
k ± σ(pN/µm) for each particle and direction
Dependencies
numpy, pandas, scipy, scikit-image, pims, trackpy, matplotlib, ipywidgets, ipympl
Install missing packages with pip install <package>.