Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Blobdetect lc #15

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions docs/getting_started/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,6 @@ pip install -e git+https://github.com/khanlab/spimquant#egg=spimquant

Note: you can re-run this command to re-install with the latest version

Before running the app, you need to specify a config file to use. "SPIMquant/examples/snakebids_template.yml"
provides a starting point for specifying a config. If you are using the example dataset provided in the
above section, then a config file is also included in the zip file.

To specify the config, copy the config file into SPIMquant/spimquant/config/snakebids.yml, and change the
properties in the config file to ensure paths to the directory are properly set.

## Running the app

Do a dry-run first (`-n`) and simply print (`-p`) what would be run:
Expand Down
37 changes: 36 additions & 1 deletion docs/usage/cli.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,43 @@
## Core command-line interface
## The `spimquant` Interface

The spimquant tool command-line interface is a composition of the core
(app-based) arguments and options, and the options related to Snakemake.

As an end user, command line interface (CLI) is recommended as a way to specify
the input/output data paths and configuration settings. The arguments passed
in this way will be used to overwrite some of the default options defined in
the config file `spimquant/config/snakebids.yml` and adapt to different datasets.

Underlying SPIMquant, we use `snakemake` to manage workflow and config file.
`spimquant` is a program that writes to the config file, and supports
all Snakemake arguments.

Steps to run a typical job looks like the following:
```bash
spimquant bids_dir output_dir {participant} [snakemake_args]
# now since we run spimquant, contents in config/snakebids.yml has changed
# and we can run snakemake with the updated configuration
snakemake result_file_path
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not sure why you need this -- the spimquant cli runs snakemake already --

```
All three arguments above to `spimquant` are not optional but necessary.
The above first command will do the following:
1. Log the configuration used to run snakemake in the location output_dir,
including the snakebids.yml file and logs.
2. Pass bids_dir over to overwrite the bids_dir defined in the default
snakebids.yml.
3. Start snakemake using the snakemake_args provided

A more concrete example:
```bash
spimquant test_bids_dir test_out participant
snakemake results/result_image.nii -n
Copy link
Member

@akhanf akhanf Oct 8, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can specify targets using the spimquant cli too.. e.g. spimquant test_bids_dir test_out participant -n results/result_image.nii

So there isn't a need to instruct the user to run snakemake directly..

```
Here we use -n so you can run this command but snakemake will only output a
plan without generating any file. In an actual run, you can use `--cores all`
to specify to use all cores and `--use-apptainer` to download and use existing
container image for SPIMquant that have already installed all dependencies,
without having to set up the environment yourself.

The core BIDS App arguments and app-specific options are listed below.


Expand Down
5 changes: 2 additions & 3 deletions spimquant/workflow/rules/blobdetect.smk
Original file line number Diff line number Diff line change
Expand Up @@ -311,10 +311,9 @@ rule negatively_masked_counting:
Work in progress
"""
input:
zarr='/path_to_bids_root/bids/sub-onuska21/micr/sub-onuska21_sample_brain_acq-prestitched_SPIM.ome.zarr?slices=[1]',
neg_mask='/path_to_bids_root/resources/onuska21_patched.tiff',
neg_mask='C:/ProgrammingTools/ComputerVision/RobartsResearch/data/lightsheet/spimquant_ubuntu/resources/onuska21_patched.tiff',
params:
neg_mask_scale=(1, 1, 1),
zarr='C:/ProgrammingTools/ComputerVision/RobartsResearch/data/lightsheet/spimquant_ubuntu/bids/sub-onuska21/micr/sub-onuska21_sample_brain_acq-prestitched_SPIM.ome.zarr?slices=[1]',
tmp_path=f'{config["output_dir"]}/tmp'
output:
found_lc=directory(f'{config["output_dir"]}/found_lc')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import cvpl_tools.im.process.bs_to_os as sp_bs_to_os
import cvpl_tools.im.process.os_to_cc as sp_os_to_cc
import cvpl_tools.im.process.any_to_any as sp_any_to_any
import cvpl_tools.im.algs.dask_resize as im_resize
import cvpl_tools.ome_zarr.io as ome_io
import cvpl_tools.im.ndblock as ndblock
import dask.array as da
Expand Down Expand Up @@ -52,10 +53,11 @@ def forward(self, im, cptr, viewer_args: dict = None):
client_args=dict(threads_per_worker=12, n_workers=1),
viewer_args=dict(use_viewer=False)) as plc:
# DO DASK COMPUTATION, AND SHOW RESULTS IN plc.viewer
src_im = ome_io.load_dask_array_from_path(snakemake.input.zarr, mode='r', level=0)
src_im = ome_io.load_dask_array_from_path(snakemake.params.zarr, mode='r', level=0)
pipeline = Pipeline()
src_im = da.clip(src_im / 1000, 0., 1.)
assert src_im.ndim == 3
print(f'Saving results in {plc.cache_root.abs_path}')
print(f'Computing centroids size and location. Masking the image, imshape={src_im.shape}.')
src_im = src_im.rechunk(chunks=(128, 256, 256))
storage_options = dict(
Expand All @@ -72,12 +74,14 @@ def forward(self, im, cptr, viewer_args: dict = None):
storage_options=storage_options
)

up_sampler = sp_any_to_any.UpsamplingByIntFactor(factor=snakemake.params.neg_mask_scale, order=0)

def compute_masking():
neg_mask = da.from_array(tifffile.imread(snakemake.input.neg_mask), chunks=(64, 64, 64))
neg_mask = up_sampler.forward(neg_mask, cptr=plc.cache_root.cache('neg_mask_upsampling'),
viewer_args=viewer_args | dict(is_label=True))
neg_mask = im_resize.upsample_pad_crop_fit(
src_arr=neg_mask,
tgt_arr=src_im,
cptr=plc.cache_root.cache('neg_mask_upsampling'),
viewer_args=viewer_args | dict(is_label=True),
)
return src_im * (1 - neg_mask)
plc.cache_root.cache_im(compute_masking, cid='masked_src_im', viewer_args=viewer_args)
cc = pipeline.forward(src_im, plc.cache_root.cache(cid='global_label'), viewer_args=viewer_args)
Expand Down