Skip to content

Instantly share code, notes, and snippets.

@shahpnmlab
shahpnmlab / mesh2mask.py
Created March 26, 2025 10:05
napari mesh to mask
import numpy as np
import napari
from pathlib import Path
from scipy.interpolate import splprep, splev
from scipy import ndimage as ndi
from skimage import draw, filters, measure
from skimage.morphology import binary_closing, binary_dilation, binary_erosion
from napari.qt.threading import thread_worker
from magicgui import magicgui
from qtpy.QtWidgets import QVBoxLayout, QFileDialog
@shahpnmlab
shahpnmlab / fix_dose_tomostar.py
Created January 30, 2025 15:23
correct warp dose
from pathlib import PureWindowsPath, Path
import mdocfile
import starfile
import pandas as pd
import typer
unbork = typer.Typer()
@unbork.command(no_args_is_help=True)
@shahpnmlab
shahpnmlab / warp_xml2_sg_wedgelist.py
Last active January 27, 2025 11:32
Warp XML to SG wedgelist
1,1 Top
from pathlib import Path
import starfile
import pandas as pd
from lxml import etree
import typer
def flatten(t):
return [item for sublist in t for item in sublist]
@shahpnmlab
shahpnmlab / m_re-extract.py
Last active January 21, 2025 11:24
script to re-extract particles from tiltseries after refinement in M
import starfile
import pandas as pd
import numpy as np
import typer
from pathlib import Path
from typing import Optional
def process_star_file(input_path: str, output_path: Optional[str] = None) -> Optional[pd.DataFrame]:
"""
Process a star file to average temporal samples and rename columns to Relion convention.
@shahpnmlab
shahpnmlab / m_refine_summary.py
Last active January 20, 2025 18:03
summarise m refinement progress
import typer
import xml.etree.ElementTree as ET
from pathlib import Path
from typing import Dict, List, Optional, Tuple
from dataclasses import dataclass
from rich.console import Console
from rich.table import Table
from collections import defaultdict
app = typer.Typer()
@shahpnmlab
shahpnmlab / project_backproject.py
Created December 10, 2024 22:31
learning to project and back project a 3D object
import torch_fourier_slice as tfs
import torch
import mrcfile
import numpy as np
from scipy.spatial.transform import Rotation as R
def process_mrc(input_path, output_projection, output_reconstruction, angles=(30, 20, 18)):
# Load and convert MRC to tensor
volume = torch.tensor(mrcfile.read(input_path))
@shahpnmlab
shahpnmlab / sshmgr.sh
Created December 4, 2024 22:52
script to manage different ssh accounts
#!/bin/bash
function ssh_manager {
local HOSTS=("scan" "rc1" "rc2" "rc3" "rc4" "pinot")
local HOST=""
local CONTROL_PATH="$HOME/.ssh/control:%h:%p:%r"
# Parse command line arguments
if [[ $1 == "-h" || $1 == "--help" ]]; then
echo "Usage: sshmgr [host]"
echo " host: The host to connect to (scan, rc1, rc2, rc3, rc4 or pinot). If not provided, you'll be prompted."
@shahpnmlab
shahpnmlab / frames_from_mdoc.py
Last active March 2, 2025 18:27
Copy all movies from from src to dest from an mdoc file
from pathlib import Path
import mdocfile
import shutil
import typer
import logging
from typing import Optional
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
@shahpnmlab
shahpnmlab / mod2star.py
Created November 5, 2024 14:13
Script to generate a single star file from mod files
from pathlib import Path
import imodmodel
import starfile
import pandas as pd
import numpy as np
# Create optics dataframe
df_optics = pd.DataFrame({
'rlnOpticsGroup': [1],
'rlnOpticsGroupName': ["OpticsGroup1"],
@shahpnmlab
shahpnmlab / warpPick2mod.py
Last active November 4, 2024 15:15
Plot warp picked coords using IMOD
import numpy as np
import starfile
XDIM = 378
YDIM = 378
ZDIM = 228
df = starfile.read("gs07_ts_003_8.00Apx_emd_13474_clean.star")
xyz_headings = [f'rlnCoordinate{axis}' for axis in 'XYZ']
xyz_headings.append('rlnAutopickFigureOfMerit')