Skip to main content

Cross correlation with cosine stretching for cryo-EM data in PyTorch

Project description

torch-tiltxcorr

License PyPI Python Version CI codecov

Cross correlation with image stretching for coarse alignment of cryo-EM tilt series data in PyTorch.

Overview

torch-tiltxcorr reimplements the IMOD program tiltxcorr in PyTorch.

Installation

pip install torch-tiltxcorr

Usage

import torch
from torch_fourier_shift import fourier_shift_image_2d
from torch_tiltxcorr import tiltxcorr

# Load or create your tilt series
# tilt_series shape: (batch, height, width) - batch is number of tilt images
# Example: tilt_series with shape (61, 512, 512) - 61 tilt images of 512x512 pixels
tilt_series = torch.randn(61, 512, 512)

# Define tilt angles (in degrees)
# Shape: (batch,) - one angle per tilt image
tilt_angles = torch.linspace(-60, 60, steps=61)

# Define tilt axis angle (in degrees)
tilt_axis_angle = 45

# Run tiltxcorr
shifts = tiltxcorr(
    tilt_series=tilt_series,
    tilt_angles=tilt_angles,
    tilt_axis_angle=tilt_axis_angle,
    low_pass_cutoff=.5,
)
# shifts shape: (batch, 2) - (dy, dx) shifts which center each tilt image

# Apply shifts to align the tilt series
aligned_tilt_series = fourier_shift_image_2d(tilt_series, shifts=shifts)
# aligned_tilt_series shape: (batch, height, width)

Use uv to run an example with simulated data and visualize the results.

uv run examples/tiltxcorr_example_simulated_data.py

How It Works

torch-tiltxcorr performs coarse tilt series alignment by:

  1. Sorting images by tilt angle
  2. Dividing the series into groups of positive and negative tilt angles
  3. For each adjacent pair of images in each group:
    • Applying a stretch perpendicular to the tilt axis on the image with the larger tilt angle
    • Calculating cross-correlation between the images
    • Extracting the shift from the position of the correlation peak
    • Transforming the shift to account for the stretch applied to the image
  4. Accumulating shifts to align the entire series

With Sample Tilt Estimation

If a sample is physically tilted +5° around the tilt axis in the microscope, then at nominal 0° stage tilt the beam sees the sample at +5°.

By accounting for this during tiltxcorr, we can estimate sample rotation around the tilt axis is in the microscope.

import torch
from torch_fourier_shift import fourier_shift_image_2d
from torch_tiltxcorr import tiltxcorr_with_sample_tilt_estimation

# Load or create your tilt series
tilt_series = torch.randn(61, 512, 512)
tilt_angles = torch.linspace(-60, 60, steps=61)
tilt_axis_angle = 45

# Run tiltxcorr with sample tilt estimation
shifts, sample_tilt = tiltxcorr_with_sample_tilt_estimation(
   tilt_series=tilt_series,
   tilt_angles=tilt_angles,
   tilt_axis_angle=tilt_axis_angle,
   low_pass_cutoff=0.5,  # cycles/px
   sample_tilt_range=(-30.0, 30.0),  # search range in degrees
)
# shifts shape: (batch, 2) tensor of (dy, dx) shifts which center each tilt image
# sample_tilt: float value for component of sample tilt about the stage in degrees

# Apply shifts to align the tilt series
aligned_tilt_series = fourier_shift_image_2d(tilt_series, shifts=shifts)

License

This package is distributed under the BSD 3-Clause License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

torch_tiltxcorr-0.0.9.tar.gz (249.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

torch_tiltxcorr-0.0.9-py3-none-any.whl (13.1 kB view details)

Uploaded Python 3

File details

Details for the file torch_tiltxcorr-0.0.9.tar.gz.

File metadata

  • Download URL: torch_tiltxcorr-0.0.9.tar.gz
  • Upload date:
  • Size: 249.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for torch_tiltxcorr-0.0.9.tar.gz
Algorithm Hash digest
SHA256 df5b42e7a915a10b14b7b899bc20fd3cd398af56794f7fc535784c587c3de8ab
MD5 c34485978353d8daa36e6fa74f958493
BLAKE2b-256 73a1f00ea2fe8c58161caf22b4309a2738736639d5dc5d41ea54160fd06cf415

See more details on using hashes here.

Provenance

The following attestation bundles were made for torch_tiltxcorr-0.0.9.tar.gz:

Publisher: ci.yml on teamtomo/torch-tiltxcorr

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file torch_tiltxcorr-0.0.9-py3-none-any.whl.

File metadata

File hashes

Hashes for torch_tiltxcorr-0.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 1fa78fd8383d2da5920833f90ebfaeaac9cc0b81e4da012cef02c9aa7aee7fc4
MD5 084731d0e368dcadfeab517f7d6d9ddc
BLAKE2b-256 03825e3c1b801109c88282c1e181f80e51a8ff2cf0259eb4f8561ed1125ee85f

See more details on using hashes here.

Provenance

The following attestation bundles were made for torch_tiltxcorr-0.0.9-py3-none-any.whl:

Publisher: ci.yml on teamtomo/torch-tiltxcorr

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page