Skip to content

Commit

Permalink
Curved surface (#45)
Browse files Browse the repository at this point in the history
* Initial curved surface function. Parameters need more thought.
  • Loading branch information
milesagraham authored Aug 9, 2024
1 parent 3b775e8 commit 5335e8e
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/ttmask/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@
from .ellipsoid import ellipsoid
from .map2mask import map2mask
from .tube import tube
from .curved_surface import curved_surface

45 changes: 45 additions & 0 deletions src/ttmask/curved_surface.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from pathlib import Path


import numpy as np
import typer
import mrcfile

from ._cli import cli
from .soft_edge import add_soft_edge
from .box_setup import box_setup

@cli.command(name='curved_surface')
def curved_surface(
sidelength: int = typer.Option(...),
fit_sphere_diameter: float = typer.Option(...),
soft_edge_width: int = typer.Option(0),
pixel_size: float = typer.Option(1),
output: Path = typer.Option(Path("curved_surface.mrc")),
surface_thickness: float = typer.Option(...),
):
sphere_radius = fit_sphere_diameter / 2

# establish our coordinate system and empty mask
coordinates_centered, mask = box_setup(sidelength)
coordinates_shifted = coordinates_centered - ([0, sphere_radius, 0])


#determine distances of each pixel to the center
distance_to_center = np.linalg.norm(coordinates_shifted, axis=-1)


# set up criteria for which pixels are inside the sphere and modify values to 1.
inside_sphere = distance_to_center < (sphere_radius / pixel_size)
mask[inside_sphere] = 1

# if requested, criteria set up for pixels within the hollowed area and these values changed to zero
if surface_thickness != 0:
within_hollowing = distance_to_center < ((sphere_radius - surface_thickness) / pixel_size)
mask[within_hollowing] = 0

# if requested, a soft edge is added to the mask
mask = add_soft_edge(mask, soft_edge_width)

# output created with desired pixel size.
mrcfile.write(output, mask, voxel_size=pixel_size, overwrite=True)
1 change: 0 additions & 1 deletion src/ttmask/sphere.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
from .soft_edge import add_soft_edge
from .box_setup import box_setup


@cli.command(name='sphere')
def sphere(
sidelength: int = typer.Option(...),
Expand Down

0 comments on commit 5335e8e

Please sign in to comment.