Source code for nabu.app.bootstrap_stitching
from .cli_configs import BootstrapStitchingConfig
from ..pipeline.config import generate_nabu_configfile
from ..stitching.config import (
get_default_stitching_config,
SECTIONS_COMMENTS as _SECTIONS_COMMENTS,
INPUT_DATASETS_FIELD as _INPUT_DATASETS_FIELD,
INPUTS_SECTION as _INPUTS_SECTION,
)
from .utils import parse_params_values
from tomoscan.factory import Factory
from tomoscan.esrf.volume.utils import guess_volumes
[docs]
def guess_tomo_objects(my_str: str) -> tuple:
"""
try to find some tomo object from a string.
The string can be either related to a volume or a scan and can be an identifier or a filfe/folder path
:param str my_str: string related to the tomo object
:return: a tuple of tomo objects either instance of VolumeBase or TomoScanBase
:rtype: tuple
"""
try:
# create_tomo_object_from_identifier will raise an exception is the string does not match an identifier
return (Factory.create_tomo_object_from_identifier(my_str),)
except Exception:
pass
try:
volumes = guess_volumes(my_str)
except Exception:
pass
else:
if len(volumes) > 0:
return volumes
try:
return Factory.create_scan_objects(my_str)
except Exception:
return tuple()
[docs]
def bootstrap_stitching():
args = parse_params_values(
BootstrapStitchingConfig,
parser_description="Initialize a 'nabu-stitching' configuration file",
)
prefilled_values = {}
datasets_as_str = args.get("datasets", None)
datasets = []
for dataset in datasets_as_str:
datasets.extend(guess_tomo_objects(dataset))
if len(datasets) > 0:
prefilled_values = {
_INPUTS_SECTION: {_INPUT_DATASETS_FIELD: [dataset.get_identifier().to_str() for dataset in datasets]}
}
generate_nabu_configfile(
fname=args["output"],
default_config=get_default_stitching_config(args["stitching_type"]),
comments=True,
sections_comments=_SECTIONS_COMMENTS,
options_level=args["level"],
prefilled_values=prefilled_values,
)
return 0