Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
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: 7 additions & 0 deletions python/minknow_api/examples/start_protocol.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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.
)

Expand Down
25 changes: 19 additions & 6 deletions python/minknow_api/tools/protocols.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__)


Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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]:
Expand All @@ -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.

Expand Down Expand Up @@ -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)

Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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,
Expand Down