From cafa635cdf2e185e475b5d9740aa99014420728a Mon Sep 17 00:00:00 2001 From: Toni Hermoso Pulido Date: Wed, 27 Aug 2025 14:34:50 +0200 Subject: [PATCH] adding output path --- python/minknow_api/examples/start_protocol.py | 7 ++++++ python/minknow_api/tools/protocols.py | 25 ++++++++++++++----- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/python/minknow_api/examples/start_protocol.py b/python/minknow_api/examples/start_protocol.py index 6d88d68..a4dd418 100644 --- a/python/minknow_api/examples/start_protocol.py +++ b/python/minknow_api/examples/start_protocol.py @@ -273,6 +273,12 @@ def parse_args(): help="Duration (in seconds) of a single bam file batch; if set to 0, time-based batching is disabled", ) + parser.add_argument( + "--output-path", + type=str, + help="Path to output data to.", + ) + # Read until parser.add_argument( "--read-until-reference", @@ -1034,6 +1040,7 @@ def build_output_arguments(args, name): mux_scan_period=args.mux_scan_period, stop_criteria=stop_criteria, simulation_path=args.simulation, + output_path=args.output_path, args=args.extra_args, # Any extra args passed. ) diff --git a/python/minknow_api/tools/protocols.py b/python/minknow_api/tools/protocols.py index 6a18234..06c524e 100644 --- a/python/minknow_api/tools/protocols.py +++ b/python/minknow_api/tools/protocols.py @@ -2,19 +2,20 @@ import collections import dataclasses -from pathlib import Path import logging -from typing import Optional, List, Sequence, Tuple +from pathlib import Path +from typing import List, Optional, Sequence, Tuple import grpc -from .. import Connection -from minknow_api import protocol_pb2, run_until_pb2, acquisition_pb2 +from minknow_api import acquisition_pb2, protocol_pb2, run_until_pb2 +from minknow_api.analysis_workflows_pb2 import AnalysisWorkflowRequest from minknow_api.manager_pb2 import FindBasecallConfigurationsResponse from minknow_api.protocol_pb2 import BarcodeUserData -from minknow_api.analysis_workflows_pb2 import AnalysisWorkflowRequest from minknow_api.tools.any_helpers import make_float_any, make_uint64_any +from .. import Connection + LOGGER = logging.getLogger(__name__) @@ -57,7 +58,6 @@ def find_simplex_model( ], simplex_model_name: str, ) -> Tuple[FindBasecallConfigurationsResponse.SimplexModel]: - searched_configs = set() for config in available_basecall_configs: for simplex in config.simplex_models: @@ -269,6 +269,7 @@ def make_protocol_arguments( disable_active_channel_selection: bool = False, mux_scan_period: float = 1.5, simulation_path: Optional[Path] = None, + output_path: Optional[Path] = None, args: Optional[List[str]] = None, is_flongle: bool = False, ) -> List[str]: @@ -286,6 +287,7 @@ def make_protocol_arguments( disable_active_channel_selection(bool): Disable active channel selection mux_scan_period(float): Period of time between mux scans in hours. simulation_path(:obj:`Path`): An optional fast5 bulk path to use for simulated playback. + output_path(:obj:`Path`): An optional output path. args(:obj:`list`): Extra arguments to pass to protocol. is_flongle(bool): Specify if the flow cell to be sequenced on is a flongle. @@ -441,6 +443,11 @@ def on_off(value: bool): ) protocol_args.extend(["--simulation", str(simulation_path)]) + if output_path: + if not output_path.exists(): + raise Exception(f"Non-existent path '{output_path}' passed for output.") + protocol_args.extend(["--output_path", str(output_path)]) + if args: protocol_args.extend(args) @@ -500,6 +507,7 @@ def start_protocol( stop_criteria: Optional[CriteriaValues] = None, experiment_duration: Optional[float] = None, analysis_workflow_request: Optional[AnalysisWorkflowRequest] = None, + output_path: Optional[Path] = None, *args, **kwargs, ) -> str: @@ -552,6 +560,11 @@ def start_protocol( if analysis_workflow_request is not None: additional_params["analysis_workflow_request"] = analysis_workflow_request + if output_path: + additional_params["offload_location_info"] = protocol_pb2.OffloadLocationInfo( + offload_location_path=output_path + ) + result = device_connection.protocol.start_protocol( identifier=identifier, args=protocol_arguments,