Skip to content

Instantly share code, notes, and snippets.

@alisterburt
alisterburt / 3d_correlation_from_2d_correlations.py
Created June 13, 2024 00:20
3D correlations from multiple 2D correlations for Will Wan
import einops
import numpy as np
import torch
import mrcfile
import napari
from torch_fourier_slice import project_3d_to_2d
from torch_image_lerp import sample_image_2d
from torch_grid_utils import coordinate_grid
from scipy.spatial.transform import Rotation as R
@alisterburt
alisterburt / aysecan.py
Created June 11, 2024 21:50
constructing rotation matrices and generating RELION compatible euler angles from them
import numpy as np
from scipy.spatial.transform import Rotation as R
# set up rotation matrices for rotations around X axis
rotation_angles = np.linspace(0, 90, 50)
Rx = R.from_euler('x', angles=rotation_angles, degrees=True).as_matrix()
print(Rx.shape)
# set up column vector which points along y
z_vec = np.array([0, 0, 1]).reshape((3, 1))
https://docs.google.com/presentation/d/1QD6J1SR2_Q_7DivvtIE_P1ScrFGcU9yk-46ZmVavmf0/edit#slide=id.g27333d73966_0_16
@alisterburt
alisterburt / eric_bogdan_thing.py
Created May 17, 2024 11:06
Interpret/visualise composition of prior and pose in RELION
import numpy as np
import starfile
import napari
from scipy.spatial.transform import Rotation as R
df = starfile.read('particles_warp.star')
xyz = df[['rlnCoordinateX', 'rlnCoordinateY', 'rlnCoordinateZ']].to_numpy()
eulers = df[['rlnAngleTiltPrior', 'rlnAnglePsiPrior']].to_numpy()
rotation_matrices = R.from_euler(seq='YZ', degrees=True, angles=eulers).inv().as_matrix()
@alisterburt
alisterburt / mpl_gradient_overlay.py
Last active May 7, 2024 17:24
matplotlib gradient overlays - gradient resolution is different from image resolution
import matplotlib.pyplot as plt
import numpy as np
from cmap import Colormap
h, w = 512, 868
image = np.random.random(size=(h, w))
defocus = np.array([[0, 1],
[1, 0]])
@alisterburt
alisterburt / josh.py
Last active March 13, 2024 01:05
recentering/reorienting RELION particles for Josh Hutchings
"""Recenter and reorient RELION particles
This shows the gist of how to manually move/reorient RELION particles in 3D.
You define a set of shifts and orientations in the coordinate system of the
reference for all 'subparticles' you want to generate from each existing particle.
"""
import pandas as pd
import starfile
import numpy as np
from scipy.spatial.transform import Rotation as R
@alisterburt
alisterburt / jules.py
Created February 23, 2024 16:37
jules
import napari
import numpy as np
from skimage import data
from napari_threedee.manipulators.base_manipulator import BaseManipulator
class FullManipulator(BaseManipulator):
def __init__(self, viewer, layer=None):
@alisterburt
alisterburt / molmap.py
Created February 22, 2024 01:30
molmap - slow
import numpy as np
import torch
import einops
import mmdf
from libtilt.grids._patch_grid_utils import patch_grid_centers
from libtilt.grids import coordinate_grid
RESOLUTION_ANGSTROMS = 3.4
VOLUME_SIZE = (512, 512, 512)
@alisterburt
alisterburt / 3d_sliding_window.py
Created February 14, 2024 19:09
torch sliding window view on 3D image
import torch
import einops
def sliding_window_3d(tensor, window_size):
d, h, w = tensor.shape
window_depth, window_height, window_width = window_size
# Calculate the number of windows in each dimension
new_d = d - window_depth + 1
new_h = h - window_height + 1
@alisterburt
alisterburt / h3_utils.py
Created December 6, 2023 22:11
h3 utils
import h3
import torch
import einops
from scipy.spatial.transform import Rotation as R
def get_h3_grid_at_resolution(resolution: int) -> list[str]:
"""Get h3 cells (their h3 index) at a given resolution.