From d6ce6bb64180a49843a2548e7884b9931aabf4b9 Mon Sep 17 00:00:00 2001 From: MinKNOW bot Date: Wed, 11 Dec 2024 16:47:08 +0000 Subject: [PATCH] Version 6.2.1 bump --- .github/workflows/pypi-publish.yml | 2 +- BREAKING_CHANGES_IN_5.0.md | 24 +- BUILD.md | 4 +- LICENSE.txt | 1 - README.md | 2 +- dev-requirements.txt | 6 +- proto/minknow_api/acquisition.proto | 38 +- .../minknow_api/analysis_configuration.proto | 80 +- proto/minknow_api/basecaller.proto | 16 +- proto/minknow_api/data.proto | 16 +- proto/minknow_api/device.proto | 64 +- proto/minknow_api/hardware_check.proto | 156 ++ proto/minknow_api/instance.proto | 14 +- proto/minknow_api/manager.proto | 103 +- proto/minknow_api/minion_device.proto | 6 +- proto/minknow_api/pebble_device.proto | 356 +++++ proto/minknow_api/promethion_device.proto | 16 +- proto/minknow_api/protocol.proto | 53 +- proto/minknow_api/protocol_settings.proto | 2 +- proto/minknow_api/report_data.proto | 2 +- proto/minknow_api/rpc_options.proto | 2 +- proto/minknow_api/run_until.proto | 12 +- proto/minknow_api/statistics.proto | 25 +- python/minknow_api/__init__.py | 30 +- python/minknow_api/_version.py | 2 +- python/minknow_api/acquisition_pb2.py | 599 +++---- python/minknow_api/acquisition_pb2_grpc.py | 36 + python/minknow_api/acquisition_service.py | 43 + .../minknow_api/analysis_configuration_pb2.py | 1393 +++++++++-------- .../analysis_configuration_pb2_grpc.py | 4 +- .../analysis_configuration_service.py | 27 +- python/minknow_api/basecaller_pb2.py | 563 +++---- python/minknow_api/basecaller_pb2_grpc.py | 2 + python/minknow_api/basecaller_service.py | 9 + python/minknow_api/data_pb2.py | 678 ++++---- python/minknow_api/data_service.py | 4 +- python/minknow_api/device.py | 11 +- python/minknow_api/device_pb2.py | 916 +++++------ python/minknow_api/device_pb2_grpc.py | 2 +- python/minknow_api/device_service.py | 3 +- python/minknow_api/examples/README.md | 2 +- .../examples/create_client_certificates.py | 19 +- .../examples/manage_simulated_devices.py | 8 +- python/minknow_api/examples/start_protocol.py | 91 +- python/minknow_api/hardware_check_pb2.py | 160 ++ python/minknow_api/hardware_check_pb2_grpc.py | 204 +++ python/minknow_api/hardware_check_service.py | 282 ++++ python/minknow_api/instance_pb2.py | 68 +- python/minknow_api/instance_pb2_grpc.py | 2 +- python/minknow_api/instance_service.py | 2 +- python/minknow_api/keystore_pb2.py | 70 +- python/minknow_api/log_pb2.py | 36 +- python/minknow_api/manager.py | 14 +- python/minknow_api/manager_pb2.py | 1320 ++++++++-------- python/minknow_api/manager_pb2_grpc.py | 63 +- python/minknow_api/manager_service.py | 93 +- python/minknow_api/minion_device_pb2.py | 40 +- python/minknow_api/minion_device_service.py | 6 +- python/minknow_api/pebble_device_pb2.py | 350 +++++ python/minknow_api/pebble_device_pb2_grpc.py | 210 +++ python/minknow_api/pebble_device_service.py | 418 +++++ python/minknow_api/promethion_device_pb2.py | 332 ++-- python/minknow_api/protocol_pb2.py | 1069 +++++++------ python/minknow_api/protocol_service.py | 11 + python/minknow_api/protocol_settings_pb2.py | 30 +- python/minknow_api/report_data_pb2.py | 4 +- python/minknow_api/run_until_pb2.py | 104 +- python/minknow_api/run_until_pb2_grpc.py | 24 +- python/minknow_api/run_until_service.py | 8 +- python/minknow_api/statistics_pb2.py | 778 ++++----- python/minknow_api/testutils.py | 2 +- .../tools/compatibility_helpers.py | 18 + python/minknow_api/tools/protocols.py | 31 + .../bad_column_names/alias_no_barcoding.csv | 2 +- .../bad_column_names/barcoding_no_alias.csv | 2 +- .../both_position_information.csv | 2 +- .../conflicting_barcoding_columns.csv | 2 +- .../bad_column_names/duplicate_columns.csv | 2 +- .../missing_barcoding_column.csv | 2 +- .../no_position_information.csv | 2 +- .../bad_column_names/no_user_info_columns.csv | 2 +- .../bad_column_names/type_no_barcoding.csv | 2 +- .../sample_sheets/bad_records/barcode.csv | 2 +- .../bad_records/duplicate_alias.csv | 2 +- .../bad_records/duplicate_barcode.csv | 2 +- .../bad_records/experiment_id.csv | 2 +- .../bad_records/external_barcode.csv | 2 +- .../bad_records/internal_barcode.csv | 2 +- .../sample_sheets/bad_records/sample_id.csv | 2 +- .../sample_sheets/bad_records/sample_type.csv | 2 +- .../sample_sheets/good/dual_barcoding.csv | 2 +- .../sample_sheets/good/multiple_positions.csv | 2 +- .../sample_sheets/good/no_barcoding.csv | 2 +- .../sample_sheets/good/passenger_info.csv | 2 +- .../sample_sheets/good/single_barcoding.csv | 2 +- .../test_create_client_certificates.py | 5 +- .../test/example_tests/test_start_protocol.py | 357 ++++- 97 files changed, 7340 insertions(+), 4257 deletions(-) create mode 100644 proto/minknow_api/hardware_check.proto create mode 100644 proto/minknow_api/pebble_device.proto create mode 100644 python/minknow_api/hardware_check_pb2.py create mode 100644 python/minknow_api/hardware_check_pb2_grpc.py create mode 100644 python/minknow_api/hardware_check_service.py create mode 100644 python/minknow_api/pebble_device_pb2.py create mode 100644 python/minknow_api/pebble_device_pb2_grpc.py create mode 100644 python/minknow_api/pebble_device_service.py create mode 100644 python/minknow_api/tools/compatibility_helpers.py diff --git a/.github/workflows/pypi-publish.yml b/.github/workflows/pypi-publish.yml index 3d878cb..465a788 100644 --- a/.github/workflows/pypi-publish.yml +++ b/.github/workflows/pypi-publish.yml @@ -28,4 +28,4 @@ jobs: uses: pypa/gh-action-pypi-publish@master with: user: __token__ - password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file + password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/BREAKING_CHANGES_IN_5.0.md b/BREAKING_CHANGES_IN_5.0.md index dc311c3..6c7fb93 100644 --- a/BREAKING_CHANGES_IN_5.0.md +++ b/BREAKING_CHANGES_IN_5.0.md @@ -4,7 +4,7 @@ The 5.0 release of MinKNOW API, describing the API for MinKNOW Core 5.0, has sev changes from earlier 4.x versions, and code using the API will need to be updated to suit. The breaking changes are documented below. There also some changes to the API that do not -break compatibility with older versions, such as the addition of new RPC's; these are not +break compatibility with older versions, such as the addition of new RPC's; these are not documented here. @@ -18,7 +18,7 @@ No RPCs have been removed from the MinKNOW API since MinKNOW Core 4.0. Note that some messages have had their fields renumbered. The wire format of these messages will not be compatible with earlier 4.x versions. -Some messages have had fields renamed, but using the same number as in 4.x. These messages will +Some messages have had fields renamed, but using the same number as in 4.x. These messages will be wire compatible with 4.x, although the interpretation of these fields may have changed. Code which uses these renamed fields will not be compatible. @@ -26,35 +26,35 @@ The following messages have had their fields changed: ### `analysis_configuration.proto` -* `ReportConfiguration.ReportConfiguration`: The `markdown_report_file_pattern` field has been +* `ReportConfiguration.ReportConfiguration`: The `markdown_report_file_pattern` field has been renumbered to 8. Field number 2 is now `json_report_file_pattern` - + ### `instance.proto` -* `GetVersionInfoResponse`: The `protocols` field has been renamed to `bream`, and the +* `GetVersionInfoResponse`: The `protocols` field has been renamed to `bream`, and the `configuration` field renamed to `protocol_configuration`, to more accurately reflect the contents of the packages these fields relate to. - + ### `keystore.proto` * `StoreRequest`: When using the `lifetime` field to store a value in the manager, the only valid values are `UNTIL_INSTANCE_END` and `PERSIST_ACROSS_RESTARTS`. Using any other value will cause - the call to fail with `INVALID_ARGUMENT` + the call to fail with `INVALID_ARGUMENT` ### `manager.proto` -* `FlowCellPosition.RpcPorts`: The fields `insecure` and `insecure_grpc_web` have been removed, +* `FlowCellPosition.RpcPorts`: The fields `insecure` and `insecure_grpc_web` have been removed, as it is no longer possible to use the gRPC protocols without TLS. ### `statistics.proto` -* `AcquisitionOutputBucket` has been renamed to `AcquisitionOutputSnapshot`, as this message +* `AcquisitionOutputBucket` has been renamed to `AcquisitionOutputSnapshot`, as this message really reflects a snapshot of data at a given time point. The field `bucket` has been renamed - to `seconds`, as it indicates the time point. + to `seconds`, as it indicates the time point. * `StreamAcquisitionOutputResponse`: The submessage `FilteredBuckets` has been renamed to `FilteredSnapshots`. The `buckets` field in both messages has been renamed to `snapshots`. -* `WriterOutputBucket` has been renamed to `WriterOutputSnapshot`, as this message +* `WriterOutputBucket` has been renamed to `WriterOutputSnapshot`, as this message really reflects a snapshot of data at a given time point. The field `bucket` has been renamed - to `seconds`, as it indicates the time point. + to `seconds`, as it indicates the time point. * `StreamWriterOutputResponse`: The `buckets` field has been renamed to `snapshots`. diff --git a/BUILD.md b/BUILD.md index 5b65ea4..4df202b 100644 --- a/BUILD.md +++ b/BUILD.md @@ -1,10 +1,10 @@ Building the python client ========================== -The Python code has already been pre-generated from the .proto files, so to install it +The Python code has already been pre-generated from the .proto files, so to install it just run: ```bash cd python python -m pip install . -``` \ No newline at end of file +``` diff --git a/LICENSE.txt b/LICENSE.txt index 8d7b96f..9f3e082 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -360,4 +360,3 @@ You may add additional accurate notices of copyright ownership. This Source Code Form is "Incompatible With Secondary Licenses", as defined by the Mozilla Public License, v. 2.0. - diff --git a/README.md b/README.md index e758fc9..2982645 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ including gathering information about running or finished experiments, starting experiments, and even exerting more fine-grained control. Anything that can be done via MinKNOW's user interface (and more) can be done using the APIs in this project. -This project is targetted at LIMS developers or developers of other tools that have a need to +This project is targeted at LIMS developers or developers of other tools that have a need to integrate with MinKNOW. Some familiarity with Python is expected (although the APIs can be used from other languages), as the examples are written in Python. If you are not familiar with [gRPC][grpc], it is worth reading through some of the [gRPC documentation][grpc-docs] to get a feel for it. diff --git a/dev-requirements.txt b/dev-requirements.txt index ed8f9a0..fc8faa2 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,6 +1,6 @@ -cryptography~=39.0 -grpcio==1.60.0 -grpcio-tools==1.60.0 +cryptography~=42.0 +grpcio==1.60.1 +grpcio-tools==1.60.1 minknow-api-service-plugin pre-commit pytest diff --git a/proto/minknow_api/acquisition.proto b/proto/minknow_api/acquisition.proto index f472b04..29c1deb 100644 --- a/proto/minknow_api/acquisition.proto +++ b/proto/minknow_api/acquisition.proto @@ -107,6 +107,13 @@ service AcquisitionService { option idempotency_level = IDEMPOTENT; } + // Find the signal reader in use. This may have been configured by MinKNOW prior to a protocol being begun. + // + // Since 6.2 + rpc get_signal_reader (GetSignalReaderRequest) returns (GetSignalReaderResponse) { + option idempotency_level = IDEMPOTENT; + } + // Set the bream information for the current acquisition. // // This should only be called by the protocol. It will only affect the last acquisition that was @@ -401,6 +408,10 @@ enum AcquisitionState { // The acquisition period finished on its own and // did not report an error. ACQUISITION_COMPLETED = 3; + + // The acquisition period is paused. + // that is, no data transfer occurring. + ACQUISITION_PAUSED = 4; } enum AcquisitionStopReason { @@ -452,10 +463,10 @@ enum StartupState { // Setting up data writers for outputting reads/files. STARTUP_INITIALISING_DATA_WRITERS = 5; - // Initialsing storage for in flight reads. + // Initialising storage for in flight reads. STARTUP_INITIALISING_INTERMEDIATE_DATA_STORAGE = 6; - // Initialsing storage for run statistics. + // Initialising storage for run statistics. STARTUP_INITIALISING_STATISTICS = 7; } @@ -530,7 +541,7 @@ message AcquisitionYieldSummary // As above, but counted in bases rather than basecalls. TotalsPerDuplexCategory basecalled_pass_bases_split = 24; TotalsPerDuplexCategory basecalled_fail_bases_split = 25; - + // Number of raw samples which have been called. int64 basecalled_samples = 6; @@ -709,7 +720,7 @@ message AcquisitionConfigSummary { bool fastq_reads_enabled = 5; // Determine if pod5 reads were enabled for the run. bool pod5_reads_enabled = 22; - + // This field has been removed // Since 5.8 reserved 6; @@ -929,7 +940,7 @@ message AcquisitionRunInfo { // Set information provided by the Bream toolkit. BreamInfo bream_info = 15; - // Target Run-Until Critiera, used to determine when the acquisition should be paused + // Target Run-Until Criteria, used to determine when the acquisition should be paused // or stopped. // // Since 5.3 @@ -954,7 +965,10 @@ message SetSignalReaderRequest { // Available signal reader types enum SignalReaderType { + option allow_alias = true; + HDF5 = 0; // Default value + PLAYBACK = 0; // Renamed default value - playback can handle non-hdf file formats too. DEVICE = 1; } @@ -977,6 +991,20 @@ message SetSignalReaderRequest { message SetSignalReaderResponse {} +message GetSignalReaderRequest {} +message GetSignalReaderResponse { + // The type of signal reader to use + SetSignalReaderRequest.SignalReaderType reader = 1 [(rpc_required) = true]; + + // The following is only set if the signal reader is a playback source. + string playback_source = 2; + + SetSignalReaderRequest.SourceFileMode playback_mode = 3; + + float sample_rate_scale_factor = 4; +} + + message SetBreamInfoRequest { // The information to set. // diff --git a/proto/minknow_api/analysis_configuration.proto b/proto/minknow_api/analysis_configuration.proto index d178f05..4b867a7 100644 --- a/proto/minknow_api/analysis_configuration.proto +++ b/proto/minknow_api/analysis_configuration.proto @@ -45,7 +45,7 @@ service AnalysisConfigurationService { // // 'including_default_value_fields' is needed because in proto3, primitive values that are default initialised (like a uint32 with value 0) // will not be sent on the wire, so the value wouldn't appear when converting to json. In practice, most values are wrapper types and this - // field won't have an affect in wrapper types, but it does affect enum types as the default initailised value is the 0th enum. + // field won't have an affect in wrapper types, but it does affect enum types as the default initialised value is the 0th enum. // // NOTE: if the analysis configuration was set using the new parameters (with the filename for basecalling config files), the old parameters // from jsn will be ignored. So set_analysis_configuration must be used with either the old protobuf message for the basecaller parameters, @@ -178,12 +178,12 @@ service AnalysisConfigurationService { option idempotency_level = NO_SIDE_EFFECTS; }; - // Set the dynamic analysis configuration, used during + // Set the dynamic analysis configuration, used during // // This can be changed during an acquisition period, and should be called as new values become appropriate. // The new analysis parameters will be used after any data already received has been processe. rpc set_dynamic_analysis_configuration(DynamicAnalysisConfiguration) returns (SetDynamicAnalysisConfigurationResponse) { } - + } message EventDetection { @@ -352,6 +352,21 @@ message ReadClassificationParams { repeated string rules_in_execution_order = 2; } + message MetricsEwma { + google.protobuf.FloatValue median = 1; + google.protobuf.FloatValue median_sd = 2; + google.protobuf.FloatValue range = 3; + google.protobuf.FloatValue median_dwell = 4; + google.protobuf.FloatValue dwell_sd = 5; + + // How many read chunks are required before an ewma is calculated. + // + // If we don't use ewma, a straight mean of all samples so far is used instead. + // + // Default value is 0: Always use ewma. + google.protobuf.Int32Value read_chunks_required_for_ewma = 6; + } + Scheme scheme_module = 1; // This tells minknow the maximum number of means to store in memory before using a different strategy @@ -383,7 +398,7 @@ message ReadClassificationParams { // Determine how to classify a whole read based on the strategy // // 'ultimate': Chooses the last (ultimate) read chunk's classification - // 'penultimate': Chooses the second-to-last read chunk's clasification + // 'penultimate': Chooses the second-to-last read chunk's classification // 'modal': Chooses the most common classification out of all read chunks // 'threshold': Chooses a classification based on the combination of threshold parameters. // If selected, values for the "selected_classifications_fraction_required" @@ -431,6 +446,19 @@ message ReadClassificationParams { // // If unspecified a default value is used. google.protobuf.UInt64Value max_read_length_before_selected_decision_seconds = 12; + + // Configuration for Exponentially weighted moving averages over read metrics. + // These values configure how sensitive the complete read metrics are to per chunk changes in value; + // higher values in the config here cause an increase in sensitivity in the metrics to per chunk changes. + // + // The values provided here are biased based on the length of each chunk, so short chunks will have less + // effect on the computed metric than longer chunks. + // + // A value of 1.0 will take as much of the local chunk value as possible, while values closer to zero will + // make the computed metric slower moving. + // + // The default weight if unspecified is 0.1. + MetricsEwma metrics_ewma = 13; } message ChannelStates { @@ -540,6 +568,10 @@ message ChannelStates { } message GetAnalysisConfigurationRequest { + // The unique identifier assigned to this acquisition run. + // + // Since 6.2 + string run_id = 1; } @@ -567,7 +599,7 @@ message ReadScalingParams // Alpha decay value to use. Higher values cause a more rapid decay in greater trust of earlier numbers. float alpha_number_estimates_decay = 5; - // Maximum difference in event quantiles which will be added into trackers. + // Maximum difference in event quantiles which will be added into trackers. // This is used to filter away cases where pore signal is included in the read and thus cannot be trusted. float quantile_maxdiff = 10; @@ -588,7 +620,7 @@ message ReadScalingParams // Scale factor applied to conductance to produce a basic scale estimate, also combined with q90_q10_to_normal. float conductance_factor_scale = 11; - + // Scale factor applied to conductance to produce a basic shift estimate. float conductance_factor_shift = 12; float q90_q10_to_normal = 13; @@ -600,7 +632,7 @@ message AnalysisConfiguration { ReadClassificationParams read_classification = 4; map channel_states = 7; - + // Add read scale tracking to the pipeline. // If this message is unspecified, read scaling is not enabled. ReadScalingParams read_scaling = 8; @@ -696,7 +728,7 @@ message BarcodingConfiguration repeated string barcoding_kits = 1; // Whether the basecaller should trim barcodes - // If not specified, this value defaults to false (not triming barcodes) + // If not specified, this value defaults to false (not trimming barcodes) // If barcoding is not enabled (e.g., because no barcoding kits are specified), // this parameter has no effect. bool trim_barcodes = 2; @@ -715,7 +747,7 @@ message BarcodingConfiguration reserved 7; reserved "min_score_mask"; reserved 8; - + // If set, barcodes that aren't in barcode user data list will be ignored // // Since 5.6 @@ -782,12 +814,15 @@ message BasecallerConfiguration { message ReadFiltering { google.protobuf.DoubleValue min_qscore = 1; - google.protobuf.UInt64Value min_samples = 2; - google.protobuf.UInt64Value max_samples = 3; + reserved "min_samples"; // Removed as of 6.1 as this option is no longer supported. + reserved 2; + reserved "max_samples"; // Removed as of 6.1 as this option is no longer supported. + reserved 3; google.protobuf.UInt64Value min_bases = 4; google.protobuf.UInt64Value max_bases = 5; - google.protobuf.UInt64Value max_failed_chunks = 6; - + reserved "max_failed_chunks"; // Removed as of 6.1 as this option is no longer supported. + reserved 6; + // Since 5.8 google.protobuf.DoubleValue min_duplex_qscore = 7; } @@ -812,9 +847,9 @@ message BasecallerConfiguration // Enable or disable pass/fail filtering based on alignment. When enabled, reads which // do not align to any references will be marked as "failed", and written to the folder - // specified in MinKNOW configuration for failed reads. + // specified in MinKNOW configuration for failed reads. // - // The setting applies to both regular read filtering and target filtering; if it is + // The setting applies to both regular read filtering and target filtering; if it is // enabled, then a read will not be marked as a target read if it does not align to a reference. // // Default setting is false, i.e. disabled. @@ -840,8 +875,8 @@ message BasecallerConfiguration // Control how target filtering is applied to output of basecaller. // Reads which pass these filtering criteria will be marked as - // "target" reads, and will be written to a separate folder; this - // folder is specified in MinKNOW configuration. Reads which do + // "target" reads, and will be written to a separate folder; this + // folder is specified in MinKNOW configuration. Reads which do // not pass these criteria will have the regular read filtering // applied to them, as specified by the `read-filtering` settings // above. @@ -892,7 +927,7 @@ message SetBasecallerConfigurationResponse{} message GetBasecallerConfigurationRequest { // The unique identifier assigned to this acquisition run. - // + // // Since 6.0 string run_id = 1; } @@ -959,7 +994,6 @@ message SetPoreTypeConfigurationResponse {} // The tokens used to expand depend on the file type: // // Read centric files (fastq, (multi-)fast5, protobuf): -// - read_classification: The classification applied to the completed read (eg. strand). // - batch_number: The batch number of this read, evaluated based on the destination file. // - read_id: Unique read id for each read, formatted as a hash. // - channel_name: The name of the channel which produced the read. @@ -1248,7 +1282,7 @@ message WriterConfiguration { // Number of estimated bases within a batch before it rotates to a new batch uint64 bases_per_batch = 7; - + // Do not perform batching based on output // (time-based batching is still performed, if specified) google.protobuf.Empty no_output_based_batching = 9; @@ -1350,7 +1384,7 @@ message WriterConfiguration { // // Stored with the frame commands take effect sequence in /Device/AsicCommands bool device_commands = 12; - + // Dynamic analysis configuration // // Stored with the frame config took effect in /Meta/User/DynamicAnalysisConfiguration @@ -1513,7 +1547,7 @@ message SetWriterConfigurationResponse { message GetWriterConfigurationRequest { // The unique identifier assigned to this acquisition run. - // + // // Since 6.0 string run_id = 1; } @@ -1527,7 +1561,7 @@ message GetReadClassificationsResponse { message DynamicAnalysisConfiguration { message ReadScaleTracking { - // Set the voltage the most recent conductance scan occured at. + // Set the voltage the most recent conductance scan occurred at. float conductance_scan_voltage = 1; message ChannelConductance { diff --git a/proto/minknow_api/basecaller.proto b/proto/minknow_api/basecaller.proto index 41e17a6..072e32f 100644 --- a/proto/minknow_api/basecaller.proto +++ b/proto/minknow_api/basecaller.proto @@ -23,8 +23,11 @@ service Basecaller { // List the available basecalling configurations sorted by flow cell and kit. // // Since 3.5 + // + // DEPRECATED: This rpc is no longer supported and does not return any results. rpc list_configs_by_kit (ListConfigsByKitRequest) returns (ListConfigsByKitResponse) { option idempotency_level = NO_SIDE_EFFECTS; + option deprecated = true; } // Start basecalling reads files. @@ -64,7 +67,7 @@ service Basecaller { option idempotency_level = NO_SIDE_EFFECTS; } - + // Clears run info data for each analysis specified // // Run info data is the data returned by `get_info()`. @@ -132,7 +135,7 @@ service Basecaller { // Since 5.0 rpc send_ping(SendPingRequest) returns (SendPingResponse) {} } - + message ListConfigsByKitRequest { } @@ -202,6 +205,11 @@ message StartBasecallingRequest { // Options to control alignment performed once basecalling reads is complete. analysis_configuration.AlignmentConfiguration alignment_configuration = 11; + // Minimum Q-Score for a read to be passed by the basecaller. + // + // Since 6.1. + optional double min_qscore = 15; + // Enable read splitting in the basecaller // // Note: Since 5.9 this option has no effect, the basecaller is responsible for deciding when read splitting should be enabled. @@ -304,7 +312,7 @@ message StartPostProcessingProtocolRequest { string input_fast5_directory = 2; string input_fastq_directory = 3; string input_bam_directory = 4; - + // Path to the sample sheet output by minknow string sample_sheet_path = 8; @@ -546,7 +554,7 @@ message ListSettingsForPostProcessingProtocolResponse { message UpdateProgressRequest { // id of the protocol to update (stored in environment variable for python process) string id = 1; - + // Progress indicator, 0-1. float progress = 2; } diff --git a/proto/minknow_api/data.proto b/proto/minknow_api/data.proto index 994faff..3387af2 100644 --- a/proto/minknow_api/data.proto +++ b/proto/minknow_api/data.proto @@ -356,8 +356,8 @@ message GetSignalBytesRequest { bool calibrated_data = 7; // When this value is set to true, then an empty message will be sent back - // to the client to indicate that the backend has acknowleged the request, - // and that any calls made that will affect the signal after that initial + // to the client to indicate that the backend has acknowledged the request, + // and that any calls made that will affect the signal after that initial // response will be reflected in the next messages bool return_when_listening = 8; } @@ -384,7 +384,7 @@ message GetSignalBytesResponse { // // Returning the data in this format allows it to be efficiently processed in dynamic // languages that can pass the data straight down to a native runtime. For example, in - // Python, this data can be intepreted directly into a numpy array using numpy.fromstring(). + // Python, this data can be interpreted directly into a numpy array using numpy.fromstring(). // // Calibrated data is in picoamps. Uncalibrated data is the raw values output by the // device's ADC (analogue-digital converter). @@ -580,13 +580,13 @@ message GetLiveReadsRequest { // Maximum read length MinKNOW will attempt to unblock (in samples). // // A value of 0 will cause minknow to unblock reads of any length. - // + // uint64 max_unblock_read_length_samples = 5; // Maximum read length MinKNOW will attempt to unblock (in seconds). // // A value of 0.0 will cause minknow to unblock reads of any length. - // + // double max_unblock_read_length_seconds = 6; } @@ -616,7 +616,7 @@ message GetLiveReadsRequest { } // NOTE that the read metrics below are tracked from the receipt of the first StreamSetup message. -// It is advised that the first StreamSetup be sent close to the experiment start time for +// It is advised that the first StreamSetup be sent close to the experiment start time for // maximum accuracy. message GetLiveReadsResponse { message ReadData { @@ -649,7 +649,7 @@ message GetLiveReadsResponse { bytes raw_data = 7; // The median of the read previous to this read. - // intended to allow querying of the approximate level of this read, comapred to the last. + // intended to allow querying of the approximate level of this read, compared to the last. // // For example, a user could try to verify this is a strand be ensuring the median of the // current read is lower than the median_before level. @@ -791,7 +791,7 @@ message GetReadStatisticsResponse { // // Computed as median(median[...]) double median = 2; - + // Aggregated range value from all classified reads. // // Computed as median(q90[...] - q10[...]) diff --git a/proto/minknow_api/device.proto b/proto/minknow_api/device.proto index 081b3fa..f63f78f 100644 --- a/proto/minknow_api/device.proto +++ b/proto/minknow_api/device.proto @@ -89,7 +89,7 @@ service DeviceService { option idempotency_level = NO_SIDE_EFFECTS; } - // Reset all settings associate with the current device. + // Reset all settings associated with the current device. // // This call will initialise all settings to their default state, ie the same as when MinKNOW boots. rpc reset_device_settings(ResetDeviceSettingsRequest) returns (ResetDeviceSettingsResponse) { @@ -273,7 +273,7 @@ service DeviceService { // This has a hard limit of 255, and an error will occur if an overflow is detected. // // Since 5.6 - rpc increment_flow_cell_use_count (IncrementFlowCellUseCountRequest) returns (IncrementFlowCellUseCountResponse) { + rpc increment_flow_cell_use_count (IncrementFlowCellUseCountRequest) returns (IncrementFlowCellUseCountResponse) { } // Specify the barcode kit that has been used with the flow cell @@ -282,7 +282,7 @@ service DeviceService { // barcodes that have been used until this has been set. // // Since 5.6 - rpc set_flow_cell_barcode_kit(SetFlowCellBarcodeKitRequest) returns (SetFlowCellBarcodeKitResponse) { + rpc set_flow_cell_barcode_kit(SetFlowCellBarcodeKitRequest) returns (SetFlowCellBarcodeKitResponse) { } // Register that a distinct barcode has been used with the flow-cell @@ -290,7 +290,7 @@ service DeviceService { // Barcodes cannot be cleared once registered. A Barcode Kit must also be set using set_flow_cell_barcode_kit() // // Since 5.6 - rpc register_flow_cell_barcodes(RegisterFlowCellBarcodesRequest) returns (RegisterFlowCellBarcodesResponse) { + rpc register_flow_cell_barcodes(RegisterFlowCellBarcodesRequest) returns (RegisterFlowCellBarcodesResponse) { } } @@ -371,20 +371,26 @@ enum FlowCellConnectorType { // // Currently, this means a MinION or GridION with a Flongle adapter inserted. FCCON_FLONGLE = 3; + + // The flow cell position accepts Pebble-style flow-cells. + // This should be treated as experimental and subject to change + FCCON_PEBBLE = 4; } message GetDeviceInfoRequest {} message GetDeviceInfoResponse { + // The `PEBBLE` device type should be treated as experimental and subject to change enum DeviceType { + reserved 5; MINION = 0; GRIDION = 2; PROMETHION = 3; MINION_MK1C = 4; - TRAXION = 5; P2_SOLO = 6; MINION_MK1D = 7; P2_INTEGRATED = 8; + PEBBLE = 9; } // A unique identifier for the device. @@ -559,7 +565,7 @@ message GetFlowCellInfoResponse { // In the event a flow cell does not have an eeprom, this field contains data input by the user // using set_flow_cell_info to record required data. // - // Only alpha-numeric, space, dash and underscore characters are allowed in this field. + // Only alphanumeric, space, dash and underscore characters are allowed in this field. // // Since 1.12 string user_specified_flow_cell_id = 7; @@ -613,7 +619,7 @@ message GetFlowCellInfoResponse { // Since 5.0 InsertionScriptStatus insertion_script_status = 14; - // The use count for this flow cell. + // The use count for this flow cell. // // Since 5.6 uint32 use_count = 15; @@ -647,7 +653,7 @@ message GetFlowCellInfoResponse { // True if the flow cell is a Configuration Test Cell (CTC). // - // Note that this is currently set if and only if the cell's + // Note that this is currently set if and only if the cell's // product ID starts with 'CTC'. // Detection of CTCs constructed from repurposed standard flow cells // will be implemented later. @@ -658,6 +664,17 @@ message GetFlowCellInfoResponse { // // Since 6.0 bool is_ctc = 20; + + // Set to true if the flow cell partner is incompatible with this installation of MinKNOW. + // + // Note that it is possible for this field to be true and for flow_cell_partner to be empty (if + // the installation requires a specific flow cell partner value). + // + // Since 5.6 (China IVD and Q) + // + // NB: this does not appear in the 5.6 OND release, or in RUO releases 5.7, 5.8, 5.9 or 6.0. It + // is available in all 6.2 releases onwards. + bool incompatible_flow_cell_partner = 21; } message StreamFlowCellInfoRequest {} @@ -901,7 +918,7 @@ message SetTemperatureResponse { // `set_temperature()` SECONDARY_TEMPERATURE_LIMITS_EXCEEDED = 3; } - + // The result of setting the temperature // // Since 5.5 @@ -949,22 +966,41 @@ message GetTemperatureResponse google.protobuf.FloatValue chamber_temperature = 2; } + // Packet of temperatures appropriate for a Pebble + message PebbleTemperature + { + // Temperature as measured by a sensor in the ASIC silicon. + // This is the "primary" temperature. + google.protobuf.FloatValue asic_temperature = 1; + + // Temperature as measured by temperature-sensor on the PCB inside the + // instrument, but not on the P-Chip. + // This is the "secondary" temperature. + google.protobuf.FloatValue instrument_temperature = 2; + + // Temperature as measured by a temperature-sensor on the P-Chip. + // Likely to be removed in future revisions. + google.protobuf.FloatValue pchip_temperature = 3; + } + oneof temperature { MinIONTemperature minion = 1; PromethIONTemperature promethion = 2; + PebbleTemperature pebble = 6; } // Return the temperature target the device is aiming to reach. // // Since 1.15 google.protobuf.FloatValue target_temperature = 3; - + // Starting temperature value // // Since 6.0 oneof starting_temperature { google.protobuf.FloatValue minion_starting_temperature = 4; google.protobuf.FloatValue promethion_starting_temperature = 5; + google.protobuf.FloatValue pebble_starting_temperature = 7; } } @@ -1203,10 +1239,10 @@ message DumpStateRequest { message DumpStateResponse { } -message IncrementFlowCellUseCountRequest { +message IncrementFlowCellUseCountRequest { } -message IncrementFlowCellUseCountResponse { +message IncrementFlowCellUseCountResponse { } message SetFlowCellBarcodeKitRequest { @@ -1217,11 +1253,11 @@ message SetFlowCellBarcodeKitRequest { message SetFlowCellBarcodeKitResponse { } -message RegisterFlowCellBarcodesRequest { +message RegisterFlowCellBarcodesRequest { // List of unique barcodes that have been used with the flow-cell // Where a barcode is represented by an index in the range of 1 to 384 only. repeated uint32 barcodes = 1; } -message RegisterFlowCellBarcodesResponse { +message RegisterFlowCellBarcodesResponse { } diff --git a/proto/minknow_api/hardware_check.proto b/proto/minknow_api/hardware_check.proto new file mode 100644 index 0000000..106f4f4 --- /dev/null +++ b/proto/minknow_api/hardware_check.proto @@ -0,0 +1,156 @@ +syntax="proto3"; + +package minknow_api.hardware_check; + +option java_package = "com.nanoporetech.minknow_api"; +option objc_class_prefix = "MKAPI"; + +import "minknow_api/device.proto"; +import "minknow_api/protocol.proto"; +import "google/protobuf/timestamp.proto"; + +service HardwareCheckService { + // Starts a hardware check against the device and any given positions. + rpc start_hardware_check (StartHardwareCheckRequest) returns (StartHardwareCheckResponse) { + option idempotency_level = IDEMPOTENT; + } + + // Stops a hardware check against the device. + rpc stop_hardware_check (StopHardwareCheckRequest) returns (StopHardwareCheckResponse) { + option idempotency_level = IDEMPOTENT; + } + + // Sets the latest hardware check result within Core, with the information from the hardware check script. + rpc update_hardware_check_results (UpdateHardwareCheckResultsRequest) returns (UpdateHardwareCheckResultsResponse) { + option idempotency_level = IDEMPOTENT; + } + + // Lists all hardware checks. + // Stream remains open whilst subscribed and any additionally started hardware checks are added to the list. + rpc stream_hardware_check_results (StreamHardwareCheckResultsRequest) returns (stream StreamHardwareCheckResultsResponse) { + option idempotency_level = NO_SIDE_EFFECTS; + } + + // Generate a hardware check result report from a given hardware check ID. + rpc generate_hardware_check_report (GenerateHardwareCheckReportRequest) returns (stream GenerateHardwareCheckReportResponse) { + option idempotency_level = IDEMPOTENT; + } +} + +message StartHardwareCheckRequest { + // A list of position IDs to start a hardware check on + // e.g. `['X1', X2', 'X5']`. + repeated string position_ids = 1; +} + +message StartHardwareCheckResponse { + // The unique ID for the newly created hardware check. + string hardware_check_id = 1; +} + +message StopHardwareCheckRequest { + // The unique ID for a hardware check. + string hardware_check_id = 1; +} + +message StopHardwareCheckResponse {} + +// Each position result +message PositionCheckResult { + // The ID of the position that performed the hardware check. + string position_id = 1; + + // The type of the device the hardware check is running on. + device.GetDeviceInfoResponse.DeviceType device_type = 2; + + // A list of position hardware check results. + // This is the HardwareCheckResult message from the protocol + repeated protocol.HardwareCheckResult hardware_check_result = 3; +} + +// The data received from the hardware check script +message HardwareCheckScriptData { + // A list of results for each position. + repeated PositionCheckResult position_check_results = 1; + + // Indicates progress of the overall hardware check procedure. + // + // This field will always have values between 0 and 100 (inclusive), and the value will increase + // over time. It is intended for displaying a progress bar or similar. + // + // When the hardware check has completed this value will be 100. + uint32 progress_percent = 2; + + // Indicates roughly how much time is remaining for the hardware check. + // + // If no ETA can be calculated, or the hardware check is complete, this will be zero. + // + // Note that it is always an estimate - it is recommended to round larger values, like "about 2 + // minutes remaining". + uint32 progress_eta_seconds = 3; +} + +message UpdateHardwareCheckResultsRequest { + // The unique ID for a hardware check. + string hardware_check_id = 1; + + // The data from the hardware check script + HardwareCheckScriptData hardware_check_script_data = 2; +} + +message UpdateHardwareCheckResultsResponse {} + +message StreamHardwareCheckResultsRequest { + // Filter the response by a specific hardware check ID. + // + // If no hardware check ID is provided, persisted data will be returned + // if any exists + // If a hardware check has started, the rpc will return information about the + // new ongoing hardware check + optional string hardware_check_id = 1; +} + +// The data sent to the UI +message HardwareCheckResult { + // The ID of this hardware check result. + string hardware_check_id = 1; + + // The time (UTC) when the hardware check was started. + google.protobuf.Timestamp start_time = 2; + + // The time (UTC) when the hardware check completed. + // + // Unset if the check is still running. + google.protobuf.Timestamp end_time = 3; + + // The data from the hardware check script + HardwareCheckScriptData hardware_check_script_data = 4; +} + +message StreamHardwareCheckResultsResponse { + // Returns the hardware check results. + // + // If no ID is provided, returns persisted hardware check results, if persisted results exist. + // It will then stay connected, and any newly started hardware checks, triggered via + // `start_hardware_check`, will be sent individually, as well as any progress updates. + // + // If an ID is provided for a persisted record, it will return the result and end. + // If an ID is provided for the current hardware check, it will stay connected for new updates + // and end when the check is completed. + // + // Each result will be returned individually. + HardwareCheckResult hardware_check_result = 1; +} + +message GenerateHardwareCheckReportRequest { + // The ID of the hardware check to generate a report for. + string hardware_check_id = 1; +} + +message GenerateHardwareCheckReportResponse { + // The ID of the hardware check the report is for. + string hardware_check_id = 1; + + // A section of the hardware check report data (note the api to return this data may stream back several sections). + string report_data = 2; +} diff --git a/proto/minknow_api/instance.proto b/proto/minknow_api/instance.proto index 831028c..9a0d10f 100644 --- a/proto/minknow_api/instance.proto +++ b/proto/minknow_api/instance.proto @@ -18,7 +18,7 @@ service InstanceService { option idempotency_level = NO_SIDE_EFFECTS; } - // Returns various directory locations where minknow is outputting data. The paths are absolute paths, + // Returns various directory locations where minknow is outputting data. The paths are absolute paths, // local to the machine where minknow is installed // // the `output` base directory can be changed internally @@ -93,7 +93,7 @@ service InstanceService { // web socket transport). // // Use this request to find information about the current device, flow cell, protocol and acquisition state. - // + // // Since 3.2 rpc stream_instance_activity(StreamInstanceActivityRequest) returns (stream StreamInstanceActivityResponse) { option idempotency_level = NO_SIDE_EFFECTS; @@ -101,7 +101,7 @@ service InstanceService { } message GetVersionInfoRequest { - + } message GetVersionInfoResponse { @@ -114,8 +114,8 @@ message GetVersionInfoResponse { // What minknow version is installed. Split into major, minor and patch versions // Also includes the full version as a string, which contain the major, minor and patch numbers - // as well as if the version is pre-release version (-pre), whether it is a release candidate (-rc#) - // or whether it is a variant version (i.e. for conferences) (-variant). For non-release builds it also + // as well as if the version is pre-release version (~pre), whether it is a release candidate (~rc#) + // or whether it is a variant version (i.e. for conferences) (-variant). For non-release builds it also // includes the hash of the commit it is based on, and whether the working copy is different from that has (-dirty) MinknowVersion minknow = 1; @@ -315,7 +315,7 @@ message N50 { // // The latest value is sent once per minute float n50 = 1; - + // N50 data, in estimated bases // // The latest value is sent once per minute @@ -357,7 +357,7 @@ message StreamInstanceActivityResponse { FlowCellHealth flow_cell_health = 5; // Acquisition yield information. Describes information such as number of reads, - // what number of those reads have passed or failed basecalling etc. Rate + // what number of those reads have passed or failed basecalling etc. Rate // limited to 1 second per update acquisition.AcquisitionYieldSummary yield_summary = 6; diff --git a/proto/minknow_api/manager.proto b/proto/minknow_api/manager.proto index 351bf35..fec4a83 100644 --- a/proto/minknow_api/manager.proto +++ b/proto/minknow_api/manager.proto @@ -20,7 +20,7 @@ service ManagerService { rpc describe_host (DescribeHostRequest) returns (DescribeHostResponse) { option idempotency_level = NO_SIDE_EFFECTS; } - + // Get features from the basecaller, for whether the server can support live basecalling with adaptive sampling // // Since 5.9 @@ -265,36 +265,18 @@ service ManagerService { // Get the device code/key for association. // - // This can be used to either get the code that the user must enter into the customer support - // portal to associate the device with their account, or the key used for online association. - // - // Errors: - // INVALID_ARGUMENT: The requested flow cell position does not exist. - // - // Since 4.4 + // DEPRECATED since 6.2 device association is no-longer required. This RPC will return UNIMPLEMENTED. rpc association_device_code(AssociationDeviceCodeRequest) returns (AssociationDeviceCodeResponse) { option idempotency_level = NO_SIDE_EFFECTS; + option deprecated = true; } // Apply the unlock code for offline association. // - // This is the code that the user receives from the customer support portal after entering the - // device code for this device (see `offline_association_device_code`). - // - // This is only required if either `describe_host` indicates that the device as a whole needs - // association, or `flow_cell_positions` indicates that a particular positions needs it. - // - // Errors: - // INVALID_ARGUMENT: The requested flow cell position does not exist, or no unlock code - // was provided. - // - // Note that you will need to check the result to see if the association was successful. Calling - // this on an already-associated device with a valid unlock code will succeed, but have no - // effect. - // - // Since 4.4 + // DEPRECATED since 6.2 device association is no-longer required. This RPC will return UNIMPLEMENTED. rpc apply_offline_association_unlock_code(ApplyOfflineAssociationUnlockCodeRequest) returns (ApplyOfflineAssociationUnlockCodeResponse) { option idempotency_level = IDEMPOTENT; + option deprecated = true; } // List all developer API tokens. @@ -361,11 +343,21 @@ service ManagerService { } // Forcibly halt and restart any MinKNOW-related device administration services, such as Mooneye. - // + // // Since 6.0 rpc restart_device_admin_service(RestartDeviceAdminRequest) returns (RestartDeviceAdminResponse) { option idempotency_level = IDEMPOTENT; } + + // Checks the validity of a BED file against a corresponding index or genome file + // + // Errors: + // INVALID_ARGUMENT if the bed_file_path or index_file_path is empty + // + // Since 6.1 + rpc check_bed_file(CheckBedFileRequest) returns (CheckBedFileResponse) { + option idempotency_level = NO_SIDE_EFFECTS; + } } message DescribeHostRequest { @@ -417,7 +409,7 @@ message DescribeHostResponse { // This is the name the host system believes it has on the network. This can be useful if an IP // address was used to connect to the RPC system. // - // For customer computers, this is the only available identfying information for the system. + // For customer computers, this is the only available identifying information for the system. string network_name = 4; // This device has not been associated with an account. @@ -432,6 +424,7 @@ message DescribeHostResponse { // ``STATE_NEEDS_ASSOCIATION`` - see the `flow_cell_positions` RPC). // // Since 4.4 + // DEPRECATED since 6.2 device association is no-longer required, this will always be false. bool needs_association = 16; // Whether the device can sequence while offline. @@ -443,11 +436,19 @@ message DescribeHostResponse { // Since 4.4 bool can_sequence_offline = 5; + // Whether or not the host system can connect to a USB sequencer. + // + // This is true on all systems except iOS where it is true if and only if the driver that is + // shipped with the app has been enabled in system settings. + // + // Since 6.1 + bool can_connect_to_usb_device = 17; + enum BasecallingAvailability { // Basecalling is available and the underlying services are up and running BASECALLING_AVAILABLE = 0; // Basecalling is unavailable - // + // // This may be due to failing to start or has failed to recover after being restarted BASECALLING_UNAVAILABLE = 1; // Basecalling is unavailable due to bad configuration of the underlying service @@ -458,7 +459,7 @@ message DescribeHostResponse { BASECALLING_UNAVAILABLE_BAD_CONFIGURATION = 2; // Basecalling is temporarily unavailable and the system is attempting to restart // the underlying service - // + // // This may be due to a runtime issue and attempts are being made to recover BASECALLING_UNAVAILABLE_ATTEMPTING_RECOVERY = 3; }; @@ -580,10 +581,17 @@ message FlowCellPosition { // // See also `DescribeHostResponse.needs_association`. If the `describe_host` RPC result has // `needs_association` set to false, this position is a pluggable device (likely a MinION - // Mk1B) that individually requires assocation. + // Mk1B) that individually requires association. // // Since 4.4 + // DEPRECATED: since 6.2 device or host association is not required or supported. STATE_NEEDS_ASSOCIATION = 6; + // The USB connection speed is too low for the device to operate correctly + // + // Ensure that the device is plugged in to a suitable USB port, using the recommended cable + // + // Since 6.1 + STATE_USB_SPEED_TOO_LOW = 7; }; // The state of the flow cell position. @@ -630,10 +638,6 @@ message FlowCellPosition { // Integrated positions are always listed, even if (due to some hardware error) they can't be // found. They are never in STATE_HARDWARE_REMOVED, and they always report a location. // - // Additionally, integrated positions cannot be associated independently - if they are in - // STATE_NEEDS_ASSOCIATION, then the host as a whole needs associating. Likewise, either all - // integrated positions can run offline, or none of them can. - // // Since 4.4 bool is_integrated = 7; @@ -1098,9 +1102,9 @@ message GetSequencingKitsResponse { } enum SimulatedDeviceType { + reserved 2; SIMULATED_AUTO = 0; SIMULATED_MINION = 1; - SIMULATED_TRAXION = 2; SIMULATED_PROMETHION = 3; SIMULATED_P2 = 4; } @@ -1187,6 +1191,7 @@ message GetAlignmentReferenceInformationResponse { uint64 max_recommended_adaptive_sampling_bases = 5; } +// DEPRECATED: since 6.2 device association is no-longer required. message AssociationDeviceCodeRequest { // The flow cell position to get the association code/key for. // @@ -1207,6 +1212,7 @@ message AssociationDeviceCodeRequest { reserved 2; } +// DEPRECATED: since 6.2 device association is no-longer required. message AssociationDeviceCodeResponse { // The code required to associate the device with an account. // @@ -1215,6 +1221,7 @@ message AssociationDeviceCodeResponse { string code = 1; } +// DEPRECATED: since 6.2 device association is no-longer required. message ApplyOfflineAssociationUnlockCodeRequest { // The flow cell position to unlock. // @@ -1229,6 +1236,7 @@ message ApplyOfflineAssociationUnlockCodeRequest { string unlock_code = 2; } +// DEPRECATED: since 6.2 device association is no-longer required. message ApplyOfflineAssociationUnlockCodeResponse { // True if the association was successful (the unlock_code was accepted), false otherwise. bool associated = 1; @@ -1399,7 +1407,7 @@ message ListSettingsForProtocolResponse { protocol_settings.ProtocolSetting bulk_file_raw_enabled = 21; protocol_settings.ProtocolSetting bulk_file_events_enabled = 22; protocol_settings.ProtocolSetting bulk_file_read_table_enabled = 23; - + // Since 5.8 protocol_settings.ProtocolSetting read_filtering_min_duplex_qscore = 24; } @@ -1422,7 +1430,7 @@ message Feature { } message FeatureList { - // feature_flags is a special value + // feature_flags is a special value // If false, turns off all other feature flags // If true, allows individual flags to be enabled and disabled Feature feature_flags = 3; @@ -1432,7 +1440,7 @@ message FeatureList { } message GetFeaturesRequest { - + } message GetFeaturesResponse { @@ -1460,7 +1468,7 @@ message SetFeaturesRequest { } message SetFeaturesResponse { - + } message RestartDeviceAdminRequest { @@ -1468,3 +1476,24 @@ message RestartDeviceAdminRequest { message RestartDeviceAdminResponse { } + +message CheckBedFileRequest { + // The path to the BED file to validate + string bed_file_path = 1; + + // The path to the index file that the BED file should validate against + // + // Can be a .fasta, .fai or .mmi file + string index_file_path = 2; + + // Strictly conforms to the BED file specification and allows both tabs and spaces + // to be used as delimiters between columns + bool strict = 3; + + // Check strand values are allowed + bool stranded = 4; +} + +message CheckBedFileResponse { + bool passed = 1; +} diff --git a/proto/minknow_api/minion_device.proto b/proto/minknow_api/minion_device.proto index 63eb2c5..dd25b3c 100644 --- a/proto/minknow_api/minion_device.proto +++ b/proto/minknow_api/minion_device.proto @@ -443,9 +443,9 @@ message MinionDeviceSettings { // Use the bias voltage lookup table to set the bias voltage. // - // If this is enabled, the bias voltage will be updated every millisecond with each entry in the - // bias voltage lookup table (see ``bias_voltage_lookup_table``) in turn, cycling through when - // the end of the table is reached. + // If this is enabled, the bias voltage will be updated every 1.25ms (ie: at 800Hz) with each + // entry in the bias voltage lookup table (see ``bias_voltage_lookup_table``) in turn, cycling + // through when the end of the table is reached. // // This has the effect of producing a bias voltage waveform. // diff --git a/proto/minknow_api/pebble_device.proto b/proto/minknow_api/pebble_device.proto new file mode 100644 index 0000000..d27ce9d --- /dev/null +++ b/proto/minknow_api/pebble_device.proto @@ -0,0 +1,356 @@ +syntax="proto3"; + +package minknow_api.pebble_device; + +option java_package = "com.nanoporetech.minknow_api"; +option objc_class_prefix = "MKAPI"; + +import "google/protobuf/wrappers.proto"; +import "minknow_api/rpc_options.proto"; + +// Interface to control Pebble devices. +// This service should be treated as experimental and subject to change +service PebbleDeviceService { + // Change the settings which apply to the whole device. + rpc change_device_settings(ChangeDeviceSettingsRequest) returns (ChangeDeviceSettingsResponse) { + option idempotency_level = IDEMPOTENT; + } + + // Get the current settings which apply to the whole device. + rpc get_device_settings(GetDeviceSettingsRequest) returns (GetDeviceSettingsResponse) { + option idempotency_level = NO_SIDE_EFFECTS; + } + + // Change the settings which apply to the referenced channels. + rpc change_channel_settings(ChangeChannelSettingsRequest) returns (ChangeChannelSettingsResponse) { + option idempotency_level = IDEMPOTENT; + } + + // Get the channels settings for the requested channel's + rpc get_channel_settings(GetChannelSettingsRequest) returns (GetChannelSettingsResponse) { + option idempotency_level = NO_SIDE_EFFECTS; + } + + // Experimental access for research purposes to modify low level settings + // Note: Access will be removed once device integration complete + rpc change_research_only_settings(ChangeResearchOnlySettingsRequest) returns (ChangeResearchOnlySettingsResponse) { + option (experimental) = true; + option idempotency_level = IDEMPOTENT; + } +} + +message WaveformSettings { + // The waveform data applied to the device (in millivolts) + // + // INVALID_ARGUMENT will be returned if the length of voltages is greater than 254 + // INVALID_ARGUMENT will be returned if one of the voltages is outside of [-Vref..Vref]mV + repeated double voltages = 1; + + // The number of samples each wavetable entry will be valid for + // + // Valid value must be between [1..31] + // INVALID_ARGUMENT will be returned if not between these values + google.protobuf.UInt32Value samples_per_entry = 2; +} + +message TimingEnginePeriods { + message TimingState { + // The duration spent in each state is 1 more TEclock period than set + // in the associated register, so setting 1 results in a delay of 2 clock periods + google.protobuf.Int32Value duration = 1; + + // The mask is built up of 7 user settable timing signals + // bit 0: INT_RESET + // bit 1: CDS_SAMPLE + // bit 2: CDS_RESET + // bit 3: DIG_ENABLE + // bit 4: CDS_SELECT + // bit 5: SYNC_MASTER + // bit 6: CML_ENABLE + google.protobuf.Int32Value mask = 2; + } + + // There are 16 timing engine states each broken down in to duration + // and timing signal mask. If any of the states are omitted then the defaults will + // be used. + // + // Note: Setting duration of state 4 and 12 has no affect as it + // is modified by MinKNOW based on the sample rate. Reading + // it will return the chosen duration + + // Zero index based map [0-15] of up to 16 timing engine states + map states = 3; + + // If written true, other fields will be ignored and the hardware will use + // default timings. When read will return true if previously set true, + // it will not tell you if the timing periods you previously entered + // are the same as the default values. + google.protobuf.BoolValue use_default_values = 4; +} + +message OverloadProtectionConfig +{ + // Set to enable or disable hardware based overload protection (saturation). + google.protobuf.BoolValue enabled = 1; + + // Threshold for the number of periods counted over threshold before + // disconnection. + // Valid value must be between [0..7] + // INVALID_ARGUMENT will be returned if not between these values + google.protobuf.UInt32Value periods = 2; + + // The minimum adc value that is not a saturation. + // + // If this value is not specified, the previous value is kept. + // Valid value must be between [-2047..2047] + // INVALID_ARGUMENT will be returned if not between these values + google.protobuf.Int32Value min_adc = 3; + + // The maximum adc value that is not a saturation. + // + // If this value is not specified, the previous value is kept. + // Valid value must be between [-2047..2047] + // INVALID_ARGUMENT will be returned if not between these values + google.protobuf.Int32Value max_adc = 4; +} + +message DeviceSettings { + + enum RegenCurrentRange { + REGEN_RANGE_KEEP = 0; + REGEN_RANGE_0_5nA_STEP_0_1nA = 1; + REGEN_RANGE_0_667nA_STEP_0_133nA = 2; + REGEN_RANGE_1_0nA_STEP_0_2nA = 3; + REGEN_RANGE_2_0nA_STEP_0_4nA = 4; + } + + enum LowPassFilterValue { + LPF_KEEP = 0; + LPF_0_us = 1; + LPF_696kHz_2_us = 2; + LPF_348kHz_4_us = 3; + LPF_232kHz_7_us = 4; + LPF_174kHz_9_us = 5; + LPF_139kHz_11_us = 6; + LPF_116kHz_13_us = 7; + LPF_99kHz_16_us = 8; + }; + + // The number of measurements to take each second. + // + // Possible values are between 1000, and 5000. + // If the value is outside of this range, it will be clamped within it + // + // FAILED_PRECONDITION will be returned if attempting to change during acquisition + google.protobuf.Int32Value sample_rate = 1; + + // If the device is capable (see device.get_device_info().temperature_controllable) + // then this sets the target temperature to keep the flow-cell at. + // + // This value must be between the limits specified in the application config, + // see: min_user_setpoint_temperature_celsius and max_user_setpoint_temperature_celsius + // INVALID_ARGUMENT will be returned if outside these limits + google.protobuf.FloatValue temperature_target = 2; + + // The reference voltage Vref + // + // This value must be within the range of [700..1100](mV) and will be rounded down + // to the nearest 50mV. + // INVALID_ARGUMENT will be returned if outside these limits + google.protobuf.Int32Value reference_voltage = 3; + + // The unblock voltage to apply when a channel is unblocking. + // + // The acceptable input range depends on Vref + // The default Vref of 900mV gives the unblock level a range between [-840..900]mV + // INVALID_ARGUMENT will be returned if outside of the limits set depending on Vref + google.protobuf.Int32Value unblock_voltage = 4; + + // Determines the range of regen current available for selection + // Range 0.5nA, step 0.1nA + // Range 0.667nA, step 0.133nA + // Range 1.0nA, step 0.2nA (DEFAULT) + // Range 2.0nA, step 0.4nA + // INVALID_ARGUMENT will be returned if range option does not exist + RegenCurrentRange regen_current_range = 5; + + // Control the regeneration current used when regenerating well's. + // + // The acceptable value is in pico Amps and depends on the specified + // regen_current_range option. Will round down to nearest acceptable + // step in value within the range. + // INVALID_ARGUMENT will be returned if outside the acceptable range + google.protobuf.Int32Value regen_current = 6; + + // Voltage clamp for regeneration circuit (in millivolts) + // + // The voltage in the regeneration circuit is clamped under this value, + // whilst applying the current specified in each quads settings. + // + // This is a +/- voltage relative to Vref + // The polarity is determined by the regen current + // With a default Vref of 900mV this gives the regen level a range of [0..840]mV + // INVALID_ARGUMENT will be returned if outside the acceptable range + google.protobuf.UInt32Value regen_current_voltage_clamp = 7; + + // Settings controlling the device bias voltage + oneof bias_voltage_setting { + // The value to apply as the bias voltage (in millivolts) + // + // Valid values are in the range [-Vref..Vref]mv + // INVALID_ARGUMENT will be returned if outside this range + google.protobuf.DoubleValue bias_voltage = 8; + + // The wavetable settings + WaveformSettings bias_voltage_waveform = 9; + } + + // Integration capacitor used for controlling the Gain + // This size of the capacitance used is based on the provided setting + // with a value of [0..31] + // + // Refer to §2.3.1 of the OG2 ASIC documentation for both the nominal + // and measured capacitance that each setting produces. + // + // This value is applied globally to all QUADs and therefore all channels + // + // INVALID_ARGUMENT will be returned if outside the range of [0..31] + google.protobuf.Int32Value int_capacitor = 10; + + // Low pass filter time constant + // This modifies the anti-alias resistor to produce a specific time constant + // for the low pass filter. + LowPassFilterValue lpf_time_constant = 11; + + // If specified, the device will adopt these timings to set how + // long is spent at various stages of the sampling process. + // The message includes a way of returning to default timings. + // + // FAILED_PRECONDITION will be returned if attempting to change during acquisition + TimingEnginePeriods timings = 12; + + // Enable ASIC power save. + // + // Setting to active will save power, but doing so will allow the ASIC to cool down, + // and it will take time to heat it up again along with performing a device reset. + google.protobuf.BoolValue power_save_active = 13; + + // Settings for the hardware based saturation/overload protection (spike suppression) + OverloadProtectionConfig overload_protection = 14; + +} + +message ChangeDeviceSettingsRequest { + DeviceSettings settings = 1 [(rpc_unwrap) = true]; +} + +message ChangeDeviceSettingsResponse { + // The sampling frequency actually applied to the hardware, as + // close as possible to the requested rate. + // + // Note: only returned if sampling rate was set as part of this call. + google.protobuf.Int32Value real_sample_rate = 1; +} + +message GetDeviceSettingsRequest { +} + +message GetDeviceSettingsResponse { + DeviceSettings settings = 1 [(rpc_unwrap) = true]; +} + + +message ChannelSettings { + + // Note: Check device.get_flow_cell_info().wells_per_channel to determine + // usable input wells. + enum Input { + NO_CONNECTION = 0; + WELL_1 = 1; + WELL_2 = 2; + OTHER = 3; + } + + enum Mode { + INACTIVE = 0; + ACTIVE = 1; + UNBLOCK = 2; + MEMBRANE_SIMULATION = 3; + REGEN = 4; + } + + // The input to be digitised + Input input = 1 [(rpc_required) = true]; + + // The channel mode + Mode mode = 2 [(rpc_required) = true]; +} + +message ChangeChannelSettingsRequest { + // 1 based map of up to 400 different channel settings + map channels = 1; + + // If supplied, contains settings applied to every channel before then + // applying any specific settings in the per channel settings. + ChannelSettings channel_default = 2; +} + +message ChangeChannelSettingsResponse { +} + +message GetChannelSettingsRequest { + // The channels (one based) to return data for. + repeated uint32 channels = 1 [(rpc_required) = true]; +} + +message GetChannelSettingsResponse { + // List of all requested pixel settings, in the order requested. + repeated ChannelSettings channels = 1; +} + +message ResearchOnlySettings { + message AsicRegisterWrite { + // Register to write to, value between 0..254 + uint32 address = 2; + // Value to write to the register, value between 0..255 + // Note: If value over two registers (high and low) then two separate writes required + uint32 value = 3; + // Delay to add after this write, before the next + uint32 delay = 4; + } + + message InstrumentRegisterWrite { + // Register to write + uint32 address = 6; + // Value + uint32 value = 7; + // Delay to add after this write, before the next + uint32 delay = 8; + } + + // List of ASIC register writes to append + // Use at own risk as no validation is performed on the address + // or value of the individual writes. + // + // The number of writes in single request limited to 128 + // due to internal MinKNOW limitations + // INVALID_ARGUMENT will be returned if greater than this limit + repeated AsicRegisterWrite asic_writes = 5; + + // List of instrument register writes + // Use at own risk as no validation is performed on the address + // or value of the individual writes. + // + // The number of writes in single request limited to 16 + // due to internal MinKNOW limitations + // INVALID_ARGUMENT will be returned if greater than this limit + repeated InstrumentRegisterWrite instrument_writes = 9; +} + +message ChangeResearchOnlySettingsRequest { + ResearchOnlySettings settings = 1 [(rpc_unwrap) = true]; +} + +message ChangeResearchOnlySettingsResponse { + +} diff --git a/proto/minknow_api/promethion_device.proto b/proto/minknow_api/promethion_device.proto index 921b9e5..41ce02b 100644 --- a/proto/minknow_api/promethion_device.proto +++ b/proto/minknow_api/promethion_device.proto @@ -66,20 +66,20 @@ message DeviceSettings { // // Possible values are between 1000, and 10000. // If the value is outside of this range, it will be clamped within it - // + // // This value cannot be changed during acquisition. google.protobuf.Int32Value sampling_frequency = 1; // The value to apply as the ramp voltage (in millivolts) - // - // Valid values are in the range -1250mv..1250mv + // + // Valid values are in the range -1250mv..1250mv google.protobuf.DoubleValue ramp_voltage = 2; // Settings controlling the device bias voltage oneof bias_voltage_setting { // The value to apply as the bias voltage (in millivolts) - // - // Valid values are in the range -1250mv..1250mv + // + // Valid values are in the range -1250mv..1250mv double bias_voltage = 3; // The waveform settings @@ -207,7 +207,7 @@ message PixelSettings { // // ALL is not a valid value here (other values are acceptable). InputConfig input_well = 1; - + // Control which wells are being regenerated (has the specified // regeneration current driven to it). // @@ -311,7 +311,7 @@ message PixelSettings { LowPassFilter cutoff_frequency = 3; // Signal gain multiplier, applied to the integrator circuit. - GainMultiplier gain_multiplier = 4; + GainMultiplier gain_multiplier = 4; // Gain capacitor, used in the integrator circuit. GainCapacitor gain_capacitor = 5; @@ -337,7 +337,7 @@ message PixelSettings { // and allows users to read regen current via the channel adc value. google.protobuf.BoolValue regeneration_current_test_enabled = 11; - // The bias current for the amplifier - this controls the level of noise of the signal. + // The bias current for the amplifier - this controls the level of noise of the signal. // The higher the bias current, the lower the noise, but the bigger the heat and power drawn by // the amplifier. If it is set to off, no signal readings can be made. BiasCurrent bias_current = 12; diff --git a/proto/minknow_api/protocol.proto b/proto/minknow_api/protocol.proto index f38b02c..87c86f4 100644 --- a/proto/minknow_api/protocol.proto +++ b/proto/minknow_api/protocol.proto @@ -371,6 +371,9 @@ message OffloadLocationInfo { } message AnalysisWorkflowRequest { + // EXPERIMENTAL: All fields within this message are marked as experimental and + // may change or be removed between minor versions without warning + enum When { // Start the analysis workflow at the end of the protocol PROTOCOL_END = 0; @@ -378,7 +381,7 @@ message AnalysisWorkflowRequest { // The workflow request to start analysis_workflows.ProxyRequest proxy_request = 1; - + // When to start the request When when = 2; } @@ -405,8 +408,10 @@ message StartProtocolRequest { // // Since 5.3 acquisition.TargetRunUntilCriteria target_run_until_criteria = 5; - + // Workflow request that should be started when the protocol is started + // + // EXPERIMENTAL: This field may change or be removed between minor versions without warning AnalysisWorkflowRequest analysis_workflow_request = 7; } @@ -630,6 +635,9 @@ enum ProtocolPhase { // It should move into another phase, such as PHASE_SEQUENCING or PHASE_PREPARING_FOR_MUX_SCAN, // in a short time. PHASE_RESUMING = 7; + + // When the protocol is completed + PHASE_COMPLETED = 9; } message RequestOrigin { @@ -663,6 +671,21 @@ message RequestOrigin { } } +message ProtocolPhaseSnapshot { + // The new protocol phase when the phase request happened + ProtocolPhase phase = 1; + + // UTC timestamp of when the protocol phase changed was requested + google.protobuf.Timestamp timestamp = 2; + + // Who requested the phase change + // + // Candidates: + // ProtocolPhaseMangement: Through protocol_phase_management API + // MinKNOW: When the protocol ends and the phase is marked PHASE_COMPLETED + RequestOrigin origin = 3; +} + message Epi2meWorkflowReference { // The unique identifier for a workflow ( unique to a specific instance of epi2me ) int64 id = 1; @@ -760,7 +783,7 @@ message GetVersionInfoResponse { // What minknow version is installed. Split into major, minor and patch versions // Also includes the full version as a string, which contain the major, minor and patch numbers - // as well as if the version is pre-release version (-pre), whether it is a release candidate (-rc#) + // as well as if the version is pre-release version (~pre), whether it is a release candidate (~rc#) // or whether it is a variant version (i.e. for conferences) (-variant). For non-release builds it also // includes the hash of the commit it is based on, and whether the working copy is different from that has (-dirty) MinknowVersion minknow = 1; @@ -842,6 +865,9 @@ message GetVersionInfoResponse { } message AnalysisWorkflowInfo { + // EXPERIMENTAL: All fields within this message are marked as experimental and + // may change or be removed between minor versions without warning + // The request that started the analysis workflow AnalysisWorkflowRequest request = 1; @@ -955,6 +981,8 @@ message ProtocolRunInfo { // specification. // // Since 4.4. + // + // DEPRECATED 6.1: Use phase_history instead ProtocolPhase phase = 16; // The last time the phase changed. @@ -964,8 +992,18 @@ message ProtocolRunInfo { // NB: This will not be set if the phase is PHASE_UNKNOWN. // // Since 4.4. + // + // DEPRECATED 6.1: Use phase_history instead google.protobuf.Timestamp last_phase_change = 17; + // The phase history of the protocol + // + // Describes all phases that the protocol went through, with timestamps at each stage + // to track how long it had taken between each phase + // + // Since 6.1 + repeated ProtocolPhaseSnapshot phase_history = 28; + // Whether the protocol can be paused. // // Not all protocols can be paused, and cannot be paused in all phases. @@ -1038,6 +1076,8 @@ message ProtocolRunInfo { repeated AssociatedPostProcessingAnalysis associated_post_processing_analysis = 15; // The analysis workflow (if any) associated with the protocol + // + // EXPERIMENTAL: This field may change or be removed between minor versions without warning AnalysisWorkflowInfo analysis_workflow = 27; // Platform QC result. Set by bream by calling `set_platform_qc_result()`. @@ -1247,6 +1287,11 @@ message BeginProtocolRequest { // Workflow request that should be started when the protocol is started AnalysisWorkflowRequest analysis_workflow_request = 8; + + // Simulation source for playback device data, either an hdf file or directory for use with arrow playback files. + // + // Since 6.2 + string simulation_source = 9; } message BeginProtocolResponse { @@ -1380,4 +1425,4 @@ message GenerateRunReportResponse { // If include_input_data was set, how many further characters of input data remain // after this message (excluding of this message). int32 remaining_input_length = 5; -} \ No newline at end of file +} diff --git a/proto/minknow_api/protocol_settings.proto b/proto/minknow_api/protocol_settings.proto index 324038d..ea077cc 100644 --- a/proto/minknow_api/protocol_settings.proto +++ b/proto/minknow_api/protocol_settings.proto @@ -169,4 +169,4 @@ message ProtocolSetting { // when unit is CHOICE, this defines the acceptable choices. repeated string choices = 17; -} \ No newline at end of file +} diff --git a/proto/minknow_api/report_data.proto b/proto/minknow_api/report_data.proto index b77dc23..3ae85a2 100644 --- a/proto/minknow_api/report_data.proto +++ b/proto/minknow_api/report_data.proto @@ -68,7 +68,7 @@ message AcquistionReportData { // // Since 5.9 analysis_configuration.WriterConfiguration writer_config = 12; - + // Information about the basecaller configuration // // Since 5.9 diff --git a/proto/minknow_api/rpc_options.proto b/proto/minknow_api/rpc_options.proto index 114febc..fd2c1e8 100644 --- a/proto/minknow_api/rpc_options.proto +++ b/proto/minknow_api/rpc_options.proto @@ -40,4 +40,4 @@ extend google.protobuf.MethodOptions { // // This is only used at the service layer, to warn when called. bool experimental = 50003; -} \ No newline at end of file +} diff --git a/proto/minknow_api/run_until.proto b/proto/minknow_api/run_until.proto index b044c4f..c0ce4bc 100644 --- a/proto/minknow_api/run_until.proto +++ b/proto/minknow_api/run_until.proto @@ -29,10 +29,10 @@ import "google/protobuf/timestamp.proto"; // time remaining, and Run-Until actions (i.e. starting/stopping the experiment). // // Finally, this service provides an API for Run-Until Scripts. A Run-Until Script is responsible -// for actually implementing the Run-Until functionality. The Run-Until Script reads the Target +// for actually implementing the Run-Until functionality. The Run-Until Script reads the Target // Run-Until Criteria that are set by the user. It then monitors the experiment's progress, and // pauses or stops the experiment when the Run-Until Criteria have been fulfilled. There is a -// "standard" ONT-provided run-until script, which supports the "standard" Run-Until Criteria. +// "standard" ONT-provided run-until script, which supports the "standard" Run-Until Criteria. // Custom Run-Until Scripts can be implemented which extend the "standard" Run-Until Script to // provide support for additional criteria. // @@ -118,7 +118,7 @@ import "google/protobuf/timestamp.proto"; // stream as follows: // // - When the protocol starts, an empty message is added to the history -// - When an update is received on the `write_updates()` interface, the values of the +// - When an update is received on the `write_updates()` interface, the values of the // `estimated_time_remaining_update` and `current_progress_update` fields are updated, by // "merging" the corresponding fields of the last message in the history. "Merging" here means // copying keys/values which appear in the "previous" message, but which don't have @@ -130,13 +130,13 @@ import "google/protobuf/timestamp.proto"; // previous message in the history is overwritten with the "merged" message // - Otherwise, the "merged" message is appended to the history. // -// After updating the history, the final entry in the history is sent to any open +// After updating the history, the final entry in the history is sent to any open // `stream_updates()` streams. The `idx` in the `StreamUpdatesResponse` message is set equal to // the index of the entry in the history. This means that the `stream_updates()` stream will // likely contain repeated `idx` values -- this will happen when the previous message in the // history is overwritten by the "merged" message. The `time` in the `StreamUpdatesResponse` // message is set equal to the time at which the entry in the history was last updated. -// +// // service RunUntilService { // Write target run-until criteria @@ -287,7 +287,7 @@ message ActionUpdate { message ScriptUpdate { // Indicates that the run-until script has started and is running message Started {} - + // Indicates the the Run-Until Script has update its criteria in response to receiving a // `StreamTargetCriteriaResponse` message message CriteriaUpdated {} diff --git a/proto/minknow_api/statistics.proto b/proto/minknow_api/statistics.proto index 4c94b78..d915d13 100644 --- a/proto/minknow_api/statistics.proto +++ b/proto/minknow_api/statistics.proto @@ -473,14 +473,14 @@ message ReadLengthN50Request { } message ReadLengthN50Response { - + message ReadN50Data { // The estimated N50 value in bases // // This is always set // float estimated_n50 = 1; - + // The basecalled N50 value // // If the acquisition did/does not have live basecalling enabled, this will be 0.0 @@ -523,7 +523,7 @@ message QScoreHistogramKey { // If duplex basecalling is not enabled, equivalent to `Simplex` // If duplex basecalling is enabled, the sum of `Simplex` and `Duplex` All = 0; - + // All simplex data // // When duplex basecalling is enabled, this contains reads/bases from both: @@ -531,14 +531,14 @@ message QScoreHistogramKey { // - Template and complement reads (which are subsequently combined into duplex reads) // Simplex = 1; - + // Duplex data // Only available if duplex basecalling is enabled Duplex = 2; }; ReadType read_type = 1; - + enum BasecallStatus { Any = 0; Skipped = 1; @@ -658,7 +658,7 @@ message QAccuracyHistogramKey { // If duplex basecalling is not enabled, equivalent to `Simplex` // If duplex basecalling is enabled, the sum of `Simplex` and `Duplex` All = 0; - + // All simplex data // // When duplex basecalling is enabled, this contains reads/bases from both: @@ -666,7 +666,7 @@ message QAccuracyHistogramKey { // - Template and complement reads (which are subsequently combined into duplex reads) // Simplex = 1; - + // Duplex data // Only available if duplex basecalling is enabled Duplex = 2; @@ -991,9 +991,20 @@ message TemperaturePacket { double chamber_temperature = 2; } + // Packet of temperatures appropriate for a Pebble. + message PebbleTemperature + { + // Temperature as measured by probe inside the ASIC. + double asic_temperature = 1; + + // Temperature as measured by thermistor on the instrument. + double instrument_temperature = 2; + } + oneof temperature { MinIONTemperature minion = 1; PromethIONTemperature promethion = 2; + PebbleTemperature pebble = 4; } // The range is based on the requested target temperature and tolerance. diff --git a/python/minknow_api/__init__.py b/python/minknow_api/__init__.py index f537284..4ef7c1f 100644 --- a/python/minknow_api/__init__.py +++ b/python/minknow_api/__init__.py @@ -33,7 +33,7 @@ Configure data acquisition. See `analysis_configuration_service.AnalysisConfigurationService` for a description of the available methods. analysis_workflows - Provides a way to manage anaylsis workflows that are ran after (or potentially during) + Provides a way to manage analysis workflows that are ran after (or potentially during) a protocol run. See `analysis_workflows_service.AnalysisWorkflowsService` for a description of the available methods. data @@ -45,9 +45,12 @@ settings in a device-independent way, so it can be used on PromethIONs as easily as on MinIONs. See `device_service.DeviceService` for a description of the available methods. keystore - A service for storing and retreiving arbitrary data on the instance. This can be used to + A service for storing and retrieving arbitrary data on the instance. This can be used to communicate with other users of the API. See `keystore_service.DeviceService` for a description of the available methods. +hardware_check + A service for starting hardware checks and retrieving the data. + See `hardware_check_service.HardwareCheckService` for a description of the available methods. instance Get information about the instance of MinKNOW you are connected to (eg: software version). See `instance_service.InstanceService` for a description of the available methods. @@ -58,6 +61,10 @@ MinION-specific device interface. This exposes low-level settings for MinIONs and similar devices (eg: GridIONs). See `minion_device_service.MinionDeviceService` for a description of the available methods. +pebble_device + Pebble-specific device interface. This exposes low-level settings for Pebble. + See `pebble_device_service.PebbleDeviceService` for a + description of the available methods. protocol Control protocol scripts. See `protocol_service.ProtocolService` for a description of the available methods. @@ -70,7 +77,7 @@ available methods. statistics Get statistics about an acquisition period. Statistics can be streamed live during acquisition, - or retreived afterwards. See `statistics_service.StatisticsService` for a description of the + or retrieved afterwards. See `statistics_service.StatisticsService` for a description of the available methods. Helpers @@ -99,6 +106,7 @@ from . import data, manager from minknow_api.manager import get_local_authentication_token_file +from minknow_api.tools.compatibility_helpers import read_binary_resource # Try and import from minknow_api_production package try: @@ -123,18 +131,19 @@ "analysis_workflows": ["AnalysisWorkflowsService"], "data": ["DataService"], "device": ["DeviceService"], + "hardware_check": ["HardwareCheckService"], "instance": ["InstanceService"], "keystore": ["KeyStoreService"], "log": ["LogService"], "minion_device": ["MinionDeviceService"], + "pebble_device": ["PebbleDeviceService"], "production": ["ProductionService"], "promethion_device": ["PromethionDeviceService"], "protocol": ["ProtocolService"], "run_until": ["RunUntilService"], "statistics": ["StatisticsService"], - "traxion_device": ["TraxionDeviceService"], } -_optional_services = ["production", "traxion_device"] +_optional_services = ["production"] # @@ -366,14 +375,7 @@ def read_ssl_certificate( environ.get("MINKNOW_TRUSTED_CA"), ) - try: - # python 3.7+ - import importlib.resources as importlib_resources - except ImportError: - # python 3.5/3.6 - import importlib_resources - # using the syntax that works with python 3.7 - return importlib_resources.read_binary("minknow_api", "ca.crt") + return read_binary_resource("minknow_api", "ca.crt") def _is_localhost(host: str) -> bool: @@ -520,7 +522,7 @@ def load_grpc_credentials( if not call_creds: local_token_override = environ.get("MINKNOW_API_USE_LOCAL_TOKEN") if local_token_override is None: - # (allow host==None for backwards compatiblity) + # (allow host==None for backwards compatibility) try_local_token = host is None or _is_localhost(host) elif local_token_override.lower() in ("", "0", "no"): try_local_token = False diff --git a/python/minknow_api/_version.py b/python/minknow_api/_version.py index ea0f379..6c164bf 100644 --- a/python/minknow_api/_version.py +++ b/python/minknow_api/_version.py @@ -1 +1 @@ -__version__ = '6.0.4' \ No newline at end of file +__version__ = '6.2.1' \ No newline at end of file diff --git a/python/minknow_api/acquisition_pb2.py b/python/minknow_api/acquisition_pb2.py index 13d8038..b26368b 100644 --- a/python/minknow_api/acquisition_pb2.py +++ b/python/minknow_api/acquisition_pb2.py @@ -17,7 +17,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dminknow_api/acquisition.proto\x12\x17minknow_api.acquisition\x1a\x1bminknow_api/run_until.proto\x1a\x1dminknow_api/rpc_options.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xd3\x03\n\x0cStartRequest\x12\"\n\x1a\x64ont_wait_for_device_ready\x18\x02 \x01(\x08\x12\x38\n\x0fgenerate_report\x18\x03 \x01(\x0e\x32\x1f.minknow_api.acquisition.Option\x12\x45\n\x1csend_sequencing_read_metrics\x18\x04 \x01(\x0e\x32\x1f.minknow_api.acquisition.Option\x12\x41\n\x18send_basecalling_metrics\x18\x05 \x01(\x0e\x32\x1f.minknow_api.acquisition.Option\x12\x31\n\x07purpose\x18\x06 \x01(\x0e\x32 .minknow_api.acquisition.Purpose\x12\x31\n\x08\x61nalysis\x18\x07 \x01(\x0e\x32\x1f.minknow_api.acquisition.Option\x12\x34\n\x0b\x66ile_output\x18\x08 \x01(\x0e\x32\x1f.minknow_api.acquisition.Option\x12?\n\x16generate_final_summary\x18\t \x01(\x0e\x32\x1f.minknow_api.acquisition.Option\"\x1f\n\rStartResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"\xe0\x01\n\x0bStopRequest\x12L\n\x13\x64\x61ta_action_on_stop\x18\x01 \x01(\x0e\x32/.minknow_api.acquisition.StopRequest.DataAction\x12\x18\n\x10wait_until_ready\x18\x02 \x01(\x08\x12\x15\n\rkeep_power_on\x18\x03 \x01(\x08\"R\n\nDataAction\x12\x10\n\x0cSTOP_DEFAULT\x10\x00\x12\x16\n\x12STOP_KEEP_ALL_DATA\x10\x01\x12\x1a\n\x16STOP_FINISH_PROCESSING\x10\x02\"\x0e\n\x0cStopResponse\"+\n\x1bWatchForStatusChangeRequest\x12\x0c\n\x04stop\x18\x01 \x01(\x08\"V\n\x1cWatchForStatusChangeResponse\x12\x36\n\x06status\x18\x01 \x01(\x0e\x32&.minknow_api.acquisition.MinknowStatus\"\x16\n\x14\x43urrentStatusRequest\"O\n\x15\x43urrentStatusResponse\x12\x36\n\x06status\x18\x01 \x01(\x0e\x32&.minknow_api.acquisition.MinknowStatus\"\x14\n\x12GetProgressRequest\"\xa0\x01\n\x13GetProgressResponse\x12S\n\x0fraw_per_channel\x18\x01 \x01(\x0b\x32:.minknow_api.acquisition.GetProgressResponse.RawPerChannel\x1a\x34\n\rRawPerChannel\x12\x10\n\x08\x61\x63quired\x18\x01 \x01(\x04\x12\x11\n\tprocessed\x18\x02 \x01(\x04\".\n\x1cGetAcquisitionRunInfoRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"\xcb\x08\n\x17\x41\x63quisitionYieldSummary\x12\x12\n\nread_count\x18\x01 \x01(\x03\x12\x1b\n\x13\x66raction_basecalled\x18\x14 \x01(\x02\x12\x18\n\x10\x66raction_skipped\x18\x15 \x01(\x02\x12\"\n\x1a\x62\x61secalled_pass_read_count\x18\x03 \x01(\x03\x12\"\n\x1a\x62\x61secalled_fail_read_count\x18\x04 \x01(\x03\x12%\n\x1d\x62\x61secalled_skipped_read_count\x18\n \x01(\x03\x12\x1d\n\x15\x62\x61secalled_pass_bases\x18\x05 \x01(\x03\x12\x1d\n\x15\x62\x61secalled_fail_bases\x18\x12 \x01(\x03\x12m\n\x1b\x62\x61secalled_pass_reads_split\x18\x16 \x01(\x0b\x32H.minknow_api.acquisition.AcquisitionYieldSummary.TotalsPerDuplexCategory\x12m\n\x1b\x62\x61secalled_fail_reads_split\x18\x17 \x01(\x0b\x32H.minknow_api.acquisition.AcquisitionYieldSummary.TotalsPerDuplexCategory\x12m\n\x1b\x62\x61secalled_pass_bases_split\x18\x18 \x01(\x0b\x32H.minknow_api.acquisition.AcquisitionYieldSummary.TotalsPerDuplexCategory\x12m\n\x1b\x62\x61secalled_fail_bases_split\x18\x19 \x01(\x0b\x32H.minknow_api.acquisition.AcquisitionYieldSummary.TotalsPerDuplexCategory\x12\x1a\n\x12\x62\x61secalled_samples\x18\x06 \x01(\x03\x12\x1c\n\x14selected_raw_samples\x18\x07 \x01(\x03\x12\x17\n\x0fselected_events\x18\x08 \x01(\x03\x12 \n\x18\x65stimated_selected_bases\x18\t \x01(\x03\x12\x19\n\x11\x61lignment_matches\x18\x0e \x01(\x03\x12\x1c\n\x14\x61lignment_mismatches\x18\x0f \x01(\x03\x12\x1c\n\x14\x61lignment_insertions\x18\x10 \x01(\x03\x12\x1b\n\x13\x61lignment_deletions\x18\x11 \x01(\x03\x12\x1a\n\x12\x61lignment_coverage\x18\x13 \x01(\x02\x1aw\n\x17TotalsPerDuplexCategory\x12\x0f\n\x07simplex\x18\x01 \x01(\x03\x12\x17\n\x0f\x64uplex_template\x18\x02 \x01(\x03\x12\x19\n\x11\x64uplex_complement\x18\x03 \x01(\x03\x12\x17\n\x0f\x64uplex_combined\x18\x04 \x01(\x03\"\x96\x01\n\x18\x41\x63quisitionWriterSummary\x12\x1f\n\x17\x62ytes_to_write_produced\x18\x02 \x01(\x03\x12\x1d\n\x15\x62ytes_to_write_failed\x18\x03 \x01(\x03\x12 \n\x18\x62ytes_to_write_completed\x18\x04 \x01(\x03J\x04\x08\x01\x10\x02R\x12written_read_count\"\xb0\x03\n\x10\x43hannelStateInfo\x12?\n\x06groups\x18\x01 \x03(\x0b\x32/.minknow_api.acquisition.ChannelStateInfo.Group\x1a;\n\x05Style\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0e\n\x06\x63olour\x18\x03 \x01(\t\x1a~\n\x0c\x43hannelState\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12>\n\x05style\x18\x03 \x01(\x0b\x32/.minknow_api.acquisition.ChannelStateInfo.Style\x12\x14\n\x0cglobal_order\x18\x04 \x01(\r\x1a\x9d\x01\n\x05Group\x12\x0c\n\x04name\x18\x01 \x01(\t\x12>\n\x05style\x18\x02 \x01(\x0b\x32/.minknow_api.acquisition.ChannelStateInfo.Style\x12\x46\n\x06states\x18\x03 \x03(\x0b\x32\x36.minknow_api.acquisition.ChannelStateInfo.ChannelState\"\xdc\x05\n\x18\x41\x63quisitionConfigSummary\x12\x31\n\x07purpose\x18\x15 \x01(\x0e\x32 .minknow_api.acquisition.Purpose\x12\x1b\n\x13\x62\x61secalling_enabled\x18\x01 \x01(\x08\x12#\n\x1b\x62\x61secalling_config_filename\x18\x10 \x01(\t\x12!\n\x19\x62\x61secalling_model_version\x18\x18 \x01(\t\x12\x16\n\x0e\x64uplex_enabled\x18\x17 \x01(\x08\x12\x19\n\x11\x62\x61rcoding_enabled\x18\r \x01(\x08\x12\x16\n\x0e\x62\x61rcoding_kits\x18\x11 \x03(\t\x12\x19\n\x11\x61lignment_enabled\x18\x0e \x01(\x08\x12!\n\x19\x61lignment_reference_files\x18\x12 \x03(\t\x12\x1a\n\x12\x61lignment_bed_file\x18\x13 \x01(\t\x12\x14\n\x0clamp_enabled\x18\x0f \x01(\x08\x12\x10\n\x08lamp_kit\x18\x14 \x01(\t\x12\x17\n\x0freads_directory\x18\x02 \x01(\t\x12\"\n\x1areads_fallback_directories\x18\x03 \x03(\t\x12\x1b\n\x13\x66\x61st5_reads_enabled\x18\x04 \x01(\x08\x12\x1b\n\x13\x66\x61stq_reads_enabled\x18\x05 \x01(\x08\x12\x1a\n\x12pod5_reads_enabled\x18\x16 \x01(\x08\x12\x16\n\x0e\x62ulk_file_path\x18\x07 \x01(\t\x12\x19\n\x11\x62ulk_file_enabled\x18\x08 \x01(\x08\x12\x45\n\x12\x63hannel_state_info\x18\t \x01(\x0b\x32).minknow_api.acquisition.ChannelStateInfo\x12\x1c\n\x14\x65vents_to_base_ratio\x18\n \x01(\x02\x12\x13\n\x0bsample_rate\x18\x0b \x01(\r\x12\x15\n\rchannel_count\x18\x0c \x01(\rJ\x04\x08\x06\x10\x07\"\xd6\x03\n\x0fMuxScanMetadata\x12\"\n\x1a\x61uto_mux_scan_period_hours\x18\x01 \x01(\x02\x12O\n\x0f\x63\x61tegory_groups\x18\x02 \x03(\x0b\x32\x36.minknow_api.acquisition.MuxScanMetadata.CategoryGroup\x1a;\n\x05Style\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0e\n\x06\x63olour\x18\x03 \x01(\t\x1am\n\x08\x43\x61tegory\x12\x0c\n\x04name\x18\x01 \x01(\t\x12=\n\x05style\x18\x02 \x01(\x0b\x32..minknow_api.acquisition.MuxScanMetadata.Style\x12\x14\n\x0cglobal_order\x18\x03 \x01(\r\x1a\xa1\x01\n\rCategoryGroup\x12\x0c\n\x04name\x18\x01 \x01(\t\x12=\n\x05style\x18\x02 \x01(\x0b\x32..minknow_api.acquisition.MuxScanMetadata.Style\x12\x43\n\x08\x63\x61tegory\x18\x03 \x03(\x0b\x32\x31.minknow_api.acquisition.MuxScanMetadata.Category\"\x9e\x01\n\rMuxScanResult\x12\x42\n\x06\x63ounts\x18\x01 \x03(\x0b\x32\x32.minknow_api.acquisition.MuxScanResult.CountsEntry\x12\x1a\n\x12mux_scan_timestamp\x18\x02 \x01(\x04\x1a-\n\x0b\x43ountsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"\x93\x03\n\tBreamInfo\x12\x43\n\x11mux_scan_metadata\x18\x01 \x01(\x0b\x32(.minknow_api.acquisition.MuxScanMetadata\x12@\n\x10mux_scan_results\x18\x02 \x03(\x0b\x32&.minknow_api.acquisition.MuxScanResult\x12L\n\x1atarget_translocation_speed\x18\x03 \x01(\x0b\x32(.minknow_api.acquisition.BreamInfo.Range\x12@\n\x0etarget_q_score\x18\x04 \x01(\x0b\x32(.minknow_api.acquisition.BreamInfo.Range\x12\x44\n\x12target_temperature\x18\x05 \x01(\x0b\x32(.minknow_api.acquisition.BreamInfo.Range\x1a)\n\x05Range\x12\x0f\n\x07minimum\x18\x01 \x01(\x01\x12\x0f\n\x07maximum\x18\x02 \x01(\x01\"\x95\x01\n\x16TargetRunUntilCriteria\x12=\n\x0epause_criteria\x18\x01 \x01(\x0b\x32%.minknow_api.run_until.CriteriaValues\x12<\n\rstop_criteria\x18\x02 \x01(\x0b\x32%.minknow_api.run_until.CriteriaValues\"\xfb\x07\n\x12\x41\x63quisitionRunInfo\x12\x0e\n\x06run_id\x18\x01 \x01(\t\x12<\n\rstartup_state\x18\x0c \x01(\x0e\x32%.minknow_api.acquisition.StartupState\x12?\n\x1bstartup_state_estimated_end\x18\r \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x30\n(startup_state_estimated_percent_complete\x18\x0e \x01(\x02\x12\x38\n\x05state\x18\x02 \x01(\x0e\x32).minknow_api.acquisition.AcquisitionState\x12@\n\x0f\x66inishing_state\x18\n \x01(\x0e\x32\'.minknow_api.acquisition.FinishingState\x12(\n finishing_state_percent_complete\x18\x11 \x01(\x02\x12\x43\n\x0bstop_reason\x18\x03 \x01(\x0e\x32..minknow_api.acquisition.AcquisitionStopReason\x12.\n\nstart_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x38\n\x14\x64\x61ta_read_start_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x36\n\x12\x64\x61ta_read_end_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12G\n\ryield_summary\x18\x08 \x01(\x0b\x32\x30.minknow_api.acquisition.AcquisitionYieldSummary\x12I\n\x0e\x63onfig_summary\x18\t \x01(\x0b\x32\x31.minknow_api.acquisition.AcquisitionConfigSummary\x12I\n\x0ewriter_summary\x18\x0b \x01(\x0b\x32\x31.minknow_api.acquisition.AcquisitionWriterSummary\x12\x36\n\nbream_info\x18\x0f \x01(\x0b\x32\".minknow_api.acquisition.BreamInfo\x12R\n\x19target_run_until_criteria\x18\x10 \x01(\x0b\x32/.minknow_api.acquisition.TargetRunUntilCriteria\"\x1c\n\x1aListAcquisitionRunsRequest\".\n\x1bListAcquisitionRunsResponse\x12\x0f\n\x07run_ids\x18\x01 \x03(\t\"!\n\x1fGetCurrentAcquisitionRunRequest\"#\n!WatchCurrentAcquisitionRunRequest\"\xdf\x02\n\x16SetSignalReaderRequest\x12V\n\x06reader\x18\x01 \x01(\x0e\x32@.minknow_api.acquisition.SetSignalReaderRequest.SignalReaderTypeB\x04\x88\xb5\x18\x01\x12\x12\n\nhdf_source\x18\x02 \x01(\t\x12P\n\x08hdf_mode\x18\x03 \x01(\x0e\x32>.minknow_api.acquisition.SetSignalReaderRequest.SourceFileMode\x12 \n\x18sample_rate_scale_factor\x18\x04 \x01(\x02\"(\n\x10SignalReaderType\x12\x08\n\x04HDF5\x10\x00\x12\n\n\x06\x44\x45VICE\x10\x01\";\n\x0eSourceFileMode\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0e\n\nSINGLE_RUN\x10\x01\x12\x08\n\x04LOOP\x10\x02\"\x19\n\x17SetSignalReaderResponse\"g\n\x13SetBreamInfoRequest\x12\x30\n\x04info\x18\x01 \x01(\x0b\x32\".minknow_api.acquisition.BreamInfo\x12\x1e\n\x16overwrite_unset_fields\x18\x02 \x01(\x08\"\x16\n\x14SetBreamInfoResponse\"\x1d\n\x1b\x41ppendMuxScanResultResponse*Y\n\rMinknowStatus\x12\x10\n\x0c\x45RROR_STATUS\x10\x00\x12\t\n\x05READY\x10\x01\x12\x0c\n\x08STARTING\x10\x02\x12\x0e\n\nPROCESSING\x10\x03\x12\r\n\tFINISHING\x10\x04**\n\x06Option\x12\x08\n\x04\x41UTO\x10\x00\x12\x0b\n\x07\x44ISABLE\x10\x01\x12\t\n\x05\x46ORCE\x10\x02*=\n\x07Purpose\x12\x11\n\rOTHER_PURPOSE\x10\x00\x12\x0e\n\nSEQUENCING\x10\x02\x12\x0f\n\x0b\x43\x41LIBRATION\x10\x03*{\n\x10\x41\x63quisitionState\x12\x18\n\x14\x41\x43QUISITION_STARTING\x10\x00\x12\x17\n\x13\x41\x43QUISITION_RUNNING\x10\x01\x12\x19\n\x15\x41\x43QUISITION_FINISHING\x10\x02\x12\x19\n\x15\x41\x43QUISITION_COMPLETED\x10\x03*\xb2\x02\n\x15\x41\x63quisitionStopReason\x12\x13\n\x0fSTOPPED_NOT_SET\x10\x00\x12\x1a\n\x16STOPPED_USER_REQUESTED\x10\x01\x12\x19\n\x15STOPPED_NO_DISK_SPACE\x10\x02\x12&\n\"STOPPED_DEVICE_STOPPED_ACQUISITION\x10\x03\x12 \n\x1cSTOPPED_STARTING_ANOTHER_RUN\x10\x04\x12\x1a\n\x16STOPPED_PROTOCOL_ENDED\x10\x05\x12\x18\n\x14STOPPED_DEVICE_ERROR\x10\x06\x12\x1b\n\x17STOPPED_BAD_TEMPERATURE\x10\x07\x12\x14\n\x10STOPPED_SHUTDOWN\x10\x08\x12\x1a\n\x16STOPPED_INTERNAL_ERROR\x10\t*\x96\x02\n\x0cStartupState\x12\x13\n\x0fSTARTUP_UNKNOWN\x10\x00\x12\x1d\n\x19STARTUP_BUILDING_PIPELINE\x10\x02\x12#\n\x1fSTARTUP_INITIALISING_BASECALLER\x10\x03\x12-\n)STARTUP_INITIALISING_BASECALLER_ALIGNMENT\x10\x04\x12%\n!STARTUP_INITIALISING_DATA_WRITERS\x10\x05\x12\x32\n.STARTUP_INITIALISING_INTERMEDIATE_DATA_STORAGE\x10\x06\x12#\n\x1fSTARTUP_INITIALISING_STATISTICS\x10\x07*\x8b\x01\n\x0e\x46inishingState\x12\x15\n\x11\x46INISHING_UNKNOWN\x10\x00\x12&\n\"FINISHING_PROCESSING_DEVICE_SIGNAL\x10\x01\x12\x1f\n\x1b\x46INISHING_BASECALLING_READS\x10\x02\x12\x19\n\x15\x46INISHING_SAVING_DATA\x10\x03\x32\xd4\x0b\n\x12\x41\x63quisitionService\x12X\n\x05start\x12%.minknow_api.acquisition.StartRequest\x1a&.minknow_api.acquisition.StartResponse\"\x00\x12U\n\x04stop\x12$.minknow_api.acquisition.StopRequest\x1a%.minknow_api.acquisition.StopResponse\"\x00\x12\x8f\x01\n\x17watch_for_status_change\x12\x34.minknow_api.acquisition.WatchForStatusChangeRequest\x1a\x35.minknow_api.acquisition.WatchForStatusChangeResponse\"\x03\x90\x02\x01(\x01\x30\x01\x12\x8f\x01\n\x1dwatch_current_acquisition_run\x12:.minknow_api.acquisition.WatchCurrentAcquisitionRunRequest\x1a+.minknow_api.acquisition.AcquisitionRunInfo\"\x03\x90\x02\x01\x30\x01\x12t\n\x0e\x63urrent_status\x12-.minknow_api.acquisition.CurrentStatusRequest\x1a..minknow_api.acquisition.CurrentStatusResponse\"\x03\x90\x02\x01\x12n\n\x0cget_progress\x12+.minknow_api.acquisition.GetProgressRequest\x1a,.minknow_api.acquisition.GetProgressResponse\"\x03\x90\x02\x01\x12\x7f\n\x14get_acquisition_info\x12\x35.minknow_api.acquisition.GetAcquisitionRunInfoRequest\x1a+.minknow_api.acquisition.AcquisitionRunInfo\"\x03\x90\x02\x01\x12\x87\x01\n\x15list_acquisition_runs\x12\x33.minknow_api.acquisition.ListAcquisitionRunsRequest\x1a\x34.minknow_api.acquisition.ListAcquisitionRunsResponse\"\x03\x90\x02\x01\x12\x89\x01\n\x1bget_current_acquisition_run\x12\x38.minknow_api.acquisition.GetCurrentAcquisitionRunRequest\x1a+.minknow_api.acquisition.AcquisitionRunInfo\"\x03\x90\x02\x01\x12{\n\x11set_signal_reader\x12/.minknow_api.acquisition.SetSignalReaderRequest\x1a\x30.minknow_api.acquisition.SetSignalReaderResponse\"\x03\x90\x02\x02\x12r\n\x0eset_bream_info\x12,.minknow_api.acquisition.SetBreamInfoRequest\x1a-.minknow_api.acquisition.SetBreamInfoResponse\"\x03\x90\x02\x02\x12{\n\x16\x61ppend_mux_scan_result\x12&.minknow_api.acquisition.MuxScanResult\x1a\x34.minknow_api.acquisition.AppendMuxScanResultResponse\"\x03\x90\x02\x02\x42&\n\x1c\x63om.nanoporetech.minknow_api\xa2\x02\x05MKAPIb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dminknow_api/acquisition.proto\x12\x17minknow_api.acquisition\x1a\x1bminknow_api/run_until.proto\x1a\x1dminknow_api/rpc_options.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xd3\x03\n\x0cStartRequest\x12\"\n\x1a\x64ont_wait_for_device_ready\x18\x02 \x01(\x08\x12\x38\n\x0fgenerate_report\x18\x03 \x01(\x0e\x32\x1f.minknow_api.acquisition.Option\x12\x45\n\x1csend_sequencing_read_metrics\x18\x04 \x01(\x0e\x32\x1f.minknow_api.acquisition.Option\x12\x41\n\x18send_basecalling_metrics\x18\x05 \x01(\x0e\x32\x1f.minknow_api.acquisition.Option\x12\x31\n\x07purpose\x18\x06 \x01(\x0e\x32 .minknow_api.acquisition.Purpose\x12\x31\n\x08\x61nalysis\x18\x07 \x01(\x0e\x32\x1f.minknow_api.acquisition.Option\x12\x34\n\x0b\x66ile_output\x18\x08 \x01(\x0e\x32\x1f.minknow_api.acquisition.Option\x12?\n\x16generate_final_summary\x18\t \x01(\x0e\x32\x1f.minknow_api.acquisition.Option\"\x1f\n\rStartResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"\xe0\x01\n\x0bStopRequest\x12L\n\x13\x64\x61ta_action_on_stop\x18\x01 \x01(\x0e\x32/.minknow_api.acquisition.StopRequest.DataAction\x12\x18\n\x10wait_until_ready\x18\x02 \x01(\x08\x12\x15\n\rkeep_power_on\x18\x03 \x01(\x08\"R\n\nDataAction\x12\x10\n\x0cSTOP_DEFAULT\x10\x00\x12\x16\n\x12STOP_KEEP_ALL_DATA\x10\x01\x12\x1a\n\x16STOP_FINISH_PROCESSING\x10\x02\"\x0e\n\x0cStopResponse\"+\n\x1bWatchForStatusChangeRequest\x12\x0c\n\x04stop\x18\x01 \x01(\x08\"V\n\x1cWatchForStatusChangeResponse\x12\x36\n\x06status\x18\x01 \x01(\x0e\x32&.minknow_api.acquisition.MinknowStatus\"\x16\n\x14\x43urrentStatusRequest\"O\n\x15\x43urrentStatusResponse\x12\x36\n\x06status\x18\x01 \x01(\x0e\x32&.minknow_api.acquisition.MinknowStatus\"\x14\n\x12GetProgressRequest\"\xa0\x01\n\x13GetProgressResponse\x12S\n\x0fraw_per_channel\x18\x01 \x01(\x0b\x32:.minknow_api.acquisition.GetProgressResponse.RawPerChannel\x1a\x34\n\rRawPerChannel\x12\x10\n\x08\x61\x63quired\x18\x01 \x01(\x04\x12\x11\n\tprocessed\x18\x02 \x01(\x04\".\n\x1cGetAcquisitionRunInfoRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"\xcb\x08\n\x17\x41\x63quisitionYieldSummary\x12\x12\n\nread_count\x18\x01 \x01(\x03\x12\x1b\n\x13\x66raction_basecalled\x18\x14 \x01(\x02\x12\x18\n\x10\x66raction_skipped\x18\x15 \x01(\x02\x12\"\n\x1a\x62\x61secalled_pass_read_count\x18\x03 \x01(\x03\x12\"\n\x1a\x62\x61secalled_fail_read_count\x18\x04 \x01(\x03\x12%\n\x1d\x62\x61secalled_skipped_read_count\x18\n \x01(\x03\x12\x1d\n\x15\x62\x61secalled_pass_bases\x18\x05 \x01(\x03\x12\x1d\n\x15\x62\x61secalled_fail_bases\x18\x12 \x01(\x03\x12m\n\x1b\x62\x61secalled_pass_reads_split\x18\x16 \x01(\x0b\x32H.minknow_api.acquisition.AcquisitionYieldSummary.TotalsPerDuplexCategory\x12m\n\x1b\x62\x61secalled_fail_reads_split\x18\x17 \x01(\x0b\x32H.minknow_api.acquisition.AcquisitionYieldSummary.TotalsPerDuplexCategory\x12m\n\x1b\x62\x61secalled_pass_bases_split\x18\x18 \x01(\x0b\x32H.minknow_api.acquisition.AcquisitionYieldSummary.TotalsPerDuplexCategory\x12m\n\x1b\x62\x61secalled_fail_bases_split\x18\x19 \x01(\x0b\x32H.minknow_api.acquisition.AcquisitionYieldSummary.TotalsPerDuplexCategory\x12\x1a\n\x12\x62\x61secalled_samples\x18\x06 \x01(\x03\x12\x1c\n\x14selected_raw_samples\x18\x07 \x01(\x03\x12\x17\n\x0fselected_events\x18\x08 \x01(\x03\x12 \n\x18\x65stimated_selected_bases\x18\t \x01(\x03\x12\x19\n\x11\x61lignment_matches\x18\x0e \x01(\x03\x12\x1c\n\x14\x61lignment_mismatches\x18\x0f \x01(\x03\x12\x1c\n\x14\x61lignment_insertions\x18\x10 \x01(\x03\x12\x1b\n\x13\x61lignment_deletions\x18\x11 \x01(\x03\x12\x1a\n\x12\x61lignment_coverage\x18\x13 \x01(\x02\x1aw\n\x17TotalsPerDuplexCategory\x12\x0f\n\x07simplex\x18\x01 \x01(\x03\x12\x17\n\x0f\x64uplex_template\x18\x02 \x01(\x03\x12\x19\n\x11\x64uplex_complement\x18\x03 \x01(\x03\x12\x17\n\x0f\x64uplex_combined\x18\x04 \x01(\x03\"\x96\x01\n\x18\x41\x63quisitionWriterSummary\x12\x1f\n\x17\x62ytes_to_write_produced\x18\x02 \x01(\x03\x12\x1d\n\x15\x62ytes_to_write_failed\x18\x03 \x01(\x03\x12 \n\x18\x62ytes_to_write_completed\x18\x04 \x01(\x03J\x04\x08\x01\x10\x02R\x12written_read_count\"\xb0\x03\n\x10\x43hannelStateInfo\x12?\n\x06groups\x18\x01 \x03(\x0b\x32/.minknow_api.acquisition.ChannelStateInfo.Group\x1a;\n\x05Style\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0e\n\x06\x63olour\x18\x03 \x01(\t\x1a~\n\x0c\x43hannelState\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12>\n\x05style\x18\x03 \x01(\x0b\x32/.minknow_api.acquisition.ChannelStateInfo.Style\x12\x14\n\x0cglobal_order\x18\x04 \x01(\r\x1a\x9d\x01\n\x05Group\x12\x0c\n\x04name\x18\x01 \x01(\t\x12>\n\x05style\x18\x02 \x01(\x0b\x32/.minknow_api.acquisition.ChannelStateInfo.Style\x12\x46\n\x06states\x18\x03 \x03(\x0b\x32\x36.minknow_api.acquisition.ChannelStateInfo.ChannelState\"\xdc\x05\n\x18\x41\x63quisitionConfigSummary\x12\x31\n\x07purpose\x18\x15 \x01(\x0e\x32 .minknow_api.acquisition.Purpose\x12\x1b\n\x13\x62\x61secalling_enabled\x18\x01 \x01(\x08\x12#\n\x1b\x62\x61secalling_config_filename\x18\x10 \x01(\t\x12!\n\x19\x62\x61secalling_model_version\x18\x18 \x01(\t\x12\x16\n\x0e\x64uplex_enabled\x18\x17 \x01(\x08\x12\x19\n\x11\x62\x61rcoding_enabled\x18\r \x01(\x08\x12\x16\n\x0e\x62\x61rcoding_kits\x18\x11 \x03(\t\x12\x19\n\x11\x61lignment_enabled\x18\x0e \x01(\x08\x12!\n\x19\x61lignment_reference_files\x18\x12 \x03(\t\x12\x1a\n\x12\x61lignment_bed_file\x18\x13 \x01(\t\x12\x14\n\x0clamp_enabled\x18\x0f \x01(\x08\x12\x10\n\x08lamp_kit\x18\x14 \x01(\t\x12\x17\n\x0freads_directory\x18\x02 \x01(\t\x12\"\n\x1areads_fallback_directories\x18\x03 \x03(\t\x12\x1b\n\x13\x66\x61st5_reads_enabled\x18\x04 \x01(\x08\x12\x1b\n\x13\x66\x61stq_reads_enabled\x18\x05 \x01(\x08\x12\x1a\n\x12pod5_reads_enabled\x18\x16 \x01(\x08\x12\x16\n\x0e\x62ulk_file_path\x18\x07 \x01(\t\x12\x19\n\x11\x62ulk_file_enabled\x18\x08 \x01(\x08\x12\x45\n\x12\x63hannel_state_info\x18\t \x01(\x0b\x32).minknow_api.acquisition.ChannelStateInfo\x12\x1c\n\x14\x65vents_to_base_ratio\x18\n \x01(\x02\x12\x13\n\x0bsample_rate\x18\x0b \x01(\r\x12\x15\n\rchannel_count\x18\x0c \x01(\rJ\x04\x08\x06\x10\x07\"\xd6\x03\n\x0fMuxScanMetadata\x12\"\n\x1a\x61uto_mux_scan_period_hours\x18\x01 \x01(\x02\x12O\n\x0f\x63\x61tegory_groups\x18\x02 \x03(\x0b\x32\x36.minknow_api.acquisition.MuxScanMetadata.CategoryGroup\x1a;\n\x05Style\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0e\n\x06\x63olour\x18\x03 \x01(\t\x1am\n\x08\x43\x61tegory\x12\x0c\n\x04name\x18\x01 \x01(\t\x12=\n\x05style\x18\x02 \x01(\x0b\x32..minknow_api.acquisition.MuxScanMetadata.Style\x12\x14\n\x0cglobal_order\x18\x03 \x01(\r\x1a\xa1\x01\n\rCategoryGroup\x12\x0c\n\x04name\x18\x01 \x01(\t\x12=\n\x05style\x18\x02 \x01(\x0b\x32..minknow_api.acquisition.MuxScanMetadata.Style\x12\x43\n\x08\x63\x61tegory\x18\x03 \x03(\x0b\x32\x31.minknow_api.acquisition.MuxScanMetadata.Category\"\x9e\x01\n\rMuxScanResult\x12\x42\n\x06\x63ounts\x18\x01 \x03(\x0b\x32\x32.minknow_api.acquisition.MuxScanResult.CountsEntry\x12\x1a\n\x12mux_scan_timestamp\x18\x02 \x01(\x04\x1a-\n\x0b\x43ountsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"\x93\x03\n\tBreamInfo\x12\x43\n\x11mux_scan_metadata\x18\x01 \x01(\x0b\x32(.minknow_api.acquisition.MuxScanMetadata\x12@\n\x10mux_scan_results\x18\x02 \x03(\x0b\x32&.minknow_api.acquisition.MuxScanResult\x12L\n\x1atarget_translocation_speed\x18\x03 \x01(\x0b\x32(.minknow_api.acquisition.BreamInfo.Range\x12@\n\x0etarget_q_score\x18\x04 \x01(\x0b\x32(.minknow_api.acquisition.BreamInfo.Range\x12\x44\n\x12target_temperature\x18\x05 \x01(\x0b\x32(.minknow_api.acquisition.BreamInfo.Range\x1a)\n\x05Range\x12\x0f\n\x07minimum\x18\x01 \x01(\x01\x12\x0f\n\x07maximum\x18\x02 \x01(\x01\"\x95\x01\n\x16TargetRunUntilCriteria\x12=\n\x0epause_criteria\x18\x01 \x01(\x0b\x32%.minknow_api.run_until.CriteriaValues\x12<\n\rstop_criteria\x18\x02 \x01(\x0b\x32%.minknow_api.run_until.CriteriaValues\"\xfb\x07\n\x12\x41\x63quisitionRunInfo\x12\x0e\n\x06run_id\x18\x01 \x01(\t\x12<\n\rstartup_state\x18\x0c \x01(\x0e\x32%.minknow_api.acquisition.StartupState\x12?\n\x1bstartup_state_estimated_end\x18\r \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x30\n(startup_state_estimated_percent_complete\x18\x0e \x01(\x02\x12\x38\n\x05state\x18\x02 \x01(\x0e\x32).minknow_api.acquisition.AcquisitionState\x12@\n\x0f\x66inishing_state\x18\n \x01(\x0e\x32\'.minknow_api.acquisition.FinishingState\x12(\n finishing_state_percent_complete\x18\x11 \x01(\x02\x12\x43\n\x0bstop_reason\x18\x03 \x01(\x0e\x32..minknow_api.acquisition.AcquisitionStopReason\x12.\n\nstart_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x38\n\x14\x64\x61ta_read_start_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x36\n\x12\x64\x61ta_read_end_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12G\n\ryield_summary\x18\x08 \x01(\x0b\x32\x30.minknow_api.acquisition.AcquisitionYieldSummary\x12I\n\x0e\x63onfig_summary\x18\t \x01(\x0b\x32\x31.minknow_api.acquisition.AcquisitionConfigSummary\x12I\n\x0ewriter_summary\x18\x0b \x01(\x0b\x32\x31.minknow_api.acquisition.AcquisitionWriterSummary\x12\x36\n\nbream_info\x18\x0f \x01(\x0b\x32\".minknow_api.acquisition.BreamInfo\x12R\n\x19target_run_until_criteria\x18\x10 \x01(\x0b\x32/.minknow_api.acquisition.TargetRunUntilCriteria\"\x1c\n\x1aListAcquisitionRunsRequest\".\n\x1bListAcquisitionRunsResponse\x12\x0f\n\x07run_ids\x18\x01 \x03(\t\"!\n\x1fGetCurrentAcquisitionRunRequest\"#\n!WatchCurrentAcquisitionRunRequest\"\xf1\x02\n\x16SetSignalReaderRequest\x12V\n\x06reader\x18\x01 \x01(\x0e\x32@.minknow_api.acquisition.SetSignalReaderRequest.SignalReaderTypeB\x04\x88\xb5\x18\x01\x12\x12\n\nhdf_source\x18\x02 \x01(\t\x12P\n\x08hdf_mode\x18\x03 \x01(\x0e\x32>.minknow_api.acquisition.SetSignalReaderRequest.SourceFileMode\x12 \n\x18sample_rate_scale_factor\x18\x04 \x01(\x02\":\n\x10SignalReaderType\x12\x08\n\x04HDF5\x10\x00\x12\x0c\n\x08PLAYBACK\x10\x00\x12\n\n\x06\x44\x45VICE\x10\x01\x1a\x02\x10\x01\";\n\x0eSourceFileMode\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0e\n\nSINGLE_RUN\x10\x01\x12\x08\n\x04LOOP\x10\x02\"\x19\n\x17SetSignalReaderResponse\"\x18\n\x16GetSignalReaderRequest\"\x83\x02\n\x17GetSignalReaderResponse\x12V\n\x06reader\x18\x01 \x01(\x0e\x32@.minknow_api.acquisition.SetSignalReaderRequest.SignalReaderTypeB\x04\x88\xb5\x18\x01\x12\x17\n\x0fplayback_source\x18\x02 \x01(\t\x12U\n\rplayback_mode\x18\x03 \x01(\x0e\x32>.minknow_api.acquisition.SetSignalReaderRequest.SourceFileMode\x12 \n\x18sample_rate_scale_factor\x18\x04 \x01(\x02\"g\n\x13SetBreamInfoRequest\x12\x30\n\x04info\x18\x01 \x01(\x0b\x32\".minknow_api.acquisition.BreamInfo\x12\x1e\n\x16overwrite_unset_fields\x18\x02 \x01(\x08\"\x16\n\x14SetBreamInfoResponse\"\x1d\n\x1b\x41ppendMuxScanResultResponse*Y\n\rMinknowStatus\x12\x10\n\x0c\x45RROR_STATUS\x10\x00\x12\t\n\x05READY\x10\x01\x12\x0c\n\x08STARTING\x10\x02\x12\x0e\n\nPROCESSING\x10\x03\x12\r\n\tFINISHING\x10\x04**\n\x06Option\x12\x08\n\x04\x41UTO\x10\x00\x12\x0b\n\x07\x44ISABLE\x10\x01\x12\t\n\x05\x46ORCE\x10\x02*=\n\x07Purpose\x12\x11\n\rOTHER_PURPOSE\x10\x00\x12\x0e\n\nSEQUENCING\x10\x02\x12\x0f\n\x0b\x43\x41LIBRATION\x10\x03*\x93\x01\n\x10\x41\x63quisitionState\x12\x18\n\x14\x41\x43QUISITION_STARTING\x10\x00\x12\x17\n\x13\x41\x43QUISITION_RUNNING\x10\x01\x12\x19\n\x15\x41\x43QUISITION_FINISHING\x10\x02\x12\x19\n\x15\x41\x43QUISITION_COMPLETED\x10\x03\x12\x16\n\x12\x41\x43QUISITION_PAUSED\x10\x04*\xb2\x02\n\x15\x41\x63quisitionStopReason\x12\x13\n\x0fSTOPPED_NOT_SET\x10\x00\x12\x1a\n\x16STOPPED_USER_REQUESTED\x10\x01\x12\x19\n\x15STOPPED_NO_DISK_SPACE\x10\x02\x12&\n\"STOPPED_DEVICE_STOPPED_ACQUISITION\x10\x03\x12 \n\x1cSTOPPED_STARTING_ANOTHER_RUN\x10\x04\x12\x1a\n\x16STOPPED_PROTOCOL_ENDED\x10\x05\x12\x18\n\x14STOPPED_DEVICE_ERROR\x10\x06\x12\x1b\n\x17STOPPED_BAD_TEMPERATURE\x10\x07\x12\x14\n\x10STOPPED_SHUTDOWN\x10\x08\x12\x1a\n\x16STOPPED_INTERNAL_ERROR\x10\t*\x96\x02\n\x0cStartupState\x12\x13\n\x0fSTARTUP_UNKNOWN\x10\x00\x12\x1d\n\x19STARTUP_BUILDING_PIPELINE\x10\x02\x12#\n\x1fSTARTUP_INITIALISING_BASECALLER\x10\x03\x12-\n)STARTUP_INITIALISING_BASECALLER_ALIGNMENT\x10\x04\x12%\n!STARTUP_INITIALISING_DATA_WRITERS\x10\x05\x12\x32\n.STARTUP_INITIALISING_INTERMEDIATE_DATA_STORAGE\x10\x06\x12#\n\x1fSTARTUP_INITIALISING_STATISTICS\x10\x07*\x8b\x01\n\x0e\x46inishingState\x12\x15\n\x11\x46INISHING_UNKNOWN\x10\x00\x12&\n\"FINISHING_PROCESSING_DEVICE_SIGNAL\x10\x01\x12\x1f\n\x1b\x46INISHING_BASECALLING_READS\x10\x02\x12\x19\n\x15\x46INISHING_SAVING_DATA\x10\x03\x32\xd1\x0c\n\x12\x41\x63quisitionService\x12X\n\x05start\x12%.minknow_api.acquisition.StartRequest\x1a&.minknow_api.acquisition.StartResponse\"\x00\x12U\n\x04stop\x12$.minknow_api.acquisition.StopRequest\x1a%.minknow_api.acquisition.StopResponse\"\x00\x12\x8f\x01\n\x17watch_for_status_change\x12\x34.minknow_api.acquisition.WatchForStatusChangeRequest\x1a\x35.minknow_api.acquisition.WatchForStatusChangeResponse\"\x03\x90\x02\x01(\x01\x30\x01\x12\x8f\x01\n\x1dwatch_current_acquisition_run\x12:.minknow_api.acquisition.WatchCurrentAcquisitionRunRequest\x1a+.minknow_api.acquisition.AcquisitionRunInfo\"\x03\x90\x02\x01\x30\x01\x12t\n\x0e\x63urrent_status\x12-.minknow_api.acquisition.CurrentStatusRequest\x1a..minknow_api.acquisition.CurrentStatusResponse\"\x03\x90\x02\x01\x12n\n\x0cget_progress\x12+.minknow_api.acquisition.GetProgressRequest\x1a,.minknow_api.acquisition.GetProgressResponse\"\x03\x90\x02\x01\x12\x7f\n\x14get_acquisition_info\x12\x35.minknow_api.acquisition.GetAcquisitionRunInfoRequest\x1a+.minknow_api.acquisition.AcquisitionRunInfo\"\x03\x90\x02\x01\x12\x87\x01\n\x15list_acquisition_runs\x12\x33.minknow_api.acquisition.ListAcquisitionRunsRequest\x1a\x34.minknow_api.acquisition.ListAcquisitionRunsResponse\"\x03\x90\x02\x01\x12\x89\x01\n\x1bget_current_acquisition_run\x12\x38.minknow_api.acquisition.GetCurrentAcquisitionRunRequest\x1a+.minknow_api.acquisition.AcquisitionRunInfo\"\x03\x90\x02\x01\x12{\n\x11set_signal_reader\x12/.minknow_api.acquisition.SetSignalReaderRequest\x1a\x30.minknow_api.acquisition.SetSignalReaderResponse\"\x03\x90\x02\x02\x12{\n\x11get_signal_reader\x12/.minknow_api.acquisition.GetSignalReaderRequest\x1a\x30.minknow_api.acquisition.GetSignalReaderResponse\"\x03\x90\x02\x02\x12r\n\x0eset_bream_info\x12,.minknow_api.acquisition.SetBreamInfoRequest\x1a-.minknow_api.acquisition.SetBreamInfoResponse\"\x03\x90\x02\x02\x12{\n\x16\x61ppend_mux_scan_result\x12&.minknow_api.acquisition.MuxScanResult\x1a\x34.minknow_api.acquisition.AppendMuxScanResultResponse\"\x03\x90\x02\x02\x42&\n\x1c\x63om.nanoporetech.minknow_api\xa2\x02\x05MKAPIb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -27,8 +27,12 @@ _globals['DESCRIPTOR']._serialized_options = b'\n\034com.nanoporetech.minknow_api\242\002\005MKAPI' _globals['_MUXSCANRESULT_COUNTSENTRY']._options = None _globals['_MUXSCANRESULT_COUNTSENTRY']._serialized_options = b'8\001' + _globals['_SETSIGNALREADERREQUEST_SIGNALREADERTYPE']._options = None + _globals['_SETSIGNALREADERREQUEST_SIGNALREADERTYPE']._serialized_options = b'\020\001' _globals['_SETSIGNALREADERREQUEST'].fields_by_name['reader']._options = None _globals['_SETSIGNALREADERREQUEST'].fields_by_name['reader']._serialized_options = b'\210\265\030\001' + _globals['_GETSIGNALREADERRESPONSE'].fields_by_name['reader']._options = None + _globals['_GETSIGNALREADERRESPONSE'].fields_by_name['reader']._serialized_options = b'\210\265\030\001' _globals['_ACQUISITIONSERVICE'].methods_by_name['watch_for_status_change']._options = None _globals['_ACQUISITIONSERVICE'].methods_by_name['watch_for_status_change']._serialized_options = b'\220\002\001' _globals['_ACQUISITIONSERVICE'].methods_by_name['watch_current_acquisition_run']._options = None @@ -45,24 +49,26 @@ _globals['_ACQUISITIONSERVICE'].methods_by_name['get_current_acquisition_run']._serialized_options = b'\220\002\001' _globals['_ACQUISITIONSERVICE'].methods_by_name['set_signal_reader']._options = None _globals['_ACQUISITIONSERVICE'].methods_by_name['set_signal_reader']._serialized_options = b'\220\002\002' + _globals['_ACQUISITIONSERVICE'].methods_by_name['get_signal_reader']._options = None + _globals['_ACQUISITIONSERVICE'].methods_by_name['get_signal_reader']._serialized_options = b'\220\002\002' _globals['_ACQUISITIONSERVICE'].methods_by_name['set_bream_info']._options = None _globals['_ACQUISITIONSERVICE'].methods_by_name['set_bream_info']._serialized_options = b'\220\002\002' _globals['_ACQUISITIONSERVICE'].methods_by_name['append_mux_scan_result']._options = None _globals['_ACQUISITIONSERVICE'].methods_by_name['append_mux_scan_result']._serialized_options = b'\220\002\002' - _globals['_MINKNOWSTATUS']._serialized_start=6698 - _globals['_MINKNOWSTATUS']._serialized_end=6787 - _globals['_OPTION']._serialized_start=6789 - _globals['_OPTION']._serialized_end=6831 - _globals['_PURPOSE']._serialized_start=6833 - _globals['_PURPOSE']._serialized_end=6894 - _globals['_ACQUISITIONSTATE']._serialized_start=6896 - _globals['_ACQUISITIONSTATE']._serialized_end=7019 - _globals['_ACQUISITIONSTOPREASON']._serialized_start=7022 - _globals['_ACQUISITIONSTOPREASON']._serialized_end=7328 - _globals['_STARTUPSTATE']._serialized_start=7331 - _globals['_STARTUPSTATE']._serialized_end=7609 - _globals['_FINISHINGSTATE']._serialized_start=7612 - _globals['_FINISHINGSTATE']._serialized_end=7751 + _globals['_MINKNOWSTATUS']._serialized_start=7004 + _globals['_MINKNOWSTATUS']._serialized_end=7093 + _globals['_OPTION']._serialized_start=7095 + _globals['_OPTION']._serialized_end=7137 + _globals['_PURPOSE']._serialized_start=7139 + _globals['_PURPOSE']._serialized_end=7200 + _globals['_ACQUISITIONSTATE']._serialized_start=7203 + _globals['_ACQUISITIONSTATE']._serialized_end=7350 + _globals['_ACQUISITIONSTOPREASON']._serialized_start=7353 + _globals['_ACQUISITIONSTOPREASON']._serialized_end=7659 + _globals['_STARTUPSTATE']._serialized_start=7662 + _globals['_STARTUPSTATE']._serialized_end=7940 + _globals['_FINISHINGSTATE']._serialized_start=7943 + _globals['_FINISHINGSTATE']._serialized_end=8082 _globals['_STARTREQUEST']._serialized_start=152 _globals['_STARTREQUEST']._serialized_end=619 _globals['_STARTRESPONSE']._serialized_start=621 @@ -134,21 +140,138 @@ _globals['_WATCHCURRENTACQUISITIONRUNREQUEST']._serialized_start=6120 _globals['_WATCHCURRENTACQUISITIONRUNREQUEST']._serialized_end=6155 _globals['_SETSIGNALREADERREQUEST']._serialized_start=6158 - _globals['_SETSIGNALREADERREQUEST']._serialized_end=6509 + _globals['_SETSIGNALREADERREQUEST']._serialized_end=6527 _globals['_SETSIGNALREADERREQUEST_SIGNALREADERTYPE']._serialized_start=6408 - _globals['_SETSIGNALREADERREQUEST_SIGNALREADERTYPE']._serialized_end=6448 - _globals['_SETSIGNALREADERREQUEST_SOURCEFILEMODE']._serialized_start=6450 - _globals['_SETSIGNALREADERREQUEST_SOURCEFILEMODE']._serialized_end=6509 - _globals['_SETSIGNALREADERRESPONSE']._serialized_start=6511 - _globals['_SETSIGNALREADERRESPONSE']._serialized_end=6536 - _globals['_SETBREAMINFOREQUEST']._serialized_start=6538 - _globals['_SETBREAMINFOREQUEST']._serialized_end=6641 - _globals['_SETBREAMINFORESPONSE']._serialized_start=6643 - _globals['_SETBREAMINFORESPONSE']._serialized_end=6665 - _globals['_APPENDMUXSCANRESULTRESPONSE']._serialized_start=6667 - _globals['_APPENDMUXSCANRESULTRESPONSE']._serialized_end=6696 - _globals['_ACQUISITIONSERVICE']._serialized_start=7754 - _globals['_ACQUISITIONSERVICE']._serialized_end=9246 + _globals['_SETSIGNALREADERREQUEST_SIGNALREADERTYPE']._serialized_end=6466 + _globals['_SETSIGNALREADERREQUEST_SOURCEFILEMODE']._serialized_start=6468 + _globals['_SETSIGNALREADERREQUEST_SOURCEFILEMODE']._serialized_end=6527 + _globals['_SETSIGNALREADERRESPONSE']._serialized_start=6529 + _globals['_SETSIGNALREADERRESPONSE']._serialized_end=6554 + _globals['_GETSIGNALREADERREQUEST']._serialized_start=6556 + _globals['_GETSIGNALREADERREQUEST']._serialized_end=6580 + _globals['_GETSIGNALREADERRESPONSE']._serialized_start=6583 + _globals['_GETSIGNALREADERRESPONSE']._serialized_end=6842 + _globals['_SETBREAMINFOREQUEST']._serialized_start=6844 + _globals['_SETBREAMINFOREQUEST']._serialized_end=6947 + _globals['_SETBREAMINFORESPONSE']._serialized_start=6949 + _globals['_SETBREAMINFORESPONSE']._serialized_end=6971 + _globals['_APPENDMUXSCANRESULTRESPONSE']._serialized_start=6973 + _globals['_APPENDMUXSCANRESULTRESPONSE']._serialized_end=7002 + _globals['_ACQUISITIONSERVICE']._serialized_start=8085 + _globals['_ACQUISITIONSERVICE']._serialized_end=9702 +ChannelStateInfo.__doc__ = """Attributes: + groups: + The groups of channel states. The groups are ordered + according to the "order" attribute of the group style in the + channel states configuration. +""" +MuxScanResult.__doc__ = """A report of the states of channel muxes (wells) across the flow cell. +Every channel mux (well) is assigned to a specific category describing +its state (for example, is it expected to produce good results, and if +not why not?). This is a report of how many channel muxes are in each +category. + +Attributes: + counts: + How many channel muxes are in each category. The sum of all + the values in this map should be the number of channels + multiplied by the number of muxes on each channel (eg: + 512x4=2048 on a MinION Mk1B without a flongle adapter). eg. + 'sequencing': 1500 + mux_scan_timestamp: + When this mux scan result was added (Seconds since the start + of the acquisition). +""" +GetSignalReaderResponse.__doc__ = """Attributes: + reader: + The type of signal reader to use + playback_source: + The following is only set if the signal reader is a playback + source. +""" +SetSignalReaderRequest.__doc__ = """Attributes: + reader: + The type of signal reader to use + hdf_source: + The following settings are optional, and only used when + setting the reader to hdf5 + hdf_mode: + Defaults to UNSPECIFIED, since this setting is optional +""" +BreamInfo.__doc__ = """Information provided by Bream. Note that this is provided by the +protocol, and some protocols may choose not to provide this. + +Attributes: + mux_scan_metadata: + Presentation information for mux scan results. + mux_scan_results: + Mux scan results. + target_translocation_speed: + The ideal translocation speed range. This can be used to + provide context for speed graphs (see the statistics RPCs), + showing what range is considered "good". + target_q_score: + The ideal quality (Q) score range. This can be used to + provide context for q-score graphs (see the statistics RPCs), + showing what range is considered "good". + target_temperature: + The ideal temperature range. This can be used to provide + context for temperature (see the statistics RPCs), showing + what range is considered "good". Note that a protocol may + request a different temperature range than this (eg: it might + request a tighter range, or it may adjust the temperature it + is requesting throughout the run). This intended only to + provide context when presenting data to users. +""" +ChannelStateInfo.Style.__doc__ = """Attributes: + label: + The human-readable name to display when rendering this channel + state or group. + description: + A sentence describing the meaning of the channel state or + group. This can be used as a tooltip, for example. + colour: + The colour to use when rendering this channel state or group. + This is a six-digit hex string describing an RGB colour (eg: + "ff00ff" for purple). +""" +MuxScanMetadata.Category.__doc__ = """A category that a channel mux can be assigned. + +Attributes: + name: + Name of the category. This is the value that will be in the + `MuxScanResult.counts` field. The user should not be shown + this. Instead, `style.label` should be displayed. + style: + How to render the category in a graphical user interface. + global_order: + An order ranking for the category when displaying them without + using groups. +""" +BreamInfo.Range.__doc__ = """Represents a range of values.""" +MuxScanMetadata.Style.__doc__ = """Presentation information for a category or group. + +Attributes: + label: + The human-readable name to display when rendering this + category or group. + description: + A sentence describing the meaning of the category or group. + This can be used as a tooltip, for example. + colour: + The colour to use when rendering this category or group. This + is a six-digit hex string describing an RGB colour (eg: + "ff0000" for red). +""" +MuxScanMetadata.CategoryGroup.__doc__ = """Attributes: + name: + The name of the group. + style: + How to render the group in a graphical user interface. + category: + The categories contained in the group. Within this group, + categories should be presented in the order of this list. +""" AcquisitionYieldSummary.__doc__ = """Attributes: read_count: Number of reads selected by analysis as good reads. The reads @@ -216,133 +339,15 @@ bases, if "alignment_matches" is 2500, then "alignment_coverage" will be 0.5 Since 4.3 """ -SetSignalReaderRequest.__doc__ = """Attributes: - reader: - The type of signal reader to use - hdf_source: - The following settings are optional, and only used when - setting the reader to hdf5 - hdf_mode: - Defaults to UNSPECIFIED, since this setting is optional -""" -GetProgressResponse.__doc__ = """Attributes: - raw_per_channel: - The amount of raw data (per channel) that has been acquired - and processed. -""" GetAcquisitionRunInfoRequest.__doc__ = """Attributes: run_id: The acquisition period to get information about. """ -BreamInfo.__doc__ = """Information provided by Bream. Note that this is provided by the -protocol, and some protocols may choose not to provide this. - -Attributes: - mux_scan_metadata: - Presentation information for mux scan results. - mux_scan_results: - Mux scan results. - target_translocation_speed: - The ideal translocation speed range. This can be used to - provide context for speed graphs (see the statistics RPCs), - showing what range is considered "good". - target_q_score: - The ideal quality (Q) score range. This can be used to - provide context for q-score graphs (see the statistics RPCs), - showing what range is considered "good". - target_temperature: - The ideal temperature range. This can be used to provide - context for temperature (see the statistics RPCs), showing - what range is considered "good". Note that a protocol may - request a different temperature range than this (eg: it might - request a tighter range, or it may adjust the temperature it - is requesting throughout the run). This intended only to - provide context when presenting data to users. -""" -AcquisitionRunInfo.__doc__ = """Attributes: +StartResponse.__doc__ = """Attributes: run_id: - The unique identifier assigned to this acquisition run. This - is guaranteed to be made of ASCII characters, and at most 40 - characters. It is globally unique across all acquisitions on - all MinKNOW instances. - startup_state: - Current startup task (or STARTUP_UNKNOWN if not starting up). - startup_state_estimated_end: - Estimated time for current startup state to end. In some - cases this field is left unset, to indicate no estimation. - startup_state_estimated_percent_complete: - Estimate startup state completion percent (0 - 1). In some - cases this field is left at 0, indicating no estimation. - state: - Indicates the current state of the acquisition. - finishing_state: - If the experiment is finishing, an extra piece of state - describing the current finishing state. - finishing_state_percent_complete: - Progress through the current finishing state, ranges from 0 - - 1. This will increase from 0 -> 1 for each individual - finishing state, then reset. - stop_reason: - The reason the acquisition period was ended. - start_time: - When the acquisition period was started (UTC). - data_read_start_time: - When MinKNOW began acquiring data (UTC). Unset if the - acquisition is still starting up. - data_read_end_time: - When the MinKNOW stopped acquiring data (UTC). Unset if the - acquisition is still acquiring. - end_time: - When the acquisition terminated (UTC). Unset if the - acquisition period is still running. - yield_summary: - Summary of acquisition yields. Since 1.12 - config_summary: - Summary of the configuration settings for a run. Since 1.14 - writer_summary: - Summary of writer yields. Since 4.0 - bream_info: - Set information provided by the Bream toolkit. - target_run_until_criteria: - Target Run-Until Critiera, used to determine when the - acquisition should be paused or stopped. Since 5.3 -""" -ChannelStateInfo.Group.__doc__ = """Attributes: - name: - The name of the group. - style: - How to render the group in a graphical user interface. Note - that the style may be missing from some groups (such as the - ones that are built in to MinKNOW). - states: - The channel states contained in the group. The groups are - ordered according to the "order" attribute of the channel - state style in the channel states configuration. -""" -MuxScanMetadata.__doc__ = """Provides information about how mux scans are configured. This -primarily information to help present mux scan results to the user -(see `MuxScanResult`). - -Attributes: - auto_mux_scan_period_hours: - How frequently automatic scans are scheduled to occur. - category_groups: - Presentation information for categories. Describes the - preferred way to present mux scan categories to users. Groups - should be presented in the order of this list. -""" -AcquisitionYieldSummary.TotalsPerDuplexCategory.__doc__ = """Note: If duplex isn't enabled, all reads and basecalls will be classed -as 'simplex' and the 'duplex' fields will be 0.""" -AcquisitionWriterSummary.__doc__ = """Attributes: - bytes_to_write_produced: - Number of bytes which minknow needs to write in order to - finish the experiment. - bytes_to_write_failed: - Number of bytes which minknow has failed to write to final - location. These reads are instead contained in the - fallback/tmp locations. - bytes_to_write_completed: - Number of bytes which minknow has written to final location. + Globally-unique identifier generated when the acquisition is + started. This is guaranteed to unique, including aross + sequencing devices. """ StartRequest.__doc__ = """ Protobuf messages for input/output of RPC calls @@ -419,137 +424,7 @@ proxy_request: Since 5.8 """ -MuxScanMetadata.Style.__doc__ = """Presentation information for a category or group. - -Attributes: - label: - The human-readable name to display when rendering this - category or group. - description: - A sentence describing the meaning of the category or group. - This can be used as a tooltip, for example. - colour: - The colour to use when rendering this category or group. This - is a six-digit hex string describing an RGB colour (eg: - "ff0000" for red). -""" -BreamInfo.Range.__doc__ = """Represents a range of values.""" -StopRequest.__doc__ = """Attributes: - wait_until_ready: - Defaults to false If false will return as soon as minknow - enters the FINISHING state. If true then returns as soon as - minknow enters the READY state. - keep_power_on: - Force the MinION/GridION ASIC power to be kept on after the - current acquisition finishes Keeping the ASIC power on has - two main effects: - The flow-cell will remain at the - correct operating temperature between acquisitions; - this allows following acquisition to be started more quickly. - - MinION/GridION flow cells may be damaged if they are removed - or plugged in while the ASIC power is turned on. - Therefore, this option should be set to `true` if and only if - another acquisition will be performed using the same flow- - cell, soon after the acquisition that is being stopped. - Otherwise it should be set to `false` (or left unset) to - prevent potential damage to MinION/GridION flow-cells. If - this option is set to `false` (or is left unset), then the - application configuration determines whether the power will be - left on when the acquisition finishes -- see the - `powered_when_idle` and `flongle_powered_when_idle` - configuration options for further details. This option has no - effect on PromethIONs. Since 1.15.2 -""" -SetBreamInfoRequest.__doc__ = """Attributes: - info: - The information to set. Note that, other than treating the - top-level fields independently (see the other flags on this - request), MinKNOW Core will not do anything special to the - data. In particular, the caller must fill in the - `mux_scan_timestamp` field in `MuxScanResult` messages. - overwrite_unset_fields: - If any `BreamInfo` fields were set in a previous call, but are - unset in the `info` field of this call, then use the old value - for them. For example, to just update the mux_scan_metadata - field, use a BreamInfo object with only the - `mux_scan_metadata` field set, and leave this as False. To - clear the entire BreamInfo structure, leave `info` empty and - set this to True. -""" -GetProgressResponse.RawPerChannel.__doc__ = """Attributes: - acquired: - Number of samples (per channel) acquired from the device. - processed: - Number of samples (per channel) passed to the analysis - pipeline for processing. This can be compared to acquired to - see how far behind the analysis is lagging. -""" -ChannelStateInfo.__doc__ = """Attributes: - groups: - The groups of channel states. The groups are ordered - according to the "order" attribute of the group style in the - channel states configuration. -""" -StartResponse.__doc__ = """Attributes: - run_id: - Globally-unique identifier generated when the acquisition is - started. This is guaranteed to unique, including aross - sequencing devices. -""" -MuxScanMetadata.CategoryGroup.__doc__ = """Attributes: - name: - The name of the group. - style: - How to render the group in a graphical user interface. - category: - The categories contained in the group. Within this group, - categories should be presented in the order of this list. -""" -ChannelStateInfo.ChannelState.__doc__ = """Attributes: - id: - The numeric identifier of the state. This is what is reported - in any other APIs that return a channel state ID. - name: - The internal name of the state. This is what is reported in - any other APIs that return a channel state name. - style: - How to render the channel state in a graphical user interface. - Note that the style may be missing from some channel states - (such as the ones that are built in to MinKNOW). - global_order: - An order ranking for the channel states when they are - ungrouped. This can be used to order the channel states after - merging the groups. -""" -MuxScanResult.__doc__ = """A report of the states of channel muxes (wells) across the flow cell. -Every channel mux (well) is assigned to a specific category describing -its state (for example, is it expected to produce good results, and if -not why not?). This is a report of how many channel muxes are in each -category. - -Attributes: - counts: - How many channel muxes are in each category. The sum of all - the values in this map should be the number of channels - multiplied by the number of muxes on each channel (eg: - 512x4=2048 on a MinION Mk1B without a flongle adapter). eg. - 'sequencing': 1500 - mux_scan_timestamp: - When this mux scan result was added (Seconds since the start - of the acquisition). -""" -ChannelStateInfo.Style.__doc__ = """Attributes: - label: - The human-readable name to display when rendering this channel - state or group. - description: - A sentence describing the meaning of the channel state or - group. This can be used as a tooltip, for example. - colour: - The colour to use when rendering this channel state or group. - This is a six-digit hex string describing an RGB colour (eg: - "ff00ff" for purple). -""" -AcquisitionConfigSummary.__doc__ = """This field has been removed Since 5.8 +AcquisitionConfigSummary.__doc__ = """This field has been removed Since 5.8 Attributes: purpose: @@ -607,17 +482,159 @@ channel_count: Channel count used in the acquisition. Since 3.3 """ -MuxScanMetadata.Category.__doc__ = """A category that a channel mux can be assigned. - -Attributes: +SetBreamInfoRequest.__doc__ = """Attributes: + info: + The information to set. Note that, other than treating the + top-level fields independently (see the other flags on this + request), MinKNOW Core will not do anything special to the + data. In particular, the caller must fill in the + `mux_scan_timestamp` field in `MuxScanResult` messages. + overwrite_unset_fields: + If any `BreamInfo` fields were set in a previous call, but are + unset in the `info` field of this call, then use the old value + for them. For example, to just update the mux_scan_metadata + field, use a BreamInfo object with only the + `mux_scan_metadata` field set, and leave this as False. To + clear the entire BreamInfo structure, leave `info` empty and + set this to True. +""" +GetProgressResponse.__doc__ = """Attributes: + raw_per_channel: + The amount of raw data (per channel) that has been acquired + and processed. +""" +AcquisitionYieldSummary.TotalsPerDuplexCategory.__doc__ = """Note: If duplex isn't enabled, all reads and basecalls will be classed +as 'simplex' and the 'duplex' fields will be 0.""" +StopRequest.__doc__ = """Attributes: + wait_until_ready: + Defaults to false If false will return as soon as minknow + enters the FINISHING state. If true then returns as soon as + minknow enters the READY state. + keep_power_on: + Force the MinION/GridION ASIC power to be kept on after the + current acquisition finishes Keeping the ASIC power on has + two main effects: - The flow-cell will remain at the + correct operating temperature between acquisitions; + this allows following acquisition to be started more quickly. + - MinION/GridION flow cells may be damaged if they are removed + or plugged in while the ASIC power is turned on. + Therefore, this option should be set to `true` if and only if + another acquisition will be performed using the same flow- + cell, soon after the acquisition that is being stopped. + Otherwise it should be set to `false` (or left unset) to + prevent potential damage to MinION/GridION flow-cells. If + this option is set to `false` (or is left unset), then the + application configuration determines whether the power will be + left on when the acquisition finishes -- see the + `powered_when_idle` and `flongle_powered_when_idle` + configuration options for further details. This option has no + effect on PromethIONs. Since 1.15.2 +""" +GetProgressResponse.RawPerChannel.__doc__ = """Attributes: + acquired: + Number of samples (per channel) acquired from the device. + processed: + Number of samples (per channel) passed to the analysis + pipeline for processing. This can be compared to acquired to + see how far behind the analysis is lagging. +""" +ChannelStateInfo.Group.__doc__ = """Attributes: name: - Name of the category. This is the value that will be in the - `MuxScanResult.counts` field. The user should not be shown - this. Instead, `style.label` should be displayed. + The name of the group. style: - How to render the category in a graphical user interface. + How to render the group in a graphical user interface. Note + that the style may be missing from some groups (such as the + ones that are built in to MinKNOW). + states: + The channel states contained in the group. The groups are + ordered according to the "order" attribute of the channel + state style in the channel states configuration. +""" +AcquisitionWriterSummary.__doc__ = """Attributes: + bytes_to_write_produced: + Number of bytes which minknow needs to write in order to + finish the experiment. + bytes_to_write_failed: + Number of bytes which minknow has failed to write to final + location. These reads are instead contained in the + fallback/tmp locations. + bytes_to_write_completed: + Number of bytes which minknow has written to final location. +""" +ChannelStateInfo.ChannelState.__doc__ = """Attributes: + id: + The numeric identifier of the state. This is what is reported + in any other APIs that return a channel state ID. + name: + The internal name of the state. This is what is reported in + any other APIs that return a channel state name. + style: + How to render the channel state in a graphical user interface. + Note that the style may be missing from some channel states + (such as the ones that are built in to MinKNOW). global_order: - An order ranking for the category when displaying them without - using groups. + An order ranking for the channel states when they are + ungrouped. This can be used to order the channel states after + merging the groups. +""" +MuxScanMetadata.__doc__ = """Provides information about how mux scans are configured. This +primarily information to help present mux scan results to the user +(see `MuxScanResult`). + +Attributes: + auto_mux_scan_period_hours: + How frequently automatic scans are scheduled to occur. + category_groups: + Presentation information for categories. Describes the + preferred way to present mux scan categories to users. Groups + should be presented in the order of this list. +""" +AcquisitionRunInfo.__doc__ = """Attributes: + run_id: + The unique identifier assigned to this acquisition run. This + is guaranteed to be made of ASCII characters, and at most 40 + characters. It is globally unique across all acquisitions on + all MinKNOW instances. + startup_state: + Current startup task (or STARTUP_UNKNOWN if not starting up). + startup_state_estimated_end: + Estimated time for current startup state to end. In some + cases this field is left unset, to indicate no estimation. + startup_state_estimated_percent_complete: + Estimate startup state completion percent (0 - 1). In some + cases this field is left at 0, indicating no estimation. + state: + Indicates the current state of the acquisition. + finishing_state: + If the experiment is finishing, an extra piece of state + describing the current finishing state. + finishing_state_percent_complete: + Progress through the current finishing state, ranges from 0 - + 1. This will increase from 0 -> 1 for each individual + finishing state, then reset. + stop_reason: + The reason the acquisition period was ended. + start_time: + When the acquisition period was started (UTC). + data_read_start_time: + When MinKNOW began acquiring data (UTC). Unset if the + acquisition is still starting up. + data_read_end_time: + When the MinKNOW stopped acquiring data (UTC). Unset if the + acquisition is still acquiring. + end_time: + When the acquisition terminated (UTC). Unset if the + acquisition period is still running. + yield_summary: + Summary of acquisition yields. Since 1.12 + config_summary: + Summary of the configuration settings for a run. Since 1.14 + writer_summary: + Summary of writer yields. Since 4.0 + bream_info: + Set information provided by the Bream toolkit. + target_run_until_criteria: + Target Run-Until Criteria, used to determine when the + acquisition should be paused or stopped. Since 5.3 """ # @@protoc_insertion_point(module_scope) diff --git a/python/minknow_api/acquisition_pb2_grpc.py b/python/minknow_api/acquisition_pb2_grpc.py index 9dbf6b0..a5d8c2f 100644 --- a/python/minknow_api/acquisition_pb2_grpc.py +++ b/python/minknow_api/acquisition_pb2_grpc.py @@ -64,6 +64,11 @@ def __init__(self, channel): request_serializer=minknow__api_dot_acquisition__pb2.SetSignalReaderRequest.SerializeToString, response_deserializer=minknow__api_dot_acquisition__pb2.SetSignalReaderResponse.FromString, ) + self.get_signal_reader = channel.unary_unary( + '/minknow_api.acquisition.AcquisitionService/get_signal_reader', + request_serializer=minknow__api_dot_acquisition__pb2.GetSignalReaderRequest.SerializeToString, + response_deserializer=minknow__api_dot_acquisition__pb2.GetSignalReaderResponse.FromString, + ) self.set_bream_info = channel.unary_unary( '/minknow_api.acquisition.AcquisitionService/set_bream_info', request_serializer=minknow__api_dot_acquisition__pb2.SetBreamInfoRequest.SerializeToString, @@ -200,6 +205,15 @@ def set_signal_reader(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def get_signal_reader(self, request, context): + """Find the signal reader in use. This may have been configured by MinKNOW prior to a protocol being begun. + + Since 6.2 + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def set_bream_info(self, request, context): """Set the bream information for the current acquisition. @@ -283,6 +297,11 @@ def add_AcquisitionServiceServicer_to_server(servicer, server): request_deserializer=minknow__api_dot_acquisition__pb2.SetSignalReaderRequest.FromString, response_serializer=minknow__api_dot_acquisition__pb2.SetSignalReaderResponse.SerializeToString, ), + 'get_signal_reader': grpc.unary_unary_rpc_method_handler( + servicer.get_signal_reader, + request_deserializer=minknow__api_dot_acquisition__pb2.GetSignalReaderRequest.FromString, + response_serializer=minknow__api_dot_acquisition__pb2.GetSignalReaderResponse.SerializeToString, + ), 'set_bream_info': grpc.unary_unary_rpc_method_handler( servicer.set_bream_info, request_deserializer=minknow__api_dot_acquisition__pb2.SetBreamInfoRequest.FromString, @@ -473,6 +492,23 @@ def set_signal_reader(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def get_signal_reader(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/minknow_api.acquisition.AcquisitionService/get_signal_reader', + minknow__api_dot_acquisition__pb2.GetSignalReaderRequest.SerializeToString, + minknow__api_dot_acquisition__pb2.GetSignalReaderResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def set_bream_info(request, target, diff --git a/python/minknow_api/acquisition_service.py b/python/minknow_api/acquisition_service.py index 4afb8d4..1e8d175 100644 --- a/python/minknow_api/acquisition_service.py +++ b/python/minknow_api/acquisition_service.py @@ -36,6 +36,8 @@ "WatchCurrentAcquisitionRunRequest", "SetSignalReaderRequest", "SetSignalReaderResponse", + "GetSignalReaderRequest", + "GetSignalReaderResponse", "SetBreamInfoRequest", "SetBreamInfoResponse", "AppendMuxScanResultResponse", @@ -58,6 +60,7 @@ "ACQUISITION_RUNNING", "ACQUISITION_FINISHING", "ACQUISITION_COMPLETED", + "ACQUISITION_PAUSED", "AcquisitionStopReason", "STOPPED_NOT_SET", "STOPPED_USER_REQUESTED", @@ -696,6 +699,46 @@ def set_signal_reader(self, _message=None, _timeout=None, **kwargs): _message, _timeout, [], "minknow_api.acquisition.AcquisitionService") + def get_signal_reader(self, _message=None, _timeout=None, **kwargs): + """Find the signal reader in use. This may have been configured by MinKNOW prior to a protocol being begun. + + Since 6.2 + + This RPC is idempotent. It may change the state of the system, but if the requested + change has already happened, it will not fail because of this, make any additional + changes or return a different value. + + Args: + _message (minknow_api.acquisition_pb2.GetSignalReaderRequest, optional): The message to send. + This can be passed instead of the keyword arguments. + _timeout (float, optional): The call will be cancelled after this number of seconds + if it has not been completed. + + Returns: + minknow_api.acquisition_pb2.GetSignalReaderResponse + + Note that the returned messages are actually wrapped in a type that collapses + submessages for fields marked with ``[rpc_unwrap]``. + """ + if _message is not None: + if isinstance(_message, MessageWrapper): + _message = _message._message + return run_with_retry(self._stub.get_signal_reader, + _message, _timeout, + [], + "minknow_api.acquisition.AcquisitionService") + + unused_args = set(kwargs.keys()) + + _message = GetSignalReaderRequest() + + if len(unused_args) > 0: + raise ArgumentError("Unexpected keyword arguments to get_signal_reader: '{}'".format(", ".join(unused_args))) + + return run_with_retry(self._stub.get_signal_reader, + _message, _timeout, + [], + "minknow_api.acquisition.AcquisitionService") def set_bream_info(self, _message=None, _timeout=None, **kwargs): """Set the bream information for the current acquisition. diff --git a/python/minknow_api/analysis_configuration_pb2.py b/python/minknow_api/analysis_configuration_pb2.py index da47b11..bcf5acb 100644 --- a/python/minknow_api/analysis_configuration_pb2.py +++ b/python/minknow_api/analysis_configuration_pb2.py @@ -18,7 +18,7 @@ from minknow_api import rpc_options_pb2 as minknow__api_dot_rpc__options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(minknow_api/analysis_configuration.proto\x12\"minknow_api.analysis_configuration\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x1dminknow_api/rpc_options.proto\"\xc6\x02\n\x0e\x45ventDetection\x12N\n\x04type\x18\x13 \x01(\x0e\x32@.minknow_api.analysis_configuration.EventDetection.DetectionType\x12\x13\n\x0bwindow_size\x18\x03 \x01(\r\x12\x11\n\tthreshold\x18\x05 \x01(\x01\x12\x13\n\x0bpeak_height\x18\t \x01(\x01\x12:\n\x14\x65vents_to_base_ratio\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x1c\n\x14\x62reak_on_mux_changes\x18\x11 \x01(\x08\x12!\n\x19max_mux_change_back_shift\x18\x12 \x01(\r\"*\n\rDetectionType\x12\x0e\n\nMULTITTEST\x10\x00\x12\t\n\x05\x44MEAN\x10\x01\"\xf0\x04\n\x13ReadDetectionParams\x12W\n\x04mode\x18\x01 \x01(\x0e\x32I.minknow_api.analysis_configuration.ReadDetectionParams.ReadDetectionMode\x12\x1a\n\x12minimum_delta_mean\x18\x02 \x01(\x01\x12\x11\n\tlook_back\x18\x03 \x01(\r\x12>\n\x18\x62reak_reads_after_events\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12?\n\x19\x62reak_reads_after_seconds\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\"\n\x1a\x62reak_reads_on_mux_changes\x18\x06 \x01(\x08\x12\x33\n\ropen_pore_min\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x33\n\ropen_pore_max\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x37\n\x11open_pore_default\x18\t \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12@\n\x1aopen_pore_seconds_required\x18\n \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\"G\n\x11ReadDetectionMode\x12\x08\n\x04none\x10\x00\x12\x0e\n\ntransition\x10\x01\x12\x0c\n\x08lookback\x10\x02\x12\n\n\x06minmax\x10\x03\"\x8e\x01\n\x0bReadFilters\x12\x17\n\x0fread_length_min\x18\x01 \x01(\r\x12\x17\n\x0fread_length_max\x18\x02 \x01(\r\x12\x17\n\x0f\x65vent_count_min\x18\x03 \x01(\r\x12\x17\n\x0f\x65vent_count_max\x18\x04 \x01(\r\x12\x1b\n\x13skip_rejected_reads\x18\x05 \x01(\x08\"\x87\x07\n\x18ReadClassificationParams\x12Z\n\rscheme_module\x18\x01 \x01(\x0e\x32\x43.minknow_api.analysis_configuration.ReadClassificationParams.Scheme\x12\x35\n\x0fmax_sample_size\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12 \n\x18selected_classifications\x18\x03 \x03(\t\x12!\n\x19open_pore_classifications\x18\x06 \x03(\t\x12;\n\x15open_pore_ewma_weight\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12J\n$open_pore_ignore_after_reset_seconds\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x1f\n\x17\x63lassification_strategy\x18\x04 \x01(\t\x12[\n\nparameters\x18\x05 \x01(\x0b\x32G.minknow_api.analysis_configuration.ReadClassificationParams.Parameters\x12P\n*selected_classifications_fraction_required\x18\t \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12N\n(selected_classifications_chunks_required\x18\n \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12\x42\n\x1emerge_selected_classifications\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12V\n0max_read_length_before_selected_decision_seconds\x18\x0c \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x1a.\n\nParameters\x12 \n\x18rules_in_execution_order\x18\x02 \x03(\t\"\x1e\n\x06Scheme\x12\x08\n\x04none\x10\x00\x12\n\n\x06parsed\x10\x01\"\xf2\x07\n\rChannelStates\x12\x46\n\x05group\x18\x02 \x01(\x0b\x32\x37.minknow_api.analysis_configuration.ChannelStates.Group\x12\x13\n\x0b\x64\x65scription\x18\x05 \x01(\t\x12\x46\n\x05logic\x18\x03 \x01(\x0b\x32\x37.minknow_api.analysis_configuration.ChannelStates.Logic\x12\x46\n\x05style\x18\x04 \x01(\x0b\x32\x37.minknow_api.analysis_configuration.ChannelStates.Style\x1a\xaa\x04\n\x05Logic\x12\x10\n\x08\x63riteria\x18\x01 \x01(\t\x12\x0c\n\x04rank\x18\x03 \x01(\x05\x12\x0f\n\x07pattern\x18\x04 \x01(\t\x12\x16\n\x0e\x63lassification\x18\x05 \x01(\t\x12N\n\x06ranges\x18\x06 \x01(\x0b\x32>.minknow_api.analysis_configuration.ChannelStates.Logic.Ranges\x12T\n\tbehaviour\x18\x07 \x01(\x0b\x32\x41.minknow_api.analysis_configuration.ChannelStates.Logic.Behaviour\x1a\xa4\x01\n\tBehaviour\x12\x1b\n\x13reset_on_mux_change\x18\x01 \x01(\x05\x12\x1c\n\x14reset_on_well_change\x18\x02 \x01(\x05\x12\r\n\x05latch\x18\x03 \x01(\x05\x12%\n\x1dreset_on_effective_mux_change\x18\x04 \x01(\x05\x12&\n\x1ereset_on_effective_well_change\x18\x05 \x01(\x05\x1a\x8a\x01\n\x06Ranges\x12S\n\x05range\x18\x01 \x01(\x0b\x32\x44.minknow_api.analysis_configuration.ChannelStates.Logic.Ranges.Range\x1a+\n\x05Range\x12\x10\n\x08lower_pa\x18\x01 \x01(\x05\x12\x10\n\x08upper_pa\x18\x02 \x01(\x05\x1aS\n\x05Style\x12+\n\x05order\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12\r\n\x05label\x18\x02 \x01(\t\x12\x0e\n\x06\x63olour\x18\x03 \x01(\t\x1ar\n\x05Group\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x46\n\x05style\x18\x02 \x01(\x0b\x32\x37.minknow_api.analysis_configuration.ChannelStates.Style\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\"!\n\x1fGetAnalysisConfigurationRequest\"\x91\x03\n\x11ReadScalingParams\x12\x1a\n\x12quantile_locations\x18\x03 \x03(\x02\x12\x1e\n\x16quantile_weights_shift\x18\x01 \x03(\x02\x12\x1e\n\x16quantile_weights_scale\x18\x02 \x03(\x02\x12\x16\n\x0etracking_alpha\x18\x04 \x01(\x02\x12$\n\x1c\x61lpha_number_estimates_decay\x18\x05 \x01(\x02\x12\x18\n\x10quantile_maxdiff\x18\n \x01(\x02\x12\x1c\n\x14trust_limit_fraction\x18\x06 \x01(\x02\x12\x16\n\x0e\x64iff_threshold\x18\x07 \x01(\x02\x12\x1a\n\x12\x65mission_threshold\x18\x08 \x01(\x02\x12\x17\n\x0f\x64\x61\x63s_breakpoint\x18\t \x01(\x02\x12 \n\x18\x63onductance_factor_scale\x18\x0b \x01(\x02\x12 \n\x18\x63onductance_factor_shift\x18\x0c \x01(\x02\x12\x19\n\x11q90_q10_to_normal\x18\r \x01(\x02\"\xac\x04\n\x15\x41nalysisConfiguration\x12K\n\x0f\x65vent_detection\x18\x01 \x01(\x0b\x32\x32.minknow_api.analysis_configuration.EventDetection\x12O\n\x0eread_detection\x18\x02 \x01(\x0b\x32\x37.minknow_api.analysis_configuration.ReadDetectionParams\x12Y\n\x13read_classification\x18\x04 \x01(\x0b\x32<.minknow_api.analysis_configuration.ReadClassificationParams\x12\x64\n\x0e\x63hannel_states\x18\x07 \x03(\x0b\x32L.minknow_api.analysis_configuration.AnalysisConfiguration.ChannelStatesEntry\x12K\n\x0cread_scaling\x18\x08 \x01(\x0b\x32\x35.minknow_api.analysis_configuration.ReadScalingParams\x1ag\n\x12\x43hannelStatesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12@\n\x05value\x18\x02 \x01(\x0b\x32\x31.minknow_api.analysis_configuration.ChannelStates:\x02\x38\x01\"\"\n SetAnalysisConfigurationResponse\"#\n!ResetAnalysisConfigurationRequest\"$\n\"ResetAnalysisConfigurationResponse\"6\n\x1eSetAnalysisEnabledStateRequest\x12\x14\n\x06\x65nable\x18\x01 \x01(\x08\x42\x04\x88\xb5\x18\x01\"!\n\x1fSetAnalysisEnabledStateResponse\"\x1d\n\x1bGetChannelStatesDescRequest\"\x99\x04\n\x1cGetChannelStatesDescResponse\x12V\n\x06groups\x18\x01 \x03(\x0b\x32\x46.minknow_api.analysis_configuration.GetChannelStatesDescResponse.Group\x1a;\n\x05Style\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0e\n\x06\x63olour\x18\x03 \x01(\t\x1a\x95\x01\n\x0c\x43hannelState\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12U\n\x05style\x18\x03 \x01(\x0b\x32\x46.minknow_api.analysis_configuration.GetChannelStatesDescResponse.Style\x12\x14\n\x0cglobal_order\x18\x04 \x01(\r\x1a\xcb\x01\n\x05Group\x12\x0c\n\x04name\x18\x01 \x01(\t\x12U\n\x05style\x18\x02 \x01(\x0b\x32\x46.minknow_api.analysis_configuration.GetChannelStatesDescResponse.Style\x12]\n\x06states\x18\x03 \x03(\x0b\x32M.minknow_api.analysis_configuration.GetChannelStatesDescResponse.ChannelState\"\x13\n\x11GetSummaryRequest\"K\n\x12GetSummaryResponse\x12\x18\n\x10\x61nalysis_enabled\x18\x01 \x01(\x08\x12\x1b\n\x13\x62\x61secalling_enabled\x18\x02 \x01(\x08\"\x84\x02\n\x16\x42\x61rcodingConfiguration\x12\x16\n\x0e\x62\x61rcoding_kits\x18\x01 \x03(\t\x12\x15\n\rtrim_barcodes\x18\x02 \x01(\x08\x12\"\n\x1arequire_barcodes_both_ends\x18\x03 \x01(\x08\x12#\n\x1bignore_unspecified_barcodes\x18\t \x01(\x08J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tR\x1a\x64\x65tect_mid_strand_barcodesR\tmin_scoreR\x0emin_score_rearR\rmin_score_midR\x0emin_score_mask\"\xae\x01\n\x16\x41lignmentConfiguration\x12\x17\n\x0freference_files\x18\x01 \x03(\t\x12\x10\n\x08\x62\x65\x64_file\x18\x02 \x01(\t\x12\x35\n\x10minimum_coverage\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12\x32\n*aggregate_statistics_for_multiple_bed_hits\x18\x04 \x01(\x08\"\xcc\x01\n\x11LampConfiguration\x12\x10\n\x08lamp_kit\x18\x01 \x01(\t\x12\x37\n\x12min_score_barcodes\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12\x34\n\x0fmin_score_masks\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12\x36\n\x11min_score_targets\x18\x04 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\"\xb3\t\n\x17\x42\x61secallerConfiguration\x12\x0e\n\x06\x65nable\x18\x02 \x01(\x08\x12\x17\n\x0f\x63onfig_filename\x18\x01 \x01(\t\x12\x14\n\x0c\x61lign_filter\x18\n \x01(\x08\x12\x61\n\x0eread_filtering\x18\x03 \x01(\x0b\x32I.minknow_api.analysis_configuration.BasecallerConfiguration.ReadFiltering\x12[\n\x17\x62\x61rcoding_configuration\x18\x04 \x01(\x0b\x32:.minknow_api.analysis_configuration.BarcodingConfiguration\x12\x65\n\x10target_filtering\x18\x05 \x01(\x0b\x32K.minknow_api.analysis_configuration.BasecallerConfiguration.TargetFiltering\x12[\n\x17\x61lignment_configuration\x18\x06 \x01(\x0b\x32:.minknow_api.analysis_configuration.AlignmentConfiguration\x12Q\n\x12lamp_configuration\x18\x07 \x01(\x0b\x32\x35.minknow_api.analysis_configuration.LampConfiguration\x12\x1d\n\x15\x65nable_read_splitting\x18\x08 \x01(\x08\x12=\n\x18min_score_read_splitting\x18\t \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x1a\xfb\x02\n\rReadFiltering\x12\x30\n\nmin_qscore\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x31\n\x0bmin_samples\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12\x31\n\x0bmax_samples\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12/\n\tmin_bases\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12/\n\tmax_bases\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12\x37\n\x11max_failed_chunks\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12\x37\n\x11min_duplex_qscore\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x1a\xa5\x01\n\x0fTargetFiltering\x12\x30\n\nmin_qscore\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12/\n\tmin_bases\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12/\n\tmax_bases\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\"w\n!SetBasecallerConfigurationRequest\x12R\n\x07\x63onfigs\x18\x01 \x01(\x0b\x32;.minknow_api.analysis_configuration.BasecallerConfigurationB\x04\x90\xb5\x18\x01\"$\n\"SetBasecallerConfigurationResponse\"3\n!GetBasecallerConfigurationRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"!\n\x1fGetPoreTypeConfigurationRequest\"\xab\x05\n\x15PoreTypeConfiguration\x12\x1a\n\x10global_pore_type\x18\x01 \x01(\tH\x00\x12~\n\x17\x63hannel_well_pore_types\x18\x02 \x01(\x0b\x32[.minknow_api.analysis_configuration.PoreTypeConfiguration.ChannelWellPoreTypeConfigurationsH\x00\x1a,\n\x0b\x43hannelWell\x12\x0f\n\x07\x63hannel\x18\x01 \x01(\r\x12\x0c\n\x04well\x18\x02 \x01(\r\x1a\xb3\x03\n!ChannelWellPoreTypeConfigurations\x12~\n\npore_types\x18\x01 \x03(\x0b\x32j.minknow_api.analysis_configuration.PoreTypeConfiguration.ChannelWellPoreTypeConfigurations.PoreTypesEntry\x1an\n\x0f\x43hannelWellList\x12[\n\x0c\x63hannel_well\x18\x01 \x03(\x0b\x32\x45.minknow_api.analysis_configuration.PoreTypeConfiguration.ChannelWell\x1a\x9d\x01\n\x0ePoreTypesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12z\n\x05value\x18\x02 \x01(\x0b\x32k.minknow_api.analysis_configuration.PoreTypeConfiguration.ChannelWellPoreTypeConfigurations.ChannelWellList:\x02\x38\x01\x42\x12\n\x10pore_type_config\"\"\n SetPoreTypeConfigurationResponse\"\xcc\'\n\x13WriterConfiguration\x12\x62\n\nread_fast5\x18\x02 \x01(\x0b\x32N.minknow_api.analysis_configuration.WriterConfiguration.ReadFast5Configuration\x12\x62\n\nread_fastq\x18\x03 \x01(\x0b\x32N.minknow_api.analysis_configuration.WriterConfiguration.ReadFastqConfiguration\x12^\n\x08read_bam\x18\x08 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ReadBamConfiguration\x12`\n\tread_pod5\x18\n \x01(\x0b\x32M.minknow_api.analysis_configuration.WriterConfiguration.ReadPod5Configuration\x12r\n\x12sequencing_summary\x18\x05 \x01(\x0b\x32V.minknow_api.analysis_configuration.WriterConfiguration.SequencingSummaryConfiguration\x12W\n\x04\x62ulk\x18\x06 \x01(\x0b\x32I.minknow_api.analysis_configuration.WriterConfiguration.BulkConfiguration\x12[\n\x06report\x18\x07 \x01(\x0b\x32K.minknow_api.analysis_configuration.WriterConfiguration.ReportConfiguration\x12\x45\n\x0cread_filters\x18\t \x01(\x0b\x32/.minknow_api.analysis_configuration.ReadFilters\x1a\xff\x03\n\x14\x43hannelConfiguration\x12\x16\n\x0c\x61ll_channels\x18\x01 \x01(\x08H\x00\x12u\n\x11specific_channels\x18\x02 \x01(\x0b\x32X.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration.ChannelListH\x00\x12t\n\x0e\x63hannel_ranges\x18\x03 \x01(\x0b\x32Z.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration.ChannelRangesH\x00\x1a\x1f\n\x0b\x43hannelList\x12\x10\n\x08\x63hannels\x18\x01 \x03(\x05\x1a\xb4\x01\n\rChannelRanges\x12w\n\x06ranges\x18\x01 \x03(\x0b\x32g.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration.ChannelRanges.ChannelRange\x1a*\n\x0c\x43hannelRange\x12\r\n\x05start\x18\x01 \x01(\x05\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x05\x42\n\n\x08\x63hannels\x1a\xda\x07\n\x16ReadFast5Configuration\x12\x19\n\x11\x63ompression_level\x18\x01 \x01(\x05\x12\x61\n\x10\x63ompression_type\x18\x0e \x01(\x0e\x32G.minknow_api.analysis_configuration.WriterConfiguration.CompressionType\x12Y\n\x03raw\x18\x02 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12[\n\x05\x66\x61stq\x18\x03 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12\x61\n\x0btrace_table\x18\x0b \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12`\n\nmove_table\x18\x0c \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12i\n\x13modifications_table\x18\r \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12$\n\x1c\x64isable_writing_passed_reads\x18\x05 \x01(\x08\x12$\n\x1c\x64isable_writing_failed_reads\x18\x06 \x01(\x08\x12+\n#disable_writing_force_skipped_reads\x18\x07 \x01(\x08\x12\x14\n\x0c\x66ile_pattern\x18\x08 \x01(\t\x12\x1c\n\x14\x66\x61stq_header_pattern\x18\t \x01(\t\x12\x15\n\x0b\x62\x61tch_count\x18\n \x01(\rH\x00\x12\x19\n\x0f\x62\x61ses_per_batch\x18\x0f \x01(\x04H\x00\x12:\n\x18no_output_based_batching\x18\x11 \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x12\x31\n\x0e\x62\x61tch_duration\x18\x10 \x01(\x0b\x32\x19.google.protobuf.DurationB\x0c\n\nbatch_info\x1a\xe1\x03\n\x16ReadFastqConfiguration\x12\\\n\x06\x65nable\x18\x01 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12\x14\n\x0c\x66ile_pattern\x18\x02 \x01(\t\x12\x16\n\x0eheader_pattern\x18\x03 \x01(\t\x12\x15\n\x0b\x62\x61tch_count\x18\x04 \x01(\rH\x00\x12\x19\n\x0f\x62\x61ses_per_batch\x18\x06 \x01(\x04H\x00\x12:\n\x18no_output_based_batching\x18\x0b \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x12\x13\n\x0b\x63ompression\x18\x05 \x01(\x08\x12$\n\x1c\x64isable_writing_passed_reads\x18\x07 \x01(\x08\x12$\n\x1c\x64isable_writing_failed_reads\x18\x08 \x01(\x08\x12+\n#disable_writing_force_skipped_reads\x18\t \x01(\x08\x12\x31\n\x0e\x62\x61tch_duration\x18\n \x01(\x0b\x32\x19.google.protobuf.DurationB\x0c\n\nbatch_info\x1a\xdf\x03\n\x14ReadBamConfiguration\x12\\\n\x06\x65nable\x18\x01 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12\x14\n\x0c\x66ile_pattern\x18\x02 \x01(\t\x12\x15\n\x0b\x62\x61tch_count\x18\x03 \x01(\rH\x00\x12\x19\n\x0f\x62\x61ses_per_batch\x18\x05 \x01(\x04H\x00\x12:\n\x18no_output_based_batching\x18\n \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x12+\n#disable_writing_multiple_alignments\x18\x04 \x01(\x08\x12$\n\x1c\x64isable_writing_passed_reads\x18\x06 \x01(\x08\x12$\n\x1c\x64isable_writing_failed_reads\x18\x07 \x01(\x08\x12+\n#disable_writing_force_skipped_reads\x18\x08 \x01(\x08\x12\x31\n\x0e\x62\x61tch_duration\x18\t \x01(\x0b\x32\x19.google.protobuf.DurationB\x0c\n\nbatch_info\x1a\xb3\x03\n\x15ReadPod5Configuration\x12\\\n\x06\x65nable\x18\x01 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12\x14\n\x0c\x66ile_pattern\x18\x02 \x01(\t\x12\x15\n\x0b\x62\x61tch_count\x18\x03 \x01(\rH\x00\x12\x19\n\x0f\x62\x61ses_per_batch\x18\x07 \x01(\x04H\x00\x12:\n\x18no_output_based_batching\x18\t \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x12$\n\x1c\x64isable_writing_passed_reads\x18\x04 \x01(\x08\x12$\n\x1c\x64isable_writing_failed_reads\x18\x05 \x01(\x08\x12+\n#disable_writing_force_skipped_reads\x18\x06 \x01(\x08\x12\x31\n\x0e\x62\x61tch_duration\x18\x08 \x01(\x0b\x32\x19.google.protobuf.DurationB\x0c\n\nbatch_info\x1a\x94\x01\n\x1eSequencingSummaryConfiguration\x12\\\n\x06\x65nable\x18\x01 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12\x14\n\x0c\x66ile_pattern\x18\x02 \x01(\t\x1a\xd7\x05\n\x11\x42ulkConfiguration\x12\x19\n\x11\x63ompression_level\x18\x02 \x01(\x05\x12\x61\n\x10\x63ompression_type\x18\r \x01(\x0e\x32G.minknow_api.analysis_configuration.WriterConfiguration.CompressionType\x12\x14\n\x0c\x66ile_pattern\x18\x0e \x01(\t\x12Y\n\x03raw\x18\x03 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12\\\n\x06\x65vents\x18\x04 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12[\n\x05reads\x18\x05 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12_\n\tmultiplex\x18\x06 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12\x64\n\x0e\x63hannel_states\x18\x07 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12\x17\n\x0f\x64\x65vice_metadata\x18\x0b \x01(\x08\x12\x17\n\x0f\x64\x65vice_commands\x18\x0c \x01(\x08\x12\x1f\n\x17\x64ynamic_analysis_config\x18\x0f \x01(\x08\x1a\x99\x03\n\x13ReportConfiguration\x12\x1f\n\x17pdf_report_file_pattern\x18\x01 \x01(\t\x12 \n\x18json_report_file_pattern\x18\x02 \x01(\t\x12 \n\x18html_report_file_pattern\x18\t \x01(\t\x12$\n\x1cmarkdown_report_file_pattern\x18\x08 \x01(\t\x12%\n\x1d\x64uty_time_report_file_pattern\x18\x03 \x01(\t\x12&\n\x1ethroughput_report_file_pattern\x18\x04 \x01(\t\x12)\n!final_summary_report_file_pattern\x18\x05 \x01(\t\x12-\n%barcode_alignment_report_file_pattern\x18\x06 \x01(\t\x12(\n sample_sheet_report_file_pattern\x18\n \x01(\t\x12$\n\x1c\x63ustom_report_suffix_pattern\x18\x07 \x01(\t\"R\n\x0f\x43ompressionType\x12\x16\n\x12\x44\x65\x66\x61ultCompression\x10\x00\x12\x13\n\x0fZlibCompression\x10\x01\x12\x12\n\x0eVbzCompression\x10\x02\" \n\x1eSetWriterConfigurationResponse\"/\n\x1dGetWriterConfigurationRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"\x1f\n\x1dGetReadClassificationsRequest\"\xd7\x01\n\x1eGetReadClassificationsResponse\x12y\n\x14read_classifications\x18\x01 \x03(\x0b\x32[.minknow_api.analysis_configuration.GetReadClassificationsResponse.ReadClassificationsEntry\x1a:\n\x18ReadClassificationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xfc\x02\n\x1c\x44ynamicAnalysisConfiguration\x12o\n\x13read_scale_tracking\x18\x01 \x01(\x0b\x32R.minknow_api.analysis_configuration.DynamicAnalysisConfiguration.ReadScaleTracking\x1a\xea\x01\n\x11ReadScaleTracking\x12 \n\x18\x63onductance_scan_voltage\x18\x01 \x01(\x02\x12\x82\x01\n\x13\x63hannel_conductance\x18\x02 \x03(\x0b\x32\x65.minknow_api.analysis_configuration.DynamicAnalysisConfiguration.ReadScaleTracking.ChannelConductance\x1a.\n\x12\x43hannelConductance\x12\x18\n\x10well_conductance\x18\x01 \x03(\x02\"(\n&GetDynamicAnalysisConfigurationRequest\")\n\'SetDynamicAnalysisConfigurationResponse2\xac\x15\n\x1c\x41nalysisConfigurationService\x12\xa1\x01\n\x1aget_analysis_configuration\x12\x43.minknow_api.analysis_configuration.GetAnalysisConfigurationRequest\x1a\x39.minknow_api.analysis_configuration.AnalysisConfiguration\"\x03\x90\x02\x01\x12\xa2\x01\n\x1aset_analysis_configuration\x12\x39.minknow_api.analysis_configuration.AnalysisConfiguration\x1a\x44.minknow_api.analysis_configuration.SetAnalysisConfigurationResponse\"\x03\x90\x02\x02\x12\xb2\x01\n\x1creset_analysis_configuration\x12\x45.minknow_api.analysis_configuration.ResetAnalysisConfigurationRequest\x1a\x46.minknow_api.analysis_configuration.ResetAnalysisConfigurationResponse\"\x03\x90\x02\x02\x12\xaa\x01\n\x1aset_analysis_enabled_state\x12\x42.minknow_api.analysis_configuration.SetAnalysisEnabledStateRequest\x1a\x43.minknow_api.analysis_configuration.SetAnalysisEnabledStateResponse\"\x03\x90\x02\x02\x12\xa1\x01\n\x17get_channel_states_desc\x12?.minknow_api.analysis_configuration.GetChannelStatesDescRequest\x1a@.minknow_api.analysis_configuration.GetChannelStatesDescResponse\"\x03\x90\x02\x01\x12\x81\x01\n\x0bget_summary\x12\x35.minknow_api.analysis_configuration.GetSummaryRequest\x1a\x36.minknow_api.analysis_configuration.GetSummaryResponse\"\x03\x90\x02\x01\x12\xb2\x01\n\x1cset_basecaller_configuration\x12\x45.minknow_api.analysis_configuration.SetBasecallerConfigurationRequest\x1a\x46.minknow_api.analysis_configuration.SetBasecallerConfigurationResponse\"\x03\x90\x02\x02\x12\xb6\x01\n preload_basecaller_configuration\x12\x45.minknow_api.analysis_configuration.SetBasecallerConfigurationRequest\x1a\x46.minknow_api.analysis_configuration.SetBasecallerConfigurationResponse\"\x03\x90\x02\x02\x12\xa7\x01\n\x1cget_basecaller_configuration\x12\x45.minknow_api.analysis_configuration.GetBasecallerConfigurationRequest\x1a;.minknow_api.analysis_configuration.BasecallerConfiguration\"\x03\x90\x02\x01\x12\xa2\x01\n\x1bget_pore_type_configuration\x12\x43.minknow_api.analysis_configuration.GetPoreTypeConfigurationRequest\x1a\x39.minknow_api.analysis_configuration.PoreTypeConfiguration\"\x03\x90\x02\x01\x12\xa3\x01\n\x1bset_pore_type_configuration\x12\x39.minknow_api.analysis_configuration.PoreTypeConfiguration\x1a\x44.minknow_api.analysis_configuration.SetPoreTypeConfigurationResponse\"\x03\x90\x02\x02\x12\x9c\x01\n\x18set_writer_configuration\x12\x37.minknow_api.analysis_configuration.WriterConfiguration\x1a\x42.minknow_api.analysis_configuration.SetWriterConfigurationResponse\"\x03\x90\x02\x02\x12\x9b\x01\n\x18get_writer_configuration\x12\x41.minknow_api.analysis_configuration.GetWriterConfigurationRequest\x1a\x37.minknow_api.analysis_configuration.WriterConfiguration\"\x03\x90\x02\x01\x12\xa6\x01\n\x18get_read_classifications\x12\x41.minknow_api.analysis_configuration.GetReadClassificationsRequest\x1a\x42.minknow_api.analysis_configuration.GetReadClassificationsResponse\"\x03\x90\x02\x01\x12\xb7\x01\n\"get_dynamic_analysis_configuration\x12J.minknow_api.analysis_configuration.GetDynamicAnalysisConfigurationRequest\x1a@.minknow_api.analysis_configuration.DynamicAnalysisConfiguration\"\x03\x90\x02\x01\x12\xb5\x01\n\"set_dynamic_analysis_configuration\x12@.minknow_api.analysis_configuration.DynamicAnalysisConfiguration\x1aK.minknow_api.analysis_configuration.SetDynamicAnalysisConfigurationResponse\"\x00\x42&\n\x1c\x63om.nanoporetech.minknow_api\xa2\x02\x05MKAPIb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(minknow_api/analysis_configuration.proto\x12\"minknow_api.analysis_configuration\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x1dminknow_api/rpc_options.proto\"\xc6\x02\n\x0e\x45ventDetection\x12N\n\x04type\x18\x13 \x01(\x0e\x32@.minknow_api.analysis_configuration.EventDetection.DetectionType\x12\x13\n\x0bwindow_size\x18\x03 \x01(\r\x12\x11\n\tthreshold\x18\x05 \x01(\x01\x12\x13\n\x0bpeak_height\x18\t \x01(\x01\x12:\n\x14\x65vents_to_base_ratio\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x1c\n\x14\x62reak_on_mux_changes\x18\x11 \x01(\x08\x12!\n\x19max_mux_change_back_shift\x18\x12 \x01(\r\"*\n\rDetectionType\x12\x0e\n\nMULTITTEST\x10\x00\x12\t\n\x05\x44MEAN\x10\x01\"\xf0\x04\n\x13ReadDetectionParams\x12W\n\x04mode\x18\x01 \x01(\x0e\x32I.minknow_api.analysis_configuration.ReadDetectionParams.ReadDetectionMode\x12\x1a\n\x12minimum_delta_mean\x18\x02 \x01(\x01\x12\x11\n\tlook_back\x18\x03 \x01(\r\x12>\n\x18\x62reak_reads_after_events\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12?\n\x19\x62reak_reads_after_seconds\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\"\n\x1a\x62reak_reads_on_mux_changes\x18\x06 \x01(\x08\x12\x33\n\ropen_pore_min\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x33\n\ropen_pore_max\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x37\n\x11open_pore_default\x18\t \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12@\n\x1aopen_pore_seconds_required\x18\n \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\"G\n\x11ReadDetectionMode\x12\x08\n\x04none\x10\x00\x12\x0e\n\ntransition\x10\x01\x12\x0c\n\x08lookback\x10\x02\x12\n\n\x06minmax\x10\x03\"\x8e\x01\n\x0bReadFilters\x12\x17\n\x0fread_length_min\x18\x01 \x01(\r\x12\x17\n\x0fread_length_max\x18\x02 \x01(\r\x12\x17\n\x0f\x65vent_count_min\x18\x03 \x01(\r\x12\x17\n\x0f\x65vent_count_max\x18\x04 \x01(\r\x12\x1b\n\x13skip_rejected_reads\x18\x05 \x01(\x08\"\xa6\n\n\x18ReadClassificationParams\x12Z\n\rscheme_module\x18\x01 \x01(\x0e\x32\x43.minknow_api.analysis_configuration.ReadClassificationParams.Scheme\x12\x35\n\x0fmax_sample_size\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12 \n\x18selected_classifications\x18\x03 \x03(\t\x12!\n\x19open_pore_classifications\x18\x06 \x03(\t\x12;\n\x15open_pore_ewma_weight\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12J\n$open_pore_ignore_after_reset_seconds\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x1f\n\x17\x63lassification_strategy\x18\x04 \x01(\t\x12[\n\nparameters\x18\x05 \x01(\x0b\x32G.minknow_api.analysis_configuration.ReadClassificationParams.Parameters\x12P\n*selected_classifications_fraction_required\x18\t \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12N\n(selected_classifications_chunks_required\x18\n \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12\x42\n\x1emerge_selected_classifications\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12V\n0max_read_length_before_selected_decision_seconds\x18\x0c \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12^\n\x0cmetrics_ewma\x18\r \x01(\x0b\x32H.minknow_api.analysis_configuration.ReadClassificationParams.MetricsEwma\x1a.\n\nParameters\x12 \n\x18rules_in_execution_order\x18\x02 \x03(\t\x1a\xbc\x02\n\x0bMetricsEwma\x12+\n\x06median\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12.\n\tmedian_sd\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12*\n\x05range\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12\x31\n\x0cmedian_dwell\x18\x04 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12-\n\x08\x64well_sd\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12\x42\n\x1dread_chunks_required_for_ewma\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\"\x1e\n\x06Scheme\x12\x08\n\x04none\x10\x00\x12\n\n\x06parsed\x10\x01\"\xf2\x07\n\rChannelStates\x12\x46\n\x05group\x18\x02 \x01(\x0b\x32\x37.minknow_api.analysis_configuration.ChannelStates.Group\x12\x13\n\x0b\x64\x65scription\x18\x05 \x01(\t\x12\x46\n\x05logic\x18\x03 \x01(\x0b\x32\x37.minknow_api.analysis_configuration.ChannelStates.Logic\x12\x46\n\x05style\x18\x04 \x01(\x0b\x32\x37.minknow_api.analysis_configuration.ChannelStates.Style\x1a\xaa\x04\n\x05Logic\x12\x10\n\x08\x63riteria\x18\x01 \x01(\t\x12\x0c\n\x04rank\x18\x03 \x01(\x05\x12\x0f\n\x07pattern\x18\x04 \x01(\t\x12\x16\n\x0e\x63lassification\x18\x05 \x01(\t\x12N\n\x06ranges\x18\x06 \x01(\x0b\x32>.minknow_api.analysis_configuration.ChannelStates.Logic.Ranges\x12T\n\tbehaviour\x18\x07 \x01(\x0b\x32\x41.minknow_api.analysis_configuration.ChannelStates.Logic.Behaviour\x1a\xa4\x01\n\tBehaviour\x12\x1b\n\x13reset_on_mux_change\x18\x01 \x01(\x05\x12\x1c\n\x14reset_on_well_change\x18\x02 \x01(\x05\x12\r\n\x05latch\x18\x03 \x01(\x05\x12%\n\x1dreset_on_effective_mux_change\x18\x04 \x01(\x05\x12&\n\x1ereset_on_effective_well_change\x18\x05 \x01(\x05\x1a\x8a\x01\n\x06Ranges\x12S\n\x05range\x18\x01 \x01(\x0b\x32\x44.minknow_api.analysis_configuration.ChannelStates.Logic.Ranges.Range\x1a+\n\x05Range\x12\x10\n\x08lower_pa\x18\x01 \x01(\x05\x12\x10\n\x08upper_pa\x18\x02 \x01(\x05\x1aS\n\x05Style\x12+\n\x05order\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12\r\n\x05label\x18\x02 \x01(\t\x12\x0e\n\x06\x63olour\x18\x03 \x01(\t\x1ar\n\x05Group\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x46\n\x05style\x18\x02 \x01(\x0b\x32\x37.minknow_api.analysis_configuration.ChannelStates.Style\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\"1\n\x1fGetAnalysisConfigurationRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"\x91\x03\n\x11ReadScalingParams\x12\x1a\n\x12quantile_locations\x18\x03 \x03(\x02\x12\x1e\n\x16quantile_weights_shift\x18\x01 \x03(\x02\x12\x1e\n\x16quantile_weights_scale\x18\x02 \x03(\x02\x12\x16\n\x0etracking_alpha\x18\x04 \x01(\x02\x12$\n\x1c\x61lpha_number_estimates_decay\x18\x05 \x01(\x02\x12\x18\n\x10quantile_maxdiff\x18\n \x01(\x02\x12\x1c\n\x14trust_limit_fraction\x18\x06 \x01(\x02\x12\x16\n\x0e\x64iff_threshold\x18\x07 \x01(\x02\x12\x1a\n\x12\x65mission_threshold\x18\x08 \x01(\x02\x12\x17\n\x0f\x64\x61\x63s_breakpoint\x18\t \x01(\x02\x12 \n\x18\x63onductance_factor_scale\x18\x0b \x01(\x02\x12 \n\x18\x63onductance_factor_shift\x18\x0c \x01(\x02\x12\x19\n\x11q90_q10_to_normal\x18\r \x01(\x02\"\xac\x04\n\x15\x41nalysisConfiguration\x12K\n\x0f\x65vent_detection\x18\x01 \x01(\x0b\x32\x32.minknow_api.analysis_configuration.EventDetection\x12O\n\x0eread_detection\x18\x02 \x01(\x0b\x32\x37.minknow_api.analysis_configuration.ReadDetectionParams\x12Y\n\x13read_classification\x18\x04 \x01(\x0b\x32<.minknow_api.analysis_configuration.ReadClassificationParams\x12\x64\n\x0e\x63hannel_states\x18\x07 \x03(\x0b\x32L.minknow_api.analysis_configuration.AnalysisConfiguration.ChannelStatesEntry\x12K\n\x0cread_scaling\x18\x08 \x01(\x0b\x32\x35.minknow_api.analysis_configuration.ReadScalingParams\x1ag\n\x12\x43hannelStatesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12@\n\x05value\x18\x02 \x01(\x0b\x32\x31.minknow_api.analysis_configuration.ChannelStates:\x02\x38\x01\"\"\n SetAnalysisConfigurationResponse\"#\n!ResetAnalysisConfigurationRequest\"$\n\"ResetAnalysisConfigurationResponse\"6\n\x1eSetAnalysisEnabledStateRequest\x12\x14\n\x06\x65nable\x18\x01 \x01(\x08\x42\x04\x88\xb5\x18\x01\"!\n\x1fSetAnalysisEnabledStateResponse\"\x1d\n\x1bGetChannelStatesDescRequest\"\x99\x04\n\x1cGetChannelStatesDescResponse\x12V\n\x06groups\x18\x01 \x03(\x0b\x32\x46.minknow_api.analysis_configuration.GetChannelStatesDescResponse.Group\x1a;\n\x05Style\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0e\n\x06\x63olour\x18\x03 \x01(\t\x1a\x95\x01\n\x0c\x43hannelState\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12U\n\x05style\x18\x03 \x01(\x0b\x32\x46.minknow_api.analysis_configuration.GetChannelStatesDescResponse.Style\x12\x14\n\x0cglobal_order\x18\x04 \x01(\r\x1a\xcb\x01\n\x05Group\x12\x0c\n\x04name\x18\x01 \x01(\t\x12U\n\x05style\x18\x02 \x01(\x0b\x32\x46.minknow_api.analysis_configuration.GetChannelStatesDescResponse.Style\x12]\n\x06states\x18\x03 \x03(\x0b\x32M.minknow_api.analysis_configuration.GetChannelStatesDescResponse.ChannelState\"\x13\n\x11GetSummaryRequest\"K\n\x12GetSummaryResponse\x12\x18\n\x10\x61nalysis_enabled\x18\x01 \x01(\x08\x12\x1b\n\x13\x62\x61secalling_enabled\x18\x02 \x01(\x08\"\x84\x02\n\x16\x42\x61rcodingConfiguration\x12\x16\n\x0e\x62\x61rcoding_kits\x18\x01 \x03(\t\x12\x15\n\rtrim_barcodes\x18\x02 \x01(\x08\x12\"\n\x1arequire_barcodes_both_ends\x18\x03 \x01(\x08\x12#\n\x1bignore_unspecified_barcodes\x18\t \x01(\x08J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tR\x1a\x64\x65tect_mid_strand_barcodesR\tmin_scoreR\x0emin_score_rearR\rmin_score_midR\x0emin_score_mask\"\xae\x01\n\x16\x41lignmentConfiguration\x12\x17\n\x0freference_files\x18\x01 \x03(\t\x12\x10\n\x08\x62\x65\x64_file\x18\x02 \x01(\t\x12\x35\n\x10minimum_coverage\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12\x32\n*aggregate_statistics_for_multiple_bed_hits\x18\x04 \x01(\x08\"\xcc\x01\n\x11LampConfiguration\x12\x10\n\x08lamp_kit\x18\x01 \x01(\t\x12\x37\n\x12min_score_barcodes\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12\x34\n\x0fmin_score_masks\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12\x36\n\x11min_score_targets\x18\x04 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\"\xd3\x08\n\x17\x42\x61secallerConfiguration\x12\x0e\n\x06\x65nable\x18\x02 \x01(\x08\x12\x17\n\x0f\x63onfig_filename\x18\x01 \x01(\t\x12\x14\n\x0c\x61lign_filter\x18\n \x01(\x08\x12\x61\n\x0eread_filtering\x18\x03 \x01(\x0b\x32I.minknow_api.analysis_configuration.BasecallerConfiguration.ReadFiltering\x12[\n\x17\x62\x61rcoding_configuration\x18\x04 \x01(\x0b\x32:.minknow_api.analysis_configuration.BarcodingConfiguration\x12\x65\n\x10target_filtering\x18\x05 \x01(\x0b\x32K.minknow_api.analysis_configuration.BasecallerConfiguration.TargetFiltering\x12[\n\x17\x61lignment_configuration\x18\x06 \x01(\x0b\x32:.minknow_api.analysis_configuration.AlignmentConfiguration\x12Q\n\x12lamp_configuration\x18\x07 \x01(\x0b\x32\x35.minknow_api.analysis_configuration.LampConfiguration\x12\x1d\n\x15\x65nable_read_splitting\x18\x08 \x01(\x08\x12=\n\x18min_score_read_splitting\x18\t \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x1a\x9b\x02\n\rReadFiltering\x12\x30\n\nmin_qscore\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12/\n\tmin_bases\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12/\n\tmax_bases\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12\x37\n\x11min_duplex_qscore\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.DoubleValueJ\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x06\x10\x07R\x0bmin_samplesR\x0bmax_samplesR\x11max_failed_chunks\x1a\xa5\x01\n\x0fTargetFiltering\x12\x30\n\nmin_qscore\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12/\n\tmin_bases\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12/\n\tmax_bases\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\"w\n!SetBasecallerConfigurationRequest\x12R\n\x07\x63onfigs\x18\x01 \x01(\x0b\x32;.minknow_api.analysis_configuration.BasecallerConfigurationB\x04\x90\xb5\x18\x01\"$\n\"SetBasecallerConfigurationResponse\"3\n!GetBasecallerConfigurationRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"!\n\x1fGetPoreTypeConfigurationRequest\"\xab\x05\n\x15PoreTypeConfiguration\x12\x1a\n\x10global_pore_type\x18\x01 \x01(\tH\x00\x12~\n\x17\x63hannel_well_pore_types\x18\x02 \x01(\x0b\x32[.minknow_api.analysis_configuration.PoreTypeConfiguration.ChannelWellPoreTypeConfigurationsH\x00\x1a,\n\x0b\x43hannelWell\x12\x0f\n\x07\x63hannel\x18\x01 \x01(\r\x12\x0c\n\x04well\x18\x02 \x01(\r\x1a\xb3\x03\n!ChannelWellPoreTypeConfigurations\x12~\n\npore_types\x18\x01 \x03(\x0b\x32j.minknow_api.analysis_configuration.PoreTypeConfiguration.ChannelWellPoreTypeConfigurations.PoreTypesEntry\x1an\n\x0f\x43hannelWellList\x12[\n\x0c\x63hannel_well\x18\x01 \x03(\x0b\x32\x45.minknow_api.analysis_configuration.PoreTypeConfiguration.ChannelWell\x1a\x9d\x01\n\x0ePoreTypesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12z\n\x05value\x18\x02 \x01(\x0b\x32k.minknow_api.analysis_configuration.PoreTypeConfiguration.ChannelWellPoreTypeConfigurations.ChannelWellList:\x02\x38\x01\x42\x12\n\x10pore_type_config\"\"\n SetPoreTypeConfigurationResponse\"\xcc\'\n\x13WriterConfiguration\x12\x62\n\nread_fast5\x18\x02 \x01(\x0b\x32N.minknow_api.analysis_configuration.WriterConfiguration.ReadFast5Configuration\x12\x62\n\nread_fastq\x18\x03 \x01(\x0b\x32N.minknow_api.analysis_configuration.WriterConfiguration.ReadFastqConfiguration\x12^\n\x08read_bam\x18\x08 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ReadBamConfiguration\x12`\n\tread_pod5\x18\n \x01(\x0b\x32M.minknow_api.analysis_configuration.WriterConfiguration.ReadPod5Configuration\x12r\n\x12sequencing_summary\x18\x05 \x01(\x0b\x32V.minknow_api.analysis_configuration.WriterConfiguration.SequencingSummaryConfiguration\x12W\n\x04\x62ulk\x18\x06 \x01(\x0b\x32I.minknow_api.analysis_configuration.WriterConfiguration.BulkConfiguration\x12[\n\x06report\x18\x07 \x01(\x0b\x32K.minknow_api.analysis_configuration.WriterConfiguration.ReportConfiguration\x12\x45\n\x0cread_filters\x18\t \x01(\x0b\x32/.minknow_api.analysis_configuration.ReadFilters\x1a\xff\x03\n\x14\x43hannelConfiguration\x12\x16\n\x0c\x61ll_channels\x18\x01 \x01(\x08H\x00\x12u\n\x11specific_channels\x18\x02 \x01(\x0b\x32X.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration.ChannelListH\x00\x12t\n\x0e\x63hannel_ranges\x18\x03 \x01(\x0b\x32Z.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration.ChannelRangesH\x00\x1a\x1f\n\x0b\x43hannelList\x12\x10\n\x08\x63hannels\x18\x01 \x03(\x05\x1a\xb4\x01\n\rChannelRanges\x12w\n\x06ranges\x18\x01 \x03(\x0b\x32g.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration.ChannelRanges.ChannelRange\x1a*\n\x0c\x43hannelRange\x12\r\n\x05start\x18\x01 \x01(\x05\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x05\x42\n\n\x08\x63hannels\x1a\xda\x07\n\x16ReadFast5Configuration\x12\x19\n\x11\x63ompression_level\x18\x01 \x01(\x05\x12\x61\n\x10\x63ompression_type\x18\x0e \x01(\x0e\x32G.minknow_api.analysis_configuration.WriterConfiguration.CompressionType\x12Y\n\x03raw\x18\x02 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12[\n\x05\x66\x61stq\x18\x03 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12\x61\n\x0btrace_table\x18\x0b \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12`\n\nmove_table\x18\x0c \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12i\n\x13modifications_table\x18\r \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12$\n\x1c\x64isable_writing_passed_reads\x18\x05 \x01(\x08\x12$\n\x1c\x64isable_writing_failed_reads\x18\x06 \x01(\x08\x12+\n#disable_writing_force_skipped_reads\x18\x07 \x01(\x08\x12\x14\n\x0c\x66ile_pattern\x18\x08 \x01(\t\x12\x1c\n\x14\x66\x61stq_header_pattern\x18\t \x01(\t\x12\x15\n\x0b\x62\x61tch_count\x18\n \x01(\rH\x00\x12\x19\n\x0f\x62\x61ses_per_batch\x18\x0f \x01(\x04H\x00\x12:\n\x18no_output_based_batching\x18\x11 \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x12\x31\n\x0e\x62\x61tch_duration\x18\x10 \x01(\x0b\x32\x19.google.protobuf.DurationB\x0c\n\nbatch_info\x1a\xe1\x03\n\x16ReadFastqConfiguration\x12\\\n\x06\x65nable\x18\x01 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12\x14\n\x0c\x66ile_pattern\x18\x02 \x01(\t\x12\x16\n\x0eheader_pattern\x18\x03 \x01(\t\x12\x15\n\x0b\x62\x61tch_count\x18\x04 \x01(\rH\x00\x12\x19\n\x0f\x62\x61ses_per_batch\x18\x06 \x01(\x04H\x00\x12:\n\x18no_output_based_batching\x18\x0b \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x12\x13\n\x0b\x63ompression\x18\x05 \x01(\x08\x12$\n\x1c\x64isable_writing_passed_reads\x18\x07 \x01(\x08\x12$\n\x1c\x64isable_writing_failed_reads\x18\x08 \x01(\x08\x12+\n#disable_writing_force_skipped_reads\x18\t \x01(\x08\x12\x31\n\x0e\x62\x61tch_duration\x18\n \x01(\x0b\x32\x19.google.protobuf.DurationB\x0c\n\nbatch_info\x1a\xdf\x03\n\x14ReadBamConfiguration\x12\\\n\x06\x65nable\x18\x01 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12\x14\n\x0c\x66ile_pattern\x18\x02 \x01(\t\x12\x15\n\x0b\x62\x61tch_count\x18\x03 \x01(\rH\x00\x12\x19\n\x0f\x62\x61ses_per_batch\x18\x05 \x01(\x04H\x00\x12:\n\x18no_output_based_batching\x18\n \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x12+\n#disable_writing_multiple_alignments\x18\x04 \x01(\x08\x12$\n\x1c\x64isable_writing_passed_reads\x18\x06 \x01(\x08\x12$\n\x1c\x64isable_writing_failed_reads\x18\x07 \x01(\x08\x12+\n#disable_writing_force_skipped_reads\x18\x08 \x01(\x08\x12\x31\n\x0e\x62\x61tch_duration\x18\t \x01(\x0b\x32\x19.google.protobuf.DurationB\x0c\n\nbatch_info\x1a\xb3\x03\n\x15ReadPod5Configuration\x12\\\n\x06\x65nable\x18\x01 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12\x14\n\x0c\x66ile_pattern\x18\x02 \x01(\t\x12\x15\n\x0b\x62\x61tch_count\x18\x03 \x01(\rH\x00\x12\x19\n\x0f\x62\x61ses_per_batch\x18\x07 \x01(\x04H\x00\x12:\n\x18no_output_based_batching\x18\t \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x12$\n\x1c\x64isable_writing_passed_reads\x18\x04 \x01(\x08\x12$\n\x1c\x64isable_writing_failed_reads\x18\x05 \x01(\x08\x12+\n#disable_writing_force_skipped_reads\x18\x06 \x01(\x08\x12\x31\n\x0e\x62\x61tch_duration\x18\x08 \x01(\x0b\x32\x19.google.protobuf.DurationB\x0c\n\nbatch_info\x1a\x94\x01\n\x1eSequencingSummaryConfiguration\x12\\\n\x06\x65nable\x18\x01 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12\x14\n\x0c\x66ile_pattern\x18\x02 \x01(\t\x1a\xd7\x05\n\x11\x42ulkConfiguration\x12\x19\n\x11\x63ompression_level\x18\x02 \x01(\x05\x12\x61\n\x10\x63ompression_type\x18\r \x01(\x0e\x32G.minknow_api.analysis_configuration.WriterConfiguration.CompressionType\x12\x14\n\x0c\x66ile_pattern\x18\x0e \x01(\t\x12Y\n\x03raw\x18\x03 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12\\\n\x06\x65vents\x18\x04 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12[\n\x05reads\x18\x05 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12_\n\tmultiplex\x18\x06 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12\x64\n\x0e\x63hannel_states\x18\x07 \x01(\x0b\x32L.minknow_api.analysis_configuration.WriterConfiguration.ChannelConfiguration\x12\x17\n\x0f\x64\x65vice_metadata\x18\x0b \x01(\x08\x12\x17\n\x0f\x64\x65vice_commands\x18\x0c \x01(\x08\x12\x1f\n\x17\x64ynamic_analysis_config\x18\x0f \x01(\x08\x1a\x99\x03\n\x13ReportConfiguration\x12\x1f\n\x17pdf_report_file_pattern\x18\x01 \x01(\t\x12 \n\x18json_report_file_pattern\x18\x02 \x01(\t\x12 \n\x18html_report_file_pattern\x18\t \x01(\t\x12$\n\x1cmarkdown_report_file_pattern\x18\x08 \x01(\t\x12%\n\x1d\x64uty_time_report_file_pattern\x18\x03 \x01(\t\x12&\n\x1ethroughput_report_file_pattern\x18\x04 \x01(\t\x12)\n!final_summary_report_file_pattern\x18\x05 \x01(\t\x12-\n%barcode_alignment_report_file_pattern\x18\x06 \x01(\t\x12(\n sample_sheet_report_file_pattern\x18\n \x01(\t\x12$\n\x1c\x63ustom_report_suffix_pattern\x18\x07 \x01(\t\"R\n\x0f\x43ompressionType\x12\x16\n\x12\x44\x65\x66\x61ultCompression\x10\x00\x12\x13\n\x0fZlibCompression\x10\x01\x12\x12\n\x0eVbzCompression\x10\x02\" \n\x1eSetWriterConfigurationResponse\"/\n\x1dGetWriterConfigurationRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"\x1f\n\x1dGetReadClassificationsRequest\"\xd7\x01\n\x1eGetReadClassificationsResponse\x12y\n\x14read_classifications\x18\x01 \x03(\x0b\x32[.minknow_api.analysis_configuration.GetReadClassificationsResponse.ReadClassificationsEntry\x1a:\n\x18ReadClassificationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xfc\x02\n\x1c\x44ynamicAnalysisConfiguration\x12o\n\x13read_scale_tracking\x18\x01 \x01(\x0b\x32R.minknow_api.analysis_configuration.DynamicAnalysisConfiguration.ReadScaleTracking\x1a\xea\x01\n\x11ReadScaleTracking\x12 \n\x18\x63onductance_scan_voltage\x18\x01 \x01(\x02\x12\x82\x01\n\x13\x63hannel_conductance\x18\x02 \x03(\x0b\x32\x65.minknow_api.analysis_configuration.DynamicAnalysisConfiguration.ReadScaleTracking.ChannelConductance\x1a.\n\x12\x43hannelConductance\x12\x18\n\x10well_conductance\x18\x01 \x03(\x02\"(\n&GetDynamicAnalysisConfigurationRequest\")\n\'SetDynamicAnalysisConfigurationResponse2\xac\x15\n\x1c\x41nalysisConfigurationService\x12\xa1\x01\n\x1aget_analysis_configuration\x12\x43.minknow_api.analysis_configuration.GetAnalysisConfigurationRequest\x1a\x39.minknow_api.analysis_configuration.AnalysisConfiguration\"\x03\x90\x02\x01\x12\xa2\x01\n\x1aset_analysis_configuration\x12\x39.minknow_api.analysis_configuration.AnalysisConfiguration\x1a\x44.minknow_api.analysis_configuration.SetAnalysisConfigurationResponse\"\x03\x90\x02\x02\x12\xb2\x01\n\x1creset_analysis_configuration\x12\x45.minknow_api.analysis_configuration.ResetAnalysisConfigurationRequest\x1a\x46.minknow_api.analysis_configuration.ResetAnalysisConfigurationResponse\"\x03\x90\x02\x02\x12\xaa\x01\n\x1aset_analysis_enabled_state\x12\x42.minknow_api.analysis_configuration.SetAnalysisEnabledStateRequest\x1a\x43.minknow_api.analysis_configuration.SetAnalysisEnabledStateResponse\"\x03\x90\x02\x02\x12\xa1\x01\n\x17get_channel_states_desc\x12?.minknow_api.analysis_configuration.GetChannelStatesDescRequest\x1a@.minknow_api.analysis_configuration.GetChannelStatesDescResponse\"\x03\x90\x02\x01\x12\x81\x01\n\x0bget_summary\x12\x35.minknow_api.analysis_configuration.GetSummaryRequest\x1a\x36.minknow_api.analysis_configuration.GetSummaryResponse\"\x03\x90\x02\x01\x12\xb2\x01\n\x1cset_basecaller_configuration\x12\x45.minknow_api.analysis_configuration.SetBasecallerConfigurationRequest\x1a\x46.minknow_api.analysis_configuration.SetBasecallerConfigurationResponse\"\x03\x90\x02\x02\x12\xb6\x01\n preload_basecaller_configuration\x12\x45.minknow_api.analysis_configuration.SetBasecallerConfigurationRequest\x1a\x46.minknow_api.analysis_configuration.SetBasecallerConfigurationResponse\"\x03\x90\x02\x02\x12\xa7\x01\n\x1cget_basecaller_configuration\x12\x45.minknow_api.analysis_configuration.GetBasecallerConfigurationRequest\x1a;.minknow_api.analysis_configuration.BasecallerConfiguration\"\x03\x90\x02\x01\x12\xa2\x01\n\x1bget_pore_type_configuration\x12\x43.minknow_api.analysis_configuration.GetPoreTypeConfigurationRequest\x1a\x39.minknow_api.analysis_configuration.PoreTypeConfiguration\"\x03\x90\x02\x01\x12\xa3\x01\n\x1bset_pore_type_configuration\x12\x39.minknow_api.analysis_configuration.PoreTypeConfiguration\x1a\x44.minknow_api.analysis_configuration.SetPoreTypeConfigurationResponse\"\x03\x90\x02\x02\x12\x9c\x01\n\x18set_writer_configuration\x12\x37.minknow_api.analysis_configuration.WriterConfiguration\x1a\x42.minknow_api.analysis_configuration.SetWriterConfigurationResponse\"\x03\x90\x02\x02\x12\x9b\x01\n\x18get_writer_configuration\x12\x41.minknow_api.analysis_configuration.GetWriterConfigurationRequest\x1a\x37.minknow_api.analysis_configuration.WriterConfiguration\"\x03\x90\x02\x01\x12\xa6\x01\n\x18get_read_classifications\x12\x41.minknow_api.analysis_configuration.GetReadClassificationsRequest\x1a\x42.minknow_api.analysis_configuration.GetReadClassificationsResponse\"\x03\x90\x02\x01\x12\xb7\x01\n\"get_dynamic_analysis_configuration\x12J.minknow_api.analysis_configuration.GetDynamicAnalysisConfigurationRequest\x1a@.minknow_api.analysis_configuration.DynamicAnalysisConfiguration\"\x03\x90\x02\x01\x12\xb5\x01\n\"set_dynamic_analysis_configuration\x12@.minknow_api.analysis_configuration.DynamicAnalysisConfiguration\x1aK.minknow_api.analysis_configuration.SetDynamicAnalysisConfigurationResponse\"\x00\x42&\n\x1c\x63om.nanoporetech.minknow_api\xa2\x02\x05MKAPIb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -77,297 +77,232 @@ _globals['_READFILTERS']._serialized_start=1161 _globals['_READFILTERS']._serialized_end=1303 _globals['_READCLASSIFICATIONPARAMS']._serialized_start=1306 - _globals['_READCLASSIFICATIONPARAMS']._serialized_end=2209 - _globals['_READCLASSIFICATIONPARAMS_PARAMETERS']._serialized_start=2131 - _globals['_READCLASSIFICATIONPARAMS_PARAMETERS']._serialized_end=2177 - _globals['_READCLASSIFICATIONPARAMS_SCHEME']._serialized_start=2179 - _globals['_READCLASSIFICATIONPARAMS_SCHEME']._serialized_end=2209 - _globals['_CHANNELSTATES']._serialized_start=2212 - _globals['_CHANNELSTATES']._serialized_end=3222 - _globals['_CHANNELSTATES_LOGIC']._serialized_start=2467 - _globals['_CHANNELSTATES_LOGIC']._serialized_end=3021 - _globals['_CHANNELSTATES_LOGIC_BEHAVIOUR']._serialized_start=2716 - _globals['_CHANNELSTATES_LOGIC_BEHAVIOUR']._serialized_end=2880 - _globals['_CHANNELSTATES_LOGIC_RANGES']._serialized_start=2883 - _globals['_CHANNELSTATES_LOGIC_RANGES']._serialized_end=3021 - _globals['_CHANNELSTATES_LOGIC_RANGES_RANGE']._serialized_start=2978 - _globals['_CHANNELSTATES_LOGIC_RANGES_RANGE']._serialized_end=3021 - _globals['_CHANNELSTATES_STYLE']._serialized_start=3023 - _globals['_CHANNELSTATES_STYLE']._serialized_end=3106 - _globals['_CHANNELSTATES_GROUP']._serialized_start=3108 - _globals['_CHANNELSTATES_GROUP']._serialized_end=3222 - _globals['_GETANALYSISCONFIGURATIONREQUEST']._serialized_start=3224 - _globals['_GETANALYSISCONFIGURATIONREQUEST']._serialized_end=3257 - _globals['_READSCALINGPARAMS']._serialized_start=3260 - _globals['_READSCALINGPARAMS']._serialized_end=3661 - _globals['_ANALYSISCONFIGURATION']._serialized_start=3664 - _globals['_ANALYSISCONFIGURATION']._serialized_end=4220 - _globals['_ANALYSISCONFIGURATION_CHANNELSTATESENTRY']._serialized_start=4117 - _globals['_ANALYSISCONFIGURATION_CHANNELSTATESENTRY']._serialized_end=4220 - _globals['_SETANALYSISCONFIGURATIONRESPONSE']._serialized_start=4222 - _globals['_SETANALYSISCONFIGURATIONRESPONSE']._serialized_end=4256 - _globals['_RESETANALYSISCONFIGURATIONREQUEST']._serialized_start=4258 - _globals['_RESETANALYSISCONFIGURATIONREQUEST']._serialized_end=4293 - _globals['_RESETANALYSISCONFIGURATIONRESPONSE']._serialized_start=4295 - _globals['_RESETANALYSISCONFIGURATIONRESPONSE']._serialized_end=4331 - _globals['_SETANALYSISENABLEDSTATEREQUEST']._serialized_start=4333 - _globals['_SETANALYSISENABLEDSTATEREQUEST']._serialized_end=4387 - _globals['_SETANALYSISENABLEDSTATERESPONSE']._serialized_start=4389 - _globals['_SETANALYSISENABLEDSTATERESPONSE']._serialized_end=4422 - _globals['_GETCHANNELSTATESDESCREQUEST']._serialized_start=4424 - _globals['_GETCHANNELSTATESDESCREQUEST']._serialized_end=4453 - _globals['_GETCHANNELSTATESDESCRESPONSE']._serialized_start=4456 - _globals['_GETCHANNELSTATESDESCRESPONSE']._serialized_end=4993 - _globals['_GETCHANNELSTATESDESCRESPONSE_STYLE']._serialized_start=4576 - _globals['_GETCHANNELSTATESDESCRESPONSE_STYLE']._serialized_end=4635 - _globals['_GETCHANNELSTATESDESCRESPONSE_CHANNELSTATE']._serialized_start=4638 - _globals['_GETCHANNELSTATESDESCRESPONSE_CHANNELSTATE']._serialized_end=4787 - _globals['_GETCHANNELSTATESDESCRESPONSE_GROUP']._serialized_start=4790 - _globals['_GETCHANNELSTATESDESCRESPONSE_GROUP']._serialized_end=4993 - _globals['_GETSUMMARYREQUEST']._serialized_start=4995 - _globals['_GETSUMMARYREQUEST']._serialized_end=5014 - _globals['_GETSUMMARYRESPONSE']._serialized_start=5016 - _globals['_GETSUMMARYRESPONSE']._serialized_end=5091 - _globals['_BARCODINGCONFIGURATION']._serialized_start=5094 - _globals['_BARCODINGCONFIGURATION']._serialized_end=5354 - _globals['_ALIGNMENTCONFIGURATION']._serialized_start=5357 - _globals['_ALIGNMENTCONFIGURATION']._serialized_end=5531 - _globals['_LAMPCONFIGURATION']._serialized_start=5534 - _globals['_LAMPCONFIGURATION']._serialized_end=5738 - _globals['_BASECALLERCONFIGURATION']._serialized_start=5741 - _globals['_BASECALLERCONFIGURATION']._serialized_end=6944 - _globals['_BASECALLERCONFIGURATION_READFILTERING']._serialized_start=6397 - _globals['_BASECALLERCONFIGURATION_READFILTERING']._serialized_end=6776 - _globals['_BASECALLERCONFIGURATION_TARGETFILTERING']._serialized_start=6779 - _globals['_BASECALLERCONFIGURATION_TARGETFILTERING']._serialized_end=6944 - _globals['_SETBASECALLERCONFIGURATIONREQUEST']._serialized_start=6946 - _globals['_SETBASECALLERCONFIGURATIONREQUEST']._serialized_end=7065 - _globals['_SETBASECALLERCONFIGURATIONRESPONSE']._serialized_start=7067 - _globals['_SETBASECALLERCONFIGURATIONRESPONSE']._serialized_end=7103 - _globals['_GETBASECALLERCONFIGURATIONREQUEST']._serialized_start=7105 - _globals['_GETBASECALLERCONFIGURATIONREQUEST']._serialized_end=7156 - _globals['_GETPORETYPECONFIGURATIONREQUEST']._serialized_start=7158 - _globals['_GETPORETYPECONFIGURATIONREQUEST']._serialized_end=7191 - _globals['_PORETYPECONFIGURATION']._serialized_start=7194 - _globals['_PORETYPECONFIGURATION']._serialized_end=7877 - _globals['_PORETYPECONFIGURATION_CHANNELWELL']._serialized_start=7375 - _globals['_PORETYPECONFIGURATION_CHANNELWELL']._serialized_end=7419 - _globals['_PORETYPECONFIGURATION_CHANNELWELLPORETYPECONFIGURATIONS']._serialized_start=7422 - _globals['_PORETYPECONFIGURATION_CHANNELWELLPORETYPECONFIGURATIONS']._serialized_end=7857 - _globals['_PORETYPECONFIGURATION_CHANNELWELLPORETYPECONFIGURATIONS_CHANNELWELLLIST']._serialized_start=7587 - _globals['_PORETYPECONFIGURATION_CHANNELWELLPORETYPECONFIGURATIONS_CHANNELWELLLIST']._serialized_end=7697 - _globals['_PORETYPECONFIGURATION_CHANNELWELLPORETYPECONFIGURATIONS_PORETYPESENTRY']._serialized_start=7700 - _globals['_PORETYPECONFIGURATION_CHANNELWELLPORETYPECONFIGURATIONS_PORETYPESENTRY']._serialized_end=7857 - _globals['_SETPORETYPECONFIGURATIONRESPONSE']._serialized_start=7879 - _globals['_SETPORETYPECONFIGURATIONRESPONSE']._serialized_end=7913 - _globals['_WRITERCONFIGURATION']._serialized_start=7916 - _globals['_WRITERCONFIGURATION']._serialized_end=12984 - _globals['_WRITERCONFIGURATION_CHANNELCONFIGURATION']._serialized_start=8703 - _globals['_WRITERCONFIGURATION_CHANNELCONFIGURATION']._serialized_end=9214 - _globals['_WRITERCONFIGURATION_CHANNELCONFIGURATION_CHANNELLIST']._serialized_start=8988 - _globals['_WRITERCONFIGURATION_CHANNELCONFIGURATION_CHANNELLIST']._serialized_end=9019 - _globals['_WRITERCONFIGURATION_CHANNELCONFIGURATION_CHANNELRANGES']._serialized_start=9022 - _globals['_WRITERCONFIGURATION_CHANNELCONFIGURATION_CHANNELRANGES']._serialized_end=9202 - _globals['_WRITERCONFIGURATION_CHANNELCONFIGURATION_CHANNELRANGES_CHANNELRANGE']._serialized_start=9160 - _globals['_WRITERCONFIGURATION_CHANNELCONFIGURATION_CHANNELRANGES_CHANNELRANGE']._serialized_end=9202 - _globals['_WRITERCONFIGURATION_READFAST5CONFIGURATION']._serialized_start=9217 - _globals['_WRITERCONFIGURATION_READFAST5CONFIGURATION']._serialized_end=10203 - _globals['_WRITERCONFIGURATION_READFASTQCONFIGURATION']._serialized_start=10206 - _globals['_WRITERCONFIGURATION_READFASTQCONFIGURATION']._serialized_end=10687 - _globals['_WRITERCONFIGURATION_READBAMCONFIGURATION']._serialized_start=10690 - _globals['_WRITERCONFIGURATION_READBAMCONFIGURATION']._serialized_end=11169 - _globals['_WRITERCONFIGURATION_READPOD5CONFIGURATION']._serialized_start=11172 - _globals['_WRITERCONFIGURATION_READPOD5CONFIGURATION']._serialized_end=11607 - _globals['_WRITERCONFIGURATION_SEQUENCINGSUMMARYCONFIGURATION']._serialized_start=11610 - _globals['_WRITERCONFIGURATION_SEQUENCINGSUMMARYCONFIGURATION']._serialized_end=11758 - _globals['_WRITERCONFIGURATION_BULKCONFIGURATION']._serialized_start=11761 - _globals['_WRITERCONFIGURATION_BULKCONFIGURATION']._serialized_end=12488 - _globals['_WRITERCONFIGURATION_REPORTCONFIGURATION']._serialized_start=12491 - _globals['_WRITERCONFIGURATION_REPORTCONFIGURATION']._serialized_end=12900 - _globals['_WRITERCONFIGURATION_COMPRESSIONTYPE']._serialized_start=12902 - _globals['_WRITERCONFIGURATION_COMPRESSIONTYPE']._serialized_end=12984 - _globals['_SETWRITERCONFIGURATIONRESPONSE']._serialized_start=12986 - _globals['_SETWRITERCONFIGURATIONRESPONSE']._serialized_end=13018 - _globals['_GETWRITERCONFIGURATIONREQUEST']._serialized_start=13020 - _globals['_GETWRITERCONFIGURATIONREQUEST']._serialized_end=13067 - _globals['_GETREADCLASSIFICATIONSREQUEST']._serialized_start=13069 - _globals['_GETREADCLASSIFICATIONSREQUEST']._serialized_end=13100 - _globals['_GETREADCLASSIFICATIONSRESPONSE']._serialized_start=13103 - _globals['_GETREADCLASSIFICATIONSRESPONSE']._serialized_end=13318 - _globals['_GETREADCLASSIFICATIONSRESPONSE_READCLASSIFICATIONSENTRY']._serialized_start=13260 - _globals['_GETREADCLASSIFICATIONSRESPONSE_READCLASSIFICATIONSENTRY']._serialized_end=13318 - _globals['_DYNAMICANALYSISCONFIGURATION']._serialized_start=13321 - _globals['_DYNAMICANALYSISCONFIGURATION']._serialized_end=13701 - _globals['_DYNAMICANALYSISCONFIGURATION_READSCALETRACKING']._serialized_start=13467 - _globals['_DYNAMICANALYSISCONFIGURATION_READSCALETRACKING']._serialized_end=13701 - _globals['_DYNAMICANALYSISCONFIGURATION_READSCALETRACKING_CHANNELCONDUCTANCE']._serialized_start=13655 - _globals['_DYNAMICANALYSISCONFIGURATION_READSCALETRACKING_CHANNELCONDUCTANCE']._serialized_end=13701 - _globals['_GETDYNAMICANALYSISCONFIGURATIONREQUEST']._serialized_start=13703 - _globals['_GETDYNAMICANALYSISCONFIGURATIONREQUEST']._serialized_end=13743 - _globals['_SETDYNAMICANALYSISCONFIGURATIONRESPONSE']._serialized_start=13745 - _globals['_SETDYNAMICANALYSISCONFIGURATIONRESPONSE']._serialized_end=13786 - _globals['_ANALYSISCONFIGURATIONSERVICE']._serialized_start=13789 - _globals['_ANALYSISCONFIGURATIONSERVICE']._serialized_end=16521 -ReadFilters.__doc__ = """Parameters for filtering out reads from being written. The tests are -combined using a logical AND: if any given test fails, the read will -not be written. Only reads that pass all (non-zero) tests will be -written out. Currently, it is only possible to filter on read length. -This can be given in samples or MinKNOW events. + _globals['_READCLASSIFICATIONPARAMS']._serialized_end=2624 + _globals['_READCLASSIFICATIONPARAMS_PARAMETERS']._serialized_start=2227 + _globals['_READCLASSIFICATIONPARAMS_PARAMETERS']._serialized_end=2273 + _globals['_READCLASSIFICATIONPARAMS_METRICSEWMA']._serialized_start=2276 + _globals['_READCLASSIFICATIONPARAMS_METRICSEWMA']._serialized_end=2592 + _globals['_READCLASSIFICATIONPARAMS_SCHEME']._serialized_start=2594 + _globals['_READCLASSIFICATIONPARAMS_SCHEME']._serialized_end=2624 + _globals['_CHANNELSTATES']._serialized_start=2627 + _globals['_CHANNELSTATES']._serialized_end=3637 + _globals['_CHANNELSTATES_LOGIC']._serialized_start=2882 + _globals['_CHANNELSTATES_LOGIC']._serialized_end=3436 + _globals['_CHANNELSTATES_LOGIC_BEHAVIOUR']._serialized_start=3131 + _globals['_CHANNELSTATES_LOGIC_BEHAVIOUR']._serialized_end=3295 + _globals['_CHANNELSTATES_LOGIC_RANGES']._serialized_start=3298 + _globals['_CHANNELSTATES_LOGIC_RANGES']._serialized_end=3436 + _globals['_CHANNELSTATES_LOGIC_RANGES_RANGE']._serialized_start=3393 + _globals['_CHANNELSTATES_LOGIC_RANGES_RANGE']._serialized_end=3436 + _globals['_CHANNELSTATES_STYLE']._serialized_start=3438 + _globals['_CHANNELSTATES_STYLE']._serialized_end=3521 + _globals['_CHANNELSTATES_GROUP']._serialized_start=3523 + _globals['_CHANNELSTATES_GROUP']._serialized_end=3637 + _globals['_GETANALYSISCONFIGURATIONREQUEST']._serialized_start=3639 + _globals['_GETANALYSISCONFIGURATIONREQUEST']._serialized_end=3688 + _globals['_READSCALINGPARAMS']._serialized_start=3691 + _globals['_READSCALINGPARAMS']._serialized_end=4092 + _globals['_ANALYSISCONFIGURATION']._serialized_start=4095 + _globals['_ANALYSISCONFIGURATION']._serialized_end=4651 + _globals['_ANALYSISCONFIGURATION_CHANNELSTATESENTRY']._serialized_start=4548 + _globals['_ANALYSISCONFIGURATION_CHANNELSTATESENTRY']._serialized_end=4651 + _globals['_SETANALYSISCONFIGURATIONRESPONSE']._serialized_start=4653 + _globals['_SETANALYSISCONFIGURATIONRESPONSE']._serialized_end=4687 + _globals['_RESETANALYSISCONFIGURATIONREQUEST']._serialized_start=4689 + _globals['_RESETANALYSISCONFIGURATIONREQUEST']._serialized_end=4724 + _globals['_RESETANALYSISCONFIGURATIONRESPONSE']._serialized_start=4726 + _globals['_RESETANALYSISCONFIGURATIONRESPONSE']._serialized_end=4762 + _globals['_SETANALYSISENABLEDSTATEREQUEST']._serialized_start=4764 + _globals['_SETANALYSISENABLEDSTATEREQUEST']._serialized_end=4818 + _globals['_SETANALYSISENABLEDSTATERESPONSE']._serialized_start=4820 + _globals['_SETANALYSISENABLEDSTATERESPONSE']._serialized_end=4853 + _globals['_GETCHANNELSTATESDESCREQUEST']._serialized_start=4855 + _globals['_GETCHANNELSTATESDESCREQUEST']._serialized_end=4884 + _globals['_GETCHANNELSTATESDESCRESPONSE']._serialized_start=4887 + _globals['_GETCHANNELSTATESDESCRESPONSE']._serialized_end=5424 + _globals['_GETCHANNELSTATESDESCRESPONSE_STYLE']._serialized_start=5007 + _globals['_GETCHANNELSTATESDESCRESPONSE_STYLE']._serialized_end=5066 + _globals['_GETCHANNELSTATESDESCRESPONSE_CHANNELSTATE']._serialized_start=5069 + _globals['_GETCHANNELSTATESDESCRESPONSE_CHANNELSTATE']._serialized_end=5218 + _globals['_GETCHANNELSTATESDESCRESPONSE_GROUP']._serialized_start=5221 + _globals['_GETCHANNELSTATESDESCRESPONSE_GROUP']._serialized_end=5424 + _globals['_GETSUMMARYREQUEST']._serialized_start=5426 + _globals['_GETSUMMARYREQUEST']._serialized_end=5445 + _globals['_GETSUMMARYRESPONSE']._serialized_start=5447 + _globals['_GETSUMMARYRESPONSE']._serialized_end=5522 + _globals['_BARCODINGCONFIGURATION']._serialized_start=5525 + _globals['_BARCODINGCONFIGURATION']._serialized_end=5785 + _globals['_ALIGNMENTCONFIGURATION']._serialized_start=5788 + _globals['_ALIGNMENTCONFIGURATION']._serialized_end=5962 + _globals['_LAMPCONFIGURATION']._serialized_start=5965 + _globals['_LAMPCONFIGURATION']._serialized_end=6169 + _globals['_BASECALLERCONFIGURATION']._serialized_start=6172 + _globals['_BASECALLERCONFIGURATION']._serialized_end=7279 + _globals['_BASECALLERCONFIGURATION_READFILTERING']._serialized_start=6828 + _globals['_BASECALLERCONFIGURATION_READFILTERING']._serialized_end=7111 + _globals['_BASECALLERCONFIGURATION_TARGETFILTERING']._serialized_start=7114 + _globals['_BASECALLERCONFIGURATION_TARGETFILTERING']._serialized_end=7279 + _globals['_SETBASECALLERCONFIGURATIONREQUEST']._serialized_start=7281 + _globals['_SETBASECALLERCONFIGURATIONREQUEST']._serialized_end=7400 + _globals['_SETBASECALLERCONFIGURATIONRESPONSE']._serialized_start=7402 + _globals['_SETBASECALLERCONFIGURATIONRESPONSE']._serialized_end=7438 + _globals['_GETBASECALLERCONFIGURATIONREQUEST']._serialized_start=7440 + _globals['_GETBASECALLERCONFIGURATIONREQUEST']._serialized_end=7491 + _globals['_GETPORETYPECONFIGURATIONREQUEST']._serialized_start=7493 + _globals['_GETPORETYPECONFIGURATIONREQUEST']._serialized_end=7526 + _globals['_PORETYPECONFIGURATION']._serialized_start=7529 + _globals['_PORETYPECONFIGURATION']._serialized_end=8212 + _globals['_PORETYPECONFIGURATION_CHANNELWELL']._serialized_start=7710 + _globals['_PORETYPECONFIGURATION_CHANNELWELL']._serialized_end=7754 + _globals['_PORETYPECONFIGURATION_CHANNELWELLPORETYPECONFIGURATIONS']._serialized_start=7757 + _globals['_PORETYPECONFIGURATION_CHANNELWELLPORETYPECONFIGURATIONS']._serialized_end=8192 + _globals['_PORETYPECONFIGURATION_CHANNELWELLPORETYPECONFIGURATIONS_CHANNELWELLLIST']._serialized_start=7922 + _globals['_PORETYPECONFIGURATION_CHANNELWELLPORETYPECONFIGURATIONS_CHANNELWELLLIST']._serialized_end=8032 + _globals['_PORETYPECONFIGURATION_CHANNELWELLPORETYPECONFIGURATIONS_PORETYPESENTRY']._serialized_start=8035 + _globals['_PORETYPECONFIGURATION_CHANNELWELLPORETYPECONFIGURATIONS_PORETYPESENTRY']._serialized_end=8192 + _globals['_SETPORETYPECONFIGURATIONRESPONSE']._serialized_start=8214 + _globals['_SETPORETYPECONFIGURATIONRESPONSE']._serialized_end=8248 + _globals['_WRITERCONFIGURATION']._serialized_start=8251 + _globals['_WRITERCONFIGURATION']._serialized_end=13319 + _globals['_WRITERCONFIGURATION_CHANNELCONFIGURATION']._serialized_start=9038 + _globals['_WRITERCONFIGURATION_CHANNELCONFIGURATION']._serialized_end=9549 + _globals['_WRITERCONFIGURATION_CHANNELCONFIGURATION_CHANNELLIST']._serialized_start=9323 + _globals['_WRITERCONFIGURATION_CHANNELCONFIGURATION_CHANNELLIST']._serialized_end=9354 + _globals['_WRITERCONFIGURATION_CHANNELCONFIGURATION_CHANNELRANGES']._serialized_start=9357 + _globals['_WRITERCONFIGURATION_CHANNELCONFIGURATION_CHANNELRANGES']._serialized_end=9537 + _globals['_WRITERCONFIGURATION_CHANNELCONFIGURATION_CHANNELRANGES_CHANNELRANGE']._serialized_start=9495 + _globals['_WRITERCONFIGURATION_CHANNELCONFIGURATION_CHANNELRANGES_CHANNELRANGE']._serialized_end=9537 + _globals['_WRITERCONFIGURATION_READFAST5CONFIGURATION']._serialized_start=9552 + _globals['_WRITERCONFIGURATION_READFAST5CONFIGURATION']._serialized_end=10538 + _globals['_WRITERCONFIGURATION_READFASTQCONFIGURATION']._serialized_start=10541 + _globals['_WRITERCONFIGURATION_READFASTQCONFIGURATION']._serialized_end=11022 + _globals['_WRITERCONFIGURATION_READBAMCONFIGURATION']._serialized_start=11025 + _globals['_WRITERCONFIGURATION_READBAMCONFIGURATION']._serialized_end=11504 + _globals['_WRITERCONFIGURATION_READPOD5CONFIGURATION']._serialized_start=11507 + _globals['_WRITERCONFIGURATION_READPOD5CONFIGURATION']._serialized_end=11942 + _globals['_WRITERCONFIGURATION_SEQUENCINGSUMMARYCONFIGURATION']._serialized_start=11945 + _globals['_WRITERCONFIGURATION_SEQUENCINGSUMMARYCONFIGURATION']._serialized_end=12093 + _globals['_WRITERCONFIGURATION_BULKCONFIGURATION']._serialized_start=12096 + _globals['_WRITERCONFIGURATION_BULKCONFIGURATION']._serialized_end=12823 + _globals['_WRITERCONFIGURATION_REPORTCONFIGURATION']._serialized_start=12826 + _globals['_WRITERCONFIGURATION_REPORTCONFIGURATION']._serialized_end=13235 + _globals['_WRITERCONFIGURATION_COMPRESSIONTYPE']._serialized_start=13237 + _globals['_WRITERCONFIGURATION_COMPRESSIONTYPE']._serialized_end=13319 + _globals['_SETWRITERCONFIGURATIONRESPONSE']._serialized_start=13321 + _globals['_SETWRITERCONFIGURATIONRESPONSE']._serialized_end=13353 + _globals['_GETWRITERCONFIGURATIONREQUEST']._serialized_start=13355 + _globals['_GETWRITERCONFIGURATIONREQUEST']._serialized_end=13402 + _globals['_GETREADCLASSIFICATIONSREQUEST']._serialized_start=13404 + _globals['_GETREADCLASSIFICATIONSREQUEST']._serialized_end=13435 + _globals['_GETREADCLASSIFICATIONSRESPONSE']._serialized_start=13438 + _globals['_GETREADCLASSIFICATIONSRESPONSE']._serialized_end=13653 + _globals['_GETREADCLASSIFICATIONSRESPONSE_READCLASSIFICATIONSENTRY']._serialized_start=13595 + _globals['_GETREADCLASSIFICATIONSRESPONSE_READCLASSIFICATIONSENTRY']._serialized_end=13653 + _globals['_DYNAMICANALYSISCONFIGURATION']._serialized_start=13656 + _globals['_DYNAMICANALYSISCONFIGURATION']._serialized_end=14036 + _globals['_DYNAMICANALYSISCONFIGURATION_READSCALETRACKING']._serialized_start=13802 + _globals['_DYNAMICANALYSISCONFIGURATION_READSCALETRACKING']._serialized_end=14036 + _globals['_DYNAMICANALYSISCONFIGURATION_READSCALETRACKING_CHANNELCONDUCTANCE']._serialized_start=13990 + _globals['_DYNAMICANALYSISCONFIGURATION_READSCALETRACKING_CHANNELCONDUCTANCE']._serialized_end=14036 + _globals['_GETDYNAMICANALYSISCONFIGURATIONREQUEST']._serialized_start=14038 + _globals['_GETDYNAMICANALYSISCONFIGURATIONREQUEST']._serialized_end=14078 + _globals['_SETDYNAMICANALYSISCONFIGURATIONRESPONSE']._serialized_start=14080 + _globals['_SETDYNAMICANALYSISCONFIGURATIONRESPONSE']._serialized_end=14121 + _globals['_ANALYSISCONFIGURATIONSERVICE']._serialized_start=14124 + _globals['_ANALYSISCONFIGURATIONSERVICE']._serialized_end=16856 +AlignmentConfiguration.__doc__ = """Since 4.0 Attributes: - read_length_min: - Only write reads that contain at least this many samples. The - default zero value will not exclude any reads. - read_length_max: - Only write reads that contain at most this many samples. If - set to zero (the default), this test is not applied (as though - it had been set to a value longer than any possible read). - event_count_min: - Only write reads that contain at least this many MinKNOW - events. The default zero value will not exclude any reads. - event_count_max: - Only write reads that contain at most this many MinKNOW - events. If set to zero (the default), this test is not - applied (as though it had been set to a value longer than any - possible read). - skip_rejected_reads: - Control whether reads unblocked using from - `DataService::get_live_reads()` should be filtered. When set - to true, reads which are unblocked by `get_live_reads` are - filtered and therefore not basecalled. When set to false, - reads that are unblocked by `get_live_reads` will not be - filtered and therefore will be basecalled. + reference_files: + Provide an index to align reads against once basecalled. Any + acceptable reference format to the basecaller can be passed + here: - fasta reference file - minimap index file + bed_file: + Provide a bed file for use indicating areas of interest in + alignment results. Note: alignment_index must be provided for + this argument to be valid. + minimum_coverage: + Minimum coverage for the basecaller to accept an alignment. + If not specified a default value is used. Note: this option + cannot be used during live basecalling. + aggregate_statistics_for_multiple_bed_hits: + Control how statistics for bed results are aggregated. If set + to false only the bed hit with the highest overlap is used + when computing heatmap/throughput graphs with bed hits. If + set to true each bed hit is considered and bases for all hits + are counted. This may give more honest representation of + individual bed hit results but will skew read count statistics + - as each hit will be counted for every bed hit. Note: this + option has no effect in offline basecalling. """ -WriterConfiguration.ReadFastqConfiguration.__doc__ = """Attributes: - enable: - Control if a fastq file should be generated per channel. - file_pattern: - The pattern used to find a fastq files name. default: fastq{b - asecall_status}/{flow_cell_id}_{run_id}_{batch_number}.fastq - Where each {xxx} section is replaced with an attribute from - the minknow state when the file is written. See file pattern - attributes above. - header_pattern: - The pattern used to find a fastq header. default: {read_id} - runid={run_id} ch={channel_name} start_time={read_start_time} - Where each {xxx} section is replaced with an attribute from - the minknow state when the fastq is generated. - batch_count: - How many reads are placed in each batch (after batch_count - reads {batch_number} is increased in the pattern). - bases_per_batch: - Number of estimated bases within a batch before it rotates to - a new batch - no_output_based_batching: - Do not perform batching based on output (time-based batching - is still performed, if specified) - compression: - Compress fastq files with gzip compression. default: false - disable_writing_passed_reads: - Since 5.8 Prevent reads which have successfully basecalled - being written to fastq. - disable_writing_failed_reads: - Prevent reads which have failed basecalling being written to - fastq. - disable_writing_force_skipped_reads: - disable writing reads which have been force skipped by the - basecaller. - batch_duration: - The batch duration, for time-based batching If time-based - batching is enabled then, in addition to completing batches - when the `batch_count` or `bases_per_batch` target (above) is - reached, batches will also be completed when: - At least one - read has been written to the batch, AND - `batch_duration` has - elapsed since the last batch was completed (or since the start - of the acquisition, for the first batch) If this field is not - set, then the default time-based batching configuration will - be used. If this field is set to zero or a negative value, - then time-based batching will be disabled. Since 5.6 +GetChannelStatesDescResponse.Style.__doc__ = """Attributes: + label: + The human-readable name to display when rendering this channel + state or group. + description: + A sentence describing the meaning of the channel state or + group. This can be used as a tooltip, for example. + colour: + The colour to use when rendering this channel state or group. + This is a six-digit hex string describing an RGB colour (eg: + "ff00ff" for purple). """ -GetSummaryResponse.__doc__ = """Attributes: - analysis_enabled: - Whether any analysis is enabled. If this is false, everything - else will be false as well. - basecalling_enabled: - Whether basecalling is enabled. +ReadClassificationParams.Parameters.__doc__ = """Attributes: + rules_in_execution_order: + An execution rule has the following format: "pore = + (median,gt,185)&(median,lt,260)&(median_sd,lt,40)" "median" + and "median_sd" are apart of a small subset of variable values + describing a read or read chunk, that are exposed to execution + rules. The full list of variable values and their descriptions + are documented here: + https://minknow.git.oxfordnanolabs.local/minknow- + core/analysis/reads.html "gt" and "lt" describe how data can + be compared: gt: greater than lt: less than eq: equal ne: not + equal Constant values like "185" or "260" can also be + specified. These can be real numbers also. Note that + variables dont always have to be on the left and const values + on the right. The following sub rules are also valid: + (200,lt,median_sd) (median_before,gt,median) (5,lt,10) +""" +WriterConfiguration.ChannelConfiguration.__doc__ = """Used to control which channels for a specific data type emit data + +Attributes: + channels: + Control the way channels are enabled for this data type. """ -BasecallerConfiguration.ReadFiltering.__doc__ = """Attributes: +BasecallerConfiguration.ReadFiltering.__doc__ = """ Removed as of 6.1 as this option is no longer supported. + +Attributes: min_duplex_qscore: Since 5.8 """ -AnalysisConfiguration.__doc__ = """Attributes: - read_scaling: - Add read scale tracking to the pipeline. If this message is - unspecified, read scaling is not enabled. +ReadClassificationParams.MetricsEwma.__doc__ = """Attributes: + read_chunks_required_for_ewma: + How many read chunks are required before an ewma is + calculated. If we don't use ewma, a straight mean of all + samples so far is used instead. Default value is 0: Always + use ewma. """ -GetWriterConfigurationRequest.__doc__ = """Attributes: +ChannelStates.Group.__doc__ = """ TODO: group styling and description should not be defined here, as +this allows channel states to declare themselves as being part of the +same group but specify different styling and descriptions.""" +GetAnalysisConfigurationRequest.__doc__ = """Attributes: run_id: The unique identifier assigned to this acquisition run. Since - 6.0 + 6.2 """ -PoreTypeConfiguration.ChannelWellPoreTypeConfigurations.__doc__ = """Attributes: - pore_types: - Map with pore type as key, mapped to the list of wells to set - for. It is undefined what will happen if one call sets the - pore type of a channel and well to two pore types. +DynamicAnalysisConfiguration.ReadScaleTracking.__doc__ = """Attributes: + conductance_scan_voltage: + Set the voltage the most recent conductance scan occurred at. + channel_conductance: + Per channel/well conductance values """ -BasecallerConfiguration.__doc__ = """Since 3.0 - -Attributes: - enable: - Choose if the basecaller is enabled or disabled. If set to - false then no basecalling will take place, and the rest of the - config is ignored. - config_filename: - The basecaller cfg file with all the settings. Filename can - be absolute, or a basename (eg dna_r9.4_450bps.cfg) which the - basecaller should locate (see basecaller application config - entry: "data_path") - align_filter: - Enable or disable pass/fail filtering based on alignment. - When enabled, reads which do not align to any references will - be marked as "failed", and written to the folder specified in - MinKNOW configuration for failed reads. The setting applies - to both regular read filtering and target filtering; if it is - enabled, then a read will not be marked as a target read if it - does not align to a reference. Default setting is false, i.e. - disabled. Since 5.4 - read_filtering: - Control how read filtering is applied to output of basecaller. - These settings determine whether a read is marked as "passed" - or "failed". Reads are written to different folders based on - the result of this filtering. Those folders are specified in - MinKNOW configuration. If no filtering parameters are - provided then reads will not be filtered. - barcoding_configuration: - Control the barcoding configuration. If no barcoding - configuration is supplied, barcoding is disabled. Since 3.5 - target_filtering: - Control how target filtering is applied to output of - basecaller. Reads which pass these filtering criteria will be - marked as "target" reads, and will be written to a separate - folder; this folder is specified in MinKNOW configuration. - Reads which do not pass these criteria will have the regular - read filtering applied to them, as specified by the `read- - filtering` settings above. If no filtering parameters are - provided then reads will not be target-filtered. Since 3.7 - alignment_configuration: - Alignment configuration parameters. If no configuration is - specified alignment is disabled. Since 4.0 - lamp_configuration: - Lamp configuration parameters. If no configuration is - specified lamp is disabled. Since 4.1 DEPRECATED 6.0: Lamp - support has been removed and this option will be ignored. - enable_read_splitting: - Enable read splitting in the basecaller. Since 4.5 Note: - Since 5.9 this option has no effect, the basecaller is - responsible for deciding when read splitting should be - enabled. - min_score_read_splitting: - Override score to use for the basecaller read splitting. If - not specified a default value is used from the basecaller. - Since 4.5 Note: Since 5.9 this option has no effect, the - basecaller is responsible for deciding read splitting score. +GetSummaryResponse.__doc__ = """Attributes: + analysis_enabled: + Whether any analysis is enabled. If this is false, everything + else will be false as well. + basecalling_enabled: + Whether basecalling is enabled. """ ReadClassificationParams.__doc__ = """Attributes: max_sample_size: @@ -398,7 +333,7 @@ Determine how to classify a whole read based on the strategy 'ultimate': Chooses the last (ultimate) read chunk's classification 'penultimate': Chooses the second-to-last - read chunk's clasification 'modal': Chooses the most + read chunk's classification 'modal': Chooses the most common classification out of all read chunks 'threshold': Chooses a classification based on the combination of threshold parameters. If selected, values for the @@ -446,65 +381,35 @@ Limit on how long a read may be in seconds before minknow forces the selected decision and either selects or vetoes the complete read. If unspecified a default value is used. + metrics_ewma: + Configuration for Exponentially weighted moving averages over + read metrics. These values configure how sensitive the + complete read metrics are to per chunk changes in value; + higher values in the config here cause an increase in + sensitivity in the metrics to per chunk changes. The values + provided here are biased based on the length of each chunk, so + short chunks will have less effect on the computed metric than + longer chunks. A value of 1.0 will take as much of the local + chunk value as possible, while values closer to zero will make + the computed metric slower moving. The default weight if + unspecified is 0.1. """ ChannelStates.Logic.Ranges.__doc__ = """Dont really like this way of doing it, but it has to match the old way...""" -EventDetection.__doc__ = """Attributes: - window_size: - The window size that the tstats are calculated from - threshold: - The peak detection must be above this threshold at a minimum - for it to be detected as an event. - peak_height: - When analysing the tstat peaks, if the jump between one value - and another is higher than than 'peak_height', then it will - "arm" the peak detector and move onto the next phase. And - what goes up must come down. Once it has detected a peak going - up, it will also have to go down by 'peak_height' in order for - the peak to be classified as a found event Note: only used - for MULTITTEST detector. - events_to_base_ratio: - Conversion factor used to convert from events to bases. This - is used to estimate bases for various rpc feeds from minknow. - break_on_mux_changes: - Whether to break events on mux changes. This will eliminate - "mux_uncertain" events and reads. Note that this will cause - starting or stopping unblocking to break events as well (even - though the mux does not normally change in this case). Note: - no longer used. - max_mux_change_back_shift: - Control the number of samples MinKNOW will shift mux changes - back by in order to align mux changes with event boundaries. - When break on mux changes is enabled its possible that mux - changes recorded from the device and signal deltas caused by - the config changes will not align exactly (the signal delta - happen prior to the mux change due to the recorded sample - indicating the command is fully applied). Setting this value - to > 0 will allow minknow to record the mux change as active - up to this number of samples _before_ the device recorded the - change as active. Mux changes are never shifted forwards. A - value of 0 will disable shifting of mux changes. Note: no - longer used. -""" -WriterConfiguration.SequencingSummaryConfiguration.__doc__ = """Attributes: +WriterConfiguration.ReadFastqConfiguration.__doc__ = """Attributes: enable: - Should a sequencing summary file be generated + Control if a fastq file should be generated per channel. file_pattern: - The pattern used to find a summary files name. default: - sequencing_summary_{flow_cell_id}_{short_run_id}.txt Where - each {xxx} section is replaced with an attribute from the - minknow state when the file is written. See file pattern - attributes above. -""" -WriterConfiguration.ReadPod5Configuration.__doc__ = """Attributes: - enable: - Control if a POD5 file should be generated per channel. - file_pattern: - The pattern used to find a POD5 files name. default: pod5{bas - ecall_status}/{flow_cell_id}_{run_id}_{batch_number}.pod5 + The pattern used to find a fastq files name. default: fastq{b + asecall_status}/{flow_cell_id}_{run_id}_{batch_number}.fastq Where each {xxx} section is replaced with an attribute from the minknow state when the file is written. See file pattern attributes above. + header_pattern: + The pattern used to find a fastq header. default: {read_id} + runid={run_id} ch={channel_name} start_time={read_start_time} + Where each {xxx} section is replaced with an attribute from + the minknow state when the fastq is generated. batch_count: How many reads are placed in each batch (after batch_count reads {batch_number} is increased in the pattern). @@ -514,12 +419,14 @@ no_output_based_batching: Do not perform batching based on output (time-based batching is still performed, if specified) + compression: + Compress fastq files with gzip compression. default: false disable_writing_passed_reads: - Prevent reads which have successfully basecalled being written - to pod5. + Since 5.8 Prevent reads which have successfully basecalled + being written to fastq. disable_writing_failed_reads: Prevent reads which have failed basecalling being written to - pod5. + fastq. disable_writing_force_skipped_reads: disable writing reads which have been force skipped by the basecaller. @@ -535,6 +442,62 @@ be used. If this field is set to zero or a negative value, then time-based batching will be disabled. Since 5.6 """ +PoreTypeConfiguration.ChannelWellPoreTypeConfigurations.__doc__ = """Attributes: + pore_types: + Map with pore type as key, mapped to the list of wells to set + for. It is undefined what will happen if one call sets the + pore type of a channel and well to two pore types. +""" +EventDetection.__doc__ = """Attributes: + window_size: + The window size that the tstats are calculated from + threshold: + The peak detection must be above this threshold at a minimum + for it to be detected as an event. + peak_height: + When analysing the tstat peaks, if the jump between one value + and another is higher than than 'peak_height', then it will + "arm" the peak detector and move onto the next phase. And + what goes up must come down. Once it has detected a peak going + up, it will also have to go down by 'peak_height' in order for + the peak to be classified as a found event Note: only used + for MULTITTEST detector. + events_to_base_ratio: + Conversion factor used to convert from events to bases. This + is used to estimate bases for various rpc feeds from minknow. + break_on_mux_changes: + Whether to break events on mux changes. This will eliminate + "mux_uncertain" events and reads. Note that this will cause + starting or stopping unblocking to break events as well (even + though the mux does not normally change in this case). Note: + no longer used. + max_mux_change_back_shift: + Control the number of samples MinKNOW will shift mux changes + back by in order to align mux changes with event boundaries. + When break on mux changes is enabled its possible that mux + changes recorded from the device and signal deltas caused by + the config changes will not align exactly (the signal delta + happen prior to the mux change due to the recorded sample + indicating the command is fully applied). Setting this value + to > 0 will allow minknow to record the mux change as active + up to this number of samples _before_ the device recorded the + change as active. Mux changes are never shifted forwards. A + value of 0 will disable shifting of mux changes. Note: no + longer used. +""" +LampConfiguration.__doc__ = """Since 4.1 DEPRECATED 6.0: Lamp support has been removed and all of +these options will be ignored. + +Attributes: + lamp_kit: + Set the lamp kit being used. + min_score_barcodes: + Optionally specify a min score to detect a valid lamp barcode. + min_score_masks: + Optionally set the minimimum valid score for a lamp mask. + min_score_targets: + Optionally specify a minimum score for lamp targets. +""" WriterConfiguration.ReadBamConfiguration.__doc__ = """Attributes: enable: Control if a BAM file should be generated per channel. @@ -577,11 +540,102 @@ be used. If this field is set to zero or a negative value, then time-based batching will be disabled. Since 5.6 """ -WriterConfiguration.ChannelConfiguration.__doc__ = """Used to control which channels for a specific data type emit data +WriterConfiguration.ReadPod5Configuration.__doc__ = """Attributes: + enable: + Control if a POD5 file should be generated per channel. + file_pattern: + The pattern used to find a POD5 files name. default: pod5{bas + ecall_status}/{flow_cell_id}_{run_id}_{batch_number}.pod5 + Where each {xxx} section is replaced with an attribute from + the minknow state when the file is written. See file pattern + attributes above. + batch_count: + How many reads are placed in each batch (after batch_count + reads {batch_number} is increased in the pattern). + bases_per_batch: + Number of estimated bases within a batch before it rotates to + a new batch + no_output_based_batching: + Do not perform batching based on output (time-based batching + is still performed, if specified) + disable_writing_passed_reads: + Prevent reads which have successfully basecalled being written + to pod5. + disable_writing_failed_reads: + Prevent reads which have failed basecalling being written to + pod5. + disable_writing_force_skipped_reads: + disable writing reads which have been force skipped by the + basecaller. + batch_duration: + The batch duration, for time-based batching If time-based + batching is enabled then, in addition to completing batches + when the `batch_count` or `bases_per_batch` target (above) is + reached, batches will also be completed when: - At least one + read has been written to the batch, AND - `batch_duration` has + elapsed since the last batch was completed (or since the start + of the acquisition, for the first batch) If this field is not + set, then the default time-based batching configuration will + be used. If this field is set to zero or a negative value, + then time-based batching will be disabled. Since 5.6 +""" +ChannelStates.Logic.__doc__ = """Attributes: + rank: + Specifies the order in which channel state criteria will be + evaluated; the smaller the number, the earlier it will be + evaluated. The first criteria to match will be selected + pattern: + Note that this is a regex based pattern for describing a read + classification sequence. For example you can specify: + "unavailableunavailable" or: "(unavailable)(unavailable)" + to recognise two consecutive read chunks classified as + unavailable. You can also use "?" at the end of one of the + classifications in the sequence to indicate that it may or may + not be present at that point. For example: + "(pore)(transition)?(event)" This will match both of the + sequences: pore, transition, event pore, event The + technical documentation has more information on the range of + regex patterns you can apply. + https://minknow.git.oxfordnanolabs.local/minknow- + core/analysis/channel-states.html + ranges: + Range is [lower_pa, upper_pa) +""" +BarcodingConfiguration.__doc__ = """Since 3.5 Attributes: - channels: - Control the way channels are enabled for this data type. + barcoding_kits: + The barcoding kits in use One entry per kit If no barcoding + kits are supplied, barcoding is disabled. + trim_barcodes: + Whether the basecaller should trim barcodes If not specified, + this value defaults to false (not trimming barcodes) If + barcoding is not enabled (e.g., because no barcoding kits are + specified), this parameter has no effect. + require_barcodes_both_ends: + Barcode is only classified if a barcode above `min_score` is + present at both ends of the basecalled read. + ignore_unspecified_barcodes: + If set, barcodes that aren't in barcode user data list will be + ignored Since 5.6 +""" +GetChannelStatesDescResponse.Group.__doc__ = """Attributes: + name: + The name of the group. + style: + How to render the group in a graphical user interface. Note + that the style may be missing from some groups (such as the + ones that are built in to MinKNOW). + states: + The channel states contained in the group. The groups are + ordered according to the "order" attribute of the channel + state style in the channel states configuration. +""" +GetChannelStatesDescResponse.__doc__ = """Attributes: + groups: + The groups of channel states. The groups are ordered + according to the "order" attribute of the group style in the + channel states configuration. """ PoreTypeConfiguration.__doc__ = """The pore type configuration The ways of specifying a configuration are as follows: - global_pore_type: all wells have a pore type of @@ -596,53 +650,15 @@ Set channel/wells to different pore types. Pore types can be created without being used by adding an empty entry. """ -WriterConfiguration.ChannelConfiguration.ChannelList.__doc__ = """Attributes: - channels: - List of channel names (one based) which should be enabled for - writing. -""" -ReadScalingParams.__doc__ = """Since 5.3 Quantile Information: - -Attributes: - quantile_locations: - Position of quantiles in scaling data to use when computing - scale parameters. - quantile_weights_shift: - If present, must be the same length as quantile_locations. - Represents the coefficients that shall be multiplied with - measured quantiles to give a predicted_shift - quantile_weights_scale: - If present, must be the same length as quantile_locations. - Represents the coefficients that shall be multiplied with - measured quantiles to give a predicted_scale - tracking_alpha: - Alpha value to use in ewma calculation for scale and shift - tracking. 1 updates instantly. 0 does not update. - alpha_number_estimates_decay: - Alpha decay value to use. Higher values cause a more rapid - decay in greater trust of earlier numbers. - quantile_maxdiff: - Maximum difference in event quantiles which will be added into - trackers. This is used to filter away cases where pore signal - is included in the read and thus cannot be trusted. - trust_limit_fraction: - Maximum fraction change between one tracked value and the next - which will be trusted. Higher values are not trusted. - diff_threshold: - The minimum difference between an event and the next to - include it in the subsampling - emission_threshold: - After how many cumulative pA is a new event emitted in the - subsampling - dacs_breakpoint: - Cumulative pA sum required to compute scaling. Any events - after this sum are not considered in scaling. - conductance_factor_scale: - Scale factor applied to conductance to produce a basic scale - estimate, also combined with q90_q10_to_normal. - conductance_factor_shift: - Scale factor applied to conductance to produce a basic shift - estimate. +WriterConfiguration.SequencingSummaryConfiguration.__doc__ = """Attributes: + enable: + Should a sequencing summary file be generated + file_pattern: + The pattern used to find a summary files name. default: + sequencing_summary_{flow_cell_id}_{short_run_id}.txt Where + each {xxx} section is replaced with an attribute from the + minknow state when the file is written. See file pattern + attributes above. """ WriterConfiguration.__doc__ = """Configuration for the output writers for MinKNOWs analysis pipeline. Each writer has its own section in this message, where individual data @@ -651,20 +667,19 @@ controls where individual files will be written to. The pattern is expanded for each individual read, and then the read placed in the required file. The tokens used to expand depend on the file type: -Read centric files (fastq, (multi-)fast5, protobuf): - -read_classification: The classification applied to the completed read -(eg. strand). - batch_number: The batch number of this read, -evaluated based on the destination file. - read_id: -Unique read id for each read, formatted as a hash. - channel_name: -The name of the channel which produced the read. - read_start_time: -Read start time formatted in rfc3339 format. - basecall_status: -Basecalling output status (derived from WriterDefaults section in -analysis config). - pore_type: Type of pore (as specified -by #set_pore_type_configuration). General attributes: - -daq_start_time: Data acquisition start time formatted as -YYYYMMDD_hhmm. - protocol_start_time: Time the current protocol was -started. - run_id: Acquisition run id formatted as -hash. - short_run_id: Shortened version of acquisition run id +Read centric files (fastq, (multi-)fast5, protobuf): - batch_number: +The batch number of this read, evaluated based on the destination +file. - read_id: Unique read id for each read, formatted +as a hash. - channel_name: The name of the channel which +produced the read. - read_start_time: Read start time formatted +in rfc3339 format. - basecall_status: Basecalling output status +(derived from WriterDefaults section in analysis config). - +pore_type: Type of pore (as specified by +#set_pore_type_configuration). General attributes: - daq_start_time: +Data acquisition start time formatted as YYYYMMDD_hhmm. - +protocol_start_time: Time the current protocol was started. - +run_id: Acquisition run id formatted as hash. - +short_run_id: Shortened version of acquisition run id formatted as hash. - protocol_run_id: Protocol run id formatted as hash. - short_protocol_run_id: Shortened protocol run id formatted as hash. - asic_id: Integer id assigned to the asic in @@ -707,120 +722,47 @@ then no filtering will be applied, so no reads will be excluded. """ -WriterConfiguration.ChannelConfiguration.ChannelRanges.__doc__ = """Attributes: - ranges: - List of start/end paired channel numbers which should be - enabled for writing. All channels in inclusive ranges should - be enabled. -""" -GetChannelStatesDescResponse.ChannelState.__doc__ = """Attributes: - id: - The numeric identifier of the state. This is what is reported - in any other APIs that return a channel state ID. - name: - The internal name of the state. This is what is reported in - any other APIs that return a channel state name. - style: - How to render the channel state in a graphical user interface. - Note that the style may be missing from some channel states - (such as the ones that are built in to MinKNOW). - global_order: - An order ranking for the channel states when they are - ungrouped. This can be used to order the channel states after - merging the groups. -""" -DynamicAnalysisConfiguration.ReadScaleTracking.__doc__ = """Attributes: - conductance_scan_voltage: - Set the voltage the most recent conductance scan occured at. - channel_conductance: - Per channel/well conductance values -""" -GetChannelStatesDescResponse.Style.__doc__ = """Attributes: - label: - The human-readable name to display when rendering this channel - state or group. - description: - A sentence describing the meaning of the channel state or - group. This can be used as a tooltip, for example. - colour: - The colour to use when rendering this channel state or group. - This is a six-digit hex string describing an RGB colour (eg: - "ff00ff" for purple). -""" -AlignmentConfiguration.__doc__ = """Since 4.0 - -Attributes: - reference_files: - Provide an index to align reads against once basecalled. Any - acceptable reference format to the basecaller can be passed - here: - fasta reference file - minimap index file - bed_file: - Provide a bed file for use indicating areas of interest in - alignment results. Note: alignment_index must be provided for - this argument to be valid. - minimum_coverage: - Minimum coverage for the basecaller to accept an alignment. - If not specified a default value is used. Note: this option - cannot be used during live basecalling. - aggregate_statistics_for_multiple_bed_hits: - Control how statistics for bed results are aggregated. If set - to false only the bed hit with the highest overlap is used - when computing heatmap/throughput graphs with bed hits. If - set to true each bed hit is considered and bases for all hits - are counted. This may give more honest representation of - individual bed hit results but will skew read count statistics - - as each hit will be counted for every bed hit. Note: this - option has no effect in offline basecalling. -""" -ReadDetectionParams.__doc__ = """Attributes: - open_pore_min: - The minimum level which is considered open pore (this value is - relative to open_pore_default or the tracked open_pore - section, if tracking is being used.) This value must be <= - 0.0 if tracking is being used. - open_pore_max: - The maximum level which is considered open pore (this value is - relative to open_pore_default or the tracked open_pore - section, if tracking is being used.) This value must be >= - 0.0 if tracking is being used. - open_pore_default: - The default value to use for open pore, either when tracking - isn't being used, or when open pore tracking has no value - currently. - open_pore_seconds_required: - Minimum number of seconds events must lie within the range of - open pore in order to allow a read to break. -""" -BarcodingConfiguration.__doc__ = """Since 3.5 - -Attributes: - barcoding_kits: - The barcoding kits in use One entry per kit If no barcoding - kits are supplied, barcoding is disabled. - trim_barcodes: - Whether the basecaller should trim barcodes If not specified, - this value defaults to false (not triming barcodes) If - barcoding is not enabled (e.g., because no barcoding kits are - specified), this parameter has no effect. - require_barcodes_both_ends: - Barcode is only classified if a barcode above `min_score` is - present at both ends of the basecalled read. - ignore_unspecified_barcodes: - If set, barcodes that aren't in barcode user data list will be - ignored Since 5.6 -""" -LampConfiguration.__doc__ = """Since 4.1 DEPRECATED 6.0: Lamp support has been removed and all of -these options will be ignored. +WriterConfiguration.BulkConfiguration.__doc__ = """Control settings for the bulk writer Attributes: - lamp_kit: - Set the lamp kit being used. - min_score_barcodes: - Optionally specify a min score to detect a valid lamp barcode. - min_score_masks: - Optionally set the minimimum valid score for a lamp mask. - min_score_targets: - Optionally specify a minimum score for lamp targets. + compression_level: + Control the level of compression applied to read data. 0: + No compression will be applied to data. 1-9: Passed to zlib + compression, 1 is the fastest compression, 9 is the + smallest possible output. + compression_type: + Control the type of compression applied to the read data. By + default the vbz compressor is used (except in the single read + case). + file_pattern: + The pattern used to find a bulk files name. If left empty but + output is enabled a default pattern is used. default: + {data_set}.fast5 Where each {xxx} section is replaced with an + attribute from the minknow state when the file is written. + See file pattern attributes above. + raw: + Raw data, stored with channel calibration data Stored under + /Raw/Channel_*/Signal + events: + Minknow event data Stored under + /IntermediateData/Channel_*/Events + reads: + Minknow read data Stored under + /IntermediateData/Channel_*/Reads + multiplex: + Device multiplex data Stored under + /MultiplexData/Channel_*/Multiplex + channel_states: + Channel state data Stored under /StateData/Channel_*/States + device_metadata: + Device metadata (bias and temperature information) Stored in + a per frame sequence in /Device/MetaData + device_commands: + Device commands Stored with the frame commands take effect + sequence in /Device/AsicCommands + dynamic_analysis_config: + Dynamic analysis configuration Stored with the frame config + took effect in /Meta/User/DynamicAnalysisConfiguration """ PoreTypeConfiguration.ChannelWell.__doc__ = """Attributes: channel: @@ -830,15 +772,202 @@ Well to control pore type for. Wells outside the available wells on the flowcell are ignored. """ -ChannelStates.Group.__doc__ = """ TODO: group styling and description should not be defined here, as -this allows channel states to declare themselves as being part of the -same group but specify different styling and descriptions.""" -GetBasecallerConfigurationRequest.__doc__ = """Attributes: - run_id: - The unique identifier assigned to this acquisition run. Since - 6.0 +BasecallerConfiguration.__doc__ = """Since 3.0 + +Attributes: + enable: + Choose if the basecaller is enabled or disabled. If set to + false then no basecalling will take place, and the rest of the + config is ignored. + config_filename: + The basecaller cfg file with all the settings. Filename can + be absolute, or a basename (eg dna_r9.4_450bps.cfg) which the + basecaller should locate (see basecaller application config + entry: "data_path") + align_filter: + Enable or disable pass/fail filtering based on alignment. + When enabled, reads which do not align to any references will + be marked as "failed", and written to the folder specified in + MinKNOW configuration for failed reads. The setting applies + to both regular read filtering and target filtering; if it is + enabled, then a read will not be marked as a target read if it + does not align to a reference. Default setting is false, i.e. + disabled. Since 5.4 + read_filtering: + Control how read filtering is applied to output of basecaller. + These settings determine whether a read is marked as "passed" + or "failed". Reads are written to different folders based on + the result of this filtering. Those folders are specified in + MinKNOW configuration. If no filtering parameters are + provided then reads will not be filtered. + barcoding_configuration: + Control the barcoding configuration. If no barcoding + configuration is supplied, barcoding is disabled. Since 3.5 + target_filtering: + Control how target filtering is applied to output of + basecaller. Reads which pass these filtering criteria will be + marked as "target" reads, and will be written to a separate + folder; this folder is specified in MinKNOW configuration. + Reads which do not pass these criteria will have the regular + read filtering applied to them, as specified by the `read- + filtering` settings above. If no filtering parameters are + provided then reads will not be target-filtered. Since 3.7 + alignment_configuration: + Alignment configuration parameters. If no configuration is + specified alignment is disabled. Since 4.0 + lamp_configuration: + Lamp configuration parameters. If no configuration is + specified lamp is disabled. Since 4.1 DEPRECATED 6.0: Lamp + support has been removed and this option will be ignored. + enable_read_splitting: + Enable read splitting in the basecaller. Since 4.5 Note: + Since 5.9 this option has no effect, the basecaller is + responsible for deciding when read splitting should be + enabled. + min_score_read_splitting: + Override score to use for the basecaller read splitting. If + not specified a default value is used from the basecaller. + Since 4.5 Note: Since 5.9 this option has no effect, the + basecaller is responsible for deciding read splitting score. +""" +DynamicAnalysisConfiguration.__doc__ = """Attributes: + read_scale_tracking: + Parameters for read scale tracking: +""" +WriterConfiguration.ReadFast5Configuration.__doc__ = """Attributes: + compression_level: + Control the level of compression applied to read data. 0: + No compression will be applied to data. 1-9: Passed to zlib + compression, 1 is the fastest compression, 9 is the + smallest possible output. + compression_type: + Control the type of compression applied to the read data. By + default the vbz compressor is used (except in the single read + case). + raw: + Raw data, stored with calibration data, and read attributes. + Stored under /Raw/Reads_*/Signal + fastq: + Fastq data, stored as a string. Stored under + /Analyses/Basecall_1D_*/BaseCalled_(template|complement)/Fastq + trace_table: + Trace table received from the basecaller Stored under + /Analyses/Basecall_1D_*/BaseCalled_template/Trace + move_table: + Move table received from the basecaller Stored under + /Analyses/Basecall_1D_*/BaseCalled_template/Move + modifications_table: + Base modification probability table Store under + /Analyses/Basecall_1D_*/BaseCalled_template/ModBaseProbs + disable_writing_passed_reads: + Prevent reads which have successfully basecalled being written + to fast5. + disable_writing_failed_reads: + Prevent reads which have failed basecalling being written to + fast5. + disable_writing_force_skipped_reads: + disable writing reads which have been force skipped by the + basecaller. + file_pattern: + The pattern used to find a fast5 files name. default: fast5{b + asecall_status}/{flow_cell_id}_{run_id}_{batch_number}.fast5 + Where each {xxx} section is replaced with an attribute from + the minknow state when the file is written. See file pattern + attributes above. + fastq_header_pattern: + The pattern used to find a fastq header. default: {read_id} + runid={run_id} ch={channel_name} start_time={read_start_time} + Where each {xxx} section is replaced with an attribute from + the minknow state when the fastq is generated. + batch_count: + How many reads are placed in each batch (after batch_count + reads {batch_number} is increased in the pattern). + bases_per_batch: + Number of estimated bases within a batch before it rotates to + a new batch + no_output_based_batching: + Do not perform batching based on output (time-based batching + is still performed, if specified) + batch_duration: + The batch duration, for time-based batching If time-based + batching is enabled then, in addition to completing batches + when the `batch_count` or `bases_per_batch` target (above) is + reached, batches will also be completed when: - At least one + read has been written to the batch, AND - `batch_duration` has + elapsed since the last batch was completed (or since the start + of the acquisition, for the first batch) If this field is not + set, then the default time-based batching configuration will + be used. If this field is set to zero or a negative value, + then time-based batching will be disabled. Since 5.6 +""" +ReadScalingParams.__doc__ = """Since 5.3 Quantile Information: + +Attributes: + quantile_locations: + Position of quantiles in scaling data to use when computing + scale parameters. + quantile_weights_shift: + If present, must be the same length as quantile_locations. + Represents the coefficients that shall be multiplied with + measured quantiles to give a predicted_shift + quantile_weights_scale: + If present, must be the same length as quantile_locations. + Represents the coefficients that shall be multiplied with + measured quantiles to give a predicted_scale + tracking_alpha: + Alpha value to use in ewma calculation for scale and shift + tracking. 1 updates instantly. 0 does not update. + alpha_number_estimates_decay: + Alpha decay value to use. Higher values cause a more rapid + decay in greater trust of earlier numbers. + quantile_maxdiff: + Maximum difference in event quantiles which will be added into + trackers. This is used to filter away cases where pore signal + is included in the read and thus cannot be trusted. + trust_limit_fraction: + Maximum fraction change between one tracked value and the next + which will be trusted. Higher values are not trusted. + diff_threshold: + The minimum difference between an event and the next to + include it in the subsampling + emission_threshold: + After how many cumulative pA is a new event emitted in the + subsampling + dacs_breakpoint: + Cumulative pA sum required to compute scaling. Any events + after this sum are not considered in scaling. + conductance_factor_scale: + Scale factor applied to conductance to produce a basic scale + estimate, also combined with q90_q10_to_normal. + conductance_factor_shift: + Scale factor applied to conductance to produce a basic shift + estimate. """ BasecallerConfiguration.TargetFiltering.__doc__ = """Since 3.7""" +ReadDetectionParams.__doc__ = """Attributes: + open_pore_min: + The minimum level which is considered open pore (this value is + relative to open_pore_default or the tracked open_pore + section, if tracking is being used.) This value must be <= + 0.0 if tracking is being used. + open_pore_max: + The maximum level which is considered open pore (this value is + relative to open_pore_default or the tracked open_pore + section, if tracking is being used.) This value must be >= + 0.0 if tracking is being used. + open_pore_default: + The default value to use for open pore, either when tracking + isn't being used, or when open pore tracking has no value + currently. + open_pore_seconds_required: + Minimum number of seconds events must lie within the range of + open pore in order to allow a read to break. +""" +WriterConfiguration.ChannelConfiguration.ChannelList.__doc__ = """Attributes: + channels: + List of channel names (one based) which should be enabled for + writing. +""" WriterConfiguration.ReportConfiguration.__doc__ = """Control settings for the report writer Attributes: @@ -915,172 +1044,41 @@ - "custom_report{suffix}.txt" See file pattern attributes above. """ -ReadClassificationParams.Parameters.__doc__ = """Attributes: - rules_in_execution_order: - An execution rule has the following format: "pore = - (median,gt,185)&(median,lt,260)&(median_sd,lt,40)" "median" - and "median_sd" are apart of a small subset of variable values - describing a read or read chunk, that are exposed to execution - rules. The full list of variable values and their descriptions - are documented here: - https://minknow.git.oxfordnanolabs.local/minknow- - core/analysis/reads.html "gt" and "lt" describe how data can - be compared: gt: greater than lt: less than eq: equal ne: not - equal Constant values like "185" or "260" can also be - specified. These can be real numbers also. Note that - variables dont always have to be on the left and const values - on the right. The following sub rules are also valid: - (200,lt,median_sd) (median_before,gt,median) (5,lt,10) -""" -DynamicAnalysisConfiguration.__doc__ = """Attributes: - read_scale_tracking: - Parameters for read scale tracking: +DynamicAnalysisConfiguration.ReadScaleTracking.ChannelConductance.__doc__ = """Attributes: + well_conductance: + Per well conductance values. """ -ChannelStates.Logic.__doc__ = """Attributes: - rank: - Specifies the order in which channel state criteria will be - evaluated; the smaller the number, the earlier it will be - evaluated. The first criteria to match will be selected - pattern: - Note that this is a regex based pattern for describing a read - classification sequence. For example you can specify: - "unavailableunavailable" or: "(unavailable)(unavailable)" - to recognise two consecutive read chunks classified as - unavailable. You can also use "?" at the end of one of the - classifications in the sequence to indicate that it may or may - not be present at that point. For example: - "(pore)(transition)?(event)" This will match both of the - sequences: pore, transition, event pore, event The - technical documentation has more information on the range of - regex patterns you can apply. - https://minknow.git.oxfordnanolabs.local/minknow- - core/analysis/channel-states.html +WriterConfiguration.ChannelConfiguration.ChannelRanges.__doc__ = """Attributes: ranges: - Range is [lower_pa, upper_pa) -""" -GetChannelStatesDescResponse.Group.__doc__ = """Attributes: - name: - The name of the group. - style: - How to render the group in a graphical user interface. Note - that the style may be missing from some groups (such as the - ones that are built in to MinKNOW). - states: - The channel states contained in the group. The groups are - ordered according to the "order" attribute of the channel - state style in the channel states configuration. + List of start/end paired channel numbers which should be + enabled for writing. All channels in inclusive ranges should + be enabled. """ -WriterConfiguration.ReadFast5Configuration.__doc__ = """Attributes: - compression_level: - Control the level of compression applied to read data. 0: - No compression will be applied to data. 1-9: Passed to zlib - compression, 1 is the fastest compression, 9 is the - smallest possible output. - compression_type: - Control the type of compression applied to the read data. By - default the vbz compressor is used (except in the single read - case). - raw: - Raw data, stored with calibration data, and read attributes. - Stored under /Raw/Reads_*/Signal - fastq: - Fastq data, stored as a string. Stored under - /Analyses/Basecall_1D_*/BaseCalled_(template|complement)/Fastq - trace_table: - Trace table received from the basecaller Stored under - /Analyses/Basecall_1D_*/BaseCalled_template/Trace - move_table: - Move table received from the basecaller Stored under - /Analyses/Basecall_1D_*/BaseCalled_template/Move - modifications_table: - Base modification probability table Store under - /Analyses/Basecall_1D_*/BaseCalled_template/ModBaseProbs - disable_writing_passed_reads: - Prevent reads which have successfully basecalled being written - to fast5. - disable_writing_failed_reads: - Prevent reads which have failed basecalling being written to - fast5. - disable_writing_force_skipped_reads: - disable writing reads which have been force skipped by the - basecaller. - file_pattern: - The pattern used to find a fast5 files name. default: fast5{b - asecall_status}/{flow_cell_id}_{run_id}_{batch_number}.fast5 - Where each {xxx} section is replaced with an attribute from - the minknow state when the file is written. See file pattern - attributes above. - fastq_header_pattern: - The pattern used to find a fastq header. default: {read_id} - runid={run_id} ch={channel_name} start_time={read_start_time} - Where each {xxx} section is replaced with an attribute from - the minknow state when the fastq is generated. - batch_count: - How many reads are placed in each batch (after batch_count - reads {batch_number} is increased in the pattern). - bases_per_batch: - Number of estimated bases within a batch before it rotates to - a new batch - no_output_based_batching: - Do not perform batching based on output (time-based batching - is still performed, if specified) - batch_duration: - The batch duration, for time-based batching If time-based - batching is enabled then, in addition to completing batches - when the `batch_count` or `bases_per_batch` target (above) is - reached, batches will also be completed when: - At least one - read has been written to the batch, AND - `batch_duration` has - elapsed since the last batch was completed (or since the start - of the acquisition, for the first batch) If this field is not - set, then the default time-based batching configuration will - be used. If this field is set to zero or a negative value, - then time-based batching will be disabled. Since 5.6 +GetWriterConfigurationRequest.__doc__ = """Attributes: + run_id: + The unique identifier assigned to this acquisition run. Since + 6.0 """ -DynamicAnalysisConfiguration.ReadScaleTracking.ChannelConductance.__doc__ = """Attributes: - well_conductance: - Per well conductance values. +AnalysisConfiguration.__doc__ = """Attributes: + read_scaling: + Add read scale tracking to the pipeline. If this message is + unspecified, read scaling is not enabled. """ -WriterConfiguration.BulkConfiguration.__doc__ = """Control settings for the bulk writer - -Attributes: - compression_level: - Control the level of compression applied to read data. 0: - No compression will be applied to data. 1-9: Passed to zlib - compression, 1 is the fastest compression, 9 is the - smallest possible output. - compression_type: - Control the type of compression applied to the read data. By - default the vbz compressor is used (except in the single read - case). - file_pattern: - The pattern used to find a bulk files name. If left empty but - output is enabled a default pattern is used. default: - {data_set}.fast5 Where each {xxx} section is replaced with an - attribute from the minknow state when the file is written. - See file pattern attributes above. - raw: - Raw data, stored with channel calibration data Stored under - /Raw/Channel_*/Signal - events: - Minknow event data Stored under - /IntermediateData/Channel_*/Events - reads: - Minknow read data Stored under - /IntermediateData/Channel_*/Reads - multiplex: - Device multiplex data Stored under - /MultiplexData/Channel_*/Multiplex - channel_states: - Channel state data Stored under /StateData/Channel_*/States - device_metadata: - Device metadata (bias and temperature information) Stored in - a per frame sequence in /Device/MetaData - device_commands: - Device commands Stored with the frame commands take effect - sequence in /Device/AsicCommands - dynamic_analysis_config: - Dynamic analysis configuration Stored with the frame config - took effect in /Meta/User/DynamicAnalysisConfiguration +GetChannelStatesDescResponse.ChannelState.__doc__ = """Attributes: + id: + The numeric identifier of the state. This is what is reported + in any other APIs that return a channel state ID. + name: + The internal name of the state. This is what is reported in + any other APIs that return a channel state name. + style: + How to render the channel state in a graphical user interface. + Note that the style may be missing from some channel states + (such as the ones that are built in to MinKNOW). + global_order: + An order ranking for the channel states when they are + ungrouped. This can be used to order the channel states after + merging the groups. """ ChannelStates.Logic.Behaviour.__doc__ = """Attributes: reset_on_mux_change: @@ -1120,10 +1118,39 @@ in multiple if it has this option on. The multiple state will be reset then when the mux is set to a different setting. """ -GetChannelStatesDescResponse.__doc__ = """Attributes: - groups: - The groups of channel states. The groups are ordered - according to the "order" attribute of the group style in the - channel states configuration. +ReadFilters.__doc__ = """Parameters for filtering out reads from being written. The tests are +combined using a logical AND: if any given test fails, the read will +not be written. Only reads that pass all (non-zero) tests will be +written out. Currently, it is only possible to filter on read length. +This can be given in samples or MinKNOW events. + +Attributes: + read_length_min: + Only write reads that contain at least this many samples. The + default zero value will not exclude any reads. + read_length_max: + Only write reads that contain at most this many samples. If + set to zero (the default), this test is not applied (as though + it had been set to a value longer than any possible read). + event_count_min: + Only write reads that contain at least this many MinKNOW + events. The default zero value will not exclude any reads. + event_count_max: + Only write reads that contain at most this many MinKNOW + events. If set to zero (the default), this test is not + applied (as though it had been set to a value longer than any + possible read). + skip_rejected_reads: + Control whether reads unblocked using from + `DataService::get_live_reads()` should be filtered. When set + to true, reads which are unblocked by `get_live_reads` are + filtered and therefore not basecalled. When set to false, + reads that are unblocked by `get_live_reads` will not be + filtered and therefore will be basecalled. +""" +GetBasecallerConfigurationRequest.__doc__ = """Attributes: + run_id: + The unique identifier assigned to this acquisition run. Since + 6.0 """ # @@protoc_insertion_point(module_scope) diff --git a/python/minknow_api/analysis_configuration_pb2_grpc.py b/python/minknow_api/analysis_configuration_pb2_grpc.py index 050de89..cd36ac6 100644 --- a/python/minknow_api/analysis_configuration_pb2_grpc.py +++ b/python/minknow_api/analysis_configuration_pb2_grpc.py @@ -136,7 +136,7 @@ def set_analysis_configuration(self, request, context): 'including_default_value_fields' is needed because in proto3, primitive values that are default initialised (like a uint32 with value 0) will not be sent on the wire, so the value wouldn't appear when converting to json. In practice, most values are wrapper types and this - field won't have an affect in wrapper types, but it does affect enum types as the default initailised value is the 0th enum. + field won't have an affect in wrapper types, but it does affect enum types as the default initialised value is the 0th enum. NOTE: if the analysis configuration was set using the new parameters (with the filename for basecalling config files), the old parameters from jsn will be ignored. So set_analysis_configuration must be used with either the old protobuf message for the basecaller parameters, @@ -297,7 +297,7 @@ def get_dynamic_analysis_configuration(self, request, context): raise NotImplementedError('Method not implemented!') def set_dynamic_analysis_configuration(self, request, context): - """Set the dynamic analysis configuration, used during + """Set the dynamic analysis configuration, used during This can be changed during an acquisition period, and should be called as new values become appropriate. The new analysis parameters will be used after any data already received has been processe. diff --git a/python/minknow_api/analysis_configuration_service.py b/python/minknow_api/analysis_configuration_service.py index a1061e9..5b7e4df 100644 --- a/python/minknow_api/analysis_configuration_service.py +++ b/python/minknow_api/analysis_configuration_service.py @@ -83,6 +83,9 @@ def get_analysis_configuration(self, _message=None, _timeout=None, **kwargs): This can be passed instead of the keyword arguments. _timeout (float, optional): The call will be cancelled after this number of seconds if it has not been completed. + run_id (str, optional): The unique identifier assigned to this acquisition run. + + Since 6.2 Returns: minknow_api.analysis_configuration_pb2.AnalysisConfiguration @@ -102,6 +105,10 @@ def get_analysis_configuration(self, _message=None, _timeout=None, **kwargs): _message = GetAnalysisConfigurationRequest() + if "run_id" in kwargs: + unused_args.remove("run_id") + _message.run_id = kwargs['run_id'] + if len(unused_args) > 0: raise ArgumentError("Unexpected keyword arguments to get_analysis_configuration: '{}'".format(", ".join(unused_args))) @@ -139,7 +146,7 @@ def set_analysis_configuration(self, _message=None, _timeout=None, **kwargs): 'including_default_value_fields' is needed because in proto3, primitive values that are default initialised (like a uint32 with value 0) will not be sent on the wire, so the value wouldn't appear when converting to json. In practice, most values are wrapper types and this - field won't have an affect in wrapper types, but it does affect enum types as the default initailised value is the 0th enum. + field won't have an affect in wrapper types, but it does affect enum types as the default initialised value is the 0th enum. NOTE: if the analysis configuration was set using the new parameters (with the filename for basecalling config files), the old parameters from jsn will be ignored. So set_analysis_configuration must be used with either the old protobuf message for the basecaller parameters, @@ -402,9 +409,9 @@ def set_basecaller_configuration(self, _message=None, _timeout=None, **kwargs): which the basecaller should locate (see basecaller application config entry: "data_path") align_filter (bool, optional): Enable or disable pass/fail filtering based on alignment. When enabled, reads which do not align to any references will be marked as "failed", and written to the folder - specified in MinKNOW configuration for failed reads. + specified in MinKNOW configuration for failed reads. - The setting applies to both regular read filtering and target filtering; if it is + The setting applies to both regular read filtering and target filtering; if it is enabled, then a read will not be marked as a target read if it does not align to a reference. Default setting is false, i.e. disabled. @@ -424,8 +431,8 @@ def set_basecaller_configuration(self, _message=None, _timeout=None, **kwargs): Since 3.5 target_filtering (minknow_api.analysis_configuration_pb2.BasecallerConfiguration.TargetFiltering, optional): Control how target filtering is applied to output of basecaller. Reads which pass these filtering criteria will be marked as - "target" reads, and will be written to a separate folder; this - folder is specified in MinKNOW configuration. Reads which do + "target" reads, and will be written to a separate folder; this + folder is specified in MinKNOW configuration. Reads which do not pass these criteria will have the regular read filtering applied to them, as specified by the `read-filtering` settings above. @@ -550,9 +557,9 @@ def preload_basecaller_configuration(self, _message=None, _timeout=None, **kwarg which the basecaller should locate (see basecaller application config entry: "data_path") align_filter (bool, optional): Enable or disable pass/fail filtering based on alignment. When enabled, reads which do not align to any references will be marked as "failed", and written to the folder - specified in MinKNOW configuration for failed reads. + specified in MinKNOW configuration for failed reads. - The setting applies to both regular read filtering and target filtering; if it is + The setting applies to both regular read filtering and target filtering; if it is enabled, then a read will not be marked as a target read if it does not align to a reference. Default setting is false, i.e. disabled. @@ -572,8 +579,8 @@ def preload_basecaller_configuration(self, _message=None, _timeout=None, **kwarg Since 3.5 target_filtering (minknow_api.analysis_configuration_pb2.BasecallerConfiguration.TargetFiltering, optional): Control how target filtering is applied to output of basecaller. Reads which pass these filtering criteria will be marked as - "target" reads, and will be written to a separate folder; this - folder is specified in MinKNOW configuration. Reads which do + "target" reads, and will be written to a separate folder; this + folder is specified in MinKNOW configuration. Reads which do not pass these criteria will have the regular read filtering applied to them, as specified by the `read-filtering` settings above. @@ -1065,7 +1072,7 @@ def get_dynamic_analysis_configuration(self, _message=None, _timeout=None, **kwa [], "minknow_api.analysis_configuration.AnalysisConfigurationService") def set_dynamic_analysis_configuration(self, _message=None, _timeout=None, **kwargs): - """Set the dynamic analysis configuration, used during + """Set the dynamic analysis configuration, used during This can be changed during an acquisition period, and should be called as new values become appropriate. The new analysis parameters will be used after any data already received has been processe. diff --git a/python/minknow_api/basecaller_pb2.py b/python/minknow_api/basecaller_pb2.py index fe51fc5..4bebd09 100644 --- a/python/minknow_api/basecaller_pb2.py +++ b/python/minknow_api/basecaller_pb2.py @@ -20,7 +20,7 @@ from minknow_api import rpc_options_pb2 as minknow__api_dot_rpc__options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1cminknow_api/basecaller.proto\x12\x16minknow_api.basecaller\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a(minknow_api/analysis_configuration.proto\x1a$minknow_api/analysis_workflows.proto\x1a#minknow_api/protocol_settings.proto\x1a\x1dminknow_api/rpc_options.proto\"\x19\n\x17ListConfigsByKitRequest\"\xf4\x03\n\x18ListConfigsByKitResponse\x12`\n\x11\x66low_cell_configs\x18\x01 \x03(\x0b\x32\x45.minknow_api.basecaller.ListConfigsByKitResponse.FlowCellConfigsEntry\x1a\x1d\n\nConfigList\x12\x0f\n\x07\x63onfigs\x18\x01 \x03(\t\x1a\xe0\x01\n\x0bPerFlowCell\x12\x61\n\x0bkit_configs\x18\x01 \x03(\x0b\x32L.minknow_api.basecaller.ListConfigsByKitResponse.PerFlowCell.KitConfigsEntry\x1an\n\x0fKitConfigsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12J\n\x05value\x18\x02 \x01(\x0b\x32;.minknow_api.basecaller.ListConfigsByKitResponse.ConfigList:\x02\x38\x01\x1at\n\x14\x46lowCellConfigsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12K\n\x05value\x18\x02 \x01(\x0b\x32<.minknow_api.basecaller.ListConfigsByKitResponse.PerFlowCell:\x02\x38\x01\"\xed\x03\n\x17StartBasecallingRequest\x12\x0c\n\x04name\x18\x0c \x01(\t\x12\x1f\n\x17input_reads_directories\x18\x01 \x03(\t\x12\x1e\n\x16output_reads_directory\x18\x02 \x01(\t\x12\x15\n\rconfiguration\x18\x03 \x01(\t\x12\x11\n\tfast5_out\x18\x04 \x01(\x08\x12\x16\n\x0e\x63ompress_fastq\x18\x05 \x01(\x08\x12\x16\n\x0e\x64isable_events\x18\x06 \x01(\x08\x12\x11\n\trecursive\x18\x07 \x01(\x08\x12[\n\x17\x62\x61rcoding_configuration\x18\n \x01(\x0b\x32:.minknow_api.analysis_configuration.BarcodingConfiguration\x12[\n\x17\x61lignment_configuration\x18\x0b \x01(\x0b\x32:.minknow_api.analysis_configuration.AlignmentConfiguration\x12\x1d\n\x15\x65nable_read_splitting\x18\r \x01(\x08\x12=\n\x18min_score_read_splitting\x18\x0e \x01(\x0b\x32\x1b.google.protobuf.FloatValue\"&\n\x18StartBasecallingResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\xe5\x02\n\x15StartBarcodingRequest\x12\x0c\n\x04name\x18\x0b \x01(\t\x12\x1f\n\x17input_reads_directories\x18\x01 \x03(\t\x12\x1e\n\x16output_reads_directory\x18\x02 \x01(\t\x12\x16\n\x0e\x63ompress_fastq\x18\x04 \x01(\x08\x12\x11\n\trecursive\x18\x05 \x01(\x08\x12[\n\x17\x62\x61rcoding_configuration\x18\n \x01(\x0b\x32:.minknow_api.analysis_configuration.BarcodingConfiguration\x12Q\n\routput_format\x18\x0c \x01(\x0e\x32:.minknow_api.basecaller.StartBarcodingRequest.OutputFormat\"\"\n\x0cOutputFormat\x12\x07\n\x03\x42\x41M\x10\x00\x12\t\n\x05\x46\x41STQ\x10\x01\"$\n\x16StartBarcodingResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\xd6\x01\n\x15StartAlignmentRequest\x12\x0c\n\x04name\x18\x07 \x01(\t\x12\x1f\n\x17input_reads_directories\x18\x01 \x03(\t\x12\x1e\n\x16output_reads_directory\x18\x02 \x01(\t\x12\x11\n\trecursive\x18\x04 \x01(\x08\x12[\n\x17\x61lignment_configuration\x18\x06 \x01(\x0b\x32:.minknow_api.analysis_configuration.AlignmentConfiguration\"$\n\x16StartAlignmentResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\xce\x03\n\"StartPostProcessingProtocolRequest\x12\x12\n\nidentifier\x18\x01 \x01(\t\x12\"\n\x1asequencing_protocol_run_id\x18\x07 \x01(\t\x12\x1d\n\x15input_fast5_directory\x18\x02 \x01(\t\x12\x1d\n\x15input_fastq_directory\x18\x03 \x01(\t\x12\x1b\n\x13input_bam_directory\x18\x04 \x01(\t\x12\x19\n\x11sample_sheet_path\x18\x08 \x01(\t\x12\x18\n\x10output_directory\x18\x05 \x01(\t\x12\x65\n\x0esetting_values\x18\x06 \x03(\x0b\x32M.minknow_api.basecaller.StartPostProcessingProtocolRequest.SettingValuesEntry\x1ay\n\x12SettingValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12R\n\x05value\x18\x02 \x01(\x0b\x32\x43.minknow_api.protocol_settings.ProtocolSetting.ProtocolSettingValue:\x02\x38\x01\"\xce\x03\n\x0cStartRequest\x12T\n\x19start_basecalling_request\x18\x02 \x01(\x0b\x32/.minknow_api.basecaller.StartBasecallingRequestH\x00\x12P\n\x17start_barcoding_request\x18\x03 \x01(\x0b\x32-.minknow_api.basecaller.StartBarcodingRequestH\x00\x12P\n\x17start_alignment_request\x18\x04 \x01(\x0b\x32-.minknow_api.basecaller.StartAlignmentRequestH\x00\x12l\n&start_post_processing_protocol_request\x18\x05 \x01(\x0b\x32:.minknow_api.basecaller.StartPostProcessingProtocolRequestH\x00\x12\x45\n\rproxy_request\x18\x06 \x01(\x0b\x32,.minknow_api.analysis_workflows.ProxyRequestH\x00\x42\x0f\n\rstart_request\"1\n#StartPostProcessingProtocolResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x1b\n\rCancelRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\x10\n\x0e\x43\x61ncelResponse\"\xb4\x05\n\x07RunInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12T\n\x19start_basecalling_request\x18\x02 \x01(\x0b\x32/.minknow_api.basecaller.StartBasecallingRequestH\x00\x12P\n\x17start_barcoding_request\x18\x0b \x01(\x0b\x32-.minknow_api.basecaller.StartBarcodingRequestH\x00\x12P\n\x17start_alignment_request\x18\x0c \x01(\x0b\x32-.minknow_api.basecaller.StartAlignmentRequestH\x00\x12l\n&start_post_processing_protocol_request\x18\r \x01(\x0b\x32:.minknow_api.basecaller.StartPostProcessingProtocolRequestH\x00\x12,\n\x05state\x18\x03 \x01(\x0e\x32\x1d.minknow_api.basecaller.State\x12\x0e\n\x06\x65rrors\x18\x04 \x03(\t\x12\x18\n\x10\x66iles_discovered\x18\x05 \x01(\x05\x12\x18\n\x10progress_current\x18\x06 \x01(\x05\x12\x16\n\x0eprogress_total\x18\x07 \x01(\x05\x12.\n\nstart_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\t \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x36\n\x12\x65stimated_end_time\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x15\n\x13start_request_oneof\"\xbc\x01\n\x0eGetInfoRequest\x12\x39\n\x06preset\x18\x01 \x01(\x0e\x32\'.minknow_api.basecaller.SelectionPresetH\x00\x12\x0c\n\x02id\x18\x02 \x01(\tH\x00\x12=\n\x04list\x18\x03 \x01(\x0b\x32-.minknow_api.basecaller.GetInfoRequest.IdListH\x00\x1a\x15\n\x06IdList\x12\x0b\n\x03ids\x18\x01 \x03(\tB\x0b\n\tselection\"@\n\x0fGetInfoResponse\x12-\n\x04runs\x18\x01 \x03(\x0b\x32\x1f.minknow_api.basecaller.RunInfo\"\x1f\n\x10\x43learInfoRequest\x12\x0b\n\x03ids\x18\x01 \x03(\t\"\x13\n\x11\x43learInfoResponse\"*\n\x0cWatchRequest\x12\x1a\n\x12send_finished_runs\x18\x01 \x01(\x08\">\n\rWatchResponse\x12-\n\x04runs\x18\x01 \x03(\x0b\x32\x1f.minknow_api.basecaller.RunInfo\"^\n\x19MakeAlignmentIndexRequest\x12!\n\x19input_alignment_reference\x18\x01 \x01(\t\x12\x1e\n\x16output_alignment_index\x18\x02 \x01(\t\"\x1c\n\x1aMakeAlignmentIndexResponse\"$\n\"ListPostProcessingProtocolsRequest\"\xa6\x01\n\x1aPostProcessingProtocolInfo\x12\x12\n\nidentifier\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\x12@\n\x08provider\x18\x05 \x01(\x0e\x32..minknow_api.basecaller.PostProcessingProvider\"l\n#ListPostProcessingProtocolsResponse\x12\x45\n\tprotocols\x18\x01 \x03(\x0b\x32\x32.minknow_api.basecaller.PostProcessingProtocolInfo\"B\n,ListSettingsForPostProcessingProtocolRequest\x12\x12\n\nidentifier\x18\x01 \x01(\t\"\xd2\x01\n-ListSettingsForPostProcessingProtocolResponse\x12\x1c\n\x14requires_fast5_input\x18\x01 \x01(\x08\x12\x1c\n\x14requires_fastq_input\x18\x02 \x01(\x08\x12\x1a\n\x12requires_bam_input\x18\x03 \x01(\x08\x12I\n\x11protocol_settings\x18\x04 \x03(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\"5\n\x15UpdateProgressRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08progress\x18\x02 \x01(\x02\"\x18\n\x16UpdateProgressResponse\"*\n\x0fSendPingRequest\x12\x17\n\tping_data\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"\x12\n\x10SendPingResponse*S\n\x05State\x12\x11\n\rSTATE_RUNNING\x10\x00\x12\x11\n\rSTATE_SUCCESS\x10\x01\x12\x0f\n\x0bSTATE_ERROR\x10\x02\x12\x13\n\x0fSTATE_CANCELLED\x10\x03*[\n\x0fSelectionPreset\x12\x16\n\x12PRESET_ALL_RUNNING\x10\x00\x12 \n\x1cPRESET_MOST_RECENTLY_STARTED\x10\x01\x12\x0e\n\nPRESET_ALL\x10\x02*0\n\x16PostProcessingProvider\x12\n\n\x06SCRIPT\x10\x00\x12\n\n\x06\x45PI2ME\x10\x01\x32\xe5\r\n\nBasecaller\x12}\n\x13list_configs_by_kit\x12/.minknow_api.basecaller.ListConfigsByKitRequest\x1a\x30.minknow_api.basecaller.ListConfigsByKitResponse\"\x03\x90\x02\x01\x12x\n\x11start_basecalling\x12/.minknow_api.basecaller.StartBasecallingRequest\x1a\x30.minknow_api.basecaller.StartBasecallingResponse\"\x00\x12r\n\x0fstart_barcoding\x12-.minknow_api.basecaller.StartBarcodingRequest\x1a..minknow_api.basecaller.StartBarcodingResponse\"\x00\x12\x9b\x01\n\x1estart_post_processing_protocol\x12:.minknow_api.basecaller.StartPostProcessingProtocolRequest\x1a;.minknow_api.basecaller.StartPostProcessingProtocolResponse\"\x00\x12r\n\x0fstart_alignment\x12-.minknow_api.basecaller.StartAlignmentRequest\x1a..minknow_api.basecaller.StartAlignmentResponse\"\x00\x12\\\n\x06\x63\x61ncel\x12%.minknow_api.basecaller.CancelRequest\x1a&.minknow_api.basecaller.CancelResponse\"\x03\x90\x02\x02\x12\x62\n\x08get_info\x12&.minknow_api.basecaller.GetInfoRequest\x1a\'.minknow_api.basecaller.GetInfoResponse\"\x03\x90\x02\x01\x30\x01\x12\x66\n\nclear_info\x12(.minknow_api.basecaller.ClearInfoRequest\x1a).minknow_api.basecaller.ClearInfoResponse\"\x03\x90\x02\x02\x12[\n\x05watch\x12$.minknow_api.basecaller.WatchRequest\x1a%.minknow_api.basecaller.WatchResponse\"\x03\x90\x02\x01\x30\x01\x12\x7f\n\x14make_alignment_index\x12\x31.minknow_api.basecaller.MakeAlignmentIndexRequest\x1a\x32.minknow_api.basecaller.MakeAlignmentIndexResponse\"\x00\x12\x9e\x01\n\x1elist_post_processing_protocols\x12:.minknow_api.basecaller.ListPostProcessingProtocolsRequest\x1a;.minknow_api.basecaller.ListPostProcessingProtocolsResponse\"\x03\x90\x02\x02\x12\xbe\x01\n*list_settings_for_post_processing_protocol\x12\x44.minknow_api.basecaller.ListSettingsForPostProcessingProtocolRequest\x1a\x45.minknow_api.basecaller.ListSettingsForPostProcessingProtocolResponse\"\x03\x90\x02\x01\x12\x8b\x01\n(update_post_processing_protocol_progress\x12-.minknow_api.basecaller.UpdateProgressRequest\x1a..minknow_api.basecaller.UpdateProgressResponse\"\x00\x12`\n\tsend_ping\x12\'.minknow_api.basecaller.SendPingRequest\x1a(.minknow_api.basecaller.SendPingResponse\"\x00\x42&\n\x1c\x63om.nanoporetech.minknow_api\xa2\x02\x05MKAPIb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1cminknow_api/basecaller.proto\x12\x16minknow_api.basecaller\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a(minknow_api/analysis_configuration.proto\x1a$minknow_api/analysis_workflows.proto\x1a#minknow_api/protocol_settings.proto\x1a\x1dminknow_api/rpc_options.proto\"\x19\n\x17ListConfigsByKitRequest\"\xf4\x03\n\x18ListConfigsByKitResponse\x12`\n\x11\x66low_cell_configs\x18\x01 \x03(\x0b\x32\x45.minknow_api.basecaller.ListConfigsByKitResponse.FlowCellConfigsEntry\x1a\x1d\n\nConfigList\x12\x0f\n\x07\x63onfigs\x18\x01 \x03(\t\x1a\xe0\x01\n\x0bPerFlowCell\x12\x61\n\x0bkit_configs\x18\x01 \x03(\x0b\x32L.minknow_api.basecaller.ListConfigsByKitResponse.PerFlowCell.KitConfigsEntry\x1an\n\x0fKitConfigsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12J\n\x05value\x18\x02 \x01(\x0b\x32;.minknow_api.basecaller.ListConfigsByKitResponse.ConfigList:\x02\x38\x01\x1at\n\x14\x46lowCellConfigsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12K\n\x05value\x18\x02 \x01(\x0b\x32<.minknow_api.basecaller.ListConfigsByKitResponse.PerFlowCell:\x02\x38\x01\"\x95\x04\n\x17StartBasecallingRequest\x12\x0c\n\x04name\x18\x0c \x01(\t\x12\x1f\n\x17input_reads_directories\x18\x01 \x03(\t\x12\x1e\n\x16output_reads_directory\x18\x02 \x01(\t\x12\x15\n\rconfiguration\x18\x03 \x01(\t\x12\x11\n\tfast5_out\x18\x04 \x01(\x08\x12\x16\n\x0e\x63ompress_fastq\x18\x05 \x01(\x08\x12\x16\n\x0e\x64isable_events\x18\x06 \x01(\x08\x12\x11\n\trecursive\x18\x07 \x01(\x08\x12[\n\x17\x62\x61rcoding_configuration\x18\n \x01(\x0b\x32:.minknow_api.analysis_configuration.BarcodingConfiguration\x12[\n\x17\x61lignment_configuration\x18\x0b \x01(\x0b\x32:.minknow_api.analysis_configuration.AlignmentConfiguration\x12\x17\n\nmin_qscore\x18\x0f \x01(\x01H\x00\x88\x01\x01\x12\x1d\n\x15\x65nable_read_splitting\x18\r \x01(\x08\x12=\n\x18min_score_read_splitting\x18\x0e \x01(\x0b\x32\x1b.google.protobuf.FloatValueB\r\n\x0b_min_qscore\"&\n\x18StartBasecallingResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\xe5\x02\n\x15StartBarcodingRequest\x12\x0c\n\x04name\x18\x0b \x01(\t\x12\x1f\n\x17input_reads_directories\x18\x01 \x03(\t\x12\x1e\n\x16output_reads_directory\x18\x02 \x01(\t\x12\x16\n\x0e\x63ompress_fastq\x18\x04 \x01(\x08\x12\x11\n\trecursive\x18\x05 \x01(\x08\x12[\n\x17\x62\x61rcoding_configuration\x18\n \x01(\x0b\x32:.minknow_api.analysis_configuration.BarcodingConfiguration\x12Q\n\routput_format\x18\x0c \x01(\x0e\x32:.minknow_api.basecaller.StartBarcodingRequest.OutputFormat\"\"\n\x0cOutputFormat\x12\x07\n\x03\x42\x41M\x10\x00\x12\t\n\x05\x46\x41STQ\x10\x01\"$\n\x16StartBarcodingResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\xd6\x01\n\x15StartAlignmentRequest\x12\x0c\n\x04name\x18\x07 \x01(\t\x12\x1f\n\x17input_reads_directories\x18\x01 \x03(\t\x12\x1e\n\x16output_reads_directory\x18\x02 \x01(\t\x12\x11\n\trecursive\x18\x04 \x01(\x08\x12[\n\x17\x61lignment_configuration\x18\x06 \x01(\x0b\x32:.minknow_api.analysis_configuration.AlignmentConfiguration\"$\n\x16StartAlignmentResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\xce\x03\n\"StartPostProcessingProtocolRequest\x12\x12\n\nidentifier\x18\x01 \x01(\t\x12\"\n\x1asequencing_protocol_run_id\x18\x07 \x01(\t\x12\x1d\n\x15input_fast5_directory\x18\x02 \x01(\t\x12\x1d\n\x15input_fastq_directory\x18\x03 \x01(\t\x12\x1b\n\x13input_bam_directory\x18\x04 \x01(\t\x12\x19\n\x11sample_sheet_path\x18\x08 \x01(\t\x12\x18\n\x10output_directory\x18\x05 \x01(\t\x12\x65\n\x0esetting_values\x18\x06 \x03(\x0b\x32M.minknow_api.basecaller.StartPostProcessingProtocolRequest.SettingValuesEntry\x1ay\n\x12SettingValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12R\n\x05value\x18\x02 \x01(\x0b\x32\x43.minknow_api.protocol_settings.ProtocolSetting.ProtocolSettingValue:\x02\x38\x01\"\xce\x03\n\x0cStartRequest\x12T\n\x19start_basecalling_request\x18\x02 \x01(\x0b\x32/.minknow_api.basecaller.StartBasecallingRequestH\x00\x12P\n\x17start_barcoding_request\x18\x03 \x01(\x0b\x32-.minknow_api.basecaller.StartBarcodingRequestH\x00\x12P\n\x17start_alignment_request\x18\x04 \x01(\x0b\x32-.minknow_api.basecaller.StartAlignmentRequestH\x00\x12l\n&start_post_processing_protocol_request\x18\x05 \x01(\x0b\x32:.minknow_api.basecaller.StartPostProcessingProtocolRequestH\x00\x12\x45\n\rproxy_request\x18\x06 \x01(\x0b\x32,.minknow_api.analysis_workflows.ProxyRequestH\x00\x42\x0f\n\rstart_request\"1\n#StartPostProcessingProtocolResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x1b\n\rCancelRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\x10\n\x0e\x43\x61ncelResponse\"\xb4\x05\n\x07RunInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12T\n\x19start_basecalling_request\x18\x02 \x01(\x0b\x32/.minknow_api.basecaller.StartBasecallingRequestH\x00\x12P\n\x17start_barcoding_request\x18\x0b \x01(\x0b\x32-.minknow_api.basecaller.StartBarcodingRequestH\x00\x12P\n\x17start_alignment_request\x18\x0c \x01(\x0b\x32-.minknow_api.basecaller.StartAlignmentRequestH\x00\x12l\n&start_post_processing_protocol_request\x18\r \x01(\x0b\x32:.minknow_api.basecaller.StartPostProcessingProtocolRequestH\x00\x12,\n\x05state\x18\x03 \x01(\x0e\x32\x1d.minknow_api.basecaller.State\x12\x0e\n\x06\x65rrors\x18\x04 \x03(\t\x12\x18\n\x10\x66iles_discovered\x18\x05 \x01(\x05\x12\x18\n\x10progress_current\x18\x06 \x01(\x05\x12\x16\n\x0eprogress_total\x18\x07 \x01(\x05\x12.\n\nstart_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\t \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x36\n\x12\x65stimated_end_time\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x15\n\x13start_request_oneof\"\xbc\x01\n\x0eGetInfoRequest\x12\x39\n\x06preset\x18\x01 \x01(\x0e\x32\'.minknow_api.basecaller.SelectionPresetH\x00\x12\x0c\n\x02id\x18\x02 \x01(\tH\x00\x12=\n\x04list\x18\x03 \x01(\x0b\x32-.minknow_api.basecaller.GetInfoRequest.IdListH\x00\x1a\x15\n\x06IdList\x12\x0b\n\x03ids\x18\x01 \x03(\tB\x0b\n\tselection\"@\n\x0fGetInfoResponse\x12-\n\x04runs\x18\x01 \x03(\x0b\x32\x1f.minknow_api.basecaller.RunInfo\"\x1f\n\x10\x43learInfoRequest\x12\x0b\n\x03ids\x18\x01 \x03(\t\"\x13\n\x11\x43learInfoResponse\"*\n\x0cWatchRequest\x12\x1a\n\x12send_finished_runs\x18\x01 \x01(\x08\">\n\rWatchResponse\x12-\n\x04runs\x18\x01 \x03(\x0b\x32\x1f.minknow_api.basecaller.RunInfo\"^\n\x19MakeAlignmentIndexRequest\x12!\n\x19input_alignment_reference\x18\x01 \x01(\t\x12\x1e\n\x16output_alignment_index\x18\x02 \x01(\t\"\x1c\n\x1aMakeAlignmentIndexResponse\"$\n\"ListPostProcessingProtocolsRequest\"\xa6\x01\n\x1aPostProcessingProtocolInfo\x12\x12\n\nidentifier\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\x12@\n\x08provider\x18\x05 \x01(\x0e\x32..minknow_api.basecaller.PostProcessingProvider\"l\n#ListPostProcessingProtocolsResponse\x12\x45\n\tprotocols\x18\x01 \x03(\x0b\x32\x32.minknow_api.basecaller.PostProcessingProtocolInfo\"B\n,ListSettingsForPostProcessingProtocolRequest\x12\x12\n\nidentifier\x18\x01 \x01(\t\"\xd2\x01\n-ListSettingsForPostProcessingProtocolResponse\x12\x1c\n\x14requires_fast5_input\x18\x01 \x01(\x08\x12\x1c\n\x14requires_fastq_input\x18\x02 \x01(\x08\x12\x1a\n\x12requires_bam_input\x18\x03 \x01(\x08\x12I\n\x11protocol_settings\x18\x04 \x03(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\"5\n\x15UpdateProgressRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08progress\x18\x02 \x01(\x02\"\x18\n\x16UpdateProgressResponse\"*\n\x0fSendPingRequest\x12\x17\n\tping_data\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"\x12\n\x10SendPingResponse*S\n\x05State\x12\x11\n\rSTATE_RUNNING\x10\x00\x12\x11\n\rSTATE_SUCCESS\x10\x01\x12\x0f\n\x0bSTATE_ERROR\x10\x02\x12\x13\n\x0fSTATE_CANCELLED\x10\x03*[\n\x0fSelectionPreset\x12\x16\n\x12PRESET_ALL_RUNNING\x10\x00\x12 \n\x1cPRESET_MOST_RECENTLY_STARTED\x10\x01\x12\x0e\n\nPRESET_ALL\x10\x02*0\n\x16PostProcessingProvider\x12\n\n\x06SCRIPT\x10\x00\x12\n\n\x06\x45PI2ME\x10\x01\x32\xe9\r\n\nBasecaller\x12\x80\x01\n\x13list_configs_by_kit\x12/.minknow_api.basecaller.ListConfigsByKitRequest\x1a\x30.minknow_api.basecaller.ListConfigsByKitResponse\"\x06\x88\x02\x01\x90\x02\x01\x12x\n\x11start_basecalling\x12/.minknow_api.basecaller.StartBasecallingRequest\x1a\x30.minknow_api.basecaller.StartBasecallingResponse\"\x00\x12r\n\x0fstart_barcoding\x12-.minknow_api.basecaller.StartBarcodingRequest\x1a..minknow_api.basecaller.StartBarcodingResponse\"\x00\x12\x9b\x01\n\x1estart_post_processing_protocol\x12:.minknow_api.basecaller.StartPostProcessingProtocolRequest\x1a;.minknow_api.basecaller.StartPostProcessingProtocolResponse\"\x00\x12r\n\x0fstart_alignment\x12-.minknow_api.basecaller.StartAlignmentRequest\x1a..minknow_api.basecaller.StartAlignmentResponse\"\x00\x12\\\n\x06\x63\x61ncel\x12%.minknow_api.basecaller.CancelRequest\x1a&.minknow_api.basecaller.CancelResponse\"\x03\x90\x02\x02\x12\x62\n\x08get_info\x12&.minknow_api.basecaller.GetInfoRequest\x1a\'.minknow_api.basecaller.GetInfoResponse\"\x03\x90\x02\x01\x30\x01\x12\x66\n\nclear_info\x12(.minknow_api.basecaller.ClearInfoRequest\x1a).minknow_api.basecaller.ClearInfoResponse\"\x03\x90\x02\x02\x12[\n\x05watch\x12$.minknow_api.basecaller.WatchRequest\x1a%.minknow_api.basecaller.WatchResponse\"\x03\x90\x02\x01\x30\x01\x12\x7f\n\x14make_alignment_index\x12\x31.minknow_api.basecaller.MakeAlignmentIndexRequest\x1a\x32.minknow_api.basecaller.MakeAlignmentIndexResponse\"\x00\x12\x9e\x01\n\x1elist_post_processing_protocols\x12:.minknow_api.basecaller.ListPostProcessingProtocolsRequest\x1a;.minknow_api.basecaller.ListPostProcessingProtocolsResponse\"\x03\x90\x02\x02\x12\xbe\x01\n*list_settings_for_post_processing_protocol\x12\x44.minknow_api.basecaller.ListSettingsForPostProcessingProtocolRequest\x1a\x45.minknow_api.basecaller.ListSettingsForPostProcessingProtocolResponse\"\x03\x90\x02\x01\x12\x8b\x01\n(update_post_processing_protocol_progress\x12-.minknow_api.basecaller.UpdateProgressRequest\x1a..minknow_api.basecaller.UpdateProgressResponse\"\x00\x12`\n\tsend_ping\x12\'.minknow_api.basecaller.SendPingRequest\x1a(.minknow_api.basecaller.SendPingResponse\"\x00\x42&\n\x1c\x63om.nanoporetech.minknow_api\xa2\x02\x05MKAPIb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -37,7 +37,7 @@ _globals['_SENDPINGREQUEST'].fields_by_name['ping_data']._options = None _globals['_SENDPINGREQUEST'].fields_by_name['ping_data']._serialized_options = b'\210\265\030\001' _globals['_BASECALLER'].methods_by_name['list_configs_by_kit']._options = None - _globals['_BASECALLER'].methods_by_name['list_configs_by_kit']._serialized_options = b'\220\002\001' + _globals['_BASECALLER'].methods_by_name['list_configs_by_kit']._serialized_options = b'\210\002\001\220\002\001' _globals['_BASECALLER'].methods_by_name['cancel']._options = None _globals['_BASECALLER'].methods_by_name['cancel']._serialized_options = b'\220\002\002' _globals['_BASECALLER'].methods_by_name['get_info']._options = None @@ -50,12 +50,12 @@ _globals['_BASECALLER'].methods_by_name['list_post_processing_protocols']._serialized_options = b'\220\002\002' _globals['_BASECALLER'].methods_by_name['list_settings_for_post_processing_protocol']._options = None _globals['_BASECALLER'].methods_by_name['list_settings_for_post_processing_protocol']._serialized_options = b'\220\002\001' - _globals['_STATE']._serialized_start=4999 - _globals['_STATE']._serialized_end=5082 - _globals['_SELECTIONPRESET']._serialized_start=5084 - _globals['_SELECTIONPRESET']._serialized_end=5175 - _globals['_POSTPROCESSINGPROVIDER']._serialized_start=5177 - _globals['_POSTPROCESSINGPROVIDER']._serialized_end=5225 + _globals['_STATE']._serialized_start=5039 + _globals['_STATE']._serialized_end=5122 + _globals['_SELECTIONPRESET']._serialized_start=5124 + _globals['_SELECTIONPRESET']._serialized_end=5215 + _globals['_POSTPROCESSINGPROVIDER']._serialized_start=5217 + _globals['_POSTPROCESSINGPROVIDER']._serialized_end=5265 _globals['_LISTCONFIGSBYKITREQUEST']._serialized_start=269 _globals['_LISTCONFIGSBYKITREQUEST']._serialized_end=294 _globals['_LISTCONFIGSBYKITRESPONSE']._serialized_start=297 @@ -69,123 +69,71 @@ _globals['_LISTCONFIGSBYKITRESPONSE_FLOWCELLCONFIGSENTRY']._serialized_start=681 _globals['_LISTCONFIGSBYKITRESPONSE_FLOWCELLCONFIGSENTRY']._serialized_end=797 _globals['_STARTBASECALLINGREQUEST']._serialized_start=800 - _globals['_STARTBASECALLINGREQUEST']._serialized_end=1293 - _globals['_STARTBASECALLINGRESPONSE']._serialized_start=1295 - _globals['_STARTBASECALLINGRESPONSE']._serialized_end=1333 - _globals['_STARTBARCODINGREQUEST']._serialized_start=1336 - _globals['_STARTBARCODINGREQUEST']._serialized_end=1693 - _globals['_STARTBARCODINGREQUEST_OUTPUTFORMAT']._serialized_start=1659 - _globals['_STARTBARCODINGREQUEST_OUTPUTFORMAT']._serialized_end=1693 - _globals['_STARTBARCODINGRESPONSE']._serialized_start=1695 - _globals['_STARTBARCODINGRESPONSE']._serialized_end=1731 - _globals['_STARTALIGNMENTREQUEST']._serialized_start=1734 - _globals['_STARTALIGNMENTREQUEST']._serialized_end=1948 - _globals['_STARTALIGNMENTRESPONSE']._serialized_start=1950 - _globals['_STARTALIGNMENTRESPONSE']._serialized_end=1986 - _globals['_STARTPOSTPROCESSINGPROTOCOLREQUEST']._serialized_start=1989 - _globals['_STARTPOSTPROCESSINGPROTOCOLREQUEST']._serialized_end=2451 - _globals['_STARTPOSTPROCESSINGPROTOCOLREQUEST_SETTINGVALUESENTRY']._serialized_start=2330 - _globals['_STARTPOSTPROCESSINGPROTOCOLREQUEST_SETTINGVALUESENTRY']._serialized_end=2451 - _globals['_STARTREQUEST']._serialized_start=2454 - _globals['_STARTREQUEST']._serialized_end=2916 - _globals['_STARTPOSTPROCESSINGPROTOCOLRESPONSE']._serialized_start=2918 - _globals['_STARTPOSTPROCESSINGPROTOCOLRESPONSE']._serialized_end=2967 - _globals['_CANCELREQUEST']._serialized_start=2969 - _globals['_CANCELREQUEST']._serialized_end=2996 - _globals['_CANCELRESPONSE']._serialized_start=2998 - _globals['_CANCELRESPONSE']._serialized_end=3014 - _globals['_RUNINFO']._serialized_start=3017 - _globals['_RUNINFO']._serialized_end=3709 - _globals['_GETINFOREQUEST']._serialized_start=3712 - _globals['_GETINFOREQUEST']._serialized_end=3900 - _globals['_GETINFOREQUEST_IDLIST']._serialized_start=3866 - _globals['_GETINFOREQUEST_IDLIST']._serialized_end=3887 - _globals['_GETINFORESPONSE']._serialized_start=3902 - _globals['_GETINFORESPONSE']._serialized_end=3966 - _globals['_CLEARINFOREQUEST']._serialized_start=3968 - _globals['_CLEARINFOREQUEST']._serialized_end=3999 - _globals['_CLEARINFORESPONSE']._serialized_start=4001 - _globals['_CLEARINFORESPONSE']._serialized_end=4020 - _globals['_WATCHREQUEST']._serialized_start=4022 - _globals['_WATCHREQUEST']._serialized_end=4064 - _globals['_WATCHRESPONSE']._serialized_start=4066 - _globals['_WATCHRESPONSE']._serialized_end=4128 - _globals['_MAKEALIGNMENTINDEXREQUEST']._serialized_start=4130 - _globals['_MAKEALIGNMENTINDEXREQUEST']._serialized_end=4224 - _globals['_MAKEALIGNMENTINDEXRESPONSE']._serialized_start=4226 - _globals['_MAKEALIGNMENTINDEXRESPONSE']._serialized_end=4254 - _globals['_LISTPOSTPROCESSINGPROTOCOLSREQUEST']._serialized_start=4256 - _globals['_LISTPOSTPROCESSINGPROTOCOLSREQUEST']._serialized_end=4292 - _globals['_POSTPROCESSINGPROTOCOLINFO']._serialized_start=4295 - _globals['_POSTPROCESSINGPROTOCOLINFO']._serialized_end=4461 - _globals['_LISTPOSTPROCESSINGPROTOCOLSRESPONSE']._serialized_start=4463 - _globals['_LISTPOSTPROCESSINGPROTOCOLSRESPONSE']._serialized_end=4571 - _globals['_LISTSETTINGSFORPOSTPROCESSINGPROTOCOLREQUEST']._serialized_start=4573 - _globals['_LISTSETTINGSFORPOSTPROCESSINGPROTOCOLREQUEST']._serialized_end=4639 - _globals['_LISTSETTINGSFORPOSTPROCESSINGPROTOCOLRESPONSE']._serialized_start=4642 - _globals['_LISTSETTINGSFORPOSTPROCESSINGPROTOCOLRESPONSE']._serialized_end=4852 - _globals['_UPDATEPROGRESSREQUEST']._serialized_start=4854 - _globals['_UPDATEPROGRESSREQUEST']._serialized_end=4907 - _globals['_UPDATEPROGRESSRESPONSE']._serialized_start=4909 - _globals['_UPDATEPROGRESSRESPONSE']._serialized_end=4933 - _globals['_SENDPINGREQUEST']._serialized_start=4935 - _globals['_SENDPINGREQUEST']._serialized_end=4977 - _globals['_SENDPINGRESPONSE']._serialized_start=4979 - _globals['_SENDPINGRESPONSE']._serialized_end=4997 - _globals['_BASECALLER']._serialized_start=5228 - _globals['_BASECALLER']._serialized_end=6993 -StartBasecallingResponse.__doc__ = """Attributes: - id: - An identifier for the basecalling run that was started. This - can be used to monitor or cancel the run. -""" -RunInfo.__doc__ = """Attributes: - id: - The ID of the run, as returned by start(). - start_request_oneof: - The original message used to start the run. - start_basecalling_request: - Set if basecalling reads - start_barcoding_request: - Set if barcoding reads - start_alignment_request: - Set if aligning reads - start_post_processing_protocol_request: - Set if aligning reads - state: - What state the run is in. While the basecalling is running - the state field will be ``STATE_RUNNING``. - errors: - If state is STATE_ERROR, this will contain (some of) the - errors encountered. Note that if there are a lot of errors, - only some may be returned. - files_discovered: - The number of files selected for input. - progress_current: - The current basecalling progress (with respect to - progress_total). This is intended to be an estimate of how - close to completion the basecalling run is. The numbers have - no particular meaning other than as a proportion of - progress_total. Note that this only really has useful meaning - while state is STATE_RUNNING. On STATE_SUCCESS, it will always - be the same as progress_total. On STATE_ERROR or - STATE_CANCELLED, it may give some indication of how far - through basecalling was when it failed or was cancelled. - progress_total: - The maximum value of progress_current. (progress_current / - progress_total) * 100 will give a percentage completion. If - this is 0, it should be interpreted as "unknown progress". - start_time: - When basecalling was started (UTC). - end_time: - When basecalling ended (UTC). Unset if basecalling is still - running. - estimated_end_time: - An estimate for when basecalling will end (UTC). Unset if - basecalling has finished, or if an estimate cannot be - calculated (eg: because the baescalling software does not - support it). Since 3.6. -""" + _globals['_STARTBASECALLINGREQUEST']._serialized_end=1333 + _globals['_STARTBASECALLINGRESPONSE']._serialized_start=1335 + _globals['_STARTBASECALLINGRESPONSE']._serialized_end=1373 + _globals['_STARTBARCODINGREQUEST']._serialized_start=1376 + _globals['_STARTBARCODINGREQUEST']._serialized_end=1733 + _globals['_STARTBARCODINGREQUEST_OUTPUTFORMAT']._serialized_start=1699 + _globals['_STARTBARCODINGREQUEST_OUTPUTFORMAT']._serialized_end=1733 + _globals['_STARTBARCODINGRESPONSE']._serialized_start=1735 + _globals['_STARTBARCODINGRESPONSE']._serialized_end=1771 + _globals['_STARTALIGNMENTREQUEST']._serialized_start=1774 + _globals['_STARTALIGNMENTREQUEST']._serialized_end=1988 + _globals['_STARTALIGNMENTRESPONSE']._serialized_start=1990 + _globals['_STARTALIGNMENTRESPONSE']._serialized_end=2026 + _globals['_STARTPOSTPROCESSINGPROTOCOLREQUEST']._serialized_start=2029 + _globals['_STARTPOSTPROCESSINGPROTOCOLREQUEST']._serialized_end=2491 + _globals['_STARTPOSTPROCESSINGPROTOCOLREQUEST_SETTINGVALUESENTRY']._serialized_start=2370 + _globals['_STARTPOSTPROCESSINGPROTOCOLREQUEST_SETTINGVALUESENTRY']._serialized_end=2491 + _globals['_STARTREQUEST']._serialized_start=2494 + _globals['_STARTREQUEST']._serialized_end=2956 + _globals['_STARTPOSTPROCESSINGPROTOCOLRESPONSE']._serialized_start=2958 + _globals['_STARTPOSTPROCESSINGPROTOCOLRESPONSE']._serialized_end=3007 + _globals['_CANCELREQUEST']._serialized_start=3009 + _globals['_CANCELREQUEST']._serialized_end=3036 + _globals['_CANCELRESPONSE']._serialized_start=3038 + _globals['_CANCELRESPONSE']._serialized_end=3054 + _globals['_RUNINFO']._serialized_start=3057 + _globals['_RUNINFO']._serialized_end=3749 + _globals['_GETINFOREQUEST']._serialized_start=3752 + _globals['_GETINFOREQUEST']._serialized_end=3940 + _globals['_GETINFOREQUEST_IDLIST']._serialized_start=3906 + _globals['_GETINFOREQUEST_IDLIST']._serialized_end=3927 + _globals['_GETINFORESPONSE']._serialized_start=3942 + _globals['_GETINFORESPONSE']._serialized_end=4006 + _globals['_CLEARINFOREQUEST']._serialized_start=4008 + _globals['_CLEARINFOREQUEST']._serialized_end=4039 + _globals['_CLEARINFORESPONSE']._serialized_start=4041 + _globals['_CLEARINFORESPONSE']._serialized_end=4060 + _globals['_WATCHREQUEST']._serialized_start=4062 + _globals['_WATCHREQUEST']._serialized_end=4104 + _globals['_WATCHRESPONSE']._serialized_start=4106 + _globals['_WATCHRESPONSE']._serialized_end=4168 + _globals['_MAKEALIGNMENTINDEXREQUEST']._serialized_start=4170 + _globals['_MAKEALIGNMENTINDEXREQUEST']._serialized_end=4264 + _globals['_MAKEALIGNMENTINDEXRESPONSE']._serialized_start=4266 + _globals['_MAKEALIGNMENTINDEXRESPONSE']._serialized_end=4294 + _globals['_LISTPOSTPROCESSINGPROTOCOLSREQUEST']._serialized_start=4296 + _globals['_LISTPOSTPROCESSINGPROTOCOLSREQUEST']._serialized_end=4332 + _globals['_POSTPROCESSINGPROTOCOLINFO']._serialized_start=4335 + _globals['_POSTPROCESSINGPROTOCOLINFO']._serialized_end=4501 + _globals['_LISTPOSTPROCESSINGPROTOCOLSRESPONSE']._serialized_start=4503 + _globals['_LISTPOSTPROCESSINGPROTOCOLSRESPONSE']._serialized_end=4611 + _globals['_LISTSETTINGSFORPOSTPROCESSINGPROTOCOLREQUEST']._serialized_start=4613 + _globals['_LISTSETTINGSFORPOSTPROCESSINGPROTOCOLREQUEST']._serialized_end=4679 + _globals['_LISTSETTINGSFORPOSTPROCESSINGPROTOCOLRESPONSE']._serialized_start=4682 + _globals['_LISTSETTINGSFORPOSTPROCESSINGPROTOCOLRESPONSE']._serialized_end=4892 + _globals['_UPDATEPROGRESSREQUEST']._serialized_start=4894 + _globals['_UPDATEPROGRESSREQUEST']._serialized_end=4947 + _globals['_UPDATEPROGRESSRESPONSE']._serialized_start=4949 + _globals['_UPDATEPROGRESSRESPONSE']._serialized_end=4973 + _globals['_SENDPINGREQUEST']._serialized_start=4975 + _globals['_SENDPINGREQUEST']._serialized_end=5017 + _globals['_SENDPINGRESPONSE']._serialized_start=5019 + _globals['_SENDPINGRESPONSE']._serialized_end=5037 + _globals['_BASECALLER']._serialized_start=5268 + _globals['_BASECALLER']._serialized_end=7037 WatchResponse.__doc__ = """Attributes: runs: The current state of some of the runs. @@ -196,42 +144,13 @@ removed_values: The values that have been removed. """ -StartPostProcessingProtocolRequest.__doc__ = """Attributes: - identifier: - identifier value from a protocol returned from - list_post_processing_protocols. - sequencing_protocol_run_id: - Optionally specify a sequencing protocol that is linked with - this analysis. - input_fast5_directory: - Input directories for the protocol (omit those which the - protocol doesn't require). - sample_sheet_path: - Path to the sample sheet output by minknow - output_directory: - Output directory where the analysed output should be written. - setting_values: - Configured values for display settings for the protocol (see - basecaller.list_settings_for_protocol) keys missing from the - original protocol will cause errors. -""" -SendPingResponse.__doc__ = """Since 5.0""" -GetInfoRequest.__doc__ = """Attributes: - selection: - The selection of runs to return information about. If no - selection is provided, the call will return all currently- - running basecall runs (as though PRESET_ALL_RUNNING were - selected). - preset: - A pre-determined selection of runs. - id: - An identifier, as returned by start(). - list: - A list of identifiers, as returned by start(). +GetInfoResponse.__doc__ = """Attributes: + runs: + Information about the requested runs. """ -StartBarcodingRequest.__doc__ = """Attributes: +StartBasecallingRequest.__doc__ = """Attributes: name: - User specified name to identify the barcoding run. + User specified name to identify the basecall run. input_reads_directories: Input directories to search for reads to be basecalled. Currently, only one directory can be specified, but this @@ -241,10 +160,23 @@ Output directory where called reads will be placed. Reads will be sorted into subdirectories based on the sequencing run they came from. + configuration: + The name of the basecalling configuration to use. + fast5_out: + Enable output of .fast5 files containing original raw reads, + event data/trace table from basecall and basecall result + sequence. This causes .fast5 files to be output in addition + to FASTQ files. DEPRECATED: This option does not have any + effect - the basecaller no longer has the ability to write + fast5 files. compress_fastq: - Enable gzip compression of output FASTQ files. DEPRECATED: - This option does not have any effect - the offline barcoding - no longer has the ability to compress fastq output. + Enable gzip compression of output FASTQ files. + disable_events: + Prevent events / trace tables being written to .fast5 files. + If event tables are not required for downstream processing + (eg: for 1d^2) then it is more efficient (and produces smaller + files) to disable them. This has no effect if ``fast5_out`` + is not enabled. recursive: Recursively find fast5 files to basecall in the `input_reads_directories`. If False, only the fast5 files @@ -254,20 +186,46 @@ barcoding_configuration: Options to control barcoding performed once basecalling reads is complete. - output_format: - The type of file format to use for the output, default is BAM. + alignment_configuration: + Options to control alignment performed once basecalling reads + is complete. + min_qscore: + Minimum Q-Score for a read to be passed by the basecaller. + Since 6.1. + enable_read_splitting: + Enable read splitting in the basecaller Note: Since 5.9 this + option has no effect, the basecaller is responsible for + deciding when read splitting should be enabled. + min_score_read_splitting: + Override score to use for the basecaller read splitting. If + not specified a default value is used from the basecaller. + Note: Since 5.9 this option has no effect, the basecaller is + responsible for deciding when read splitting should be + enabled. """ -MakeAlignmentIndexRequest.__doc__ = """Attributes: - input_alignment_reference: - Input fasta reference to use for building the index. - output_alignment_index: - Output file path to write index (mmi file) to. Must have a - ".mmi" extension, and the paths parent directory must exist. +StartPostProcessingProtocolRequest.__doc__ = """Attributes: + identifier: + identifier value from a protocol returned from + list_post_processing_protocols. + sequencing_protocol_run_id: + Optionally specify a sequencing protocol that is linked with + this analysis. + input_fast5_directory: + Input directories for the protocol (omit those which the + protocol doesn't require). + sample_sheet_path: + Path to the sample sheet output by minknow + output_directory: + Output directory where the analysed output should be written. + setting_values: + Configured values for display settings for the protocol (see + basecaller.list_settings_for_protocol) keys missing from the + original protocol will cause errors. """ -ListConfigsByKitResponse.__doc__ = """Attributes: - flow_cell_configs: - Key: flow cell type (eg: "FLO-MIN107") Value: FlowCellConfigs - describing configurations available for that flow cell. +StartAlignmentResponse.__doc__ = """Attributes: + id: + An identifier for the alignment run that was started. This can + be used to monitor or cancel the run. """ StartAlignmentRequest.__doc__ = """Attributes: name: @@ -289,9 +247,40 @@ Options to control alignment performed once basecalling reads is complete. """ -GetInfoResponse.__doc__ = """Attributes: - runs: - Information about the requested runs. +PostProcessingProtocolInfo.__doc__ = """Attributes: + identifier: + System identifier for the protocol + name: + Readable name for the protocol (appropriate for use as a key + in translation database). Note that this may not be unique: + in particular, the EPI2ME provider lists every version of a + workflow as a separate post-processing protocol. + version: + Protocol version. This might not be set for all protocols or + all providers. + description: + A description of the protocol. + provider: + The source of the post-processing protocol. +""" +WatchRequest.__doc__ = """Attributes: + send_finished_runs: + By default, no information will be sent about runs that were + already finished when this call was made. Setting this to true + will cause the state of already-finished runs to be returned. + names: + The names of the values you wish to watch. + allow_missing: + Whether to allow missing values. If set, names that are not + present in the store will be omitted from the first response, + but will still be watched. If and when they are added, a + message will be sent with the set values. Otherwise, missing + values will cause an immediate error. Defaults to 'false' +""" +StartPostProcessingProtocolResponse.__doc__ = """Attributes: + id: + An identifier for the protocol run that was started. This can + be used to monitor or cancel the run. """ StartRequest.__doc__ = """ Protobuf messages for input/output of RPC calls @@ -368,16 +357,19 @@ proxy_request: Since 5.8 """ -ListSettingsForPostProcessingProtocolRequest.__doc__ = """Attributes: - identifier: - specify the protocol with a string containing all the - protocol's identifying components, eg: - "SYSTEM:post_processing/artic" -""" -ListConfigsByKitResponse.ConfigList.__doc__ = """Attributes: - configs: - List of configuration names, to be used in - ``StartBasecallingRequest.configuration`` +SendPingResponse.__doc__ = """Since 5.0""" +GetInfoRequest.__doc__ = """Attributes: + selection: + The selection of runs to return information about. If no + selection is provided, the call will return all currently- + running basecall runs (as though PRESET_ALL_RUNNING were + selected). + preset: + A pre-determined selection of runs. + id: + An identifier, as returned by start(). + list: + A list of identifiers, as returned by start(). """ ListSettingsForPostProcessingProtocolResponse.__doc__ = """Attributes: requires_fast5_input: @@ -389,33 +381,82 @@ protocol_settings: List of protocol settings used by the post processing protocol """ -WatchRequest.__doc__ = """Attributes: - send_finished_runs: - By default, no information will be sent about runs that were - already finished when this call was made. Setting this to true - will cause the state of already-finished runs to be returned. - names: - The names of the values you wish to watch. - allow_missing: - Whether to allow missing values. If set, names that are not - present in the store will be omitted from the first response, - but will still be watched. If and when they are added, a - message will be sent with the set values. Otherwise, missing - values will cause an immediate error. Defaults to 'false' +ListConfigsByKitResponse.PerFlowCell.__doc__ = """Attributes: + kit_configs: + Key: kit name (eg: "SQK-LSK109") Value: list of configuration + names """ -SendPingRequest.__doc__ = """Since 5.0 - -Attributes: - ping_data: - The json data to send as a ping. note: if this string is not - a valid json object, an error will be raised. - days_until_expiry: - Should the ping fail to send, the number of days the ping will - be stored before being cleaned up. +UpdateProgressRequest.__doc__ = """Attributes: + id: + id of the protocol to update (stored in environment variable + for python process) + progress: + Progress indicator, 0-1. """ -StartBasecallingRequest.__doc__ = """Attributes: +StartBasecallingResponse.__doc__ = """Attributes: + id: + An identifier for the basecalling run that was started. This + can be used to monitor or cancel the run. +""" +RunInfo.__doc__ = """Attributes: + id: + The ID of the run, as returned by start(). + start_request_oneof: + The original message used to start the run. + start_basecalling_request: + Set if basecalling reads + start_barcoding_request: + Set if barcoding reads + start_alignment_request: + Set if aligning reads + start_post_processing_protocol_request: + Set if aligning reads + state: + What state the run is in. While the basecalling is running + the state field will be ``STATE_RUNNING``. + errors: + If state is STATE_ERROR, this will contain (some of) the + errors encountered. Note that if there are a lot of errors, + only some may be returned. + files_discovered: + The number of files selected for input. + progress_current: + The current basecalling progress (with respect to + progress_total). This is intended to be an estimate of how + close to completion the basecalling run is. The numbers have + no particular meaning other than as a proportion of + progress_total. Note that this only really has useful meaning + while state is STATE_RUNNING. On STATE_SUCCESS, it will always + be the same as progress_total. On STATE_ERROR or + STATE_CANCELLED, it may give some indication of how far + through basecalling was when it failed or was cancelled. + progress_total: + The maximum value of progress_current. (progress_current / + progress_total) * 100 will give a percentage completion. If + this is 0, it should be interpreted as "unknown progress". + start_time: + When basecalling was started (UTC). + end_time: + When basecalling ended (UTC). Unset if basecalling is still + running. + estimated_end_time: + An estimate for when basecalling will end (UTC). Unset if + basecalling has finished, or if an estimate cannot be + calculated (eg: because the baescalling software does not + support it). Since 3.6. +""" +CancelRequest.__doc__ = """Attributes: + id: + An identifier as returned from a call to start() or list(). +""" +ListConfigsByKitResponse.ConfigList.__doc__ = """Attributes: + configs: + List of configuration names, to be used in + ``StartBasecallingRequest.configuration`` +""" +StartBarcodingRequest.__doc__ = """Attributes: name: - User specified name to identify the basecall run. + User specified name to identify the barcoding run. input_reads_directories: Input directories to search for reads to be basecalled. Currently, only one directory can be specified, but this @@ -425,23 +466,10 @@ Output directory where called reads will be placed. Reads will be sorted into subdirectories based on the sequencing run they came from. - configuration: - The name of the basecalling configuration to use. - fast5_out: - Enable output of .fast5 files containing original raw reads, - event data/trace table from basecall and basecall result - sequence. This causes .fast5 files to be output in addition - to FASTQ files. DEPRECATED: This option does not have any - effect - the basecaller no longer has the ability to write - fast5 files. compress_fastq: - Enable gzip compression of output FASTQ files. - disable_events: - Prevent events / trace tables being written to .fast5 files. - If event tables are not required for downstream processing - (eg: for 1d^2) then it is more efficient (and produces smaller - files) to disable them. This has no effect if ``fast5_out`` - is not enabled. + Enable gzip compression of output FASTQ files. DEPRECATED: + This option does not have any effect - the offline barcoding + no longer has the ability to compress fastq output. recursive: Recursively find fast5 files to basecall in the `input_reads_directories`. If False, only the fast5 files @@ -451,65 +479,40 @@ barcoding_configuration: Options to control barcoding performed once basecalling reads is complete. - alignment_configuration: - Options to control alignment performed once basecalling reads - is complete. - enable_read_splitting: - Enable read splitting in the basecaller Note: Since 5.9 this - option has no effect, the basecaller is responsible for - deciding when read splitting should be enabled. - min_score_read_splitting: - Override score to use for the basecaller read splitting. If - not specified a default value is used from the basecaller. - Note: Since 5.9 this option has no effect, the basecaller is - responsible for deciding when read splitting should be - enabled. + output_format: + The type of file format to use for the output, default is BAM. """ -CancelRequest.__doc__ = """Attributes: - id: - An identifier as returned from a call to start() or list(). +ListSettingsForPostProcessingProtocolRequest.__doc__ = """Attributes: + identifier: + specify the protocol with a string containing all the + protocol's identifying components, eg: + "SYSTEM:post_processing/artic" """ -StartAlignmentResponse.__doc__ = """Attributes: - id: - An identifier for the alignment run that was started. This can - be used to monitor or cancel the run. +SendPingRequest.__doc__ = """Since 5.0 + +Attributes: + ping_data: + The json data to send as a ping. note: if this string is not + a valid json object, an error will be raised. + days_until_expiry: + Should the ping fail to send, the number of days the ping will + be stored before being cleaned up. +""" +MakeAlignmentIndexRequest.__doc__ = """Attributes: + input_alignment_reference: + Input fasta reference to use for building the index. + output_alignment_index: + Output file path to write index (mmi file) to. Must have a + ".mmi" extension, and the paths parent directory must exist. +""" +ListConfigsByKitResponse.__doc__ = """Attributes: + flow_cell_configs: + Key: flow cell type (eg: "FLO-MIN107") Value: FlowCellConfigs + describing configurations available for that flow cell. """ StartBarcodingResponse.__doc__ = """Attributes: id: An identifier for the basecalling run that was started. This can be used to monitor or cancel the run. """ -UpdateProgressRequest.__doc__ = """Attributes: - id: - id of the protocol to update (stored in environment variable - for python process) - progress: - Progress indicator, 0-1. -""" -PostProcessingProtocolInfo.__doc__ = """Attributes: - identifier: - System identifier for the protocol - name: - Readable name for the protocol (appropriate for use as a key - in translation database). Note that this may not be unique: - in particular, the EPI2ME provider lists every version of a - workflow as a separate post-processing protocol. - version: - Protocol version. This might not be set for all protocols or - all providers. - description: - A description of the protocol. - provider: - The source of the post-processing protocol. -""" -StartPostProcessingProtocolResponse.__doc__ = """Attributes: - id: - An identifier for the protocol run that was started. This can - be used to monitor or cancel the run. -""" -ListConfigsByKitResponse.PerFlowCell.__doc__ = """Attributes: - kit_configs: - Key: kit name (eg: "SQK-LSK109") Value: list of configuration - names -""" # @@protoc_insertion_point(module_scope) diff --git a/python/minknow_api/basecaller_pb2_grpc.py b/python/minknow_api/basecaller_pb2_grpc.py index 6e7a0e7..096b482 100644 --- a/python/minknow_api/basecaller_pb2_grpc.py +++ b/python/minknow_api/basecaller_pb2_grpc.py @@ -107,6 +107,8 @@ def list_configs_by_kit(self, request, context): """List the available basecalling configurations sorted by flow cell and kit. Since 3.5 + + DEPRECATED: This rpc is no longer supported and does not return any results. """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') diff --git a/python/minknow_api/basecaller_service.py b/python/minknow_api/basecaller_service.py index 1980a0e..2ac03c9 100644 --- a/python/minknow_api/basecaller_service.py +++ b/python/minknow_api/basecaller_service.py @@ -91,6 +91,8 @@ def list_configs_by_kit(self, _message=None, _timeout=None, **kwargs): Since 3.5 + DEPRECATED: This rpc is no longer supported and does not return any results. + This RPC has no side effects. Calling it will have no effect on the state of the system. It is safe to call repeatedly, or to retry on failure, although there is no guarantee it will return the same information each time. @@ -166,6 +168,9 @@ def start_basecalling(self, _message=None, _timeout=None, **kwargs): basecalled. If True, subdirectories of those directories will also be searched recursively. barcoding_configuration (minknow_api.analysis_configuration_pb2.BarcodingConfiguration, optional): Options to control barcoding performed once basecalling reads is complete. alignment_configuration (minknow_api.analysis_configuration_pb2.AlignmentConfiguration, optional): Options to control alignment performed once basecalling reads is complete. + min_qscore (float, optional): Minimum Q-Score for a read to be passed by the basecaller. + + Since 6.1. enable_read_splitting (bool, optional): Enable read splitting in the basecaller Note: Since 5.9 this option has no effect, the basecaller is responsible for deciding when read splitting should be enabled. @@ -232,6 +237,10 @@ def start_basecalling(self, _message=None, _timeout=None, **kwargs): unused_args.remove("alignment_configuration") _message.alignment_configuration.CopyFrom(kwargs['alignment_configuration']) + if "min_qscore" in kwargs: + unused_args.remove("min_qscore") + _message.min_qscore = kwargs['min_qscore'] + if "enable_read_splitting" in kwargs: unused_args.remove("enable_read_splitting") _message.enable_read_splitting = kwargs['enable_read_splitting'] diff --git a/python/minknow_api/data_pb2.py b/python/minknow_api/data_pb2.py index 9373ca3..cd87162 100644 --- a/python/minknow_api/data_pb2.py +++ b/python/minknow_api/data_pb2.py @@ -185,6 +185,106 @@ _globals['_GETEXPERIMENTYIELDINFORESPONSE_FILEOPERATIONQUEUEPROGRESS_FILETYPEINFO']._serialized_end=9964 _globals['_DATASERVICE']._serialized_start=9967 _globals['_DATASERVICE']._serialized_end=11297 +GetReadStatisticsResponse.PerClassificationData.__doc__ = """Attributes: + duration_statistics: + Statistics of read (chunk) durations. These will be in the + same units as the requested duration (if you ask for X seconds + of data, you will get durations back in seconds, but if you + ask for X samples of data, you will get durations back in + samples). NB: statistics may be estimates. + current_statistics: + Statistics for all current (signal) values for all reads under + this channel/configuration/classification combination. NB: + Statistics are calculated from raw data. + chunk_statistics: + Statistics generated from the analysed read chunks (or + complete reads), rather than the raw signal. + samples_duration: + The number of samples seen with this classification on this + channel in this channel configuration. + seconds_duration: + The number of seconds spent in this classification on this + channel in this channel configuration. This is the same as + ``samples_duration``, but expressed in seconds. +""" +GetLiveReadsRequest.UnblockAction.__doc__ = """Attributes: + duration: + Duration of unblock in seconds. +""" +GetLiveReadsRequest.Action.__doc__ = """removed since 6.0 + +Attributes: + channel: + Channel name to unblock + read: + Identifier for the read to act on. If the read requested is + no longer in progress, the action fails. + unblock: + Unblock a read and skip further data from this read. + stop_further_data: + Skip further data from this read, doesn't affect the read + data. +""" +LockChannelStatesRequest.__doc__ = """Attributes: + channels: + The channels that we want to 'deactivate' = set them to the + given state until we re-activate them with + unlock_channel_states If the channels are already deactivated, + it will update the state to the new forced state given (if + different). Channels are indexed from 1. + state_name: + Channel state name as specified in the channel state + configuration. It HAS to be different to 'unclassified', which + denotes that the channel is active, but had not met any + successful criteria yet. +""" +GetReadStatisticsResponse.PerConfigurationData.__doc__ = """Attributes: + channel_configuration: + The channel configuration active during the reads these + statistics were gathered for. + classifications: + Map from classification names to statistics about read + (chunks) with that classification. + incomplete: + If statistics about complete reads were requested, this field + may contain data for a final, incomplete read (whose + classification is therefore unknown). This field will not be + set if read chunks were requested, or if the data capture + happened to end at a complete read boundary. +""" +GetDataTypesResponse.DataType.__doc__ = """Attributes: + type: + The basic type of the data item. + big_endian: + Whether the type is big-endian (high-byte first). For numeric + data types, if this is not set, they are little-endian (low- + byte first). + size: + The size of the data type in bytes. +""" +GetSignalMinMaxResponse.__doc__ = """Attributes: + samples_since_start: + The number of samples collected before the first sample + included in this response. This gives the position of the + first data point on each channel in the overall stream of data + being acquired from the device (since this period of data + acquisition was started). + seconds_since_start: + The number of seconds elapsed since data acquisition started. + This is the same as ``samples_since_start``, but expressed in + seconds. + skipped_channels: + The number of channels omitted at the start of the + ``channels`` array. + channels: + The window bounds for each requested channel. Note that + ``skipped_channels`` must be used to determine which channels + are given here, as not all channels will be included in every + message. The channels that are provided are contiguous and in + order, with the first channel being ``first_channel + + skipped_channels`` (where ``first_channel`` is from the + request message). +""" GetReadStatisticsResponse.ChunkStatistics.__doc__ = """Attributes: median_sd: Aggregated median_sd value from all classified reads. Computed @@ -196,6 +296,61 @@ Aggregated range value from all classified reads. Computed as median(q90[...] - q10[...]) """ +GetSignalMinMaxRequest.__doc__ = """Attributes: + first_channel: + The first channel (inclusive) to return data for. Note that + channel numbering starts at 1. + last_channel: + The last channel (inclusive) to return data for. Note that + channel numbering starts at 1. + window_size: + The size of window to summarise. A value of zero will be + rejected; there is no default. + calibrated_data: + Whether the data should be calibrated. +""" +GetChannelStatesResponse.ChannelStateData.__doc__ = """Attributes: + channel: + Represents the channel number, indexed from one. (i.e. what + channel did the channel state change happened on) + state: + depending on the channel state request, MinKNOW can fill in + either the name or the criteria id of the channel state. The + criteria id (or state_id) is the number passed in the channel + states configuration. Note that MinKNOW also has some default + channel states (like unclassified, pending mux change) which + receive unique ids - these are numbers bigger than 200. + acquisition_raw_index: + Indices of when the channel state was first seen. For example, + if a request is done half way through the experiment, the + first message will contain the current state on the requested + channels. The acquisition/analysis index of these would be + from when the channel states were set. These are exactly the + same numbers we see in the bulk file, in the 'states' table + config: + Channel config (mux state) the channel state was determined + on. +""" +GetReadStatisticsResponse.PerChannelData.__doc__ = """Attributes: + configurations: + Data for each channel configuration seen on this channel. + Note that each channel configuration will only appear once in + this list, and this list is *not* in any way ordered by time. + The only reason it is not a map is because of restrictions on + map key types. + samples_since_start: + The number of samples collected before this channel's first + sample. + seconds_since_start: + The number of seconds elapsed since data acquisition started. + This is the same as ``samples_since_start``, but expressed in + seconds. + samples_duration: + The number of samples collected for this channel. + seconds_duration: + The number of seconds of data captured for this session. This + is the same as ``samples_duration``, but expressed in seconds. +""" GetSignalMinMaxResponse.ChannelData.__doc__ = """Attributes: calibrated_minima: The minimum value for each window. The type of the elements @@ -218,18 +373,99 @@ uncalibrated data. This is guaranteed to be the same size as the respective foo_minima field. """ -LockChannelStatesRequest.__doc__ = """Attributes: +GetSignalBytesResponse.ChannelData.__doc__ = """Attributes: + data: + The signal data. This is the byte representation of a C-style + array of values. Values are stored in order and adjacent to + each other. The type of the elements will depend on whether + calibrated data was chosen. The get_data_types() RPC call + should be used to determine the precise format of the data, + but in general terms, uncalibrated data will be signed + integers and calibrated data will be floating-point numbers. + Returning the data in this format allows it to be efficiently + processed in dynamic languages that can pass the data straight + down to a native runtime. For example, in Python, this data + can be interpreted directly into a numpy array using + numpy.fromstring(). Calibrated data is in picoamps. + Uncalibrated data is the raw values output by the device's ADC + (analogue-digital converter). + config_changes: + The configuration changes on the channel during data + collection. If channel configuration changes were requested, + this will contain all the channel configuration changes that + affect the returned data. This will include at least one + element, with offset 0, that describes the configuration at + the time the first sample was taken. Note that the offset is + the zero-based index into the adc or picoamps list. The + changes will be ordered by offset. +""" +GetLiveReadsRequest.__doc__ = """Attributes: + setup: + Read setup request, initialises channel numbers and type of + data returned. note: Must be specified in the first message + sent to MinKNOW. Once MinKNOW has the first setup message + reads are sent to the caller as requested. The user can then + resend a setup message as frequently as they need to in order + to reconfigure live reads - for example by changing if raw + data is sent with reads or not. + actions: + Actions to take given data returned to the user - can only be + sent once the setup message above has been sent. +""" +GetReadStatisticsResponse.__doc__ = """Attributes: channels: - The channels that we want to 'deactivate' = set them to the - given state until we re-activate them with - unlock_channel_states If the channels are already deactivated, - it will update the state to the new forced state given (if - different). Channels are indexed from 1. - state_name: - Channel state name as specified in the channel state - configuration. It HAS to be different to 'unclassified', which - denotes that the channel is active, but had not met any - successful criteria yet. + Data for each requested channel, in the same order as + requested. + samples_since_start: + The number of samples collected before the first sample + included in this response. This gives the position of the + first data point which all channels share in the calculated + statistics. Each individual channel may have samples from read + chunks previous to this sample due to read boundaries not + being consistent across channels. + seconds_since_start: + The number of seconds elapsed before the first sample included + in this response. This is the same as + ``samples_since_start``, but expressed in seconds. +""" +GetSignalBytesResponse.ChannelConfigChange.__doc__ = """Attributes: + config: + The new channel configuration. + offset: + The offset in the returned data where the change was applied. +""" +GetChannelStatesRequest.__doc__ = """Attributes: + first_channel: + The first channel (inclusive) to return data for. Note that + channel numbering starts at 1. + last_channel: + The last channel (inclusive) to return data for. Note that + channel numbering starts at 1. + use_channel_states_ids: + If this is true, the returned messages will contain the + channel state id as opposed to the name. By default, the + response will contain channel states names. + wait_for_processing: + If `wait_for_processing` is true, then get_channel_states will + wait until minknow starts acquiring data instead of returning + with an error Defaults to false + heartbeat: + Ensure the stream sends a message at least this often. There + will usually be multiple channel updates a second, but in some + circumstances (eg: a flow cell with no sample loaded) there + can be long periods of time without updates. Setting this + value will ensure that if this period of time passes without + there being any channel state changes to report, an empty + message will be sent. This can be useful to force a minimum + wakeup interval in the client code. +""" +GetChannelStatesResponse.__doc__ = """Attributes: + channel_states: + The streamed data for all channels will be appended to this + vector. After the request is made, all the channel state + changes are streamed through this array. This is implemented + in the idea of a sparse array because we can have channels + that remain in the same state for a long time. """ GetLiveReadsResponse.ReadData.__doc__ = """removed since 6.0 @@ -256,7 +492,7 @@ floating-point numbers. median_before: The median of the read previous to this read. intended to - allow querying of the approximate level of this read, comapred + allow querying of the approximate level of this read, compared to the last. For example, a user could try to verify this is a strand be ensuring the median of the current read is lower than the median_before level. @@ -264,215 +500,71 @@ The media pA level of this read from all aggregated read chunks so far. previous_read_classification: - The classification of the chunk prior to this read starting. - previous_read_end_reason: - The classification of the chunk prior to this read starting. -""" -GetReadStatisticsRequest.__doc__ = """Attributes: - channels: - List of channels required, indexed from 1. - duration: - How long to collect the statistics for - no_current_statistics: - Disable current_statistics results in returned data. Intended - for use when the consumer doesn't need specific fields - allowing the implementation to be more efficient. - no_chunk_statistics: - Disable chunk_statistics results in returned data. Intended - for use when the consumer doesn't need specific fields - allowing the implementation to be more efficient. - required_classifications: - Specify classifications which the user wants information - about. The default behaviour (when empty) is to return - information on all classifications. Specifying which - classifications the user needs information about may allow the - implementation to be more efficient. -""" -GetDataTypesResponse.__doc__ = """Attributes: - uncalibrated_signal: - The format of the uncalibrated (ADC) signal data returned by - get_raw_signal_bytes(). In the current release, this will - describe 16-bit little-endian integers. - calibrated_signal: - The format of the calibrated (picoamp) signal data returned by - get_raw_signal_bytes(). In the current release, this will - describe 32-bit IEEE 754 floating point values. - bias_voltages: - The format of the bias voltage data returned by - get_raw_signal_bytes(). In the current release, this will - describe 16-bit little-endian integers. -""" -GetReadStatisticsResponse.Statistics.__doc__ = """Attributes: - q_5: - Quantiles (percentiles) -""" -GetChannelStatesResponse.ChannelStateData.__doc__ = """Attributes: - channel: - Represents the channel number, indexed from one. (i.e. what - channel did the channel state change happened on) - state: - depending on the channel state request, MinKNOW can fill in - either the name or the criteria id of the channel state. The - criteria id (or state_id) is the number passed in the channel - states configuration. Note that MinKNOW also has some default - channel states (like unclassified, pending mux change) which - receive unique ids - these are numbers bigger than 200. - acquisition_raw_index: - Indices of when the channel state was first seen. For example, - if a request is done half way through the experiment, the - first message will contain the current state on the requested - channels. The acquisition/analysis index of these would be - from when the channel states were set. These are exactly the - same numbers we see in the bulk file, in the 'states' table - config: - Channel config (mux state) the channel state was determined - on. -""" -GetLiveReadsRequest.UnblockAction.__doc__ = """Attributes: - duration: - Duration of unblock in seconds. -""" -GetLiveReadsResponse.__doc__ = """NOTE that the read metrics below are tracked from the receipt of the -first StreamSetup message. It is advised that the first StreamSetup be -sent close to the experiment start time for maximum accuracy. - -Attributes: - samples_since_start: - The number of samples collected before the first sample - included in this response. This gives the position of the - first data point on each channel in the overall stream of data - being acquired from the device (since this period of data - acquisition was started). - seconds_since_start: - The number of seconds elapsed since data acquisition started. - This is the same as ``samples_since_start``, but expressed in - seconds. - channels: - In progress reads for the requested channels. Sparsely - populated as not all channels have new/incomplete reads. - action_responses: - List of responses to requested actions, informing the caller - of results to requested unblocks or discards of data. -""" -RecordAdaptiveSamplingInformationRequest.__doc__ = """Attributes: - objective: - The reason for applying the adaptive sampling technique. This - must be recorded during the acquisition period in which - adaptive sampling is applied. - end_reason: - The reason why the adaptive sampling script ended. This string - will be truncated to 80 characters. -""" -GetSignalBytesRequest.__doc__ = """Attributes: - length: - The amount of data to return. If this is omitted, data will - be streamed until the call is cancelled. - seconds: - The amount of data to return in seconds. The number of - samples returned will be just enough to cover this period of - time. Cannot be specified at the same time as ``samples``. - samples: - The amount of data to return in samples. The result will - contain exactly this many samples. If this is not possible, - the call will fail. Cannot be specified at the same time as - ``seconds``. - first_channel: - The first channel (inclusive) to return data for. Note that - channel numbering starts at 1. - last_channel: - The last channel (inclusive) to return data for. Note that - channel numbering starts at 1. - include_channel_configs: - Whether to include channel configuration settings. - include_bias_voltages: - Whether to include bias voltage information. - calibrated_data: - Whether the data should be calibrated. - return_when_listening: - When this value is set to true, then an empty message will be - sent back to the client to indicate that the backend has - acknowleged the request, and that any calls made that will - affect the signal after that initial response will be - reflected in the next messages -""" -GetReadStatisticsResponse.PerClassificationData.__doc__ = """Attributes: - duration_statistics: - Statistics of read (chunk) durations. These will be in the - same units as the requested duration (if you ask for X seconds - of data, you will get durations back in seconds, but if you - ask for X samples of data, you will get durations back in - samples). NB: statistics may be estimates. - current_statistics: - Statistics for all current (signal) values for all reads under - this channel/configuration/classification combination. NB: - Statistics are calculated from raw data. - chunk_statistics: - Statistics generated from the analysed read chunks (or - complete reads), rather than the raw signal. - samples_duration: - The number of samples seen with this classification on this - channel in this channel configuration. - seconds_duration: - The number of seconds spent in this classification on this - channel in this channel configuration. This is the same as - ``samples_duration``, but expressed in seconds. -""" -GetSignalBytesResponse.ChannelConfigChange.__doc__ = """Attributes: - config: - The new channel configuration. - offset: - The offset in the returned data where the change was applied. + The classification of the chunk prior to this read starting. + previous_read_end_reason: + The classification of the chunk prior to this read starting. """ -GetDataTypesResponse.DataType.__doc__ = """Attributes: - type: - The basic type of the data item. - big_endian: - Whether the type is big-endian (high-byte first). For numeric - data types, if this is not set, they are little-endian (low- - byte first). - size: - The size of the data type in bytes. +UnlockChannelStatesRequest.__doc__ = """Attributes: + channels: + The channels to activate (active = they will be considered for + channel state evaluation in the future). Channels are indexed + from 1. """ -GetReadStatisticsResponse.__doc__ = """Attributes: +GetReadStatisticsRequest.__doc__ = """Attributes: channels: - Data for each requested channel, in the same order as - requested. + List of channels required, indexed from 1. + duration: + How long to collect the statistics for + no_current_statistics: + Disable current_statistics results in returned data. Intended + for use when the consumer doesn't need specific fields + allowing the implementation to be more efficient. + no_chunk_statistics: + Disable chunk_statistics results in returned data. Intended + for use when the consumer doesn't need specific fields + allowing the implementation to be more efficient. + required_classifications: + Specify classifications which the user wants information + about. The default behaviour (when empty) is to return + information on all classifications. Specifying which + classifications the user needs information about may allow the + implementation to be more efficient. +""" +GetLiveReadsResponse.__doc__ = """NOTE that the read metrics below are tracked from the receipt of the +first StreamSetup message. It is advised that the first StreamSetup be +sent close to the experiment start time for maximum accuracy. + +Attributes: samples_since_start: The number of samples collected before the first sample included in this response. This gives the position of the - first data point which all channels share in the calculated - statistics. Each individual channel may have samples from read - chunks previous to this sample due to read boundaries not - being consistent across channels. + first data point on each channel in the overall stream of data + being acquired from the device (since this period of data + acquisition was started). seconds_since_start: - The number of seconds elapsed before the first sample included - in this response. This is the same as - ``samples_since_start``, but expressed in seconds. + The number of seconds elapsed since data acquisition started. + This is the same as ``samples_since_start``, but expressed in + seconds. + channels: + In progress reads for the requested channels. Sparsely + populated as not all channels have new/incomplete reads. + action_responses: + List of responses to requested actions, informing the caller + of results to requested unblocks or discards of data. """ -GetChannelStatesRequest.__doc__ = """Attributes: - first_channel: - The first channel (inclusive) to return data for. Note that - channel numbering starts at 1. - last_channel: - The last channel (inclusive) to return data for. Note that - channel numbering starts at 1. - use_channel_states_ids: - If this is true, the returned messages will contain the - channel state id as opposed to the name. By default, the - response will contain channel states names. - wait_for_processing: - If `wait_for_processing` is true, then get_channel_states will - wait until minknow starts acquiring data instead of returning - with an error Defaults to false - heartbeat: - Ensure the stream sends a message at least this often. There - will usually be multiple channel updates a second, but in some - circumstances (eg: a flow cell with no sample loaded) there - can be long periods of time without updates. Setting this - value will ensure that if this period of time passes without - there being any channel state changes to report, an empty - message will be sent. This can be useful to force a minimum - wakeup interval in the client code. +GetDataTypesResponse.__doc__ = """Attributes: + uncalibrated_signal: + The format of the uncalibrated (ADC) signal data returned by + get_raw_signal_bytes(). In the current release, this will + describe 16-bit little-endian integers. + calibrated_signal: + The format of the calibrated (picoamp) signal data returned by + get_raw_signal_bytes(). In the current release, this will + describe 32-bit IEEE 754 floating point values. + bias_voltages: + The format of the bias voltage data returned by + get_raw_signal_bytes(). In the current release, this will + describe 16-bit little-endian integers. """ GetLiveReadsRequest.StreamSetup.__doc__ = """Attributes: first_channel: @@ -507,65 +599,6 @@ interested in. If a read starts with a classification not listed here the read is never sent to the client. """ -GetChannelStatesResponse.__doc__ = """Attributes: - channel_states: - The streamed data for all channels will be appended to this - vector. After the request is made, all the channel state - changes are streamed through this array. This is implemented - in the idea of a sparse array because we can have channels - that remain in the same state for a long time. -""" -GetSignalMinMaxResponse.__doc__ = """Attributes: - samples_since_start: - The number of samples collected before the first sample - included in this response. This gives the position of the - first data point on each channel in the overall stream of data - being acquired from the device (since this period of data - acquisition was started). - seconds_since_start: - The number of seconds elapsed since data acquisition started. - This is the same as ``samples_since_start``, but expressed in - seconds. - skipped_channels: - The number of channels omitted at the start of the - ``channels`` array. - channels: - The window bounds for each requested channel. Note that - ``skipped_channels`` must be used to determine which channels - are given here, as not all channels will be included in every - message. The channels that are provided are contiguous and in - order, with the first channel being ``first_channel + - skipped_channels`` (where ``first_channel`` is from the - request message). -""" -GetLiveReadsRequest.Action.__doc__ = """removed since 6.0 - -Attributes: - channel: - Channel name to unblock - read: - Identifier for the read to act on. If the read requested is - no longer in progress, the action fails. - unblock: - Unblock a read and skip further data from this read. - stop_further_data: - Skip further data from this read, doesn't affect the read - data. -""" -GetReadStatisticsResponse.PerConfigurationData.__doc__ = """Attributes: - channel_configuration: - The channel configuration active during the reads these - statistics were gathered for. - classifications: - Map from classification names to statistics about read - (chunks) with that classification. - incomplete: - If statistics about complete reads were requested, this field - may contain data for a final, incomplete read (whose - classification is therefore unknown). This field will not be - set if read chunks were requested, or if the data capture - happened to end at a complete read boundary. -""" GetSignalBytesResponse.__doc__ = """Attributes: samples_since_start: The number of samples collected before the first sample @@ -596,82 +629,49 @@ 0, but that is not guaranteed). The get_data_types() RPC call should be used to determine the format of the data. """ -GetSignalBytesResponse.ChannelData.__doc__ = """Attributes: - data: - The signal data. This is the byte representation of a C-style - array of values. Values are stored in order and adjacent to - each other. The type of the elements will depend on whether - calibrated data was chosen. The get_data_types() RPC call - should be used to determine the precise format of the data, - but in general terms, uncalibrated data will be signed - integers and calibrated data will be floating-point numbers. - Returning the data in this format allows it to be efficiently - processed in dynamic languages that can pass the data straight - down to a native runtime. For example, in Python, this data - can be intepreted directly into a numpy array using - numpy.fromstring(). Calibrated data is in picoamps. - Uncalibrated data is the raw values output by the device's ADC - (analogue-digital converter). - config_changes: - The configuration changes on the channel during data - collection. If channel configuration changes were requested, - this will contain all the channel configuration changes that - affect the returned data. This will include at least one - element, with offset 0, that describes the configuration at - the time the first sample was taken. Note that the offset is - the zero-based index into the adc or picoamps list. The - changes will be ordered by offset. -""" -GetSignalMinMaxRequest.__doc__ = """Attributes: +GetSignalBytesRequest.__doc__ = """Attributes: + length: + The amount of data to return. If this is omitted, data will + be streamed until the call is cancelled. + seconds: + The amount of data to return in seconds. The number of + samples returned will be just enough to cover this period of + time. Cannot be specified at the same time as ``samples``. + samples: + The amount of data to return in samples. The result will + contain exactly this many samples. If this is not possible, + the call will fail. Cannot be specified at the same time as + ``seconds``. first_channel: The first channel (inclusive) to return data for. Note that channel numbering starts at 1. last_channel: The last channel (inclusive) to return data for. Note that channel numbering starts at 1. - window_size: - The size of window to summarise. A value of zero will be - rejected; there is no default. + include_channel_configs: + Whether to include channel configuration settings. + include_bias_voltages: + Whether to include bias voltage information. calibrated_data: Whether the data should be calibrated. + return_when_listening: + When this value is set to true, then an empty message will be + sent back to the client to indicate that the backend has + acknowledged the request, and that any calls made that will + affect the signal after that initial response will be + reflected in the next messages """ -UnlockChannelStatesRequest.__doc__ = """Attributes: - channels: - The channels to activate (active = they will be considered for - channel state evaluation in the future). Channels are indexed - from 1. -""" -GetLiveReadsRequest.__doc__ = """Attributes: - setup: - Read setup request, initialises channel numbers and type of - data returned. note: Must be specified in the first message - sent to MinKNOW. Once MinKNOW has the first setup message - reads are sent to the caller as requested. The user can then - resend a setup message as frequently as they need to in order - to reconfigure live reads - for example by changing if raw - data is sent with reads or not. - actions: - Actions to take given data returned to the user - can only be - sent once the setup message above has been sent. +GetReadStatisticsResponse.Statistics.__doc__ = """Attributes: + q_5: + Quantiles (percentiles) """ -GetReadStatisticsResponse.PerChannelData.__doc__ = """Attributes: - configurations: - Data for each channel configuration seen on this channel. - Note that each channel configuration will only appear once in - this list, and this list is *not* in any way ordered by time. - The only reason it is not a map is because of restrictions on - map key types. - samples_since_start: - The number of samples collected before this channel's first - sample. - seconds_since_start: - The number of seconds elapsed since data acquisition started. - This is the same as ``samples_since_start``, but expressed in - seconds. - samples_duration: - The number of samples collected for this channel. - seconds_duration: - The number of seconds of data captured for this session. This - is the same as ``samples_duration``, but expressed in seconds. +RecordAdaptiveSamplingInformationRequest.__doc__ = """Attributes: + objective: + The reason for applying the adaptive sampling technique. This + must be recorded during the acquisition period in which + adaptive sampling is applied. + end_reason: + The reason why the adaptive sampling script ended. This string + will be truncated to 80 characters. """ # @@protoc_insertion_point(module_scope) diff --git a/python/minknow_api/data_service.py b/python/minknow_api/data_service.py index 3cf122c..84b7250 100644 --- a/python/minknow_api/data_service.py +++ b/python/minknow_api/data_service.py @@ -268,8 +268,8 @@ def get_signal_bytes(self, _message=None, _timeout=None, **kwargs): include_bias_voltages (bool, optional): Whether to include bias voltage information. calibrated_data (bool, optional): Whether the data should be calibrated. return_when_listening (bool, optional): When this value is set to true, then an empty message will be sent back - to the client to indicate that the backend has acknowleged the request, - and that any calls made that will affect the signal after that initial + to the client to indicate that the backend has acknowledged the request, + and that any calls made that will affect the signal after that initial response will be reflected in the next messages Returns: diff --git a/python/minknow_api/device.py b/python/minknow_api/device.py index be41b46..57ec241 100644 --- a/python/minknow_api/device.py +++ b/python/minknow_api/device.py @@ -22,10 +22,10 @@ class DeviceType(Enum): PROMETHION = minknow_api.device_service.GetDeviceInfoResponse.PROMETHION GRIDION = minknow_api.device_service.GetDeviceInfoResponse.GRIDION MINION_MK1C = minknow_api.device_service.GetDeviceInfoResponse.MINION_MK1C - TRAXION = minknow_api.device_service.GetDeviceInfoResponse.TRAXION P2_SOLO = minknow_api.device_service.GetDeviceInfoResponse.P2_SOLO MINION_MK1D = minknow_api.device_service.GetDeviceInfoResponse.MINION_MK1D P2_INTEGRATED = minknow_api.device_service.GetDeviceInfoResponse.P2_INTEGRATED + PEBBLE = minknow_api.device_service.GetDeviceInfoResponse.PEBBLE def is_minion_like(self): """Whether the device acts like a MinION. @@ -37,7 +37,6 @@ def is_minion_like(self): DeviceType.MINION, DeviceType.GRIDION, DeviceType.MINION_MK1C, - DeviceType.TRAXION, DeviceType.MINION_MK1D, ] @@ -53,6 +52,14 @@ def is_promethion_like(self): DeviceType.P2_INTEGRATED, ] + def is_pebble_like(self): + """Whether the device acts like a Pebble. + + Among other things, this means it can be used with the ``pebble`` RPC service (see + `minknow_api.pebble_service`). + """ + return self in [DeviceType.PEBBLE] + def get_device_type(connection): """Get a `DeviceType` enum value from a connection to a flow cell position. diff --git a/python/minknow_api/device_pb2.py b/python/minknow_api/device_pb2.py index a944fb2..bdc3490 100644 --- a/python/minknow_api/device_pb2.py +++ b/python/minknow_api/device_pb2.py @@ -16,7 +16,7 @@ from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18minknow_api/device.proto\x12\x12minknow_api.device\x1a\x1dminknow_api/rpc_options.proto\x1a\x1egoogle/protobuf/wrappers.proto\":\n\x14\x43hannelConfiguration\x12\x0c\n\x04well\x18\x01 \x01(\r\x12\x14\n\x0ctest_current\x18\x02 \x01(\x08\"S\n\x1cReturnedChannelConfiguration\x12\x0c\n\x04well\x18\x01 \x01(\r\x12\x14\n\x0ctest_current\x18\x02 \x01(\x08\x12\x0f\n\x07unblock\x18\x04 \x01(\x08\"\x16\n\x14GetDeviceInfoRequest\"\xa4\x04\n\x15GetDeviceInfoResponse\x12\x11\n\tdevice_id\x18\x01 \x01(\t\x12I\n\x0b\x64\x65vice_type\x18\x02 \x01(\x0e\x32\x34.minknow_api.device.GetDeviceInfoResponse.DeviceType\x12\x14\n\x0cis_simulated\x18\x03 \x01(\x08\x12\x19\n\x11max_channel_count\x18\x04 \x01(\r\x12\x1d\n\x15max_wells_per_channel\x18\x05 \x01(\r\x12\x1b\n\x13\x63\x61n_set_temperature\x18\x06 \x01(\x08\x12\x14\n\x0c\x64igitisation\x18\x07 \x01(\r\x12T\n\x10\x66irmware_version\x18\n \x03(\x0b\x32:.minknow_api.device.GetDeviceInfoResponse.ComponentVersion\x1aM\n\x10\x43omponentVersion\x12\x11\n\tcomponent\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x15\n\rserial_number\x18\x03 \x01(\t\"\x84\x01\n\nDeviceType\x12\n\n\x06MINION\x10\x00\x12\x0b\n\x07GRIDION\x10\x02\x12\x0e\n\nPROMETHION\x10\x03\x12\x0f\n\x0bMINION_MK1C\x10\x04\x12\x0b\n\x07TRAXION\x10\x05\x12\x0b\n\x07P2_SOLO\x10\x06\x12\x0f\n\x0bMINION_MK1D\x10\x07\x12\x11\n\rP2_INTEGRATED\x10\x08\"\x17\n\x15GetDeviceStateRequest\"\xe8\x01\n\x16GetDeviceStateResponse\x12L\n\x0c\x64\x65vice_state\x18\x01 \x01(\x0e\x32\x36.minknow_api.device.GetDeviceStateResponse.DeviceState\x12\x46\n\x13\x66low_cell_connector\x18\x02 \x01(\x0e\x32).minknow_api.device.FlowCellConnectorType\"8\n\x0b\x44\x65viceState\x12\x17\n\x13\x44\x45VICE_DISCONNECTED\x10\x00\x12\x10\n\x0c\x44\x45VICE_READY\x10\x01\"\x1a\n\x18StreamDeviceStateRequest\"\x18\n\x16GetFlowCellInfoRequest\"\xb3\x04\n\x17GetFlowCellInfoResponse\x12\x15\n\rhas_flow_cell\x18\x01 \x01(\x08\x12\x15\n\rchannel_count\x18\x02 \x01(\r\x12\x19\n\x11wells_per_channel\x18\x03 \x01(\r\x12\x14\n\x0c\x66low_cell_id\x18\x04 \x01(\t\x12\x13\n\x0b\x61sic_id_str\x18\r \x01(\t\x12\x14\n\x0cproduct_code\x18\x06 \x01(\t\x12#\n\x1buser_specified_flow_cell_id\x18\x07 \x01(\t\x12#\n\x1buser_specified_product_code\x18\x08 \x01(\t\x12\x13\n\x0bhas_adapter\x18\t \x01(\x08\x12\x12\n\nadapter_id\x18\n \x01(\t\x12\x1c\n\x12temperature_offset\x18\x0b \x01(\x02H\x00\x12\x14\n\x0c\x61sic_version\x18\x0c \x01(\t\x12J\n\x17insertion_script_status\x18\x0e \x01(\x0e\x32).minknow_api.device.InsertionScriptStatus\x12\x11\n\tuse_count\x18\x0f \x01(\r\x12\x17\n\x0fuse_count_limit\x18\x10 \x01(\r\x12\x13\n\x0b\x62\x61rcode_kit\x18\x11 \x01(\t\x12\x10\n\x08\x62\x61rcodes\x18\x12 \x03(\r\x12\x19\n\x11\x66low_cell_partner\x18\x13 \x01(\t\x12\x0e\n\x06is_ctc\x18\x14 \x01(\x08\x42\x1d\n\x1btemperature_offset_nullable\"\x1b\n\x19StreamFlowCellInfoRequest\"5\n!SetUserSpecifiedFlowCellIdRequest\x12\x10\n\x02id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"$\n\"SetUserSpecifiedFlowCellIdResponse\"8\n\"SetUserSpecifiedProductCodeRequest\x12\x12\n\x04\x63ode\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"%\n#SetUserSpecifiedProductCodeResponse\"\x1a\n\x18GetChannelsLayoutRequest\"W\n\x19GetChannelsLayoutResponse\x12:\n\x0f\x63hannel_records\x18\x01 \x03(\x0b\x32!.minknow_api.device.ChannelRecord\"\xa4\x01\n\rChannelRecord\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12@\n\x0bmux_records\x18\x03 \x03(\x0b\x32+.minknow_api.device.ChannelRecord.MuxRecord\x1a\x37\n\tMuxRecord\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0e\n\x06phys_x\x18\x02 \x01(\r\x12\x0e\n\x06phys_y\x18\x03 \x01(\r\"\x1c\n\x1aResetDeviceSettingsRequest\"\x1d\n\x1bResetDeviceSettingsResponse\"\x80\x01\n\x15SetCalibrationRequest\x12\x1b\n\rfirst_channel\x18\x01 \x01(\rB\x04\x88\xb5\x18\x01\x12\x1a\n\x0clast_channel\x18\x02 \x01(\rB\x04\x88\xb5\x18\x01\x12\x15\n\x07offsets\x18\x03 \x03(\x02\x42\x04\x88\xb5\x18\x01\x12\x17\n\tpa_ranges\x18\x04 \x03(\x02\x42\x04\x88\xb5\x18\x01\"\x18\n\x16SetCalibrationResponse\"\x19\n\x17\x43learCalibrationRequest\"\x1a\n\x18\x43learCalibrationResponse\"P\n\x15GetCalibrationRequest\x12\x1b\n\rfirst_channel\x18\x01 \x01(\rB\x04\x88\xb5\x18\x01\x12\x1a\n\x0clast_channel\x18\x02 \x01(\rB\x04\x88\xb5\x18\x01\"k\n\x16GetCalibrationResponse\x12\x14\n\x0c\x64igitisation\x18\x01 \x01(\r\x12\x0f\n\x07offsets\x18\x02 \x03(\x02\x12\x11\n\tpa_ranges\x18\x03 \x03(\x02\x12\x17\n\x0fhas_calibration\x18\x04 \x01(\x08\"\x93\x03\n\x15SetTemperatureRequest\x12\x13\n\x0btemperature\x18\x01 \x01(\x02\x12\x62\n\x14wait_for_temperature\x18\x02 \x01(\x0b\x32\x44.minknow_api.device.SetTemperatureRequest.WaitForTemperatureSettings\x12j\n\x1csecondary_temperature_limits\x18\x03 \x01(\x0b\x32\x44.minknow_api.device.SetTemperatureRequest.SecondaryTemperatureLimits\x1a]\n\x1aWaitForTemperatureSettings\x12\x0f\n\x07timeout\x18\x01 \x01(\r\x12\x1b\n\x13min_stable_duration\x18\x03 \x01(\r\x12\x11\n\ttolerance\x18\x02 \x01(\x02\x1a\x36\n\x1aSecondaryTemperatureLimits\x12\x0b\n\x03min\x18\x01 \x01(\x02\x12\x0b\n\x03max\x18\x02 \x01(\x02\"\xb4\x02\n\x16SetTemperatureResponse\x12)\n!timed_out_waiting_for_temperature\x18\x01 \x01(\x08\x12O\n\x06result\x18\x02 \x01(\x0e\x32?.minknow_api.device.SetTemperatureResponse.SetTemperatureResult\"\x9d\x01\n\x14SetTemperatureResult\x12\x1a\n\x16TARGET_TEMPERATURE_SET\x10\x00\x12\x17\n\x13REACHED_TEMPERATURE\x10\x01\x12%\n!TIMED_OUT_WAITING_FOR_TEMPERATURE\x10\x02\x12)\n%SECONDARY_TEMPERATURE_LIMITS_EXCEEDED\x10\x03\"\x17\n\x15GetTemperatureRequest\"\xc3\x05\n\x16GetTemperatureResponse\x12N\n\x06minion\x18\x01 \x01(\x0b\x32<.minknow_api.device.GetTemperatureResponse.MinIONTemperatureH\x00\x12V\n\npromethion\x18\x02 \x01(\x0b\x32@.minknow_api.device.GetTemperatureResponse.PromethIONTemperatureH\x00\x12\x37\n\x12target_temperature\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12\x42\n\x1bminion_starting_temperature\x18\x04 \x01(\x0b\x32\x1b.google.protobuf.FloatValueH\x01\x12\x46\n\x1fpromethion_starting_temperature\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.FloatValueH\x01\x1a\x85\x01\n\x11MinIONTemperature\x12\x35\n\x10\x61sic_temperature\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12\x39\n\x14heatsink_temperature\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x1a\x8c\x01\n\x15PromethIONTemperature\x12\x39\n\x14\x66lowcell_temperature\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12\x38\n\x13\x63hamber_temperature\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValueB\r\n\x0btemperatureB\x16\n\x14starting_temperature\"2\n\x18StreamTemperatureRequest\x12\x16\n\x0eperiod_seconds\x18\x01 \x01(\r\"q\n\x0eUnblockRequest\x12\x10\n\x08\x63hannels\x18\x01 \x03(\r\x12\x1d\n\x13\x64uration_in_seconds\x18\x02 \x01(\rH\x00\x12\"\n\x18\x64uration_in_milliseconds\x18\x03 \x01(\rH\x00\x42\n\n\x08\x64uration\"\x11\n\x0fUnblockResponse\"\x17\n\x15\x43\x61ncelUnblocksRequest\"4\n\x16\x43\x61ncelUnblocksResponse\x12\x1a\n\x12\x63\x61ncelled_unblocks\x18\x01 \x01(\r\"2\n\x1eGetChannelConfigurationRequest\x12\x10\n\x08\x63hannels\x18\x01 \x03(\r\"s\n\x1fGetChannelConfigurationResponse\x12P\n\x16\x63hannel_configurations\x18\x01 \x03(\x0b\x32\x30.minknow_api.device.ReturnedChannelConfiguration\"\xf7\x01\n\x1eSetChannelConfigurationRequest\x12m\n\x16\x63hannel_configurations\x18\x01 \x03(\x0b\x32M.minknow_api.device.SetChannelConfigurationRequest.ChannelConfigurationsEntry\x1a\x66\n\x1a\x43hannelConfigurationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x37\n\x05value\x18\x02 \x01(\x0b\x32(.minknow_api.device.ChannelConfiguration:\x02\x38\x01\"!\n\x1fSetChannelConfigurationResponse\"r\n!SetChannelConfigurationAllRequest\x12M\n\x15\x63hannel_configuration\x18\x01 \x01(\x0b\x32(.minknow_api.device.ChannelConfigurationB\x04\x90\xb5\x18\x01\"$\n\"SetChannelConfigurationAllResponse\"\xc6\x06\n\x10SaturationConfig\x12\x43\n\nthresholds\x18\x01 \x01(\x0b\x32/.minknow_api.device.SaturationConfig.Thresholds\x12T\n\x13software_saturation\x18\x02 \x01(\x0b\x32\x37.minknow_api.device.SaturationConfig.SoftwareSaturation\x12_\n\x19user_threshold_saturation\x18\x03 \x01(\x0b\x32<.minknow_api.device.SaturationConfig.UserThresholdSaturation\x1a\xfa\x01\n\nThresholds\x12\x37\n\x11general_threshold\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12\x37\n\x11unblock_threshold\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12<\n\x16user_general_threshold\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12<\n\x16user_unblock_threshold\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x1a\x93\x01\n\x12SoftwareSaturation\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x35\n\x10software_min_adc\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x35\n\x10software_max_adc\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x1a\xa2\x01\n\x17UserThresholdSaturation\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12:\n\x15user_threshold_min_pa\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12:\n\x15user_threshold_max_pa\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\"Z\n\x1aSetSaturationConfigRequest\x12<\n\x08settings\x18\x01 \x01(\x0b\x32$.minknow_api.device.SaturationConfigB\x04\x90\xb5\x18\x01\"\x1d\n\x1bSetSaturationConfigResponse\"\x1c\n\x1aGetSaturationConfigRequest\"[\n\x1bGetSaturationConfigResponse\x12<\n\x08settings\x18\x01 \x01(\x0b\x32$.minknow_api.device.SaturationConfigB\x04\x90\xb5\x18\x01\"\x16\n\x14GetSampleRateRequest\",\n\x15GetSampleRateResponse\x12\x13\n\x0bsample_rate\x18\x01 \x01(\r\"1\n\x14SetSampleRateRequest\x12\x19\n\x0bsample_rate\x18\x01 \x01(\rB\x04\x88\xb5\x18\x01\"1\n\x15SetSampleRateResponse\x12\x18\n\x10real_sample_rate\x18\x01 \x01(\r\"\x17\n\x15GetBiasVoltageRequest\".\n\x16GetBiasVoltageResponse\x12\x14\n\x0c\x62ias_voltage\x18\x01 \x01(\x01\"3\n\x15SetBiasVoltageRequest\x12\x1a\n\x0c\x62ias_voltage\x18\x01 \x01(\x01\x42\x04\x88\xb5\x18\x01\"\x18\n\x16SetBiasVoltageResponse\"\x12\n\x10\x44umpStateRequest\"\x13\n\x11\x44umpStateResponse\"\"\n IncrementFlowCellUseCountRequest\"#\n!IncrementFlowCellUseCountResponse\"0\n\x1cSetFlowCellBarcodeKitRequest\x12\x10\n\x02id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"\x1f\n\x1dSetFlowCellBarcodeKitResponse\"3\n\x1fRegisterFlowCellBarcodesRequest\x12\x10\n\x08\x62\x61rcodes\x18\x01 \x03(\r\"\"\n RegisterFlowCellBarcodesResponse*i\n\x15\x46lowCellConnectorType\x12\x11\n\rFCCON_NOT_SET\x10\x00\x12\x14\n\x10\x46\x43\x43ON_PROMETHION\x10\x01\x12\x14\n\x10\x46\x43\x43ON_MINION_MK1\x10\x02\x12\x11\n\rFCCON_FLONGLE\x10\x03*?\n\x15InsertionScriptStatus\x12\x0b\n\x07NOT_RUN\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\r\n\tSUCCEEDED\x10\x02*]\n\x0cSelectedWell\x12\r\n\tWELL_NONE\x10\x00\x12\n\n\x06WELL_1\x10\x01\x12\n\n\x06WELL_2\x10\x02\x12\n\n\x06WELL_3\x10\x03\x12\n\n\x06WELL_4\x10\x04\x12\x0e\n\nWELL_OTHER\x10\x05\x32\xcb\x1c\n\rDeviceService\x12k\n\x0fget_device_info\x12(.minknow_api.device.GetDeviceInfoRequest\x1a).minknow_api.device.GetDeviceInfoResponse\"\x03\x90\x02\x01\x12n\n\x10get_device_state\x12).minknow_api.device.GetDeviceStateRequest\x1a*.minknow_api.device.GetDeviceStateResponse\"\x03\x90\x02\x01\x12v\n\x13stream_device_state\x12,.minknow_api.device.StreamDeviceStateRequest\x1a*.minknow_api.device.GetDeviceStateResponse\"\x03\x90\x02\x01\x30\x01\x12r\n\x12get_flow_cell_info\x12*.minknow_api.device.GetFlowCellInfoRequest\x1a+.minknow_api.device.GetFlowCellInfoResponse\"\x03\x90\x02\x01\x12z\n\x15stream_flow_cell_info\x12-.minknow_api.device.StreamFlowCellInfoRequest\x1a+.minknow_api.device.GetFlowCellInfoResponse\"\x03\x90\x02\x01\x30\x01\x12\x95\x01\n\x1fset_user_specified_flow_cell_id\x12\x35.minknow_api.device.SetUserSpecifiedFlowCellIdRequest\x1a\x36.minknow_api.device.SetUserSpecifiedFlowCellIdResponse\"\x03\x90\x02\x02\x12\x97\x01\n\x1fset_user_specified_product_code\x12\x36.minknow_api.device.SetUserSpecifiedProductCodeRequest\x1a\x37.minknow_api.device.SetUserSpecifiedProductCodeResponse\"\x03\x90\x02\x02\x12w\n\x13get_channels_layout\x12,.minknow_api.device.GetChannelsLayoutRequest\x1a-.minknow_api.device.GetChannelsLayoutResponse\"\x03\x90\x02\x01\x12}\n\x15reset_device_settings\x12..minknow_api.device.ResetDeviceSettingsRequest\x1a/.minknow_api.device.ResetDeviceSettingsResponse\"\x03\x90\x02\x02\x12m\n\x0fset_calibration\x12).minknow_api.device.SetCalibrationRequest\x1a*.minknow_api.device.SetCalibrationResponse\"\x03\x90\x02\x02\x12s\n\x11\x63lear_calibration\x12+.minknow_api.device.ClearCalibrationRequest\x1a,.minknow_api.device.ClearCalibrationResponse\"\x03\x90\x02\x02\x12m\n\x0fget_calibration\x12).minknow_api.device.GetCalibrationRequest\x1a*.minknow_api.device.GetCalibrationResponse\"\x03\x90\x02\x01\x12m\n\x0fset_temperature\x12).minknow_api.device.SetTemperatureRequest\x1a*.minknow_api.device.SetTemperatureResponse\"\x03\x90\x02\x02\x12m\n\x0fget_temperature\x12).minknow_api.device.GetTemperatureRequest\x1a*.minknow_api.device.GetTemperatureResponse\"\x03\x90\x02\x01\x12u\n\x12stream_temperature\x12,.minknow_api.device.StreamTemperatureRequest\x1a*.minknow_api.device.GetTemperatureResponse\"\x03\x90\x02\x01\x30\x01\x12T\n\x07unblock\x12\".minknow_api.device.UnblockRequest\x1a#.minknow_api.device.UnblockResponse\"\x00\x12j\n\x0f\x63\x61ncel_unblocks\x12).minknow_api.device.CancelUnblocksRequest\x1a*.minknow_api.device.CancelUnblocksResponse\"\x00\x12\x89\x01\n\x19get_channel_configuration\x12\x32.minknow_api.device.GetChannelConfigurationRequest\x1a\x33.minknow_api.device.GetChannelConfigurationResponse\"\x03\x90\x02\x01\x12\x89\x01\n\x19set_channel_configuration\x12\x32.minknow_api.device.SetChannelConfigurationRequest\x1a\x33.minknow_api.device.SetChannelConfigurationResponse\"\x03\x90\x02\x02\x12\x93\x01\n\x1dset_channel_configuration_all\x12\x35.minknow_api.device.SetChannelConfigurationAllRequest\x1a\x36.minknow_api.device.SetChannelConfigurationAllResponse\"\x03\x90\x02\x02\x12z\n\x15set_saturation_config\x12..minknow_api.device.SetSaturationConfigRequest\x1a/.minknow_api.device.SetSaturationConfigResponse\"\x00\x12}\n\x15get_saturation_config\x12..minknow_api.device.GetSaturationConfigRequest\x1a/.minknow_api.device.GetSaturationConfigResponse\"\x03\x90\x02\x01\x12k\n\x0fget_sample_rate\x12(.minknow_api.device.GetSampleRateRequest\x1a).minknow_api.device.GetSampleRateResponse\"\x03\x90\x02\x01\x12k\n\x0fset_sample_rate\x12(.minknow_api.device.SetSampleRateRequest\x1a).minknow_api.device.SetSampleRateResponse\"\x03\x90\x02\x02\x12n\n\x10get_bias_voltage\x12).minknow_api.device.GetBiasVoltageRequest\x1a*.minknow_api.device.GetBiasVoltageResponse\"\x03\x90\x02\x01\x12n\n\x10set_bias_voltage\x12).minknow_api.device.SetBiasVoltageRequest\x1a*.minknow_api.device.SetBiasVoltageResponse\"\x03\x90\x02\x02\x12[\n\ndump_state\x12$.minknow_api.device.DumpStateRequest\x1a%.minknow_api.device.DumpStateResponse\"\x00\x12\x8e\x01\n\x1dincrement_flow_cell_use_count\x12\x34.minknow_api.device.IncrementFlowCellUseCountRequest\x1a\x35.minknow_api.device.IncrementFlowCellUseCountResponse\"\x00\x12\x82\x01\n\x19set_flow_cell_barcode_kit\x12\x30.minknow_api.device.SetFlowCellBarcodeKitRequest\x1a\x31.minknow_api.device.SetFlowCellBarcodeKitResponse\"\x00\x12\x8a\x01\n\x1bregister_flow_cell_barcodes\x12\x33.minknow_api.device.RegisterFlowCellBarcodesRequest\x1a\x34.minknow_api.device.RegisterFlowCellBarcodesResponse\"\x00\x42&\n\x1c\x63om.nanoporetech.minknow_api\xa2\x02\x05MKAPIb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18minknow_api/device.proto\x12\x12minknow_api.device\x1a\x1dminknow_api/rpc_options.proto\x1a\x1egoogle/protobuf/wrappers.proto\":\n\x14\x43hannelConfiguration\x12\x0c\n\x04well\x18\x01 \x01(\r\x12\x14\n\x0ctest_current\x18\x02 \x01(\x08\"S\n\x1cReturnedChannelConfiguration\x12\x0c\n\x04well\x18\x01 \x01(\r\x12\x14\n\x0ctest_current\x18\x02 \x01(\x08\x12\x0f\n\x07unblock\x18\x04 \x01(\x08\"\x16\n\x14GetDeviceInfoRequest\"\xa9\x04\n\x15GetDeviceInfoResponse\x12\x11\n\tdevice_id\x18\x01 \x01(\t\x12I\n\x0b\x64\x65vice_type\x18\x02 \x01(\x0e\x32\x34.minknow_api.device.GetDeviceInfoResponse.DeviceType\x12\x14\n\x0cis_simulated\x18\x03 \x01(\x08\x12\x19\n\x11max_channel_count\x18\x04 \x01(\r\x12\x1d\n\x15max_wells_per_channel\x18\x05 \x01(\r\x12\x1b\n\x13\x63\x61n_set_temperature\x18\x06 \x01(\x08\x12\x14\n\x0c\x64igitisation\x18\x07 \x01(\r\x12T\n\x10\x66irmware_version\x18\n \x03(\x0b\x32:.minknow_api.device.GetDeviceInfoResponse.ComponentVersion\x1aM\n\x10\x43omponentVersion\x12\x11\n\tcomponent\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x15\n\rserial_number\x18\x03 \x01(\t\"\x89\x01\n\nDeviceType\x12\n\n\x06MINION\x10\x00\x12\x0b\n\x07GRIDION\x10\x02\x12\x0e\n\nPROMETHION\x10\x03\x12\x0f\n\x0bMINION_MK1C\x10\x04\x12\x0b\n\x07P2_SOLO\x10\x06\x12\x0f\n\x0bMINION_MK1D\x10\x07\x12\x11\n\rP2_INTEGRATED\x10\x08\x12\n\n\x06PEBBLE\x10\t\"\x04\x08\x05\x10\x05\"\x17\n\x15GetDeviceStateRequest\"\xe8\x01\n\x16GetDeviceStateResponse\x12L\n\x0c\x64\x65vice_state\x18\x01 \x01(\x0e\x32\x36.minknow_api.device.GetDeviceStateResponse.DeviceState\x12\x46\n\x13\x66low_cell_connector\x18\x02 \x01(\x0e\x32).minknow_api.device.FlowCellConnectorType\"8\n\x0b\x44\x65viceState\x12\x17\n\x13\x44\x45VICE_DISCONNECTED\x10\x00\x12\x10\n\x0c\x44\x45VICE_READY\x10\x01\"\x1a\n\x18StreamDeviceStateRequest\"\x18\n\x16GetFlowCellInfoRequest\"\xdb\x04\n\x17GetFlowCellInfoResponse\x12\x15\n\rhas_flow_cell\x18\x01 \x01(\x08\x12\x15\n\rchannel_count\x18\x02 \x01(\r\x12\x19\n\x11wells_per_channel\x18\x03 \x01(\r\x12\x14\n\x0c\x66low_cell_id\x18\x04 \x01(\t\x12\x13\n\x0b\x61sic_id_str\x18\r \x01(\t\x12\x14\n\x0cproduct_code\x18\x06 \x01(\t\x12#\n\x1buser_specified_flow_cell_id\x18\x07 \x01(\t\x12#\n\x1buser_specified_product_code\x18\x08 \x01(\t\x12\x13\n\x0bhas_adapter\x18\t \x01(\x08\x12\x12\n\nadapter_id\x18\n \x01(\t\x12\x1c\n\x12temperature_offset\x18\x0b \x01(\x02H\x00\x12\x14\n\x0c\x61sic_version\x18\x0c \x01(\t\x12J\n\x17insertion_script_status\x18\x0e \x01(\x0e\x32).minknow_api.device.InsertionScriptStatus\x12\x11\n\tuse_count\x18\x0f \x01(\r\x12\x17\n\x0fuse_count_limit\x18\x10 \x01(\r\x12\x13\n\x0b\x62\x61rcode_kit\x18\x11 \x01(\t\x12\x10\n\x08\x62\x61rcodes\x18\x12 \x03(\r\x12\x19\n\x11\x66low_cell_partner\x18\x13 \x01(\t\x12\x0e\n\x06is_ctc\x18\x14 \x01(\x08\x12&\n\x1eincompatible_flow_cell_partner\x18\x15 \x01(\x08\x42\x1d\n\x1btemperature_offset_nullable\"\x1b\n\x19StreamFlowCellInfoRequest\"5\n!SetUserSpecifiedFlowCellIdRequest\x12\x10\n\x02id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"$\n\"SetUserSpecifiedFlowCellIdResponse\"8\n\"SetUserSpecifiedProductCodeRequest\x12\x12\n\x04\x63ode\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"%\n#SetUserSpecifiedProductCodeResponse\"\x1a\n\x18GetChannelsLayoutRequest\"W\n\x19GetChannelsLayoutResponse\x12:\n\x0f\x63hannel_records\x18\x01 \x03(\x0b\x32!.minknow_api.device.ChannelRecord\"\xa4\x01\n\rChannelRecord\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12@\n\x0bmux_records\x18\x03 \x03(\x0b\x32+.minknow_api.device.ChannelRecord.MuxRecord\x1a\x37\n\tMuxRecord\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0e\n\x06phys_x\x18\x02 \x01(\r\x12\x0e\n\x06phys_y\x18\x03 \x01(\r\"\x1c\n\x1aResetDeviceSettingsRequest\"\x1d\n\x1bResetDeviceSettingsResponse\"\x80\x01\n\x15SetCalibrationRequest\x12\x1b\n\rfirst_channel\x18\x01 \x01(\rB\x04\x88\xb5\x18\x01\x12\x1a\n\x0clast_channel\x18\x02 \x01(\rB\x04\x88\xb5\x18\x01\x12\x15\n\x07offsets\x18\x03 \x03(\x02\x42\x04\x88\xb5\x18\x01\x12\x17\n\tpa_ranges\x18\x04 \x03(\x02\x42\x04\x88\xb5\x18\x01\"\x18\n\x16SetCalibrationResponse\"\x19\n\x17\x43learCalibrationRequest\"\x1a\n\x18\x43learCalibrationResponse\"P\n\x15GetCalibrationRequest\x12\x1b\n\rfirst_channel\x18\x01 \x01(\rB\x04\x88\xb5\x18\x01\x12\x1a\n\x0clast_channel\x18\x02 \x01(\rB\x04\x88\xb5\x18\x01\"k\n\x16GetCalibrationResponse\x12\x14\n\x0c\x64igitisation\x18\x01 \x01(\r\x12\x0f\n\x07offsets\x18\x02 \x03(\x02\x12\x11\n\tpa_ranges\x18\x03 \x03(\x02\x12\x17\n\x0fhas_calibration\x18\x04 \x01(\x08\"\x93\x03\n\x15SetTemperatureRequest\x12\x13\n\x0btemperature\x18\x01 \x01(\x02\x12\x62\n\x14wait_for_temperature\x18\x02 \x01(\x0b\x32\x44.minknow_api.device.SetTemperatureRequest.WaitForTemperatureSettings\x12j\n\x1csecondary_temperature_limits\x18\x03 \x01(\x0b\x32\x44.minknow_api.device.SetTemperatureRequest.SecondaryTemperatureLimits\x1a]\n\x1aWaitForTemperatureSettings\x12\x0f\n\x07timeout\x18\x01 \x01(\r\x12\x1b\n\x13min_stable_duration\x18\x03 \x01(\r\x12\x11\n\ttolerance\x18\x02 \x01(\x02\x1a\x36\n\x1aSecondaryTemperatureLimits\x12\x0b\n\x03min\x18\x01 \x01(\x02\x12\x0b\n\x03max\x18\x02 \x01(\x02\"\xb4\x02\n\x16SetTemperatureResponse\x12)\n!timed_out_waiting_for_temperature\x18\x01 \x01(\x08\x12O\n\x06result\x18\x02 \x01(\x0e\x32?.minknow_api.device.SetTemperatureResponse.SetTemperatureResult\"\x9d\x01\n\x14SetTemperatureResult\x12\x1a\n\x16TARGET_TEMPERATURE_SET\x10\x00\x12\x17\n\x13REACHED_TEMPERATURE\x10\x01\x12%\n!TIMED_OUT_WAITING_FOR_TEMPERATURE\x10\x02\x12)\n%SECONDARY_TEMPERATURE_LIMITS_EXCEEDED\x10\x03\"\x17\n\x15GetTemperatureRequest\"\x99\x08\n\x16GetTemperatureResponse\x12N\n\x06minion\x18\x01 \x01(\x0b\x32<.minknow_api.device.GetTemperatureResponse.MinIONTemperatureH\x00\x12V\n\npromethion\x18\x02 \x01(\x0b\x32@.minknow_api.device.GetTemperatureResponse.PromethIONTemperatureH\x00\x12N\n\x06pebble\x18\x06 \x01(\x0b\x32<.minknow_api.device.GetTemperatureResponse.PebbleTemperatureH\x00\x12\x37\n\x12target_temperature\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12\x42\n\x1bminion_starting_temperature\x18\x04 \x01(\x0b\x32\x1b.google.protobuf.FloatValueH\x01\x12\x46\n\x1fpromethion_starting_temperature\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.FloatValueH\x01\x12\x42\n\x1bpebble_starting_temperature\x18\x07 \x01(\x0b\x32\x1b.google.protobuf.FloatValueH\x01\x1a\x85\x01\n\x11MinIONTemperature\x12\x35\n\x10\x61sic_temperature\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12\x39\n\x14heatsink_temperature\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x1a\x8c\x01\n\x15PromethIONTemperature\x12\x39\n\x14\x66lowcell_temperature\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12\x38\n\x13\x63hamber_temperature\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x1a\xbf\x01\n\x11PebbleTemperature\x12\x35\n\x10\x61sic_temperature\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12;\n\x16instrument_temperature\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12\x36\n\x11pchip_temperature\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.FloatValueB\r\n\x0btemperatureB\x16\n\x14starting_temperature\"2\n\x18StreamTemperatureRequest\x12\x16\n\x0eperiod_seconds\x18\x01 \x01(\r\"q\n\x0eUnblockRequest\x12\x10\n\x08\x63hannels\x18\x01 \x03(\r\x12\x1d\n\x13\x64uration_in_seconds\x18\x02 \x01(\rH\x00\x12\"\n\x18\x64uration_in_milliseconds\x18\x03 \x01(\rH\x00\x42\n\n\x08\x64uration\"\x11\n\x0fUnblockResponse\"\x17\n\x15\x43\x61ncelUnblocksRequest\"4\n\x16\x43\x61ncelUnblocksResponse\x12\x1a\n\x12\x63\x61ncelled_unblocks\x18\x01 \x01(\r\"2\n\x1eGetChannelConfigurationRequest\x12\x10\n\x08\x63hannels\x18\x01 \x03(\r\"s\n\x1fGetChannelConfigurationResponse\x12P\n\x16\x63hannel_configurations\x18\x01 \x03(\x0b\x32\x30.minknow_api.device.ReturnedChannelConfiguration\"\xf7\x01\n\x1eSetChannelConfigurationRequest\x12m\n\x16\x63hannel_configurations\x18\x01 \x03(\x0b\x32M.minknow_api.device.SetChannelConfigurationRequest.ChannelConfigurationsEntry\x1a\x66\n\x1a\x43hannelConfigurationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x37\n\x05value\x18\x02 \x01(\x0b\x32(.minknow_api.device.ChannelConfiguration:\x02\x38\x01\"!\n\x1fSetChannelConfigurationResponse\"r\n!SetChannelConfigurationAllRequest\x12M\n\x15\x63hannel_configuration\x18\x01 \x01(\x0b\x32(.minknow_api.device.ChannelConfigurationB\x04\x90\xb5\x18\x01\"$\n\"SetChannelConfigurationAllResponse\"\xc6\x06\n\x10SaturationConfig\x12\x43\n\nthresholds\x18\x01 \x01(\x0b\x32/.minknow_api.device.SaturationConfig.Thresholds\x12T\n\x13software_saturation\x18\x02 \x01(\x0b\x32\x37.minknow_api.device.SaturationConfig.SoftwareSaturation\x12_\n\x19user_threshold_saturation\x18\x03 \x01(\x0b\x32<.minknow_api.device.SaturationConfig.UserThresholdSaturation\x1a\xfa\x01\n\nThresholds\x12\x37\n\x11general_threshold\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12\x37\n\x11unblock_threshold\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12<\n\x16user_general_threshold\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12<\n\x16user_unblock_threshold\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x1a\x93\x01\n\x12SoftwareSaturation\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x35\n\x10software_min_adc\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x35\n\x10software_max_adc\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x1a\xa2\x01\n\x17UserThresholdSaturation\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12:\n\x15user_threshold_min_pa\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12:\n\x15user_threshold_max_pa\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\"Z\n\x1aSetSaturationConfigRequest\x12<\n\x08settings\x18\x01 \x01(\x0b\x32$.minknow_api.device.SaturationConfigB\x04\x90\xb5\x18\x01\"\x1d\n\x1bSetSaturationConfigResponse\"\x1c\n\x1aGetSaturationConfigRequest\"[\n\x1bGetSaturationConfigResponse\x12<\n\x08settings\x18\x01 \x01(\x0b\x32$.minknow_api.device.SaturationConfigB\x04\x90\xb5\x18\x01\"\x16\n\x14GetSampleRateRequest\",\n\x15GetSampleRateResponse\x12\x13\n\x0bsample_rate\x18\x01 \x01(\r\"1\n\x14SetSampleRateRequest\x12\x19\n\x0bsample_rate\x18\x01 \x01(\rB\x04\x88\xb5\x18\x01\"1\n\x15SetSampleRateResponse\x12\x18\n\x10real_sample_rate\x18\x01 \x01(\r\"\x17\n\x15GetBiasVoltageRequest\".\n\x16GetBiasVoltageResponse\x12\x14\n\x0c\x62ias_voltage\x18\x01 \x01(\x01\"3\n\x15SetBiasVoltageRequest\x12\x1a\n\x0c\x62ias_voltage\x18\x01 \x01(\x01\x42\x04\x88\xb5\x18\x01\"\x18\n\x16SetBiasVoltageResponse\"\x12\n\x10\x44umpStateRequest\"\x13\n\x11\x44umpStateResponse\"\"\n IncrementFlowCellUseCountRequest\"#\n!IncrementFlowCellUseCountResponse\"0\n\x1cSetFlowCellBarcodeKitRequest\x12\x10\n\x02id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"\x1f\n\x1dSetFlowCellBarcodeKitResponse\"3\n\x1fRegisterFlowCellBarcodesRequest\x12\x10\n\x08\x62\x61rcodes\x18\x01 \x03(\r\"\"\n RegisterFlowCellBarcodesResponse*{\n\x15\x46lowCellConnectorType\x12\x11\n\rFCCON_NOT_SET\x10\x00\x12\x14\n\x10\x46\x43\x43ON_PROMETHION\x10\x01\x12\x14\n\x10\x46\x43\x43ON_MINION_MK1\x10\x02\x12\x11\n\rFCCON_FLONGLE\x10\x03\x12\x10\n\x0c\x46\x43\x43ON_PEBBLE\x10\x04*?\n\x15InsertionScriptStatus\x12\x0b\n\x07NOT_RUN\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\r\n\tSUCCEEDED\x10\x02*]\n\x0cSelectedWell\x12\r\n\tWELL_NONE\x10\x00\x12\n\n\x06WELL_1\x10\x01\x12\n\n\x06WELL_2\x10\x02\x12\n\n\x06WELL_3\x10\x03\x12\n\n\x06WELL_4\x10\x04\x12\x0e\n\nWELL_OTHER\x10\x05\x32\xcb\x1c\n\rDeviceService\x12k\n\x0fget_device_info\x12(.minknow_api.device.GetDeviceInfoRequest\x1a).minknow_api.device.GetDeviceInfoResponse\"\x03\x90\x02\x01\x12n\n\x10get_device_state\x12).minknow_api.device.GetDeviceStateRequest\x1a*.minknow_api.device.GetDeviceStateResponse\"\x03\x90\x02\x01\x12v\n\x13stream_device_state\x12,.minknow_api.device.StreamDeviceStateRequest\x1a*.minknow_api.device.GetDeviceStateResponse\"\x03\x90\x02\x01\x30\x01\x12r\n\x12get_flow_cell_info\x12*.minknow_api.device.GetFlowCellInfoRequest\x1a+.minknow_api.device.GetFlowCellInfoResponse\"\x03\x90\x02\x01\x12z\n\x15stream_flow_cell_info\x12-.minknow_api.device.StreamFlowCellInfoRequest\x1a+.minknow_api.device.GetFlowCellInfoResponse\"\x03\x90\x02\x01\x30\x01\x12\x95\x01\n\x1fset_user_specified_flow_cell_id\x12\x35.minknow_api.device.SetUserSpecifiedFlowCellIdRequest\x1a\x36.minknow_api.device.SetUserSpecifiedFlowCellIdResponse\"\x03\x90\x02\x02\x12\x97\x01\n\x1fset_user_specified_product_code\x12\x36.minknow_api.device.SetUserSpecifiedProductCodeRequest\x1a\x37.minknow_api.device.SetUserSpecifiedProductCodeResponse\"\x03\x90\x02\x02\x12w\n\x13get_channels_layout\x12,.minknow_api.device.GetChannelsLayoutRequest\x1a-.minknow_api.device.GetChannelsLayoutResponse\"\x03\x90\x02\x01\x12}\n\x15reset_device_settings\x12..minknow_api.device.ResetDeviceSettingsRequest\x1a/.minknow_api.device.ResetDeviceSettingsResponse\"\x03\x90\x02\x02\x12m\n\x0fset_calibration\x12).minknow_api.device.SetCalibrationRequest\x1a*.minknow_api.device.SetCalibrationResponse\"\x03\x90\x02\x02\x12s\n\x11\x63lear_calibration\x12+.minknow_api.device.ClearCalibrationRequest\x1a,.minknow_api.device.ClearCalibrationResponse\"\x03\x90\x02\x02\x12m\n\x0fget_calibration\x12).minknow_api.device.GetCalibrationRequest\x1a*.minknow_api.device.GetCalibrationResponse\"\x03\x90\x02\x01\x12m\n\x0fset_temperature\x12).minknow_api.device.SetTemperatureRequest\x1a*.minknow_api.device.SetTemperatureResponse\"\x03\x90\x02\x02\x12m\n\x0fget_temperature\x12).minknow_api.device.GetTemperatureRequest\x1a*.minknow_api.device.GetTemperatureResponse\"\x03\x90\x02\x01\x12u\n\x12stream_temperature\x12,.minknow_api.device.StreamTemperatureRequest\x1a*.minknow_api.device.GetTemperatureResponse\"\x03\x90\x02\x01\x30\x01\x12T\n\x07unblock\x12\".minknow_api.device.UnblockRequest\x1a#.minknow_api.device.UnblockResponse\"\x00\x12j\n\x0f\x63\x61ncel_unblocks\x12).minknow_api.device.CancelUnblocksRequest\x1a*.minknow_api.device.CancelUnblocksResponse\"\x00\x12\x89\x01\n\x19get_channel_configuration\x12\x32.minknow_api.device.GetChannelConfigurationRequest\x1a\x33.minknow_api.device.GetChannelConfigurationResponse\"\x03\x90\x02\x01\x12\x89\x01\n\x19set_channel_configuration\x12\x32.minknow_api.device.SetChannelConfigurationRequest\x1a\x33.minknow_api.device.SetChannelConfigurationResponse\"\x03\x90\x02\x02\x12\x93\x01\n\x1dset_channel_configuration_all\x12\x35.minknow_api.device.SetChannelConfigurationAllRequest\x1a\x36.minknow_api.device.SetChannelConfigurationAllResponse\"\x03\x90\x02\x02\x12z\n\x15set_saturation_config\x12..minknow_api.device.SetSaturationConfigRequest\x1a/.minknow_api.device.SetSaturationConfigResponse\"\x00\x12}\n\x15get_saturation_config\x12..minknow_api.device.GetSaturationConfigRequest\x1a/.minknow_api.device.GetSaturationConfigResponse\"\x03\x90\x02\x01\x12k\n\x0fget_sample_rate\x12(.minknow_api.device.GetSampleRateRequest\x1a).minknow_api.device.GetSampleRateResponse\"\x03\x90\x02\x01\x12k\n\x0fset_sample_rate\x12(.minknow_api.device.SetSampleRateRequest\x1a).minknow_api.device.SetSampleRateResponse\"\x03\x90\x02\x02\x12n\n\x10get_bias_voltage\x12).minknow_api.device.GetBiasVoltageRequest\x1a*.minknow_api.device.GetBiasVoltageResponse\"\x03\x90\x02\x01\x12n\n\x10set_bias_voltage\x12).minknow_api.device.SetBiasVoltageRequest\x1a*.minknow_api.device.SetBiasVoltageResponse\"\x03\x90\x02\x02\x12[\n\ndump_state\x12$.minknow_api.device.DumpStateRequest\x1a%.minknow_api.device.DumpStateResponse\"\x00\x12\x8e\x01\n\x1dincrement_flow_cell_use_count\x12\x34.minknow_api.device.IncrementFlowCellUseCountRequest\x1a\x35.minknow_api.device.IncrementFlowCellUseCountResponse\"\x00\x12\x82\x01\n\x19set_flow_cell_barcode_kit\x12\x30.minknow_api.device.SetFlowCellBarcodeKitRequest\x1a\x31.minknow_api.device.SetFlowCellBarcodeKitResponse\"\x00\x12\x8a\x01\n\x1bregister_flow_cell_barcodes\x12\x33.minknow_api.device.RegisterFlowCellBarcodesRequest\x1a\x34.minknow_api.device.RegisterFlowCellBarcodesResponse\"\x00\x42&\n\x1c\x63om.nanoporetech.minknow_api\xa2\x02\x05MKAPIb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -100,12 +100,12 @@ _globals['_DEVICESERVICE'].methods_by_name['get_bias_voltage']._serialized_options = b'\220\002\001' _globals['_DEVICESERVICE'].methods_by_name['set_bias_voltage']._options = None _globals['_DEVICESERVICE'].methods_by_name['set_bias_voltage']._serialized_options = b'\220\002\002' - _globals['_FLOWCELLCONNECTORTYPE']._serialized_start=6700 - _globals['_FLOWCELLCONNECTORTYPE']._serialized_end=6805 - _globals['_INSERTIONSCRIPTSTATUS']._serialized_start=6807 - _globals['_INSERTIONSCRIPTSTATUS']._serialized_end=6870 - _globals['_SELECTEDWELL']._serialized_start=6872 - _globals['_SELECTEDWELL']._serialized_end=6965 + _globals['_FLOWCELLCONNECTORTYPE']._serialized_start=7087 + _globals['_FLOWCELLCONNECTORTYPE']._serialized_end=7210 + _globals['_INSERTIONSCRIPTSTATUS']._serialized_start=7212 + _globals['_INSERTIONSCRIPTSTATUS']._serialized_end=7275 + _globals['_SELECTEDWELL']._serialized_start=7277 + _globals['_SELECTEDWELL']._serialized_end=7370 _globals['_CHANNELCONFIGURATION']._serialized_start=111 _globals['_CHANNELCONFIGURATION']._serialized_end=169 _globals['_RETURNEDCHANNELCONFIGURATION']._serialized_start=171 @@ -113,185 +113,239 @@ _globals['_GETDEVICEINFOREQUEST']._serialized_start=256 _globals['_GETDEVICEINFOREQUEST']._serialized_end=278 _globals['_GETDEVICEINFORESPONSE']._serialized_start=281 - _globals['_GETDEVICEINFORESPONSE']._serialized_end=829 + _globals['_GETDEVICEINFORESPONSE']._serialized_end=834 _globals['_GETDEVICEINFORESPONSE_COMPONENTVERSION']._serialized_start=617 _globals['_GETDEVICEINFORESPONSE_COMPONENTVERSION']._serialized_end=694 _globals['_GETDEVICEINFORESPONSE_DEVICETYPE']._serialized_start=697 - _globals['_GETDEVICEINFORESPONSE_DEVICETYPE']._serialized_end=829 - _globals['_GETDEVICESTATEREQUEST']._serialized_start=831 - _globals['_GETDEVICESTATEREQUEST']._serialized_end=854 - _globals['_GETDEVICESTATERESPONSE']._serialized_start=857 - _globals['_GETDEVICESTATERESPONSE']._serialized_end=1089 - _globals['_GETDEVICESTATERESPONSE_DEVICESTATE']._serialized_start=1033 - _globals['_GETDEVICESTATERESPONSE_DEVICESTATE']._serialized_end=1089 - _globals['_STREAMDEVICESTATEREQUEST']._serialized_start=1091 - _globals['_STREAMDEVICESTATEREQUEST']._serialized_end=1117 - _globals['_GETFLOWCELLINFOREQUEST']._serialized_start=1119 - _globals['_GETFLOWCELLINFOREQUEST']._serialized_end=1143 - _globals['_GETFLOWCELLINFORESPONSE']._serialized_start=1146 - _globals['_GETFLOWCELLINFORESPONSE']._serialized_end=1709 - _globals['_STREAMFLOWCELLINFOREQUEST']._serialized_start=1711 - _globals['_STREAMFLOWCELLINFOREQUEST']._serialized_end=1738 - _globals['_SETUSERSPECIFIEDFLOWCELLIDREQUEST']._serialized_start=1740 - _globals['_SETUSERSPECIFIEDFLOWCELLIDREQUEST']._serialized_end=1793 - _globals['_SETUSERSPECIFIEDFLOWCELLIDRESPONSE']._serialized_start=1795 - _globals['_SETUSERSPECIFIEDFLOWCELLIDRESPONSE']._serialized_end=1831 - _globals['_SETUSERSPECIFIEDPRODUCTCODEREQUEST']._serialized_start=1833 - _globals['_SETUSERSPECIFIEDPRODUCTCODEREQUEST']._serialized_end=1889 - _globals['_SETUSERSPECIFIEDPRODUCTCODERESPONSE']._serialized_start=1891 - _globals['_SETUSERSPECIFIEDPRODUCTCODERESPONSE']._serialized_end=1928 - _globals['_GETCHANNELSLAYOUTREQUEST']._serialized_start=1930 - _globals['_GETCHANNELSLAYOUTREQUEST']._serialized_end=1956 - _globals['_GETCHANNELSLAYOUTRESPONSE']._serialized_start=1958 - _globals['_GETCHANNELSLAYOUTRESPONSE']._serialized_end=2045 - _globals['_CHANNELRECORD']._serialized_start=2048 - _globals['_CHANNELRECORD']._serialized_end=2212 - _globals['_CHANNELRECORD_MUXRECORD']._serialized_start=2157 - _globals['_CHANNELRECORD_MUXRECORD']._serialized_end=2212 - _globals['_RESETDEVICESETTINGSREQUEST']._serialized_start=2214 - _globals['_RESETDEVICESETTINGSREQUEST']._serialized_end=2242 - _globals['_RESETDEVICESETTINGSRESPONSE']._serialized_start=2244 - _globals['_RESETDEVICESETTINGSRESPONSE']._serialized_end=2273 - _globals['_SETCALIBRATIONREQUEST']._serialized_start=2276 - _globals['_SETCALIBRATIONREQUEST']._serialized_end=2404 - _globals['_SETCALIBRATIONRESPONSE']._serialized_start=2406 - _globals['_SETCALIBRATIONRESPONSE']._serialized_end=2430 - _globals['_CLEARCALIBRATIONREQUEST']._serialized_start=2432 - _globals['_CLEARCALIBRATIONREQUEST']._serialized_end=2457 - _globals['_CLEARCALIBRATIONRESPONSE']._serialized_start=2459 - _globals['_CLEARCALIBRATIONRESPONSE']._serialized_end=2485 - _globals['_GETCALIBRATIONREQUEST']._serialized_start=2487 - _globals['_GETCALIBRATIONREQUEST']._serialized_end=2567 - _globals['_GETCALIBRATIONRESPONSE']._serialized_start=2569 - _globals['_GETCALIBRATIONRESPONSE']._serialized_end=2676 - _globals['_SETTEMPERATUREREQUEST']._serialized_start=2679 - _globals['_SETTEMPERATUREREQUEST']._serialized_end=3082 - _globals['_SETTEMPERATUREREQUEST_WAITFORTEMPERATURESETTINGS']._serialized_start=2933 - _globals['_SETTEMPERATUREREQUEST_WAITFORTEMPERATURESETTINGS']._serialized_end=3026 - _globals['_SETTEMPERATUREREQUEST_SECONDARYTEMPERATURELIMITS']._serialized_start=3028 - _globals['_SETTEMPERATUREREQUEST_SECONDARYTEMPERATURELIMITS']._serialized_end=3082 - _globals['_SETTEMPERATURERESPONSE']._serialized_start=3085 - _globals['_SETTEMPERATURERESPONSE']._serialized_end=3393 - _globals['_SETTEMPERATURERESPONSE_SETTEMPERATURERESULT']._serialized_start=3236 - _globals['_SETTEMPERATURERESPONSE_SETTEMPERATURERESULT']._serialized_end=3393 - _globals['_GETTEMPERATUREREQUEST']._serialized_start=3395 - _globals['_GETTEMPERATUREREQUEST']._serialized_end=3418 - _globals['_GETTEMPERATURERESPONSE']._serialized_start=3421 - _globals['_GETTEMPERATURERESPONSE']._serialized_end=4128 - _globals['_GETTEMPERATURERESPONSE_MINIONTEMPERATURE']._serialized_start=3813 - _globals['_GETTEMPERATURERESPONSE_MINIONTEMPERATURE']._serialized_end=3946 - _globals['_GETTEMPERATURERESPONSE_PROMETHIONTEMPERATURE']._serialized_start=3949 - _globals['_GETTEMPERATURERESPONSE_PROMETHIONTEMPERATURE']._serialized_end=4089 - _globals['_STREAMTEMPERATUREREQUEST']._serialized_start=4130 - _globals['_STREAMTEMPERATUREREQUEST']._serialized_end=4180 - _globals['_UNBLOCKREQUEST']._serialized_start=4182 - _globals['_UNBLOCKREQUEST']._serialized_end=4295 - _globals['_UNBLOCKRESPONSE']._serialized_start=4297 - _globals['_UNBLOCKRESPONSE']._serialized_end=4314 - _globals['_CANCELUNBLOCKSREQUEST']._serialized_start=4316 - _globals['_CANCELUNBLOCKSREQUEST']._serialized_end=4339 - _globals['_CANCELUNBLOCKSRESPONSE']._serialized_start=4341 - _globals['_CANCELUNBLOCKSRESPONSE']._serialized_end=4393 - _globals['_GETCHANNELCONFIGURATIONREQUEST']._serialized_start=4395 - _globals['_GETCHANNELCONFIGURATIONREQUEST']._serialized_end=4445 - _globals['_GETCHANNELCONFIGURATIONRESPONSE']._serialized_start=4447 - _globals['_GETCHANNELCONFIGURATIONRESPONSE']._serialized_end=4562 - _globals['_SETCHANNELCONFIGURATIONREQUEST']._serialized_start=4565 - _globals['_SETCHANNELCONFIGURATIONREQUEST']._serialized_end=4812 - _globals['_SETCHANNELCONFIGURATIONREQUEST_CHANNELCONFIGURATIONSENTRY']._serialized_start=4710 - _globals['_SETCHANNELCONFIGURATIONREQUEST_CHANNELCONFIGURATIONSENTRY']._serialized_end=4812 - _globals['_SETCHANNELCONFIGURATIONRESPONSE']._serialized_start=4814 - _globals['_SETCHANNELCONFIGURATIONRESPONSE']._serialized_end=4847 - _globals['_SETCHANNELCONFIGURATIONALLREQUEST']._serialized_start=4849 - _globals['_SETCHANNELCONFIGURATIONALLREQUEST']._serialized_end=4963 - _globals['_SETCHANNELCONFIGURATIONALLRESPONSE']._serialized_start=4965 - _globals['_SETCHANNELCONFIGURATIONALLRESPONSE']._serialized_end=5001 - _globals['_SATURATIONCONFIG']._serialized_start=5004 - _globals['_SATURATIONCONFIG']._serialized_end=5842 - _globals['_SATURATIONCONFIG_THRESHOLDS']._serialized_start=5277 - _globals['_SATURATIONCONFIG_THRESHOLDS']._serialized_end=5527 - _globals['_SATURATIONCONFIG_SOFTWARESATURATION']._serialized_start=5530 - _globals['_SATURATIONCONFIG_SOFTWARESATURATION']._serialized_end=5677 - _globals['_SATURATIONCONFIG_USERTHRESHOLDSATURATION']._serialized_start=5680 - _globals['_SATURATIONCONFIG_USERTHRESHOLDSATURATION']._serialized_end=5842 - _globals['_SETSATURATIONCONFIGREQUEST']._serialized_start=5844 - _globals['_SETSATURATIONCONFIGREQUEST']._serialized_end=5934 - _globals['_SETSATURATIONCONFIGRESPONSE']._serialized_start=5936 - _globals['_SETSATURATIONCONFIGRESPONSE']._serialized_end=5965 - _globals['_GETSATURATIONCONFIGREQUEST']._serialized_start=5967 - _globals['_GETSATURATIONCONFIGREQUEST']._serialized_end=5995 - _globals['_GETSATURATIONCONFIGRESPONSE']._serialized_start=5997 - _globals['_GETSATURATIONCONFIGRESPONSE']._serialized_end=6088 - _globals['_GETSAMPLERATEREQUEST']._serialized_start=6090 - _globals['_GETSAMPLERATEREQUEST']._serialized_end=6112 - _globals['_GETSAMPLERATERESPONSE']._serialized_start=6114 - _globals['_GETSAMPLERATERESPONSE']._serialized_end=6158 - _globals['_SETSAMPLERATEREQUEST']._serialized_start=6160 - _globals['_SETSAMPLERATEREQUEST']._serialized_end=6209 - _globals['_SETSAMPLERATERESPONSE']._serialized_start=6211 - _globals['_SETSAMPLERATERESPONSE']._serialized_end=6260 - _globals['_GETBIASVOLTAGEREQUEST']._serialized_start=6262 - _globals['_GETBIASVOLTAGEREQUEST']._serialized_end=6285 - _globals['_GETBIASVOLTAGERESPONSE']._serialized_start=6287 - _globals['_GETBIASVOLTAGERESPONSE']._serialized_end=6333 - _globals['_SETBIASVOLTAGEREQUEST']._serialized_start=6335 - _globals['_SETBIASVOLTAGEREQUEST']._serialized_end=6386 - _globals['_SETBIASVOLTAGERESPONSE']._serialized_start=6388 - _globals['_SETBIASVOLTAGERESPONSE']._serialized_end=6412 - _globals['_DUMPSTATEREQUEST']._serialized_start=6414 - _globals['_DUMPSTATEREQUEST']._serialized_end=6432 - _globals['_DUMPSTATERESPONSE']._serialized_start=6434 - _globals['_DUMPSTATERESPONSE']._serialized_end=6453 - _globals['_INCREMENTFLOWCELLUSECOUNTREQUEST']._serialized_start=6455 - _globals['_INCREMENTFLOWCELLUSECOUNTREQUEST']._serialized_end=6489 - _globals['_INCREMENTFLOWCELLUSECOUNTRESPONSE']._serialized_start=6491 - _globals['_INCREMENTFLOWCELLUSECOUNTRESPONSE']._serialized_end=6526 - _globals['_SETFLOWCELLBARCODEKITREQUEST']._serialized_start=6528 - _globals['_SETFLOWCELLBARCODEKITREQUEST']._serialized_end=6576 - _globals['_SETFLOWCELLBARCODEKITRESPONSE']._serialized_start=6578 - _globals['_SETFLOWCELLBARCODEKITRESPONSE']._serialized_end=6609 - _globals['_REGISTERFLOWCELLBARCODESREQUEST']._serialized_start=6611 - _globals['_REGISTERFLOWCELLBARCODESREQUEST']._serialized_end=6662 - _globals['_REGISTERFLOWCELLBARCODESRESPONSE']._serialized_start=6664 - _globals['_REGISTERFLOWCELLBARCODESRESPONSE']._serialized_end=6698 - _globals['_DEVICESERVICE']._serialized_start=6968 - _globals['_DEVICESERVICE']._serialized_end=10627 -GetChannelConfigurationRequest.__doc__ = """Attributes: - channels: - A list of channel names (1-indexed) to specify what channels - to get channel configs for Will return an error if any of the - channel names are below 1, or above the channel count value - returned from :meth:`get_flow_cell_info` -""" -SetChannelConfigurationRequest.__doc__ = """Attributes: - channel_configurations: - A map between Will return an - error if any of the key values (representing channel names) - are below 1, or above the channel count value returned from - :meth:`get_flow_cell_info` The selected well cannot be set to - WELL_OTHER, and will error if it tries to do so DEPRECATED: - Note that the type to set may change from 4.0 to enforce the - fact that unblock cannot be set through this call -""" -StreamTemperatureRequest.__doc__ = """Attributes: - period_seconds: - How often temperature updates should be sent Defaults to a - period of 1 second, if not specified, or set to 0 - acquisition_run_id: - The acquisition id of the experiment. - data_selection: - The desired data selection. The units for all values are - `seconds since the start of the experiment`. + _globals['_GETDEVICEINFORESPONSE_DEVICETYPE']._serialized_end=834 + _globals['_GETDEVICESTATEREQUEST']._serialized_start=836 + _globals['_GETDEVICESTATEREQUEST']._serialized_end=859 + _globals['_GETDEVICESTATERESPONSE']._serialized_start=862 + _globals['_GETDEVICESTATERESPONSE']._serialized_end=1094 + _globals['_GETDEVICESTATERESPONSE_DEVICESTATE']._serialized_start=1038 + _globals['_GETDEVICESTATERESPONSE_DEVICESTATE']._serialized_end=1094 + _globals['_STREAMDEVICESTATEREQUEST']._serialized_start=1096 + _globals['_STREAMDEVICESTATEREQUEST']._serialized_end=1122 + _globals['_GETFLOWCELLINFOREQUEST']._serialized_start=1124 + _globals['_GETFLOWCELLINFOREQUEST']._serialized_end=1148 + _globals['_GETFLOWCELLINFORESPONSE']._serialized_start=1151 + _globals['_GETFLOWCELLINFORESPONSE']._serialized_end=1754 + _globals['_STREAMFLOWCELLINFOREQUEST']._serialized_start=1756 + _globals['_STREAMFLOWCELLINFOREQUEST']._serialized_end=1783 + _globals['_SETUSERSPECIFIEDFLOWCELLIDREQUEST']._serialized_start=1785 + _globals['_SETUSERSPECIFIEDFLOWCELLIDREQUEST']._serialized_end=1838 + _globals['_SETUSERSPECIFIEDFLOWCELLIDRESPONSE']._serialized_start=1840 + _globals['_SETUSERSPECIFIEDFLOWCELLIDRESPONSE']._serialized_end=1876 + _globals['_SETUSERSPECIFIEDPRODUCTCODEREQUEST']._serialized_start=1878 + _globals['_SETUSERSPECIFIEDPRODUCTCODEREQUEST']._serialized_end=1934 + _globals['_SETUSERSPECIFIEDPRODUCTCODERESPONSE']._serialized_start=1936 + _globals['_SETUSERSPECIFIEDPRODUCTCODERESPONSE']._serialized_end=1973 + _globals['_GETCHANNELSLAYOUTREQUEST']._serialized_start=1975 + _globals['_GETCHANNELSLAYOUTREQUEST']._serialized_end=2001 + _globals['_GETCHANNELSLAYOUTRESPONSE']._serialized_start=2003 + _globals['_GETCHANNELSLAYOUTRESPONSE']._serialized_end=2090 + _globals['_CHANNELRECORD']._serialized_start=2093 + _globals['_CHANNELRECORD']._serialized_end=2257 + _globals['_CHANNELRECORD_MUXRECORD']._serialized_start=2202 + _globals['_CHANNELRECORD_MUXRECORD']._serialized_end=2257 + _globals['_RESETDEVICESETTINGSREQUEST']._serialized_start=2259 + _globals['_RESETDEVICESETTINGSREQUEST']._serialized_end=2287 + _globals['_RESETDEVICESETTINGSRESPONSE']._serialized_start=2289 + _globals['_RESETDEVICESETTINGSRESPONSE']._serialized_end=2318 + _globals['_SETCALIBRATIONREQUEST']._serialized_start=2321 + _globals['_SETCALIBRATIONREQUEST']._serialized_end=2449 + _globals['_SETCALIBRATIONRESPONSE']._serialized_start=2451 + _globals['_SETCALIBRATIONRESPONSE']._serialized_end=2475 + _globals['_CLEARCALIBRATIONREQUEST']._serialized_start=2477 + _globals['_CLEARCALIBRATIONREQUEST']._serialized_end=2502 + _globals['_CLEARCALIBRATIONRESPONSE']._serialized_start=2504 + _globals['_CLEARCALIBRATIONRESPONSE']._serialized_end=2530 + _globals['_GETCALIBRATIONREQUEST']._serialized_start=2532 + _globals['_GETCALIBRATIONREQUEST']._serialized_end=2612 + _globals['_GETCALIBRATIONRESPONSE']._serialized_start=2614 + _globals['_GETCALIBRATIONRESPONSE']._serialized_end=2721 + _globals['_SETTEMPERATUREREQUEST']._serialized_start=2724 + _globals['_SETTEMPERATUREREQUEST']._serialized_end=3127 + _globals['_SETTEMPERATUREREQUEST_WAITFORTEMPERATURESETTINGS']._serialized_start=2978 + _globals['_SETTEMPERATUREREQUEST_WAITFORTEMPERATURESETTINGS']._serialized_end=3071 + _globals['_SETTEMPERATUREREQUEST_SECONDARYTEMPERATURELIMITS']._serialized_start=3073 + _globals['_SETTEMPERATUREREQUEST_SECONDARYTEMPERATURELIMITS']._serialized_end=3127 + _globals['_SETTEMPERATURERESPONSE']._serialized_start=3130 + _globals['_SETTEMPERATURERESPONSE']._serialized_end=3438 + _globals['_SETTEMPERATURERESPONSE_SETTEMPERATURERESULT']._serialized_start=3281 + _globals['_SETTEMPERATURERESPONSE_SETTEMPERATURERESULT']._serialized_end=3438 + _globals['_GETTEMPERATUREREQUEST']._serialized_start=3440 + _globals['_GETTEMPERATUREREQUEST']._serialized_end=3463 + _globals['_GETTEMPERATURERESPONSE']._serialized_start=3466 + _globals['_GETTEMPERATURERESPONSE']._serialized_end=4515 + _globals['_GETTEMPERATURERESPONSE_MINIONTEMPERATURE']._serialized_start=4006 + _globals['_GETTEMPERATURERESPONSE_MINIONTEMPERATURE']._serialized_end=4139 + _globals['_GETTEMPERATURERESPONSE_PROMETHIONTEMPERATURE']._serialized_start=4142 + _globals['_GETTEMPERATURERESPONSE_PROMETHIONTEMPERATURE']._serialized_end=4282 + _globals['_GETTEMPERATURERESPONSE_PEBBLETEMPERATURE']._serialized_start=4285 + _globals['_GETTEMPERATURERESPONSE_PEBBLETEMPERATURE']._serialized_end=4476 + _globals['_STREAMTEMPERATUREREQUEST']._serialized_start=4517 + _globals['_STREAMTEMPERATUREREQUEST']._serialized_end=4567 + _globals['_UNBLOCKREQUEST']._serialized_start=4569 + _globals['_UNBLOCKREQUEST']._serialized_end=4682 + _globals['_UNBLOCKRESPONSE']._serialized_start=4684 + _globals['_UNBLOCKRESPONSE']._serialized_end=4701 + _globals['_CANCELUNBLOCKSREQUEST']._serialized_start=4703 + _globals['_CANCELUNBLOCKSREQUEST']._serialized_end=4726 + _globals['_CANCELUNBLOCKSRESPONSE']._serialized_start=4728 + _globals['_CANCELUNBLOCKSRESPONSE']._serialized_end=4780 + _globals['_GETCHANNELCONFIGURATIONREQUEST']._serialized_start=4782 + _globals['_GETCHANNELCONFIGURATIONREQUEST']._serialized_end=4832 + _globals['_GETCHANNELCONFIGURATIONRESPONSE']._serialized_start=4834 + _globals['_GETCHANNELCONFIGURATIONRESPONSE']._serialized_end=4949 + _globals['_SETCHANNELCONFIGURATIONREQUEST']._serialized_start=4952 + _globals['_SETCHANNELCONFIGURATIONREQUEST']._serialized_end=5199 + _globals['_SETCHANNELCONFIGURATIONREQUEST_CHANNELCONFIGURATIONSENTRY']._serialized_start=5097 + _globals['_SETCHANNELCONFIGURATIONREQUEST_CHANNELCONFIGURATIONSENTRY']._serialized_end=5199 + _globals['_SETCHANNELCONFIGURATIONRESPONSE']._serialized_start=5201 + _globals['_SETCHANNELCONFIGURATIONRESPONSE']._serialized_end=5234 + _globals['_SETCHANNELCONFIGURATIONALLREQUEST']._serialized_start=5236 + _globals['_SETCHANNELCONFIGURATIONALLREQUEST']._serialized_end=5350 + _globals['_SETCHANNELCONFIGURATIONALLRESPONSE']._serialized_start=5352 + _globals['_SETCHANNELCONFIGURATIONALLRESPONSE']._serialized_end=5388 + _globals['_SATURATIONCONFIG']._serialized_start=5391 + _globals['_SATURATIONCONFIG']._serialized_end=6229 + _globals['_SATURATIONCONFIG_THRESHOLDS']._serialized_start=5664 + _globals['_SATURATIONCONFIG_THRESHOLDS']._serialized_end=5914 + _globals['_SATURATIONCONFIG_SOFTWARESATURATION']._serialized_start=5917 + _globals['_SATURATIONCONFIG_SOFTWARESATURATION']._serialized_end=6064 + _globals['_SATURATIONCONFIG_USERTHRESHOLDSATURATION']._serialized_start=6067 + _globals['_SATURATIONCONFIG_USERTHRESHOLDSATURATION']._serialized_end=6229 + _globals['_SETSATURATIONCONFIGREQUEST']._serialized_start=6231 + _globals['_SETSATURATIONCONFIGREQUEST']._serialized_end=6321 + _globals['_SETSATURATIONCONFIGRESPONSE']._serialized_start=6323 + _globals['_SETSATURATIONCONFIGRESPONSE']._serialized_end=6352 + _globals['_GETSATURATIONCONFIGREQUEST']._serialized_start=6354 + _globals['_GETSATURATIONCONFIGREQUEST']._serialized_end=6382 + _globals['_GETSATURATIONCONFIGRESPONSE']._serialized_start=6384 + _globals['_GETSATURATIONCONFIGRESPONSE']._serialized_end=6475 + _globals['_GETSAMPLERATEREQUEST']._serialized_start=6477 + _globals['_GETSAMPLERATEREQUEST']._serialized_end=6499 + _globals['_GETSAMPLERATERESPONSE']._serialized_start=6501 + _globals['_GETSAMPLERATERESPONSE']._serialized_end=6545 + _globals['_SETSAMPLERATEREQUEST']._serialized_start=6547 + _globals['_SETSAMPLERATEREQUEST']._serialized_end=6596 + _globals['_SETSAMPLERATERESPONSE']._serialized_start=6598 + _globals['_SETSAMPLERATERESPONSE']._serialized_end=6647 + _globals['_GETBIASVOLTAGEREQUEST']._serialized_start=6649 + _globals['_GETBIASVOLTAGEREQUEST']._serialized_end=6672 + _globals['_GETBIASVOLTAGERESPONSE']._serialized_start=6674 + _globals['_GETBIASVOLTAGERESPONSE']._serialized_end=6720 + _globals['_SETBIASVOLTAGEREQUEST']._serialized_start=6722 + _globals['_SETBIASVOLTAGEREQUEST']._serialized_end=6773 + _globals['_SETBIASVOLTAGERESPONSE']._serialized_start=6775 + _globals['_SETBIASVOLTAGERESPONSE']._serialized_end=6799 + _globals['_DUMPSTATEREQUEST']._serialized_start=6801 + _globals['_DUMPSTATEREQUEST']._serialized_end=6819 + _globals['_DUMPSTATERESPONSE']._serialized_start=6821 + _globals['_DUMPSTATERESPONSE']._serialized_end=6840 + _globals['_INCREMENTFLOWCELLUSECOUNTREQUEST']._serialized_start=6842 + _globals['_INCREMENTFLOWCELLUSECOUNTREQUEST']._serialized_end=6876 + _globals['_INCREMENTFLOWCELLUSECOUNTRESPONSE']._serialized_start=6878 + _globals['_INCREMENTFLOWCELLUSECOUNTRESPONSE']._serialized_end=6913 + _globals['_SETFLOWCELLBARCODEKITREQUEST']._serialized_start=6915 + _globals['_SETFLOWCELLBARCODEKITREQUEST']._serialized_end=6963 + _globals['_SETFLOWCELLBARCODEKITRESPONSE']._serialized_start=6965 + _globals['_SETFLOWCELLBARCODEKITRESPONSE']._serialized_end=6996 + _globals['_REGISTERFLOWCELLBARCODESREQUEST']._serialized_start=6998 + _globals['_REGISTERFLOWCELLBARCODESREQUEST']._serialized_end=7049 + _globals['_REGISTERFLOWCELLBARCODESRESPONSE']._serialized_start=7051 + _globals['_REGISTERFLOWCELLBARCODESRESPONSE']._serialized_end=7085 + _globals['_DEVICESERVICE']._serialized_start=7373 + _globals['_DEVICESERVICE']._serialized_end=11032 +SetCalibrationRequest.__doc__ = """Attributes: + first_channel: + The first channel included in calibration data. This must + always be 1. This is required in order to make sure the client + and MinKNOW agree on what data is being provided. + last_channel: + The last channel included in calibration data. This must + always be the same as the channel count returned by + :meth:`get_flow_cell_info`. This is required in order to make + sure the client and MinKNOW agree on what data is being + provided. + offsets: + The ADC value adjustment to reach 0pA on each channel. This + is ``-x``, where ``x`` is the (mean) ADC value at 0pA. + pa_ranges: + The range of possible pA values that can be produced by the + device. """ -GetTemperatureResponse.PromethIONTemperature.__doc__ = """Packet of temperatures appropriate for a PromethION. +ReturnedChannelConfiguration.__doc__ = """Describes the configuration of a channel on the device. Note that +this is a lossy representation. The device-specific APIs provide more +precise information. This only describes common configurations, and +omits anything that doesn't impact the received signal. Attributes: - flowcell_temperature: - Temperature as measured by thermistor TH2 on the P-Chip. This - is the "primary" temperature - chamber_temperature: - Mean of 12 pixel-blocks temperatures measured with sensors in - the ASIC. This is the "secondary" temperature + well: + The currently-connected well. Wells are counted from 1. 0 + indicates that no well is connected. 5 indicates some non- + generic configuration such as ground for a minion or + connecting all wells on promethion Note that MinKNOW can + return channel configurations where the well number is larger + than the ``max_well_count`` value returned by + :meth:`DeviceService.get_device_info`. This indicates that + some other connection has been made (for example, PromethIONs + can simultaneously connect all wells, and MinIONs can connect + to ground). + test_current: + Whether the test current is connected to the integrator + (measurement circuit). The signal will be a steady test + current produced on the device. This can be used for + calibration or to test the device integration circuits. + unblock: + Whether the unblock voltage is connected to the integrator + (measurement circuit). Provides a reverse potential across + the connected well. This can be used to drive molecules back + out of the well. +""" +GetDeviceInfoResponse.__doc__ = """Attributes: + device_id: + A unique identifier for the device. This is the identifier of + the device MinKNOW was started for. It will only communicate + with this device. Note that simulated device IDs are only + unique for this host, not globally. This value will be set + even if the device is not currently connected (assuming + MinKNOW was started by the manager service). + device_type: + The type of the device. + is_simulated: + Whether the device is simulated. If this is true, there is no + physical device - MinKNOW is simulating it. If it is false, + MinKNOW will be acquiring data from a real device. + max_channel_count: + The maximum number of channels supported by the device. Each + channel provides a signal from the device. For example, a + MinION supports up to 512 channels, and so can provide 512 + simultaneous streams of data. This value is fixed for a given + device type. Note, however, that a flow cell might be attached + that has a smaller number of channels. + max_wells_per_channel: + The maximum number of wells connected to each channel. A well + is a discrete location on the device where sensing can take + place. Normally, each well should have a single nanopore in + it. For example, a MinION supports up to 4 wells per channel, + allowing for 2048 wells in total. So the value of this for a + MinION will be 4. This value is fixed for a given device + type. Note, however, that a flow cell might be attached that + has a smaller number of wells on each channel. + can_set_temperature: + Whether the set_temperature() method can be expected to work. + On some systems, not all connected devices have the ability to + control their own temperature, as temperature controls are + managed in groups. If this field is true, this device can + control its own temperature. If it it false, it cannot, and + the temperature will be maintained at a pre-determined + temperature. + digitisation: + The range of uncalibrated data values. This is the number of + distinct signal values that can be produced by the device's + analog to digital converter (ADC). """ SetSampleRateResponse.__doc__ = """Attributes: real_sample_rate: @@ -306,6 +360,69 @@ 3012 real sample rate. See 'sampling_frequency' in MinionDeviceService for a slightly more in depth explanation """ +GetDeviceStateResponse.__doc__ = """Attributes: + device_state: + Whether the physical hardware is present. This is really only + relevant to MinIONs, which could be unplugged by the user at + any time. + flow_cell_connector: + Indicates what sort of flow cell can be inserted. For + example, if the user needs to set or override the flow cell + product code, this can be used to limit the list of possible + flow cell product codes to choose from. Since 4.1 +""" +StreamTemperatureRequest.__doc__ = """Attributes: + period_seconds: + How often temperature updates should be sent Defaults to a + period of 1 second, if not specified, or set to 0 + acquisition_run_id: + The acquisition id of the experiment. + data_selection: + The desired data selection. The units for all values are + `seconds since the start of the experiment`. +""" +RegisterFlowCellBarcodesRequest.__doc__ = """Attributes: + barcodes: + List of unique barcodes that have been used with the flow-cell + Where a barcode is represented by an index in the range of 1 + to 384 only. +""" +SetTemperatureRequest.WaitForTemperatureSettings.__doc__ = """Attributes: + timeout: + Maximum duration (in seconds) to wait for the device to reach + temperature. Not specifying a value will wait for a maximum + of 5 minutes. + min_stable_duration: + Minimum duration (in seconds) that the reported temperature + must be continually within the target temperature range, + before the device is considered to have reached temperature. + A value of zero means that the device will be considered to + have reached temperature as soon as the reported temperature + is equal to the target temperature. Not specifying a value is + equivalent to specifying a value of zero. The + min_stable_duration must be less than or equal to the timeout + duration (if it were greater, then the temperature would never + be read as 'stable' before the time-out occurred). Since 3.4 + tolerance: + Specify an optional tolerance to apply to the wait. For + example, if the target temperature is 35, and the tolerance is + 1 any temperature in the range 34 - 36 will cause the request + to return. Default is 0.5 degree tolerance. +""" +SaturationConfig.__doc__ = """Attributes: + thresholds: + Settings for saturation count thresholds, this controls how + long a saturated value must be over limit before the channel + is turned off. If not specified, the previous thresholds are + kept. + software_saturation: + Settings for software saturation, specified in adc units of + the device. If not specified, the previous thresholds are + kept. + user_threshold_saturation: + Settings for user threshold saturation, specified in pA. If + not specified, the previous thresholds are kept. +""" SetTemperatureRequest.__doc__ = """Attributes: temperature: The desired temperature in degrees Celsius. If temperature @@ -354,105 +471,12 @@ the call to `set_temperature()` returns, these limits are no longer checked. Since 5.5 """ -SaturationConfig.UserThresholdSaturation.__doc__ = """User threshold is specified in pico amps - -Attributes: - enabled: - Set to enable or disable software saturation. - user_threshold_min_pa: - The minimum pA value that is not a saturation. If this value - is not specified, the previous value is kept. - user_threshold_max_pa: - The maximum pA value that is not a saturation. If this value - is not specified, the previous value is kept. -""" -CancelUnblocksResponse.__doc__ = """Attributes: - cancelled_unblocks: - The number of unblocks which have been cancelled as part of - this request. Should return the total number of unblock - operations which have been cancelled. -""" -GetDeviceInfoResponse.__doc__ = """Attributes: - device_id: - A unique identifier for the device. This is the identifier of - the device MinKNOW was started for. It will only communicate - with this device. Note that simulated device IDs are only - unique for this host, not globally. This value will be set - even if the device is not currently connected (assuming - MinKNOW was started by the manager service). - device_type: - The type of the device. - is_simulated: - Whether the device is simulated. If this is true, there is no - physical device - MinKNOW is simulating it. If it is false, - MinKNOW will be acquiring data from a real device. - max_channel_count: - The maximum number of channels supported by the device. Each - channel provides a signal from the device. For example, a - MinION supports up to 512 channels, and so can provide 512 - simultaneous streams of data. This value is fixed for a given - device type. Note, however, that a flow cell might be attached - that has a smaller number of channels. - max_wells_per_channel: - The maximum number of wells connected to each channel. A well - is a discrete location on the device where sensing can take - place. Normally, each well should have a single nanopore in - it. For example, a MinION supports up to 4 wells per channel, - allowing for 2048 wells in total. So the value of this for a - MinION will be 4. This value is fixed for a given device - type. Note, however, that a flow cell might be attached that - has a smaller number of wells on each channel. - can_set_temperature: - Whether the set_temperature() method can be expected to work. - On some systems, not all connected devices have the ability to - control their own temperature, as temperature controls are - managed in groups. If this field is true, this device can - control its own temperature. If it it false, it cannot, and - the temperature will be maintained at a pre-determined - temperature. - digitisation: - The range of uncalibrated data values. This is the number of - distinct signal values that can be produced by the device's - analog to digital converter (ADC). -""" -SaturationConfig.Thresholds.__doc__ = """The thresholds define how many over limit samples are required to -trigger saturation on the device. Each packet of frames minknow -receive is delivered to the saturation check (in approx 64 frame -chunks), only the first frame of each packet is inspected. The -thresholds control how many _packets_ must be outside the valid range. -ie. if general_threshold is set to 10, at least 640 frames are -required to trigger saturation. It is also possible to not define the -value to never trigger saturation in this config. Note: Setting a -saturation threshold to 0 will prevent the threshold from triggering. - -Attributes: - general_threshold: - Threshold for software saturation on all non-unblock muxes - unblock_threshold: - Threshold for software saturation on unblock muxes - user_general_threshold: - Threshold for user threshold saturation on all non-unblock - muxes - user_unblock_threshold: - Threshold for user threshold saturation on unblock muxes -""" UnblockRequest.__doc__ = """Attributes: channels: List of channels indexed from 1. duration: How long should an unblock last. """ -SetFlowCellBarcodeKitRequest.__doc__ = """Attributes: - id: - The Barcode Kit ID can be up to 8 characters long -""" -SetUserSpecifiedFlowCellIdRequest.__doc__ = """Attributes: - id: - A unique identifier for the flow cell, which the user can - specify. In the event a flow cell does not have an eeprom, - this field can be used by the user to record their - flow_cell_id. Since 1.12 -""" GetCalibrationResponse.__doc__ = """Attributes: digitisation: The range of possible ADC values that can be produced by the @@ -476,61 +500,22 @@ max: The maximum permissible "secondary" temperature """ -RegisterFlowCellBarcodesRequest.__doc__ = """Attributes: - barcodes: - List of unique barcodes that have been used with the flow-cell - Where a barcode is represented by an index in the range of 1 - to 384 only. -""" -GetTemperatureResponse.MinIONTemperature.__doc__ = """Packet of temperatures appropriate for a MinION. - -Attributes: - asic_temperature: - Temperature as measured by the probe inside the asic. This is - the "secondary" temperature - heatsink_temperature: - Temperature as measured by the probe in the minion heatsink. - This is the "primary" temperature -""" -SetTemperatureRequest.WaitForTemperatureSettings.__doc__ = """Attributes: - timeout: - Maximum duration (in seconds) to wait for the device to reach - temperature. Not specifying a value will wait for a maximum - of 5 minutes. - min_stable_duration: - Minimum duration (in seconds) that the reported temperature - must be continually within the target temperature range, - before the device is considered to have reached temperature. - A value of zero means that the device will be considered to - have reached temperature as soon as the reported temperature - is equal to the target temperature. Not specifying a value is - equivalent to specifying a value of zero. The - min_stable_duration must be less than or equal to the timeout - duration (if it were greater, then the temperature would never - be read as 'stable' before the time-out occurred). Since 3.4 - tolerance: - Specify an optional tolerance to apply to the wait. For - example, if the target temperature is 35, and the tolerance is - 1 any temperature in the range 34 - 36 will cause the request - to return. Default is 0.5 degree tolerance. -""" -SetCalibrationRequest.__doc__ = """Attributes: - first_channel: - The first channel included in calibration data. This must - always be 1. This is required in order to make sure the client - and MinKNOW agree on what data is being provided. - last_channel: - The last channel included in calibration data. This must - always be the same as the channel count returned by - :meth:`get_flow_cell_info`. This is required in order to make - sure the client and MinKNOW agree on what data is being - provided. - offsets: - The ADC value adjustment to reach 0pA on each channel. This - is ``-x``, where ``x`` is the (mean) ADC value at 0pA. - pa_ranges: - The range of possible pA values that can be produced by the - device. +SetChannelConfigurationRequest.__doc__ = """Attributes: + channel_configurations: + A map between Will return an + error if any of the key values (representing channel names) + are below 1, or above the channel count value returned from + :meth:`get_flow_cell_info` The selected well cannot be set to + WELL_OTHER, and will error if it tries to do so DEPRECATED: + Note that the type to set may change from 4.0 to enforce the + fact that unblock cannot be set through this call +""" +GetChannelConfigurationRequest.__doc__ = """Attributes: + channels: + A list of channel names (1-indexed) to specify what channels + to get channel configs for Will return an error if any of the + channel names are below 1, or above the channel count value + returned from :meth:`get_flow_cell_info` """ GetCalibrationRequest.__doc__ = """Attributes: first_channel: @@ -541,54 +526,29 @@ normally be the channel count returned by :meth:`get_flow_cell_info`. """ -SetTemperatureResponse.__doc__ = """Attributes: - timed_out_waiting_for_temperature: - Find if we hit a timeout waiting for the temperature to be - hit. Deprecated since 5.5; in favour of the - `TIMED_OUT_WAITING_FOR_TEMPERATURE` result code. - result: - The result of setting the temperature Since 5.5 NB - before - 5.5, checking this field will always return a value of - `TARGET_TEMPERATURE_SET` The "real" value may be inferred as - follows: - If `wait_for_temperature` was NOT specified, the - "real" result is `TARGET_TEMPERATURE_SET` - If - `wait_for_temperature` was specified, and - `timed_out_waiting_for_temperature` is false, the "real" - result is `REACHED_TEMPERATURE` - If `wait_for_temperature` - was specified, and `timed_out_waiting_for_temperature` is - true, the "real" result is `TIMED_OUT_WAITING_FOR_TEMPERATURE` - - Versions prior to 5.5 do not support setting the secondary - temperature limit, and so (for these versions) the "real" - value can never be `SECONDARY_TEMPERATURE_LIMITS_EXCEEDED` -""" -GetChannelConfigurationResponse.__doc__ = """Attributes: - channel_configurations: - A list of channel configurations The order of channel - configurations matches the channel order specified by - :attribute:`channels` in the request message -""" -GetDeviceInfoResponse.ComponentVersion.__doc__ = """Firmware versions and serial-numbers of components associated with -this device Depending on the hardware, there may be several -components associated with this device, each with their own firmware -version and serial-number. Not all components have serial-numbers. +GetTemperatureResponse.PromethIONTemperature.__doc__ = """Packet of temperatures appropriate for a PromethION. Attributes: - component: - Description of the component that has firmware - version: - The firmware version, if this cannot be determined for a - component where the firmware version would usually be - available, this will contain "Unknown" - serial_number: - The serial-number of a component. If this in not applicable to - the type of component or cannot be read at the current time, - then this field will be blank. + flowcell_temperature: + Temperature as measured by thermistor TH2 on the P-Chip. This + is the "primary" temperature + chamber_temperature: + Mean of 12 pixel-blocks temperatures measured with sensors in + the ASIC. This is the "secondary" temperature """ -SetUserSpecifiedProductCodeRequest.__doc__ = """Attributes: - code: - A product code for the flow cell, which the user can specify. - In the event a flow cell does not have an eeprom, the user can - specify product code here. Since 1.12 +GetTemperatureResponse.PebbleTemperature.__doc__ = """Packet of temperatures appropriate for a Pebble + +Attributes: + asic_temperature: + Temperature as measured by a sensor in the ASIC silicon. This + is the "primary" temperature. + instrument_temperature: + Temperature as measured by temperature-sensor on the PCB + inside the instrument, but not on the P-Chip. This is the + "secondary" temperature. + pchip_temperature: + Temperature as measured by a temperature-sensor on the P-Chip. + Likely to be removed in future revisions. """ GetFlowCellInfoResponse.__doc__ = """Attributes: has_flow_cell: @@ -635,9 +595,9 @@ A unique identifier for the flow cell, which the user can specify. In the event a flow cell does not have an eeprom, this field contains data input by the user using - set_flow_cell_info to record required data. Only alpha- - numeric, space, dash and underscore characters are allowed in - this field. Since 1.12 + set_flow_cell_info to record required data. Only + alphanumeric, space, dash and underscore characters are + allowed in this field. Since 1.12 user_specified_product_code: A product code for the flow cell, which the user can specify. This should be the code displayed in the shop where the flow @@ -673,7 +633,7 @@ cell is inserted, this shows if it completed successfully. Since 5.0 use_count: - The use count for this flow cell. Since 5.6 + The use count for this flow cell. Since 5.6 use_count_limit: The advised flow-cell use_count_limit from the configuration. This limit will not be enforced by MinKNOW-Core. Since 5.6 @@ -698,31 +658,87 @@ where this field is 'true', the flow cell is definitely a CTC. In cases where it is 'false', the flow cell _may_ be a CTC. Since 6.0 + incompatible_flow_cell_partner: + Set to true if the flow cell partner is incompatible with this + installation of MinKNOW. Note that it is possible for this + field to be true and for flow_cell_partner to be empty (if the + installation requires a specific flow cell partner value). + Since 5.6 (China IVD and Q) NB: this does not appear in the + 5.6 OND release, or in RUO releases 5.7, 5.8, 5.9 or 6.0. It + is available in all 6.2 releases onwards. """ -ChannelConfiguration.__doc__ = """Describes the configuration of a channel on the device. Note that -this is a lossy representation. The device-specific APIs provide more -precise information. This only describes common configurations, and -omits anything that doesn't impact the received signal. +SetTemperatureResponse.__doc__ = """Attributes: + timed_out_waiting_for_temperature: + Find if we hit a timeout waiting for the temperature to be + hit. Deprecated since 5.5; in favour of the + `TIMED_OUT_WAITING_FOR_TEMPERATURE` result code. + result: + The result of setting the temperature Since 5.5 NB - before + 5.5, checking this field will always return a value of + `TARGET_TEMPERATURE_SET` The "real" value may be inferred as + follows: - If `wait_for_temperature` was NOT specified, the + "real" result is `TARGET_TEMPERATURE_SET` - If + `wait_for_temperature` was specified, and + `timed_out_waiting_for_temperature` is false, the "real" + result is `REACHED_TEMPERATURE` - If `wait_for_temperature` + was specified, and `timed_out_waiting_for_temperature` is + true, the "real" result is `TIMED_OUT_WAITING_FOR_TEMPERATURE` + - Versions prior to 5.5 do not support setting the secondary + temperature limit, and so (for these versions) the "real" + value can never be `SECONDARY_TEMPERATURE_LIMITS_EXCEEDED` +""" +GetDeviceInfoResponse.ComponentVersion.__doc__ = """Firmware versions and serial-numbers of components associated with +this device Depending on the hardware, there may be several +components associated with this device, each with their own firmware +version and serial-number. Not all components have serial-numbers. Attributes: - well: - The currently-connected well. Wells are counted from 1. 0 - indicates that no well is connected. 5 indicates some non- - generic configuration such as ground for a minion or - connecting all wells on promethion Note that MinKNOW can - return channel configurations where the well number is larger - than the ``max_well_count`` value returned by - :meth:`DeviceService.get_device_info`. This indicates that - some other connection has been made (for example, PromethIONs - can simultaneously connect all wells, and MinIONs can connect - to ground). - test_current: - Whether the test current is connected to the integrator - (measurement circuit). The signal will be a steady test - current produced on the device. This can be used for - calibration or to test the device integration circuits. + component: + Description of the component that has firmware + version: + The firmware version, if this cannot be determined for a + component where the firmware version would usually be + available, this will contain "Unknown" + serial_number: + The serial-number of a component. If this in not applicable to + the type of component or cannot be read at the current time, + then this field will be blank. """ -ReturnedChannelConfiguration.__doc__ = """Describes the configuration of a channel on the device. Note that +GetTemperatureResponse.__doc__ = """Attributes: + target_temperature: + Return the temperature target the device is aiming to reach. + starting_temperature: + Starting temperature value Since 6.0 + flowcell_temperature: + Temperature as measured by thermistor TH2 on the P-Chip. + chamber_temperature: + Flow-cell chamber-temperature, calculated from the pixel-block + temperatures + pixel_block_temperature: + Temperature measured at each sensor in the ASIC, there are 12 + sensors, one sensor per pixel-block +""" +SaturationConfig.SoftwareSaturation.__doc__ = """The ranges specify the actual pA or ADC ranges which will trigger +saturation. This range is checked against the first sample in each +delivered packet. software saturation is specified in adc units + +Attributes: + enabled: + Set to enable or disable software saturation. + software_min_adc: + The minimum adc value that is not a saturation. If this value + is not specified, the previous value is kept. + software_max_adc: + The maximum adc value that is not a saturation. If this value + is not specified, the previous value is kept. +""" +SetUserSpecifiedProductCodeRequest.__doc__ = """Attributes: + code: + A product code for the flow cell, which the user can specify. + In the event a flow cell does not have an eeprom, the user can + specify product code here. Since 1.12 +""" +ChannelConfiguration.__doc__ = """Describes the configuration of a channel on the device. Note that this is a lossy representation. The device-specific APIs provide more precise information. This only describes common configurations, and omits anything that doesn't impact the received signal. @@ -744,63 +760,71 @@ (measurement circuit). The signal will be a steady test current produced on the device. This can be used for calibration or to test the device integration circuits. - unblock: - Whether the unblock voltage is connected to the integrator - (measurement circuit). Provides a reverse potential across - the connected well. This can be used to drive molecules back - out of the well. """ -SaturationConfig.__doc__ = """Attributes: - thresholds: - Settings for saturation count thresholds, this controls how - long a saturated value must be over limit before the channel - is turned off. If not specified, the previous thresholds are - kept. - software_saturation: - Settings for software saturation, specified in adc units of - the device. If not specified, the previous thresholds are - kept. - user_threshold_saturation: - Settings for user threshold saturation, specified in pA. If - not specified, the previous thresholds are kept. +SetFlowCellBarcodeKitRequest.__doc__ = """Attributes: + id: + The Barcode Kit ID can be up to 8 characters long """ -GetTemperatureResponse.__doc__ = """Attributes: - target_temperature: - Return the temperature target the device is aiming to reach. - starting_temperature: - Starting temperature value Since 6.0 - flowcell_temperature: - Temperature as measured by thermistor TH2 on the P-Chip. - chamber_temperature: - Flow-cell chamber-temperature, calculated from the pixel-block - temperatures - pixel_block_temperature: - Temperature measured at each sensor in the ASIC, there are 12 - sensors, one sensor per pixel-block +SetUserSpecifiedFlowCellIdRequest.__doc__ = """Attributes: + id: + A unique identifier for the flow cell, which the user can + specify. In the event a flow cell does not have an eeprom, + this field can be used by the user to record their + flow_cell_id. Since 1.12 """ -SaturationConfig.SoftwareSaturation.__doc__ = """The ranges specify the actual pA or ADC ranges which will trigger -saturation. This range is checked against the first sample in each -delivered packet. software saturation is specified in adc units +CancelUnblocksResponse.__doc__ = """Attributes: + cancelled_unblocks: + The number of unblocks which have been cancelled as part of + this request. Should return the total number of unblock + operations which have been cancelled. +""" +GetChannelConfigurationResponse.__doc__ = """Attributes: + channel_configurations: + A list of channel configurations The order of channel + configurations matches the channel order specified by + :attribute:`channels` in the request message +""" +SaturationConfig.UserThresholdSaturation.__doc__ = """User threshold is specified in pico amps Attributes: enabled: Set to enable or disable software saturation. - software_min_adc: - The minimum adc value that is not a saturation. If this value + user_threshold_min_pa: + The minimum pA value that is not a saturation. If this value is not specified, the previous value is kept. - software_max_adc: - The maximum adc value that is not a saturation. If this value + user_threshold_max_pa: + The maximum pA value that is not a saturation. If this value is not specified, the previous value is kept. """ -GetDeviceStateResponse.__doc__ = """Attributes: - device_state: - Whether the physical hardware is present. This is really only - relevant to MinIONs, which could be unplugged by the user at - any time. - flow_cell_connector: - Indicates what sort of flow cell can be inserted. For - example, if the user needs to set or override the flow cell - product code, this can be used to limit the list of possible - flow cell product codes to choose from. Since 4.1 +GetTemperatureResponse.MinIONTemperature.__doc__ = """Packet of temperatures appropriate for a MinION. + +Attributes: + asic_temperature: + Temperature as measured by the probe inside the asic. This is + the "secondary" temperature + heatsink_temperature: + Temperature as measured by the probe in the minion heatsink. + This is the "primary" temperature +""" +SaturationConfig.Thresholds.__doc__ = """The thresholds define how many over limit samples are required to +trigger saturation on the device. Each packet of frames minknow +receive is delivered to the saturation check (in approx 64 frame +chunks), only the first frame of each packet is inspected. The +thresholds control how many _packets_ must be outside the valid range. +ie. if general_threshold is set to 10, at least 640 frames are +required to trigger saturation. It is also possible to not define the +value to never trigger saturation in this config. Note: Setting a +saturation threshold to 0 will prevent the threshold from triggering. + +Attributes: + general_threshold: + Threshold for software saturation on all non-unblock muxes + unblock_threshold: + Threshold for software saturation on unblock muxes + user_general_threshold: + Threshold for user threshold saturation on all non-unblock + muxes + user_unblock_threshold: + Threshold for user threshold saturation on unblock muxes """ # @@protoc_insertion_point(module_scope) diff --git a/python/minknow_api/device_pb2_grpc.py b/python/minknow_api/device_pb2_grpc.py index ef14398..b851f17 100644 --- a/python/minknow_api/device_pb2_grpc.py +++ b/python/minknow_api/device_pb2_grpc.py @@ -266,7 +266,7 @@ def get_channels_layout(self, request, context): raise NotImplementedError('Method not implemented!') def reset_device_settings(self, request, context): - """Reset all settings associate with the current device. + """Reset all settings associated with the current device. This call will initialise all settings to their default state, ie the same as when MinKNOW boots. """ diff --git a/python/minknow_api/device_service.py b/python/minknow_api/device_service.py index b78647c..1f7aca8 100644 --- a/python/minknow_api/device_service.py +++ b/python/minknow_api/device_service.py @@ -76,6 +76,7 @@ "FCCON_PROMETHION", "FCCON_MINION_MK1", "FCCON_FLONGLE", + "FCCON_PEBBLE", "InsertionScriptStatus", "NOT_RUN", "FAILED", @@ -485,7 +486,7 @@ def get_channels_layout(self, _message=None, _timeout=None, **kwargs): [], "minknow_api.device.DeviceService") def reset_device_settings(self, _message=None, _timeout=None, **kwargs): - """Reset all settings associate with the current device. + """Reset all settings associated with the current device. This call will initialise all settings to their default state, ie the same as when MinKNOW boots. diff --git a/python/minknow_api/examples/README.md b/python/minknow_api/examples/README.md index 76d9c5f..18ef63d 100644 --- a/python/minknow_api/examples/README.md +++ b/python/minknow_api/examples/README.md @@ -150,6 +150,6 @@ python manage_simulated_devices.py --prom --add 1A 2B python manage_simulated_devices.py --p2 --add P2S_000000-A # Add multiple simulated P2 positions -python manage_simulated_devices.py --p2 --add P2S_000000-A P2S_000000-B +python manage_simulated_devices.py --p2 --add P2S_000000-A P2S_000000-B ``` diff --git a/python/minknow_api/examples/create_client_certificates.py b/python/minknow_api/examples/create_client_certificates.py index ce763c0..383c68e 100644 --- a/python/minknow_api/examples/create_client_certificates.py +++ b/python/minknow_api/examples/create_client_certificates.py @@ -4,14 +4,15 @@ from getpass import getpass from pathlib import Path from typing import Optional, Tuple +from minknow_api.tools.compatibility_helpers import datetime_utc_now try: from cryptography import x509 from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.asymmetric import rsa from cryptography.hazmat.primitives.asymmetric.types import ( - CERTIFICATE_PRIVATE_KEY_TYPES, - PRIVATE_KEY_TYPES, + CertificateIssuerPrivateKeyTypes, + PrivateKeyTypes, ) from cryptography.x509.oid import ExtendedKeyUsageOID, NameOID from cryptography.hazmat.primitives import serialization @@ -30,7 +31,7 @@ def key_to_pem( key: rsa.RSAPrivateKey, encryption: serialization.KeySerializationEncryption = serialization.NoEncryption(), ) -> bytes: - """Convert a key into PEM format, optionaly encrypting it.""" + """Convert a key into PEM format, optionally encrypting it.""" return key.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.TraditionalOpenSSL, @@ -56,9 +57,7 @@ def load_certificate(cert_path: Path) -> x509.Certificate: return x509.load_der_x509_certificate(cert_data) -def load_private_key( - key_path: Path, key_pass_file: Optional[Path] -) -> PRIVATE_KEY_TYPES: +def load_private_key(key_path: Path, key_pass_file: Optional[Path]) -> PrivateKeyTypes: """Load a PEM encoded private key from disk. Args: @@ -93,7 +92,7 @@ def generate_certificate_and_key( name: str, days_valid: int, issuer: Optional[x509.Name] = None, - issuer_key: Optional[CERTIFICATE_PRIVATE_KEY_TYPES] = None, + issuer_key: Optional[CertificateIssuerPrivateKeyTypes] = None, ) -> Tuple[x509.Certificate, rsa.RSAPrivateKey]: """Generate a certificate and key pair suitable for use as a client certificate with gRPC. @@ -137,10 +136,8 @@ def generate_certificate_and_key( .issuer_name(issuer) .public_key(key.public_key()) .serial_number(x509.random_serial_number()) - .not_valid_before(datetime.datetime.utcnow()) - .not_valid_after( - datetime.datetime.utcnow() + datetime.timedelta(days=days_valid) - ) + .not_valid_before(datetime_utc_now()) + .not_valid_after(datetime_utc_now() + datetime.timedelta(days=days_valid)) .add_extension( x509.BasicConstraints(ca=can_sign, path_length=None), critical=True, diff --git a/python/minknow_api/examples/manage_simulated_devices.py b/python/minknow_api/examples/manage_simulated_devices.py index e9fd3c0..71f4e6a 100644 --- a/python/minknow_api/examples/manage_simulated_devices.py +++ b/python/minknow_api/examples/manage_simulated_devices.py @@ -65,7 +65,7 @@ def parse_arguments(): "--prom", "-p", action="store_true", - help="Add a simulated PromethION flow cell. If adding a simulated PromethION flow cell and providing a name, please ensure the name follows the LN naming convention, where L is an uppercase letter and N is a sigle digit number.", + help="Add a simulated PromethION flow cell. If adding a simulated PromethION flow cell and providing a name, please ensure the name follows the LN naming convention, where L is an uppercase letter and N is a single digit number.", ) device_group.add_argument( "--p2", @@ -86,7 +86,7 @@ def parse_arguments(): "-a", nargs="*", default=None, - help='Add specified simulated devices to MinKnow. BY default this device is a MinION, but this can be changed using the "--prom " or "--p2" flags. Optionally specify device names, which should be passed as a space seperated list, for example `--add MS00000 MS00001`.\n Names must be in certain formats for each type created - MSXXXXX for MinION and LN for PromethION, where L is an uppercase letter and N is a sigle digit number eg: "1A". For P2, please use either "P2S_" followed by five digits, and then "-A" or "-B" eg: "P2S_000000-A" or "P2S_000000-B".', + help='Add specified simulated devices to MinKnow. BY default this device is a MinION, but this can be changed using the "--prom " or "--p2" flags. Optionally specify device names, which should be passed as a space separated list, for example `--add MS00000 MS00001`.\n Names must be in certain formats for each type created - MSXXXXX for MinION and LN for PromethION, where L is an uppercase letter and N is a single digit number eg: "1A". For P2, please use either "P2S_" followed by five digits, and then "-A" or "-B" eg: "P2S_000000-A" or "P2S_000000-B".', ) action_group.add_argument( "--remove", @@ -171,7 +171,7 @@ def main(): if (args.prom or args.p2) and args.add is None: print( - "You have specified a device type but not passed --add. Listing availiable devices..." + "You have specified a device type but not passed --add. Listing available devices..." ) # Try and connect to the minknow-core manager passing the host, port and developer-api token. If the Python code # can't connect it will throw, catch the exception and exit with an error message. @@ -209,7 +209,7 @@ def main(): ) ) sys.exit(1) - # patterns andd tests + # patterns and tests else: device_type = minknow_api.manager_pb2.SimulatedDeviceType.SIMULATED_MINION pattern = "MS{:05}" diff --git a/python/minknow_api/examples/start_protocol.py b/python/minknow_api/examples/start_protocol.py index ff3770e..a6dc92c 100644 --- a/python/minknow_api/examples/start_protocol.py +++ b/python/minknow_api/examples/start_protocol.py @@ -20,7 +20,9 @@ import argparse import logging +from pathlib import Path import sys +import json # minknow_api.manager supplies "Manager" a wrapper around MinKNOW's Manager gRPC API with utilities # for querying sequencing positions + offline basecalling tools. @@ -33,6 +35,7 @@ load_sample_sheet_csv, ) from minknow_api.manager import Manager +from minknow_api.protocol_pb2 import AnalysisWorkflowRequest # We need `find_protocol` to search for the required protocol given a kit + product code. from minknow_api.tools import protocols @@ -114,6 +117,10 @@ def parse_args(): help="Override the product-code stored on the flow-cell and previously user-specified " "product-codes", ) + parser.add_argument( + "--config-name", + help="Script name hint, if using custom configs when sequencing.", + ) # SAMPLE SHEET position_args.add_argument( @@ -156,33 +163,6 @@ def parse_args(): help="bar-code filtering (both ends of a strand must have a matching barcode)", ) - parser.add_argument( - "--detect-mid-strand-barcodes", - action="store_true", - help="bar-code filtering for bar-codes in the middle of a strand", - ) - - parser.add_argument( - "--min-score", - type=float, - default=0.0, - help="read selection based on bar-code accuracy", - ) - - parser.add_argument( - "--min-score-rear", - type=float, - default=0.0, - help="read selection based on bar-code accuracy", - ) - - parser.add_argument( - "--min-score-mid", - type=float, - default=0.0, - help="read selection based on bar-code accuracy", - ) - # ALIGNMENT ARGUMENTS parser.add_argument( "--alignment-reference", @@ -294,13 +274,6 @@ def parse_args(): help="time spent sequencing (in hours)", ) - parser.add_argument( - "--no-active-channel-selection", - action="store_true", - help="allow dynamic selection of channels to select pores for sequencing, " - "ignored for Flongle flow-cells", - ) - parser.add_argument( "--mux-scan-period", type=float, @@ -308,12 +281,33 @@ def parse_args(): help="number of hours before a mux scan takes place, enables active-channel-selection, " "ignored for Flongle flow-cells", ) + + parser.add_argument( + "--simulation", + type=Path, + help="Bulk file to use for play back", + ) + + # Can either use a JSON file or a JSON string for workflow arguments + workflow_args = parser.add_mutually_exclusive_group() + workflow_args.add_argument( + "--workflow_json_file", + type=Path, + help="Input JSON file to use for analysis workflow request", + ) + workflow_args.add_argument( + "--workflow_json_string", + type=str, + help="Input JSON string to use for analysis workflow request", + ) + parser.add_argument( "extra_args", metavar="ARGS", nargs="*", help="Additional arguments passed verbatim to the protocol script", ) + args = parser.parse_args() # Read until must have a reference and a filter type, if enabled: @@ -596,6 +590,7 @@ def add_protocol_ids(experiment_specs, args): position_connection, product_code=product_code, kit=args.kit, + config_name=args.config_name, basecalling=args.basecalling, basecall_config=args.basecall_config, barcoding=args.barcoding, @@ -611,6 +606,7 @@ def add_protocol_ids(experiment_specs, args): print(" basecall_config: %s" % args.basecall_config) print(" barcode-kits: %s" % args.barcode_kits) print(" barcoding: %s" % args.barcoding) + print(" config-name: %s" % args.config_name) sys.exit(1) # Store the identifier for later: @@ -622,6 +618,29 @@ def main(): # Parse arguments to be passed to started protocols: args = parse_args() + def _make_request(request_body): + req = json.loads(request_body) + + # check request_body is valid + if "workflow_id" not in req or "parameters" not in req: + raise ValueError("Request body does not contain valid data.") + + # convert string to protobuf + workflow_params = AnalysisWorkflowRequest() + workflow_params.proxy_request.api = "/workflow_instances/start" + workflow_params.proxy_request.request_body = request_body + return workflow_params + + # parse json analysis workflow data from input file + analysis_workflow_request = None + if args.workflow_json_file: + request_body = args.workflow_json_file.read_text() + analysis_workflow_request = _make_request(request_body) + + # parse json analysis workflow data from input string + if args.workflow_json_string: + analysis_workflow_request = _make_request(args.workflow_json_string) + # Specify --verbose on the command line to get extra details about the actions performed if args.verbose: logging.basicConfig(stream=sys.stdout, level=logging.DEBUG) @@ -716,9 +735,11 @@ def build_output_arguments(args, name): fast5_arguments=fast5_arguments, pod5_arguments=pod5_arguments, bam_arguments=bam_arguments, - disable_active_channel_selection=args.no_active_channel_selection, + analysis_workflow_request=analysis_workflow_request, + disable_active_channel_selection=False, mux_scan_period=args.mux_scan_period, stop_criteria=stop_criteria, + simulation_path=args.simulation, args=args.extra_args, # Any extra args passed. ) diff --git a/python/minknow_api/hardware_check_pb2.py b/python/minknow_api/hardware_check_pb2.py new file mode 100644 index 0000000..3dab584 --- /dev/null +++ b/python/minknow_api/hardware_check_pb2.py @@ -0,0 +1,160 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: minknow_api/hardware_check.proto +# Protobuf Python Version: 4.25.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from minknow_api import device_pb2 as minknow__api_dot_device__pb2 +from minknow_api import protocol_pb2 as minknow__api_dot_protocol__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n minknow_api/hardware_check.proto\x12\x1aminknow_api.hardware_check\x1a\x18minknow_api/device.proto\x1a\x1aminknow_api/protocol.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"1\n\x19StartHardwareCheckRequest\x12\x14\n\x0cposition_ids\x18\x01 \x03(\t\"7\n\x1aStartHardwareCheckResponse\x12\x19\n\x11hardware_check_id\x18\x01 \x01(\t\"5\n\x18StopHardwareCheckRequest\x12\x19\n\x11hardware_check_id\x18\x01 \x01(\t\"\x1b\n\x19StopHardwareCheckResponse\"\xbf\x01\n\x13PositionCheckResult\x12\x13\n\x0bposition_id\x18\x01 \x01(\t\x12I\n\x0b\x64\x65vice_type\x18\x02 \x01(\x0e\x32\x34.minknow_api.device.GetDeviceInfoResponse.DeviceType\x12H\n\x15hardware_check_result\x18\x03 \x03(\x0b\x32).minknow_api.protocol.HardwareCheckResult\"\xa2\x01\n\x17HardwareCheckScriptData\x12O\n\x16position_check_results\x18\x01 \x03(\x0b\x32/.minknow_api.hardware_check.PositionCheckResult\x12\x18\n\x10progress_percent\x18\x02 \x01(\r\x12\x1c\n\x14progress_eta_seconds\x18\x03 \x01(\r\"\x97\x01\n!UpdateHardwareCheckResultsRequest\x12\x19\n\x11hardware_check_id\x18\x01 \x01(\t\x12W\n\x1ahardware_check_script_data\x18\x02 \x01(\x0b\x32\x33.minknow_api.hardware_check.HardwareCheckScriptData\"$\n\"UpdateHardwareCheckResultsResponse\"Y\n!StreamHardwareCheckResultsRequest\x12\x1e\n\x11hardware_check_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x14\n\x12_hardware_check_id\"\xe7\x01\n\x13HardwareCheckResult\x12\x19\n\x11hardware_check_id\x18\x01 \x01(\t\x12.\n\nstart_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12W\n\x1ahardware_check_script_data\x18\x04 \x01(\x0b\x32\x33.minknow_api.hardware_check.HardwareCheckScriptData\"t\n\"StreamHardwareCheckResultsResponse\x12N\n\x15hardware_check_result\x18\x01 \x01(\x0b\x32/.minknow_api.hardware_check.HardwareCheckResult\"?\n\"GenerateHardwareCheckReportRequest\x12\x19\n\x11hardware_check_id\x18\x01 \x01(\t\"U\n#GenerateHardwareCheckReportResponse\x12\x19\n\x11hardware_check_id\x18\x01 \x01(\t\x12\x13\n\x0breport_data\x18\x02 \x01(\t2\xa6\x06\n\x14HardwareCheckService\x12\x8a\x01\n\x14start_hardware_check\x12\x35.minknow_api.hardware_check.StartHardwareCheckRequest\x1a\x36.minknow_api.hardware_check.StartHardwareCheckResponse\"\x03\x90\x02\x02\x12\x87\x01\n\x13stop_hardware_check\x12\x34.minknow_api.hardware_check.StopHardwareCheckRequest\x1a\x35.minknow_api.hardware_check.StopHardwareCheckResponse\"\x03\x90\x02\x02\x12\xa3\x01\n\x1dupdate_hardware_check_results\x12=.minknow_api.hardware_check.UpdateHardwareCheckResultsRequest\x1a>.minknow_api.hardware_check.UpdateHardwareCheckResultsResponse\"\x03\x90\x02\x02\x12\xa5\x01\n\x1dstream_hardware_check_results\x12=.minknow_api.hardware_check.StreamHardwareCheckResultsRequest\x1a>.minknow_api.hardware_check.StreamHardwareCheckResultsResponse\"\x03\x90\x02\x01\x30\x01\x12\xa8\x01\n\x1egenerate_hardware_check_report\x12>.minknow_api.hardware_check.GenerateHardwareCheckReportRequest\x1a?.minknow_api.hardware_check.GenerateHardwareCheckReportResponse\"\x03\x90\x02\x02\x30\x01\x42&\n\x1c\x63om.nanoporetech.minknow_api\xa2\x02\x05MKAPIb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'minknow_api.hardware_check_pb2', _globals) +if _descriptor._USE_C_DESCRIPTORS == False: + _globals['DESCRIPTOR']._options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\034com.nanoporetech.minknow_api\242\002\005MKAPI' + _globals['_HARDWARECHECKSERVICE'].methods_by_name['start_hardware_check']._options = None + _globals['_HARDWARECHECKSERVICE'].methods_by_name['start_hardware_check']._serialized_options = b'\220\002\002' + _globals['_HARDWARECHECKSERVICE'].methods_by_name['stop_hardware_check']._options = None + _globals['_HARDWARECHECKSERVICE'].methods_by_name['stop_hardware_check']._serialized_options = b'\220\002\002' + _globals['_HARDWARECHECKSERVICE'].methods_by_name['update_hardware_check_results']._options = None + _globals['_HARDWARECHECKSERVICE'].methods_by_name['update_hardware_check_results']._serialized_options = b'\220\002\002' + _globals['_HARDWARECHECKSERVICE'].methods_by_name['stream_hardware_check_results']._options = None + _globals['_HARDWARECHECKSERVICE'].methods_by_name['stream_hardware_check_results']._serialized_options = b'\220\002\001' + _globals['_HARDWARECHECKSERVICE'].methods_by_name['generate_hardware_check_report']._options = None + _globals['_HARDWARECHECKSERVICE'].methods_by_name['generate_hardware_check_report']._serialized_options = b'\220\002\002' + _globals['_STARTHARDWARECHECKREQUEST']._serialized_start=151 + _globals['_STARTHARDWARECHECKREQUEST']._serialized_end=200 + _globals['_STARTHARDWARECHECKRESPONSE']._serialized_start=202 + _globals['_STARTHARDWARECHECKRESPONSE']._serialized_end=257 + _globals['_STOPHARDWARECHECKREQUEST']._serialized_start=259 + _globals['_STOPHARDWARECHECKREQUEST']._serialized_end=312 + _globals['_STOPHARDWARECHECKRESPONSE']._serialized_start=314 + _globals['_STOPHARDWARECHECKRESPONSE']._serialized_end=341 + _globals['_POSITIONCHECKRESULT']._serialized_start=344 + _globals['_POSITIONCHECKRESULT']._serialized_end=535 + _globals['_HARDWARECHECKSCRIPTDATA']._serialized_start=538 + _globals['_HARDWARECHECKSCRIPTDATA']._serialized_end=700 + _globals['_UPDATEHARDWARECHECKRESULTSREQUEST']._serialized_start=703 + _globals['_UPDATEHARDWARECHECKRESULTSREQUEST']._serialized_end=854 + _globals['_UPDATEHARDWARECHECKRESULTSRESPONSE']._serialized_start=856 + _globals['_UPDATEHARDWARECHECKRESULTSRESPONSE']._serialized_end=892 + _globals['_STREAMHARDWARECHECKRESULTSREQUEST']._serialized_start=894 + _globals['_STREAMHARDWARECHECKRESULTSREQUEST']._serialized_end=983 + _globals['_HARDWARECHECKRESULT']._serialized_start=986 + _globals['_HARDWARECHECKRESULT']._serialized_end=1217 + _globals['_STREAMHARDWARECHECKRESULTSRESPONSE']._serialized_start=1219 + _globals['_STREAMHARDWARECHECKRESULTSRESPONSE']._serialized_end=1335 + _globals['_GENERATEHARDWARECHECKREPORTREQUEST']._serialized_start=1337 + _globals['_GENERATEHARDWARECHECKREPORTREQUEST']._serialized_end=1400 + _globals['_GENERATEHARDWARECHECKREPORTRESPONSE']._serialized_start=1402 + _globals['_GENERATEHARDWARECHECKREPORTRESPONSE']._serialized_end=1487 + _globals['_HARDWARECHECKSERVICE']._serialized_start=1490 + _globals['_HARDWARECHECKSERVICE']._serialized_end=2296 +StopHardwareCheckRequest.__doc__ = """Attributes: + hardware_check_id: + The unique ID for a hardware check. +""" +StreamHardwareCheckResultsRequest.__doc__ = """Attributes: + hardware_check_id: + Filter the response by a specific hardware check ID. If no + hardware check ID is provided, persisted data will be returned + if any exists If a hardware check has started, the rpc will + return information about the new ongoing hardware check +""" +PositionCheckResult.__doc__ = """Each position result + +Attributes: + position_id: + The ID of the position that performed the hardware check. + device_type: + The type of the device the hardware check is running on. + hardware_check_result: + A list of position hardware check results. This is the + HardwareCheckResult message from the protocol +""" +GenerateHardwareCheckReportRequest.__doc__ = """Attributes: + hardware_check_id: + The ID of the hardware check to generate a report for. +""" +HardwareCheckScriptData.__doc__ = """The data received from the hardware check script + +Attributes: + position_check_results: + A list of results for each position. + progress_percent: + Indicates progress of the overall hardware check procedure. + This field will always have values between 0 and 100 + (inclusive), and the value will increase over time. It is + intended for displaying a progress bar or similar. When the + hardware check has completed this value will be 100. + progress_eta_seconds: + Indicates roughly how much time is remaining for the hardware + check. If no ETA can be calculated, or the hardware check is + complete, this will be zero. Note that it is always an + estimate - it is recommended to round larger values, like + "about 2 minutes remaining". +""" +StartHardwareCheckResponse.__doc__ = """Attributes: + hardware_check_id: + The unique ID for the newly created hardware check. +""" +HardwareCheckResult.__doc__ = """The data sent to the UI + +Attributes: + failure_reason: + `failure_reason` is guaranteed to be: - `NoError` if `status` + is NOT `Failed` - NOT `NoError` if `status` is `Failed` + hardware_check_id: + The ID of this hardware check result. + start_time: + The time (UTC) when the hardware check was started. + end_time: + The time (UTC) when the hardware check completed. Unset if + the check is still running. + hardware_check_script_data: + The data from the hardware check script +""" +UpdateHardwareCheckResultsRequest.__doc__ = """Attributes: + hardware_check_id: + The unique ID for a hardware check. + hardware_check_script_data: + The data from the hardware check script +""" +StreamHardwareCheckResultsResponse.__doc__ = """Attributes: + hardware_check_result: + Returns the hardware check results. If no ID is provided, + returns persisted hardware check results, if persisted results + exist. It will then stay connected, and any newly started + hardware checks, triggered via `start_hardware_check`, will be + sent individually, as well as any progress updates. If an ID + is provided for a persisted record, it will return the result + and end. If an ID is provided for the current hardware check, + it will stay connected for new updates and end when the check + is completed. Each result will be returned individually. +""" +GenerateHardwareCheckReportResponse.__doc__ = """Attributes: + hardware_check_id: + The ID of the hardware check the report is for. + report_data: + A section of the hardware check report data (note the api to + return this data may stream back several sections). +""" +StartHardwareCheckRequest.__doc__ = """Attributes: + position_ids: + A list of position IDs to start a hardware check on e.g. + `['X1', X2', 'X5']`. +""" +# @@protoc_insertion_point(module_scope) diff --git a/python/minknow_api/hardware_check_pb2_grpc.py b/python/minknow_api/hardware_check_pb2_grpc.py new file mode 100644 index 0000000..6f2fba8 --- /dev/null +++ b/python/minknow_api/hardware_check_pb2_grpc.py @@ -0,0 +1,204 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + +from minknow_api import hardware_check_pb2 as minknow__api_dot_hardware__check__pb2 + + +class HardwareCheckServiceStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.start_hardware_check = channel.unary_unary( + '/minknow_api.hardware_check.HardwareCheckService/start_hardware_check', + request_serializer=minknow__api_dot_hardware__check__pb2.StartHardwareCheckRequest.SerializeToString, + response_deserializer=minknow__api_dot_hardware__check__pb2.StartHardwareCheckResponse.FromString, + ) + self.stop_hardware_check = channel.unary_unary( + '/minknow_api.hardware_check.HardwareCheckService/stop_hardware_check', + request_serializer=minknow__api_dot_hardware__check__pb2.StopHardwareCheckRequest.SerializeToString, + response_deserializer=minknow__api_dot_hardware__check__pb2.StopHardwareCheckResponse.FromString, + ) + self.update_hardware_check_results = channel.unary_unary( + '/minknow_api.hardware_check.HardwareCheckService/update_hardware_check_results', + request_serializer=minknow__api_dot_hardware__check__pb2.UpdateHardwareCheckResultsRequest.SerializeToString, + response_deserializer=minknow__api_dot_hardware__check__pb2.UpdateHardwareCheckResultsResponse.FromString, + ) + self.stream_hardware_check_results = channel.unary_stream( + '/minknow_api.hardware_check.HardwareCheckService/stream_hardware_check_results', + request_serializer=minknow__api_dot_hardware__check__pb2.StreamHardwareCheckResultsRequest.SerializeToString, + response_deserializer=minknow__api_dot_hardware__check__pb2.StreamHardwareCheckResultsResponse.FromString, + ) + self.generate_hardware_check_report = channel.unary_stream( + '/minknow_api.hardware_check.HardwareCheckService/generate_hardware_check_report', + request_serializer=minknow__api_dot_hardware__check__pb2.GenerateHardwareCheckReportRequest.SerializeToString, + response_deserializer=minknow__api_dot_hardware__check__pb2.GenerateHardwareCheckReportResponse.FromString, + ) + + +class HardwareCheckServiceServicer(object): + """Missing associated documentation comment in .proto file.""" + + def start_hardware_check(self, request, context): + """Starts a hardware check against the device and any given positions. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def stop_hardware_check(self, request, context): + """Stops a hardware check against the device. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def update_hardware_check_results(self, request, context): + """Sets the latest hardware check result within Core, with the information from the hardware check script. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def stream_hardware_check_results(self, request, context): + """Lists all hardware checks. + Stream remains open whilst subscribed and any additionally started hardware checks are added to the list. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def generate_hardware_check_report(self, request, context): + """Generate a hardware check result report from a given hardware check ID. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_HardwareCheckServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'start_hardware_check': grpc.unary_unary_rpc_method_handler( + servicer.start_hardware_check, + request_deserializer=minknow__api_dot_hardware__check__pb2.StartHardwareCheckRequest.FromString, + response_serializer=minknow__api_dot_hardware__check__pb2.StartHardwareCheckResponse.SerializeToString, + ), + 'stop_hardware_check': grpc.unary_unary_rpc_method_handler( + servicer.stop_hardware_check, + request_deserializer=minknow__api_dot_hardware__check__pb2.StopHardwareCheckRequest.FromString, + response_serializer=minknow__api_dot_hardware__check__pb2.StopHardwareCheckResponse.SerializeToString, + ), + 'update_hardware_check_results': grpc.unary_unary_rpc_method_handler( + servicer.update_hardware_check_results, + request_deserializer=minknow__api_dot_hardware__check__pb2.UpdateHardwareCheckResultsRequest.FromString, + response_serializer=minknow__api_dot_hardware__check__pb2.UpdateHardwareCheckResultsResponse.SerializeToString, + ), + 'stream_hardware_check_results': grpc.unary_stream_rpc_method_handler( + servicer.stream_hardware_check_results, + request_deserializer=minknow__api_dot_hardware__check__pb2.StreamHardwareCheckResultsRequest.FromString, + response_serializer=minknow__api_dot_hardware__check__pb2.StreamHardwareCheckResultsResponse.SerializeToString, + ), + 'generate_hardware_check_report': grpc.unary_stream_rpc_method_handler( + servicer.generate_hardware_check_report, + request_deserializer=minknow__api_dot_hardware__check__pb2.GenerateHardwareCheckReportRequest.FromString, + response_serializer=minknow__api_dot_hardware__check__pb2.GenerateHardwareCheckReportResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'minknow_api.hardware_check.HardwareCheckService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class HardwareCheckService(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def start_hardware_check(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/minknow_api.hardware_check.HardwareCheckService/start_hardware_check', + minknow__api_dot_hardware__check__pb2.StartHardwareCheckRequest.SerializeToString, + minknow__api_dot_hardware__check__pb2.StartHardwareCheckResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def stop_hardware_check(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/minknow_api.hardware_check.HardwareCheckService/stop_hardware_check', + minknow__api_dot_hardware__check__pb2.StopHardwareCheckRequest.SerializeToString, + minknow__api_dot_hardware__check__pb2.StopHardwareCheckResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def update_hardware_check_results(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/minknow_api.hardware_check.HardwareCheckService/update_hardware_check_results', + minknow__api_dot_hardware__check__pb2.UpdateHardwareCheckResultsRequest.SerializeToString, + minknow__api_dot_hardware__check__pb2.UpdateHardwareCheckResultsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def stream_hardware_check_results(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_stream(request, target, '/minknow_api.hardware_check.HardwareCheckService/stream_hardware_check_results', + minknow__api_dot_hardware__check__pb2.StreamHardwareCheckResultsRequest.SerializeToString, + minknow__api_dot_hardware__check__pb2.StreamHardwareCheckResultsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def generate_hardware_check_report(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_stream(request, target, '/minknow_api.hardware_check.HardwareCheckService/generate_hardware_check_report', + minknow__api_dot_hardware__check__pb2.GenerateHardwareCheckReportRequest.SerializeToString, + minknow__api_dot_hardware__check__pb2.GenerateHardwareCheckReportResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/python/minknow_api/hardware_check_service.py b/python/minknow_api/hardware_check_service.py new file mode 100644 index 0000000..4960a9d --- /dev/null +++ b/python/minknow_api/hardware_check_service.py @@ -0,0 +1,282 @@ +### THIS FILE IS AUTOGENERATED. DO NOT EDIT THIS FILE DIRECTLY ### +import minknow_api +from minknow_api.hardware_check_pb2_grpc import * +import minknow_api.hardware_check_pb2 as hardware_check_pb2 +from minknow_api.hardware_check_pb2 import * +from minknow_api._support import MessageWrapper, ArgumentError +import time +import logging +import sys + +__all__ = [ + "HardwareCheckService", + "StartHardwareCheckRequest", + "StartHardwareCheckResponse", + "StopHardwareCheckRequest", + "StopHardwareCheckResponse", + "PositionCheckResult", + "HardwareCheckScriptData", + "UpdateHardwareCheckResultsRequest", + "UpdateHardwareCheckResultsResponse", + "StreamHardwareCheckResultsRequest", + "HardwareCheckResult", + "StreamHardwareCheckResultsResponse", + "GenerateHardwareCheckReportRequest", + "GenerateHardwareCheckReportResponse", +] + +def run_with_retry(method, message, timeout, unwraps, full_name): + retry_count = 20 + error = None + for i in range(retry_count): + try: + result = MessageWrapper(method(message, timeout=timeout), unwraps=unwraps) + return result + except grpc.RpcError as e: + # Retrying unidentified grpc errors to keep clients from crashing + retryable_error = (e.code() == grpc.StatusCode.UNKNOWN and "Stream removed" in e.details() or \ + (e.code() == grpc.StatusCode.INTERNAL and "RST_STREAM" in e.details())) + if retryable_error: + logging.info('Bypassed ({}: {}) error for grpc: {}. Attempt {}.'.format(e.code(), e.details(), full_name, i)) + else: + raise + error = e + time.sleep(1) + raise error + + +class HardwareCheckService(object): + def __init__(self, channel): + self._stub = HardwareCheckServiceStub(channel) + self._pb = hardware_check_pb2 + def start_hardware_check(self, _message=None, _timeout=None, **kwargs): + """Starts a hardware check against the device and any given positions. + + This RPC is idempotent. It may change the state of the system, but if the requested + change has already happened, it will not fail because of this, make any additional + changes or return a different value. + + Args: + _message (minknow_api.hardware_check_pb2.StartHardwareCheckRequest, optional): The message to send. + This can be passed instead of the keyword arguments. + _timeout (float, optional): The call will be cancelled after this number of seconds + if it has not been completed. + position_ids (str, optional): A list of position IDs to start a hardware check on + e.g. `['X1', X2', 'X5']`. + + Returns: + minknow_api.hardware_check_pb2.StartHardwareCheckResponse + + Note that the returned messages are actually wrapped in a type that collapses + submessages for fields marked with ``[rpc_unwrap]``. + """ + if _message is not None: + if isinstance(_message, MessageWrapper): + _message = _message._message + return run_with_retry(self._stub.start_hardware_check, + _message, _timeout, + [], + "minknow_api.hardware_check.HardwareCheckService") + + unused_args = set(kwargs.keys()) + + _message = StartHardwareCheckRequest() + + if "position_ids" in kwargs: + unused_args.remove("position_ids") + _message.position_ids.extend(kwargs['position_ids']) + + if len(unused_args) > 0: + raise ArgumentError("Unexpected keyword arguments to start_hardware_check: '{}'".format(", ".join(unused_args))) + + return run_with_retry(self._stub.start_hardware_check, + _message, _timeout, + [], + "minknow_api.hardware_check.HardwareCheckService") + def stop_hardware_check(self, _message=None, _timeout=None, **kwargs): + """Stops a hardware check against the device. + + This RPC is idempotent. It may change the state of the system, but if the requested + change has already happened, it will not fail because of this, make any additional + changes or return a different value. + + Args: + _message (minknow_api.hardware_check_pb2.StopHardwareCheckRequest, optional): The message to send. + This can be passed instead of the keyword arguments. + _timeout (float, optional): The call will be cancelled after this number of seconds + if it has not been completed. + hardware_check_id (str, optional): The unique ID for a hardware check. + + Returns: + minknow_api.hardware_check_pb2.StopHardwareCheckResponse + + Note that the returned messages are actually wrapped in a type that collapses + submessages for fields marked with ``[rpc_unwrap]``. + """ + if _message is not None: + if isinstance(_message, MessageWrapper): + _message = _message._message + return run_with_retry(self._stub.stop_hardware_check, + _message, _timeout, + [], + "minknow_api.hardware_check.HardwareCheckService") + + unused_args = set(kwargs.keys()) + + _message = StopHardwareCheckRequest() + + if "hardware_check_id" in kwargs: + unused_args.remove("hardware_check_id") + _message.hardware_check_id = kwargs['hardware_check_id'] + + if len(unused_args) > 0: + raise ArgumentError("Unexpected keyword arguments to stop_hardware_check: '{}'".format(", ".join(unused_args))) + + return run_with_retry(self._stub.stop_hardware_check, + _message, _timeout, + [], + "minknow_api.hardware_check.HardwareCheckService") + def update_hardware_check_results(self, _message=None, _timeout=None, **kwargs): + """Sets the latest hardware check result within Core, with the information from the hardware check script. + + This RPC is idempotent. It may change the state of the system, but if the requested + change has already happened, it will not fail because of this, make any additional + changes or return a different value. + + Args: + _message (minknow_api.hardware_check_pb2.UpdateHardwareCheckResultsRequest, optional): The message to send. + This can be passed instead of the keyword arguments. + _timeout (float, optional): The call will be cancelled after this number of seconds + if it has not been completed. + hardware_check_id (str, optional): The unique ID for a hardware check. + hardware_check_script_data (minknow_api.hardware_check_pb2.HardwareCheckScriptData, optional): The data from the hardware check script + + Returns: + minknow_api.hardware_check_pb2.UpdateHardwareCheckResultsResponse + + Note that the returned messages are actually wrapped in a type that collapses + submessages for fields marked with ``[rpc_unwrap]``. + """ + if _message is not None: + if isinstance(_message, MessageWrapper): + _message = _message._message + return run_with_retry(self._stub.update_hardware_check_results, + _message, _timeout, + [], + "minknow_api.hardware_check.HardwareCheckService") + + unused_args = set(kwargs.keys()) + + _message = UpdateHardwareCheckResultsRequest() + + if "hardware_check_id" in kwargs: + unused_args.remove("hardware_check_id") + _message.hardware_check_id = kwargs['hardware_check_id'] + + if "hardware_check_script_data" in kwargs: + unused_args.remove("hardware_check_script_data") + _message.hardware_check_script_data.CopyFrom(kwargs['hardware_check_script_data']) + + if len(unused_args) > 0: + raise ArgumentError("Unexpected keyword arguments to update_hardware_check_results: '{}'".format(", ".join(unused_args))) + + return run_with_retry(self._stub.update_hardware_check_results, + _message, _timeout, + [], + "minknow_api.hardware_check.HardwareCheckService") + def stream_hardware_check_results(self, _message=None, _timeout=None, **kwargs): + """Lists all hardware checks. + Stream remains open whilst subscribed and any additionally started hardware checks are added to the list. + + This RPC has no side effects. Calling it will have no effect on the state of the + system. It is safe to call repeatedly, or to retry on failure, although there is no + guarantee it will return the same information each time. + + Args: + _message (minknow_api.hardware_check_pb2.StreamHardwareCheckResultsRequest, optional): The message to send. + This can be passed instead of the keyword arguments. + _timeout (float, optional): The call will be cancelled after this number of seconds + if it has not been completed. + Note that this is the time until the call ends, not the time between returned + messages. + hardware_check_id (str, optional): Filter the response by a specific hardware check ID. + + If no hardware check ID is provided, persisted data will be returned + if any exists + If a hardware check has started, the rpc will return information about the + new ongoing hardware check + + Returns: + iter of minknow_api.hardware_check_pb2.StreamHardwareCheckResultsResponse + + Note that the returned messages are actually wrapped in a type that collapses + submessages for fields marked with ``[rpc_unwrap]``. + """ + if _message is not None: + if isinstance(_message, MessageWrapper): + _message = _message._message + return run_with_retry(self._stub.stream_hardware_check_results, + _message, _timeout, + [], + "minknow_api.hardware_check.HardwareCheckService") + + unused_args = set(kwargs.keys()) + + _message = StreamHardwareCheckResultsRequest() + + if "hardware_check_id" in kwargs: + unused_args.remove("hardware_check_id") + _message.hardware_check_id = kwargs['hardware_check_id'] + + if len(unused_args) > 0: + raise ArgumentError("Unexpected keyword arguments to stream_hardware_check_results: '{}'".format(", ".join(unused_args))) + + return run_with_retry(self._stub.stream_hardware_check_results, + _message, _timeout, + [], + "minknow_api.hardware_check.HardwareCheckService") + def generate_hardware_check_report(self, _message=None, _timeout=None, **kwargs): + """Generate a hardware check result report from a given hardware check ID. + + This RPC is idempotent. It may change the state of the system, but if the requested + change has already happened, it will not fail because of this, make any additional + changes or return a different value. + + Args: + _message (minknow_api.hardware_check_pb2.GenerateHardwareCheckReportRequest, optional): The message to send. + This can be passed instead of the keyword arguments. + _timeout (float, optional): The call will be cancelled after this number of seconds + if it has not been completed. + Note that this is the time until the call ends, not the time between returned + messages. + hardware_check_id (str, optional): The ID of the hardware check to generate a report for. + + Returns: + iter of minknow_api.hardware_check_pb2.GenerateHardwareCheckReportResponse + + Note that the returned messages are actually wrapped in a type that collapses + submessages for fields marked with ``[rpc_unwrap]``. + """ + if _message is not None: + if isinstance(_message, MessageWrapper): + _message = _message._message + return run_with_retry(self._stub.generate_hardware_check_report, + _message, _timeout, + [], + "minknow_api.hardware_check.HardwareCheckService") + + unused_args = set(kwargs.keys()) + + _message = GenerateHardwareCheckReportRequest() + + if "hardware_check_id" in kwargs: + unused_args.remove("hardware_check_id") + _message.hardware_check_id = kwargs['hardware_check_id'] + + if len(unused_args) > 0: + raise ArgumentError("Unexpected keyword arguments to generate_hardware_check_report: '{}'".format(", ".join(unused_args))) + + return run_with_retry(self._stub.generate_hardware_check_report, + _message, _timeout, + [], + "minknow_api.hardware_check.HardwareCheckService") diff --git a/python/minknow_api/instance_pb2.py b/python/minknow_api/instance_pb2.py index b6d5566..13dbfc3 100644 --- a/python/minknow_api/instance_pb2.py +++ b/python/minknow_api/instance_pb2.py @@ -97,20 +97,14 @@ _globals['_STREAMINSTANCEACTIVITYRESPONSE_FLOWCELLHEALTH_CHANNELSTATEPERCENTAGESENTRY']._serialized_end=2704 _globals['_INSTANCESERVICE']._serialized_start=2723 _globals['_INSTANCESERVICE']._serialized_end=3879 -BasecallSpeed.__doc__ = """Attributes: - mean_basecall_speed: - Mean basecall speed, in bases per second. This value is only - streamed for acquisitions where basecalling is enabled. The - value reported here is the value stored in last completed - basecall boxplot bucket Each boxplot bucket covers a duration - of `boxplot_time_coverage_in_minutes` -""" -DeviceInfo.__doc__ = """Attributes: - device_state: - The current state of the device - device_info: - Information about the connected device (or no content if - disconnected see: device_state) +N50.__doc__ = """Attributes: + n50: + N50 data, in basecalled bases This value is only streamed for + acquisitions where basecalling is enabled. The latest value + is sent once per minute + estimated_n50: + N50 data, in estimated bases The latest value is sent once + per minute """ StreamInstanceActivityResponse.FlowCellHealth.__doc__ = """Attributes: channel_state_percentages: @@ -171,7 +165,7 @@ yield_summary: Acquisition yield information. Describes information such as number of reads, what number of those reads have passed or - failed basecalling etc. Rate limited to 1 second per update + failed basecalling etc. Rate limited to 1 second per update basecall_speed: Basecall speed information Note: only available if an acquisition with basecalling enabled is in progress @@ -181,6 +175,10 @@ only available if an acquisition with basecalling enabled is in progress """ +GetMachineIdResponse.__doc__ = """Attributes: + machine_id: + The machine_id MinKNOW uses for this host. +""" OutputDirectories.__doc__ = """Attributes: output: The base output directory. Anything that is output to files is @@ -190,11 +188,12 @@ reads: Base directory where reads will be outputted. """ -StreamDiskSpaceInfoRequest.__doc__ = """Attributes: - period: - Disk space information will be streamed with this value - determining the period in seconds between updates. A period of - 0 is invalid +DeviceInfo.__doc__ = """Attributes: + device_state: + The current state of the device + device_info: + Information about the connected device (or no content if + disconnected see: device_state) """ GetVersionInfoResponse.__doc__ = """Version of the basecaller MinKNOW is running with. Since 5.0 This field has been updated since 6.0 guppy_connected_version @@ -204,10 +203,10 @@ What minknow version is installed. Split into major, minor and patch versions Also includes the full version as a string, which contain the major, minor and patch numbers as well as if - the version is pre-release version (-pre), whether it is a - release candidate (-rc#) or whether it is a variant version + the version is pre-release version (~pre), whether it is a + release candidate (~rc#) or whether it is a variant version (i.e. for conferences) (-variant). For non-release builds it - also includes the hash of the commit it is based on, and + also includes the hash of the commit it is based on, and whether the working copy is different from that has (-dirty) bream: The version of Bream that is installed. An invalid @@ -232,17 +231,18 @@ affect the available features, or the update process. Since 4.1 """ -N50.__doc__ = """Attributes: - n50: - N50 data, in basecalled bases This value is only streamed for - acquisitions where basecalling is enabled. The latest value - is sent once per minute - estimated_n50: - N50 data, in estimated bases The latest value is sent once - per minute +StreamDiskSpaceInfoRequest.__doc__ = """Attributes: + period: + Disk space information will be streamed with this value + determining the period in seconds between updates. A period of + 0 is invalid """ -GetMachineIdResponse.__doc__ = """Attributes: - machine_id: - The machine_id MinKNOW uses for this host. +BasecallSpeed.__doc__ = """Attributes: + mean_basecall_speed: + Mean basecall speed, in bases per second. This value is only + streamed for acquisitions where basecalling is enabled. The + value reported here is the value stored in last completed + basecall boxplot bucket Each boxplot bucket covers a duration + of `boxplot_time_coverage_in_minutes` """ # @@protoc_insertion_point(module_scope) diff --git a/python/minknow_api/instance_pb2_grpc.py b/python/minknow_api/instance_pb2_grpc.py index 35e8313..07c8aff 100644 --- a/python/minknow_api/instance_pb2_grpc.py +++ b/python/minknow_api/instance_pb2_grpc.py @@ -75,7 +75,7 @@ def get_version_info(self, request, context): raise NotImplementedError('Method not implemented!') def get_output_directories(self, request, context): - """Returns various directory locations where minknow is outputting data. The paths are absolute paths, + """Returns various directory locations where minknow is outputting data. The paths are absolute paths, local to the machine where minknow is installed the `output` base directory can be changed internally diff --git a/python/minknow_api/instance_service.py b/python/minknow_api/instance_service.py index 993ccdf..0643395 100644 --- a/python/minknow_api/instance_service.py +++ b/python/minknow_api/instance_service.py @@ -98,7 +98,7 @@ def get_version_info(self, _message=None, _timeout=None, **kwargs): [], "minknow_api.instance.InstanceService") def get_output_directories(self, _message=None, _timeout=None, **kwargs): - """Returns various directory locations where minknow is outputting data. The paths are absolute paths, + """Returns various directory locations where minknow is outputting data. The paths are absolute paths, local to the machine where minknow is installed the `output` base directory can be changed internally diff --git a/python/minknow_api/keystore_pb2.py b/python/minknow_api/keystore_pb2.py index b58f7e0..bb54f0a 100644 --- a/python/minknow_api/keystore_pb2.py +++ b/python/minknow_api/keystore_pb2.py @@ -74,6 +74,38 @@ _globals['_WATCHRESPONSE_VALUESENTRY']._serialized_end=314 _globals['_KEYSTORESERVICE']._serialized_start=1061 _globals['_KEYSTORESERVICE']._serialized_end=1510 +StoreRequest.__doc__ = """Attributes: + values: + The values to store. See the notes in the KeyStore service + documentation about names - in short, for any values not + documented elsewhere, you should be prefixing the name with + ":", where is the name of your software + product. + lifetime: + Specify the lifetime of a value. When storing values in the + manager, the only valid values are `UNTIL_INSTANCE_END` and + `PERSIST_ACROSS_RESTARTS`. Using any other value will cause + the call to fail with `INVALID_ARGUMENT` Note that calling + remove() will remove the value regardless of this setting. +""" +WatchResponse.__doc__ = """Attributes: + runs: + The current state of some of the runs. + values: + The values that have changed. The first received message will + contain the current state of all the watched values. + Subsequent messages will only contain the values that changed. + removed_values: + The values that have been removed. +""" +GetOneRequest.__doc__ = """Attributes: + name: + The name of the value to fetch. +""" +GetResponse.__doc__ = """Attributes: + values: + The requested values. +""" RemoveRequest.__doc__ = """Attributes: names: The names of the values you wish to remove. @@ -84,10 +116,6 @@ error to be returned (in which case nothing will be removed). Defaults to 'false' """ -GetOneResponse.__doc__ = """Attributes: - value: - The requested value. -""" GetRequest.__doc__ = """Attributes: names: The names of the values you wish to fetch. @@ -111,36 +139,8 @@ message will be sent with the set values. Otherwise, missing values will cause an immediate error. Defaults to 'false' """ -GetResponse.__doc__ = """Attributes: - values: - The requested values. -""" -WatchResponse.__doc__ = """Attributes: - runs: - The current state of some of the runs. - values: - The values that have changed. The first received message will - contain the current state of all the watched values. - Subsequent messages will only contain the values that changed. - removed_values: - The values that have been removed. -""" -StoreRequest.__doc__ = """Attributes: - values: - The values to store. See the notes in the KeyStore service - documentation about names - in short, for any values not - documented elsewhere, you should be prefixing the name with - ":", where is the name of your software - product. - lifetime: - Specify the lifetime of a value. When storing values in the - manager, the only valid values are `UNTIL_INSTANCE_END` and - `PERSIST_ACROSS_RESTARTS`. Using any other value will cause - the call to fail with `INVALID_ARGUMENT` Note that calling - remove() will remove the value regardless of this setting. -""" -GetOneRequest.__doc__ = """Attributes: - name: - The name of the value to fetch. +GetOneResponse.__doc__ = """Attributes: + value: + The requested value. """ # @@protoc_insertion_point(module_scope) diff --git a/python/minknow_api/log_pb2.py b/python/minknow_api/log_pb2.py index 7f3e207..e21b073 100644 --- a/python/minknow_api/log_pb2.py +++ b/python/minknow_api/log_pb2.py @@ -62,19 +62,6 @@ _globals['_COLLECTPINGSRESPONSE']._serialized_end=966 _globals['_LOGSERVICE']._serialized_start=1269 _globals['_LOGSERVICE']._serialized_end=1665 -SendUserMessageRequest.__doc__ = """Attributes: - severity: - The severity of the message to send note: TRACE messages - cannot be sent using this interface (will throw an error). - identifier: - A short unique textual identifier for the message Used to - identify the message for translation purposes - user_message: - The user message to send to any listeners. - extra_data: - Any extra data associated with the user message, as a map from - key to data. -""" SendPingRequest.__doc__ = """Since 5.0 Attributes: @@ -85,6 +72,20 @@ Should the ping fail to send, the number of days the ping will be stored before being cleaned up. """ +UserMessage.__doc__ = """Attributes: + time: + Timestamp for when the log message was emitted + severity: + The severity of the message + identifier: + A short unique textual identifier for the message Used to + identify the message for translation purposes + user_message: + A long user readable description of the message + extra_data: + Any extra data associated with the user message, as a map from + key to data. +""" GetUserMessagesRequest.__doc__ = """Attributes: include_old_messages: If set, any messages which have already been sent to listeners @@ -104,16 +105,15 @@ Normally previously collected pings are ignored, but by setting this they will be included. Defaults to False. """ -UserMessage.__doc__ = """Attributes: - time: - Timestamp for when the log message was emitted +SendUserMessageRequest.__doc__ = """Attributes: severity: - The severity of the message + The severity of the message to send note: TRACE messages + cannot be sent using this interface (will throw an error). identifier: A short unique textual identifier for the message Used to identify the message for translation purposes user_message: - A long user readable description of the message + The user message to send to any listeners. extra_data: Any extra data associated with the user message, as a map from key to data. diff --git a/python/minknow_api/manager.py b/python/minknow_api/manager.py index e657f72..cd9919b 100644 --- a/python/minknow_api/manager.py +++ b/python/minknow_api/manager.py @@ -24,6 +24,7 @@ import minknow_api import minknow_api.basecaller_service import minknow_api.keystore_service +import minknow_api.hardware_check_service import minknow_api.manager_pb2 as manager_pb2 import minknow_api.manager_service @@ -130,7 +131,7 @@ class FlowCellPosition(object): Attributes: description (minknow_api.manager_pb2.FlowCellPosition): The description of the flow cell position as returned from a call to ``flow_cell_positions`` - on the manger. + on the manager. credentials (grpc.ChannelCredentials): The credentials used for the gRPC connection. Can used to connect to other MinKNOW interfaces. Changing this will affect future calls to connect(). @@ -283,7 +284,7 @@ class Manager(ServiceBase): channel (grpc.Channel): The gRPC channel used for communication. core_version (str): The running version of MinKNOW Core. core_version_components (tuple): A tuple of three integers describing the major, minor and - patch parts of the core version. Useful for version comparisions. + patch parts of the core version. Useful for version comparisons. credentials (grpc.ChannelCredentials): The credentials used for the gRPC connection. Can used to connect to other MinKNOW interfaces. Changing this will not affect the connection to the manager, but will affect connections @@ -379,6 +380,15 @@ def __init__( def __repr__(self) -> str: return "Manager({!r}, {!r})".format(self.host, self.port) + def hardware_check(self) -> minknow_api.hardware_check_service.HardwareCheckService: + """ + Find the hardware check service running for this manager. + + Returns: + HardwareCheck: The gRPC service for the manager level hardware check. + """ + return minknow_api.hardware_check_service.HardwareCheckService(self.channel) + def keystore(self) -> minknow_api.keystore_service.KeyStoreService: """ Find the keystore service running for this manager. diff --git a/python/minknow_api/manager_pb2.py b/python/minknow_api/manager_pb2.py index 5a4f854..bac6747 100644 --- a/python/minknow_api/manager_pb2.py +++ b/python/minknow_api/manager_pb2.py @@ -19,7 +19,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19minknow_api/manager.proto\x12\x13minknow_api.manager\x1a\x1dminknow_api/rpc_options.proto\x1a\x18minknow_api/device.proto\x1a\x1aminknow_api/instance.proto\x1a#minknow_api/protocol_settings.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x15\n\x13\x44\x65scribeHostRequest\"\xae\x05\n\x14\x44\x65scribeHostResponse\x12\x14\n\x0cproduct_code\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0e\n\x06serial\x18\x03 \x01(\t\x12\x14\n\x0cnetwork_name\x18\x04 \x01(\t\x12\x19\n\x11needs_association\x18\x10 \x01(\x08\x12\x1c\n\x14\x63\x61n_sequence_offline\x18\x05 \x01(\x08\x12W\n\x0c\x63\x61n_basecall\x18\x06 \x01(\x0e\x32\x41.minknow_api.manager.DescribeHostResponse.BasecallingAvailability\x12\x63\n\x1c\x63urrent_basecalling_hardware\x18\x07 \x01(\x0b\x32=.minknow_api.manager.DescribeHostResponse.BasecallerSubstrate\x12\x65\n\x1e\x61vailable_basecalling_hardware\x18\x08 \x03(\x0b\x32=.minknow_api.manager.DescribeHostResponse.BasecallerSubstrate\x1a\x33\n\x13\x42\x61secallerSubstrate\x12\x0e\n\x06is_gpu\x18\x01 \x01(\x08\x12\x0c\n\x04gpus\x18\x02 \x03(\t\"\xb1\x01\n\x17\x42\x61secallingAvailability\x12\x19\n\x15\x42\x41SECALLING_AVAILABLE\x10\x00\x12\x1b\n\x17\x42\x41SECALLING_UNAVAILABLE\x10\x01\x12-\n)BASECALLING_UNAVAILABLE_BAD_CONFIGURATION\x10\x02\x12/\n+BASECALLING_UNAVAILABLE_ATTEMPTING_RECOVERY\x10\x03\"\x1e\n\x1cGetBasecallerFeaturesRequest\"_\n\x1dGetBasecallerFeaturesResponse\x12>\n6is_live_basecalling_with_adaptive_sampling_recommended\x18\x01 \x01(\x08\"\xdf\x07\n\x10\x46lowCellPosition\x12\x0c\n\x04name\x18\x01 \x01(\t\x12@\n\x08location\x18\x02 \x01(\x0b\x32..minknow_api.manager.FlowCellPosition.Location\x12:\n\x05state\x18\x03 \x01(\x0e\x32+.minknow_api.manager.FlowCellPosition.State\x12\x41\n\trpc_ports\x18\x04 \x01(\x0b\x32..minknow_api.manager.FlowCellPosition.RpcPorts\x12\x12\n\nerror_info\x18\x05 \x01(\t\x12X\n\x15shared_hardware_group\x18\x06 \x01(\x0b\x32\x39.minknow_api.manager.FlowCellPosition.SharedHardwareGroup\x12\x15\n\ris_integrated\x18\x07 \x01(\x08\x12\x1c\n\x14\x63\x61n_sequence_offline\x18\x08 \x01(\x08\x12@\n\x0eprotocol_state\x18\t \x01(\x0e\x32(.minknow_api.manager.SimpleProtocolState\x12\x14\n\x0cis_simulated\x18\n \x01(\x08\x12I\n\x0b\x64\x65vice_type\x18\x0b \x01(\x0e\x32\x34.minknow_api.device.GetDeviceInfoResponse.DeviceType\x12\x13\n\x0bparent_name\x18\x0c \x01(\t\x12\x1c\n\x14\x66irmware_is_updating\x18\r \x01(\x08\x12\x14\n\x0chas_progress\x18\x0e \x01(\x08\x12\x18\n\x10progress_percent\x18\x0f \x01(\r\x12\x1c\n\x14progress_eta_seconds\x18\x10 \x01(\r\x1a \n\x08Location\x12\t\n\x01x\x18\x01 \x01(\x05\x12\t\n\x01y\x18\x02 \x01(\x05\x1a\x33\n\x08RpcPorts\x12\x0e\n\x06secure\x18\x01 \x01(\r\x12\x17\n\x0fsecure_grpc_web\x18\x03 \x01(\r\x1a\'\n\x13SharedHardwareGroup\x12\x10\n\x08group_id\x18\x01 \x01(\r\"\xb4\x01\n\x05State\x12\x16\n\x12STATE_INITIALISING\x10\x00\x12\x11\n\rSTATE_RUNNING\x10\x01\x12\x13\n\x0fSTATE_RESETTING\x10\x02\x12\x1a\n\x16STATE_HARDWARE_REMOVED\x10\x03\x12\x18\n\x14STATE_HARDWARE_ERROR\x10\x04\x12\x18\n\x14STATE_SOFTWARE_ERROR\x10\x05\x12\x1b\n\x17STATE_NEEDS_ASSOCIATION\x10\x06\"\x1a\n\x18\x46lowCellPositionsRequest\"j\n\x19\x46lowCellPositionsResponse\x12\x13\n\x0btotal_count\x18\x01 \x01(\x05\x12\x38\n\tpositions\x18\x02 \x03(\x0b\x32%.minknow_api.manager.FlowCellPosition\"\x1f\n\x1dWatchFlowCellPositionsRequest\"\xa4\x01\n\x1eWatchFlowCellPositionsResponse\x12\x38\n\tadditions\x18\x01 \x03(\x0b\x32%.minknow_api.manager.FlowCellPosition\x12\x36\n\x07\x63hanges\x18\x02 \x03(\x0b\x32%.minknow_api.manager.FlowCellPosition\x12\x10\n\x08removals\x18\x03 \x03(\t\"8\n\x14ResetPositionRequest\x12\x11\n\tpositions\x18\x03 \x03(\t\x12\r\n\x05\x66orce\x18\x02 \x01(\x08\"\x17\n\x15ResetPositionResponse\"\x16\n\x14\x42\x61secallerApiRequest\"@\n\x15\x42\x61secallerApiResponse\x12\x0e\n\x06secure\x18\x01 \x01(\r\x12\x17\n\x0fsecure_grpc_web\x18\x03 \x01(\r\"\x15\n\x13GetGuppyInfoRequest\"^\n\x14GetGuppyInfoResponse\x12\x0e\n\x04port\x18\x01 \x01(\rH\x00\x12\x12\n\x08ipc_path\x18\x03 \x01(\tH\x00\x12\x0f\n\x07version\x18\x02 \x01(\tB\x11\n\x0f\x63onnection_type\"\x17\n\x15GetVersionInfoRequest\"1\n!ListProtocolOutputDirFilesRequest\x12\x0c\n\x04path\x18\x01 \x01(\t\"\xf8\x01\n\"ListProtocolOutputDirFilesResponse\x12Z\n\x0b\x64irectories\x18\x01 \x03(\x0b\x32\x45.minknow_api.manager.ListProtocolOutputDirFilesResponse.DirectoryInfo\x12\r\n\x05\x66iles\x18\x02 \x03(\t\x12\x1b\n\x13\x63urrent_listed_path\x18\x03 \x01(\t\x1aJ\n\rDirectoryInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x17\n\x0f\x64irectory_count\x18\x02 \x01(\x05\x12\x12\n\nfile_count\x18\x03 \x01(\x05\";\n\x16\x43reateDirectoryRequest\x12\x13\n\x0bparent_path\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\'\n\x17\x43reateDirectoryResponse\x12\x0c\n\x04path\x18\x01 \x01(\t\"\x87\x02\n\x17\x46ilesystemDiskSpaceInfo\x12\x15\n\rfilesystem_id\x18\x01 \x01(\t\x12\x17\n\x0f\x62ytes_available\x18\x02 \x01(\x04\x12\x16\n\x0e\x62ytes_capacity\x18\x03 \x01(\x04\x12\x19\n\x11\x66ile_types_stored\x18\x04 \x03(\t\x12\x1d\n\x15\x62ytes_to_stop_cleanly\x18\x05 \x01(\x04\x12\x1f\n\x17\x62ytes_when_alert_issued\x18\x06 \x01(\x04\x12\x17\n\x0frecommend_alert\x18\x07 \x01(\x08\x12\x16\n\x0erecommend_stop\x18\x08 \x01(\x08\x12\x18\n\x10\x62ytes_per_second\x18\t \x01(\x03\"\x19\n\x17GetDiskSpaceInfoRequest\",\n\x1aStreamDiskSpaceInfoRequest\x12\x0e\n\x06period\x18\x01 \x01(\r\"l\n\x18GetDiskSpaceInfoResponse\x12P\n\x1a\x66ilesystem_disk_space_info\x18\x01 \x03(\x0b\x32,.minknow_api.manager.FilesystemDiskSpaceInfo\"\x1a\n\x18GetBarcodeKitInfoRequest\"\xa8\x02\n\x19GetBarcodeKitInfoResponse\x12\\\n\x10\x62\x61rcode_kit_info\x18\x01 \x03(\x0b\x32\x42.minknow_api.manager.GetBarcodeKitInfoResponse.BarcodeKitInfoEntry\x1a\x37\n\x0e\x42\x61rcodeKitInfo\x12\x0f\n\x07is_dual\x18\x02 \x01(\x08\x12\x14\n\x0cis_both_ends\x18\x03 \x01(\x08\x1at\n\x13\x42\x61rcodeKitInfoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12L\n\x05value\x18\x02 \x01(\x0b\x32=.minknow_api.manager.GetBarcodeKitInfoResponse.BarcodeKitInfo:\x02\x38\x01\"\x17\n\x15GetLampKitInfoRequest\"+\n\x16GetLampKitInfoResponse\x12\x11\n\tlamp_kits\x18\x02 \x03(\t\"I\n\x15GetBarcodeKeysRequest\x12\x19\n\x11\x62\x61rcode_kit_names\x18\x01 \x03(\t\x12\x15\n\rlamp_kit_name\x18\x02 \x01(\t\"X\n\x16GetBarcodeKeysResponse\x12\x14\n\x0c\x62\x61rcode_keys\x18\x01 \x03(\t\x12\x11\n\tlamp_keys\x18\x02 \x03(\t\x12\x15\n\rcombined_keys\x18\x03 \x03(\t\"\x19\n\x17GetFlowCellTypesRequest\"\xdc\x01\n\x18GetFlowCellTypesResponse\x12\x41\n\x05types\x18\x01 \x03(\x0b\x32\x32.minknow_api.manager.GetFlowCellTypesResponse.Info\x1a}\n\x04Info\x12\x14\n\x0cproduct_code\x18\x01 \x01(\t\x12\x41\n\x0e\x63onnector_type\x18\x02 \x01(\x0e\x32).minknow_api.device.FlowCellConnectorType\x12\x1c\n\x14\x63\x61nnot_live_basecall\x18\x03 \x01(\x08\":\n\x18GetSequencingKitsRequest\x12\x1e\n\x16\x66low_cell_product_code\x18\x01 \x01(\t\"\xf2\x03\n\x19GetSequencingKitsResponse\x12@\n\x04kits\x18\x01 \x03(\x0b\x32\x32.minknow_api.manager.GetSequencingKitsResponse.Kit\x12\x66\n\x18\x62\x61rcoding_expansion_kits\x18\x02 \x03(\x0b\x32\x44.minknow_api.manager.GetSequencingKitsResponse.BarcodingExpansionKit\x1a\xfb\x01\n\x03Kit\x12\x14\n\x0cproduct_code\x18\x01 \x01(\t\x12 \n\x18\x62\x61rcoding_expansion_kits\x18\x02 \x03(\x05\x12\x1a\n\x12includes_barcoding\x18\x03 \x01(\x08\x12\x10\n\x08lamp_kit\x18\x10 \x01(\x08\x12\x1c\n\x14has_control_protocol\x18\x04 \x01(\x08\x12\x1e\n\x16no_sequencing_protocol\x18\x11 \x01(\x08\x12\x17\n\x0f\x66requently_used\x18\x12 \x01(\x08\x12\x0b\n\x03\x64na\x18\x05 \x01(\x08\x12\x0b\n\x03rna\x18\x06 \x01(\x08\x12\x0b\n\x03pcr\x18\x07 \x01(\x08\x12\x10\n\x08pcr_free\x18\x08 \x01(\x08\x1a-\n\x15\x42\x61rcodingExpansionKit\x12\x14\n\x0cproduct_code\x18\x01 \x01(\t\"m\n\x19\x41\x64\x64SimulatedDeviceRequest\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12<\n\x04type\x18\x02 \x01(\x0e\x32(.minknow_api.manager.SimulatedDeviceTypeB\x04\x88\xb5\x18\x01\"\x1c\n\x1a\x41\x64\x64SimulatedDeviceResponse\"2\n\x1cRemoveSimulatedDeviceRequest\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"\x1f\n\x1dRemoveSimulatedDeviceResponse\"%\n#LocalAuthenticationTokenPathRequest\"4\n$LocalAuthenticationTokenPathResponse\x12\x0c\n\x04path\x18\x01 \x01(\t\"7\n\'GetAlignmentReferenceInformationRequest\x12\x0c\n\x04path\x18\x01 \x01(\t\"\xf5\x01\n(GetAlignmentReferenceInformationResponse\x12#\n\x1b\x65stimated_load_time_seconds\x18\x01 \x01(\x02\x12&\n\x1e\x65stimated_reference_size_bases\x18\x02 \x01(\x04\x12\x1e\n\x16recommended_live_usage\x18\x03 \x01(\x08\x12+\n#recommended_adaptive_sampling_usage\x18\x04 \x01(\x08\x12/\n\'max_recommended_adaptive_sampling_bases\x18\x05 \x01(\x04\"D\n\x1c\x41ssociationDeviceCodeRequest\x12\x15\n\rposition_name\x18\x01 \x01(\tJ\x04\x08\x02\x10\x03R\x07offline\"-\n\x1d\x41ssociationDeviceCodeResponse\x12\x0c\n\x04\x63ode\x18\x01 \x01(\t\"V\n(ApplyOfflineAssociationUnlockCodeRequest\x12\x15\n\rposition_name\x18\x01 \x01(\t\x12\x13\n\x0bunlock_code\x18\x02 \x01(\t\"?\n)ApplyOfflineAssociationUnlockCodeResponse\x12\x12\n\nassociated\x18\x01 \x01(\x08\"\x1f\n\x1dListDeveloperApiTokensRequest\"\xd2\x01\n\x1eListDeveloperApiTokensResponse\x12U\n\x06tokens\x18\x01 \x03(\x0b\x32\x45.minknow_api.manager.ListDeveloperApiTokensResponse.DeveloperApiToken\x1aY\n\x11\x44\x65veloperApiToken\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12*\n\x06\x65xpiry\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"Z\n\x1e\x43reateDeveloperApiTokenRequest\x12\x0c\n\x04name\x18\x02 \x01(\t\x12*\n\x06\x65xpiry\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"<\n\x1f\x43reateDeveloperApiTokenResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05token\x18\x02 \x01(\t\",\n\x1eRevokeDeveloperApiTokenRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\"\n RevokeDeveloperApiTokensResponse\"\x8c\x01\n\x14\x46indProtocolsRequest\x12\x1e\n\x16\x66low_cell_product_code\x18\x01 \x01(\t\x12\x16\n\x0esequencing_kit\x18\x02 \x01(\t\x12<\n\x0f\x65xperiment_type\x18\x03 \x01(\x0e\x32#.minknow_api.manager.ExperimentType\"\xc9\x01\n\x15\x46indProtocolsResponse\x12\x46\n\tprotocols\x18\x01 \x03(\x0b\x32\x33.minknow_api.manager.FindProtocolsResponse.Protocol\x1ah\n\x08Protocol\x12\x12\n\nidentifier\x18\x01 \x01(\t\x12\'\n\x1frequires_flow_cell_product_code\x18\x02 \x01(\x08\x12\x1f\n\x17requires_sequencing_kit\x18\x03 \x01(\x08\"\xee\x01\n\x1eListSettingsForProtocolRequest\x12\x14\n\nidentifier\x18\x01 \x01(\tH\x00\x12Q\n\ncomponents\x18\x02 \x01(\x0b\x32;.minknow_api.protocol_settings.ProtocolIdentifierComponentsH\x00\x12L\n\x13\x66low_cell_connector\x18\x03 \x01(\x0e\x32).minknow_api.device.FlowCellConnectorTypeB\x04\x88\xb5\x18\x01\x42\x15\n\x13protocol_identifier\"\x8c\x1f\n\x1fListSettingsForProtocolResponse\x12M\n\x08protocol\x18\x01 \x01(\x0b\x32;.minknow_api.protocol_settings.ProtocolIdentifierComponents\x12T\n\x0brun_options\x18\x02 \x01(\x0b\x32?.minknow_api.manager.ListSettingsForProtocolResponse.RunOptions\x12U\n\x0b\x62\x61secalling\x18\x03 \x01(\x0b\x32@.minknow_api.manager.ListSettingsForProtocolResponse.Basecalling\x12K\n\x06output\x18\x04 \x01(\x0b\x32;.minknow_api.manager.ListSettingsForProtocolResponse.Output\x12I\n\x11protocol_settings\x18\x05 \x03(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x1a\xd5\x06\n\nRunOptions\x12\x42\n\nrun_length\x18\x01 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12\x44\n\x0c\x62ias_voltage\x18\x02 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12J\n\x12read_until_enabled\x18\x03 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12K\n\x13read_until_ref_file\x18\x04 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12K\n\x13read_until_channels\x18\x05 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12S\n\x1bread_until_bed_file_enabled\x18\x06 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12K\n\x13read_until_bed_file\x18\x07 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12M\n\x15read_until_enrichment\x18\x08 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12P\n\x18\x61\x63tive_channel_selection\x18\t \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12G\n\x0fmux_scan_period\x18\n \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12K\n\x13group_change_period\x18\x0b \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x1a\x8f\x06\n\x0b\x42\x61secalling\x12K\n\x13\x62\x61secalling_enabled\x18\x01 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12I\n\x11\x62\x61rcoding_enabled\x18\x02 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12\x46\n\x0e\x62\x61rcoding_kits\x18\x03 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12\x46\n\x0e\x62\x61secall_model\x18\x04 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12M\n\x15trim_barcodes_enabled\x18\x05 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12R\n\x1arequire_barcodes_both_ends\x18\x06 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12I\n\x11\x61lignment_enabled\x18\r \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12J\n\x12\x61lignment_ref_file\x18\x0e \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12R\n\x1a\x61lignment_bed_file_enabled\x18\x0f \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12J\n\x12\x61lignment_bed_file\x18\x10 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x1a\xea\x0e\n\x06Output\x12G\n\x0foutput_location\x18\x01 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12\x46\n\x0e\x66\x61st_q_enabled\x18\x02 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12M\n\x15\x66\x61st_q_reads_per_file\x18\x03 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12O\n\x17\x66\x61st_q_data_compression\x18\x04 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12\x46\n\x0e\x66\x61st_5_enabled\x18\x05 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12M\n\x15\x66\x61st_5_reads_per_file\x18\x06 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12O\n\x17\x66\x61st_5_data_trace_table\x18\x07 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12N\n\x16\x66\x61st_5_data_move_table\x18\x08 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12J\n\x12\x66\x61st_5_data_fast_q\x18\t \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12G\n\x0f\x66\x61st_5_data_raw\x18\n \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12O\n\x17\x66\x61st_5_data_compression\x18\x0b \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12\x43\n\x0b\x62\x61m_enabled\x18\x0c \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12N\n\x16read_filtering_enabled\x18\r \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12Q\n\x19read_filtering_min_qscore\x18\x0e \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12V\n\x1eread_filtering_min_read_length\x18\x0f \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12V\n\x1eread_filtering_max_read_length\x18\x10 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12I\n\x11\x62ulk_file_enabled\x18\x11 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12\x45\n\rbulk_file_raw\x18\x12 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12H\n\x10\x62ulk_file_events\x18\x13 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12L\n\x14\x62ulk_file_read_table\x18\x14 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12M\n\x15\x62ulk_file_raw_enabled\x18\x15 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12P\n\x18\x62ulk_file_events_enabled\x18\x16 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12T\n\x1c\x62ulk_file_read_table_enabled\x18\x17 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12X\n read_filtering_min_duplex_qscore\x18\x18 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\"\x1a\n\x07\x46\x65\x61ture\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\"\xe5\x01\n\x0b\x46\x65\x61tureList\x12\x33\n\rfeature_flags\x18\x03 \x01(\x0b\x32\x1c.minknow_api.manager.Feature\x12\x34\n\x0e\x65nrich_deplete\x18\x01 \x01(\x0b\x32\x1c.minknow_api.manager.Feature\x12\x37\n\x11\x62\x61rcode_balancing\x18\x02 \x01(\x0b\x32\x1c.minknow_api.manager.Feature\x12\x32\n\x0c\x64\x61ta_offload\x18\x04 \x01(\x0b\x32\x1c.minknow_api.manager.Feature\"\x14\n\x12GetFeaturesRequest\"\xde\x01\n\x13GetFeaturesResponse\x12=\n\x05state\x18\x01 \x01(\x0e\x32..minknow_api.manager.GetFeaturesResponse.State\x12\x32\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0b\x32 .minknow_api.manager.FeatureList\"T\n\x05State\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0b\n\x07NO_FILE\x10\x01\x12\x1b\n\x17\x45RROR_LOADING_FROM_FILE\x10\x02\x12\x14\n\x10LOADED_FROM_FILE\x10\x03\"H\n\x12SetFeaturesRequest\x12\x32\n\x08\x66\x65\x61tures\x18\x01 \x01(\x0b\x32 .minknow_api.manager.FeatureList\"\x15\n\x13SetFeaturesResponse\"\x1b\n\x19RestartDeviceAdminRequest\"\x1c\n\x1aRestartDeviceAdminResponse*\x88\x01\n\x13SimpleProtocolState\x12\x15\n\x11NO_PROTOCOL_STATE\x10\x00\x12\x14\n\x10PROTOCOL_RUNNING\x10\x01\x12\"\n\x1ePROTOCOL_FINISHED_SUCCESSFULLY\x10\x02\x12 \n\x1cPROTOCOL_FINISHED_WITH_ERROR\x10\x03*\x82\x01\n\x13SimulatedDeviceType\x12\x12\n\x0eSIMULATED_AUTO\x10\x00\x12\x14\n\x10SIMULATED_MINION\x10\x01\x12\x15\n\x11SIMULATED_TRAXION\x10\x02\x12\x18\n\x14SIMULATED_PROMETHION\x10\x03\x12\x10\n\x0cSIMULATED_P2\x10\x04*j\n\x0e\x45xperimentType\x12\x0e\n\nSEQUENCING\x10\x00\x12\x0b\n\x07\x43ONTROL\x10\x01\x12\n\n\x06\x43USTOM\x10\x02\x12\x15\n\x11\x41LL_EXCEPT_HIDDEN\x10\x03\x12\x18\n\x14\x41LL_INCLUDING_HIDDEN\x10\x04\x32\xc4 \n\x0eManagerService\x12i\n\rdescribe_host\x12(.minknow_api.manager.DescribeHostRequest\x1a).minknow_api.manager.DescribeHostResponse\"\x03\x90\x02\x01\x12\x85\x01\n\x17get_basecaller_features\x12\x31.minknow_api.manager.GetBasecallerFeaturesRequest\x1a\x32.minknow_api.manager.GetBasecallerFeaturesResponse\"\x03\x90\x02\x01\x12{\n\x13\x66low_cell_positions\x12-.minknow_api.manager.FlowCellPositionsRequest\x1a..minknow_api.manager.FlowCellPositionsResponse\"\x03\x90\x02\x01\x30\x01\x12\x8b\x01\n\x19watch_flow_cell_positions\x12\x32.minknow_api.manager.WatchFlowCellPositionsRequest\x1a\x33.minknow_api.manager.WatchFlowCellPositionsResponse\"\x03\x90\x02\x01\x30\x01\x12i\n\x0ereset_position\x12).minknow_api.manager.ResetPositionRequest\x1a*.minknow_api.manager.ResetPositionResponse\"\x00\x12l\n\x0e\x62\x61secaller_api\x12).minknow_api.manager.BasecallerApiRequest\x1a*.minknow_api.manager.BasecallerApiResponse\"\x03\x90\x02\x01\x12j\n\x0eget_guppy_info\x12(.minknow_api.manager.GetGuppyInfoRequest\x1a).minknow_api.manager.GetGuppyInfoResponse\"\x03\x90\x02\x01\x12q\n\x10get_version_info\x12*.minknow_api.manager.GetVersionInfoRequest\x1a,.minknow_api.instance.GetVersionInfoResponse\"\x03\x90\x02\x01\x12\x98\x01\n\x1elist_protocol_output_dir_files\x12\x36.minknow_api.manager.ListProtocolOutputDirFilesRequest\x1a\x37.minknow_api.manager.ListProtocolOutputDirFilesResponse\"\x03\x90\x02\x01\x30\x01\x12r\n\x10\x63reate_directory\x12+.minknow_api.manager.CreateDirectoryRequest\x1a,.minknow_api.manager.CreateDirectoryResponse\"\x03\x90\x02\x02\x12w\n\x13get_disk_space_info\x12,.minknow_api.manager.GetDiskSpaceInfoRequest\x1a-.minknow_api.manager.GetDiskSpaceInfoResponse\"\x03\x90\x02\x01\x12\x88\x01\n\x1eget_default_output_directories\x12\x38.minknow_api.instance.GetDefaultOutputDirectoriesRequest\x1a\'.minknow_api.instance.OutputDirectories\"\x03\x90\x02\x01\x12\x7f\n\x16stream_disk_space_info\x12/.minknow_api.manager.StreamDiskSpaceInfoRequest\x1a-.minknow_api.manager.GetDiskSpaceInfoResponse\"\x03\x90\x02\x01\x30\x01\x12z\n\x14get_barcode_kit_info\x12-.minknow_api.manager.GetBarcodeKitInfoRequest\x1a..minknow_api.manager.GetBarcodeKitInfoResponse\"\x03\x90\x02\x01\x12q\n\x11get_lamp_kit_info\x12*.minknow_api.manager.GetLampKitInfoRequest\x1a+.minknow_api.manager.GetLampKitInfoResponse\"\x03\x90\x02\x01\x12p\n\x10get_barcode_keys\x12*.minknow_api.manager.GetBarcodeKeysRequest\x1a+.minknow_api.manager.GetBarcodeKeysResponse\"\x03\x90\x02\x01\x12{\n\x13get_flow_cell_types\x12,.minknow_api.manager.GetFlowCellTypesRequest\x1a-.minknow_api.manager.GetFlowCellTypesResponse\"\x07\x90\x02\x01\x98\xb5\x18\x01\x12}\n\x13get_sequencing_kits\x12-.minknow_api.manager.GetSequencingKitsRequest\x1a..minknow_api.manager.GetSequencingKitsResponse\"\x07\x90\x02\x01\x98\xb5\x18\x01\x12y\n\x14\x61\x64\x64_simulated_device\x12..minknow_api.manager.AddSimulatedDeviceRequest\x1a/.minknow_api.manager.AddSimulatedDeviceResponse\"\x00\x12\x85\x01\n\x17remove_simulated_device\x12\x31.minknow_api.manager.RemoveSimulatedDeviceRequest\x1a\x32.minknow_api.manager.RemoveSimulatedDeviceResponse\"\x03\x90\x02\x02\x12\x9b\x01\n\x1flocal_authentication_token_path\x12\x38.minknow_api.manager.LocalAuthenticationTokenPathRequest\x1a\x39.minknow_api.manager.LocalAuthenticationTokenPathResponse\"\x03\x90\x02\x01\x12\xa7\x01\n#get_alignment_reference_information\x12<.minknow_api.manager.GetAlignmentReferenceInformationRequest\x1a=.minknow_api.manager.GetAlignmentReferenceInformationResponse\"\x03\x90\x02\x01\x12\x85\x01\n\x17\x61ssociation_device_code\x12\x31.minknow_api.manager.AssociationDeviceCodeRequest\x1a\x32.minknow_api.manager.AssociationDeviceCodeResponse\"\x03\x90\x02\x01\x12\xab\x01\n%apply_offline_association_unlock_code\x12=.minknow_api.manager.ApplyOfflineAssociationUnlockCodeRequest\x1a>.minknow_api.manager.ApplyOfflineAssociationUnlockCodeResponse\"\x03\x90\x02\x02\x12\x8c\x01\n\x19list_developer_api_tokens\x12\x32.minknow_api.manager.ListDeveloperApiTokensRequest\x1a\x33.minknow_api.manager.ListDeveloperApiTokensResponse\"\x06\x88\x02\x01\x90\x02\x02\x12\x8c\x01\n\x1a\x63reate_developer_api_token\x12\x33.minknow_api.manager.CreateDeveloperApiTokenRequest\x1a\x34.minknow_api.manager.CreateDeveloperApiTokenResponse\"\x03\x88\x02\x01\x12\x8d\x01\n\x1arevoke_developer_api_token\x12\x33.minknow_api.manager.RevokeDeveloperApiTokenRequest\x1a\x35.minknow_api.manager.RevokeDeveloperApiTokensResponse\"\x03\x88\x02\x01\x12m\n\x0e\x66ind_protocols\x12).minknow_api.manager.FindProtocolsRequest\x1a*.minknow_api.manager.FindProtocolsResponse\"\x04\x98\xb5\x18\x01\x12\x90\x01\n\x1alist_settings_for_protocol\x12\x33.minknow_api.manager.ListSettingsForProtocolRequest\x1a\x34.minknow_api.manager.ListSettingsForProtocolResponse\"\x07\x90\x02\x01\x98\xb5\x18\x01\x12j\n\x0cget_features\x12\'.minknow_api.manager.GetFeaturesRequest\x1a(.minknow_api.manager.GetFeaturesResponse\"\x07\x90\x02\x01\x98\xb5\x18\x01\x12g\n\x0cset_features\x12\'.minknow_api.manager.SetFeaturesRequest\x1a(.minknow_api.manager.SetFeaturesResponse\"\x04\x98\xb5\x18\x01\x12\x84\x01\n\x1crestart_device_admin_service\x12..minknow_api.manager.RestartDeviceAdminRequest\x1a/.minknow_api.manager.RestartDeviceAdminResponse\"\x03\x90\x02\x02\x42&\n\x1c\x63om.nanoporetech.minknow_api\xa2\x02\x05MKAPIb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19minknow_api/manager.proto\x12\x13minknow_api.manager\x1a\x1dminknow_api/rpc_options.proto\x1a\x18minknow_api/device.proto\x1a\x1aminknow_api/instance.proto\x1a#minknow_api/protocol_settings.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x15\n\x13\x44\x65scribeHostRequest\"\xd1\x05\n\x14\x44\x65scribeHostResponse\x12\x14\n\x0cproduct_code\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0e\n\x06serial\x18\x03 \x01(\t\x12\x14\n\x0cnetwork_name\x18\x04 \x01(\t\x12\x19\n\x11needs_association\x18\x10 \x01(\x08\x12\x1c\n\x14\x63\x61n_sequence_offline\x18\x05 \x01(\x08\x12!\n\x19\x63\x61n_connect_to_usb_device\x18\x11 \x01(\x08\x12W\n\x0c\x63\x61n_basecall\x18\x06 \x01(\x0e\x32\x41.minknow_api.manager.DescribeHostResponse.BasecallingAvailability\x12\x63\n\x1c\x63urrent_basecalling_hardware\x18\x07 \x01(\x0b\x32=.minknow_api.manager.DescribeHostResponse.BasecallerSubstrate\x12\x65\n\x1e\x61vailable_basecalling_hardware\x18\x08 \x03(\x0b\x32=.minknow_api.manager.DescribeHostResponse.BasecallerSubstrate\x1a\x33\n\x13\x42\x61secallerSubstrate\x12\x0e\n\x06is_gpu\x18\x01 \x01(\x08\x12\x0c\n\x04gpus\x18\x02 \x03(\t\"\xb1\x01\n\x17\x42\x61secallingAvailability\x12\x19\n\x15\x42\x41SECALLING_AVAILABLE\x10\x00\x12\x1b\n\x17\x42\x41SECALLING_UNAVAILABLE\x10\x01\x12-\n)BASECALLING_UNAVAILABLE_BAD_CONFIGURATION\x10\x02\x12/\n+BASECALLING_UNAVAILABLE_ATTEMPTING_RECOVERY\x10\x03\"\x1e\n\x1cGetBasecallerFeaturesRequest\"_\n\x1dGetBasecallerFeaturesResponse\x12>\n6is_live_basecalling_with_adaptive_sampling_recommended\x18\x01 \x01(\x08\"\xfc\x07\n\x10\x46lowCellPosition\x12\x0c\n\x04name\x18\x01 \x01(\t\x12@\n\x08location\x18\x02 \x01(\x0b\x32..minknow_api.manager.FlowCellPosition.Location\x12:\n\x05state\x18\x03 \x01(\x0e\x32+.minknow_api.manager.FlowCellPosition.State\x12\x41\n\trpc_ports\x18\x04 \x01(\x0b\x32..minknow_api.manager.FlowCellPosition.RpcPorts\x12\x12\n\nerror_info\x18\x05 \x01(\t\x12X\n\x15shared_hardware_group\x18\x06 \x01(\x0b\x32\x39.minknow_api.manager.FlowCellPosition.SharedHardwareGroup\x12\x15\n\ris_integrated\x18\x07 \x01(\x08\x12\x1c\n\x14\x63\x61n_sequence_offline\x18\x08 \x01(\x08\x12@\n\x0eprotocol_state\x18\t \x01(\x0e\x32(.minknow_api.manager.SimpleProtocolState\x12\x14\n\x0cis_simulated\x18\n \x01(\x08\x12I\n\x0b\x64\x65vice_type\x18\x0b \x01(\x0e\x32\x34.minknow_api.device.GetDeviceInfoResponse.DeviceType\x12\x13\n\x0bparent_name\x18\x0c \x01(\t\x12\x1c\n\x14\x66irmware_is_updating\x18\r \x01(\x08\x12\x14\n\x0chas_progress\x18\x0e \x01(\x08\x12\x18\n\x10progress_percent\x18\x0f \x01(\r\x12\x1c\n\x14progress_eta_seconds\x18\x10 \x01(\r\x1a \n\x08Location\x12\t\n\x01x\x18\x01 \x01(\x05\x12\t\n\x01y\x18\x02 \x01(\x05\x1a\x33\n\x08RpcPorts\x12\x0e\n\x06secure\x18\x01 \x01(\r\x12\x17\n\x0fsecure_grpc_web\x18\x03 \x01(\r\x1a\'\n\x13SharedHardwareGroup\x12\x10\n\x08group_id\x18\x01 \x01(\r\"\xd1\x01\n\x05State\x12\x16\n\x12STATE_INITIALISING\x10\x00\x12\x11\n\rSTATE_RUNNING\x10\x01\x12\x13\n\x0fSTATE_RESETTING\x10\x02\x12\x1a\n\x16STATE_HARDWARE_REMOVED\x10\x03\x12\x18\n\x14STATE_HARDWARE_ERROR\x10\x04\x12\x18\n\x14STATE_SOFTWARE_ERROR\x10\x05\x12\x1b\n\x17STATE_NEEDS_ASSOCIATION\x10\x06\x12\x1b\n\x17STATE_USB_SPEED_TOO_LOW\x10\x07\"\x1a\n\x18\x46lowCellPositionsRequest\"j\n\x19\x46lowCellPositionsResponse\x12\x13\n\x0btotal_count\x18\x01 \x01(\x05\x12\x38\n\tpositions\x18\x02 \x03(\x0b\x32%.minknow_api.manager.FlowCellPosition\"\x1f\n\x1dWatchFlowCellPositionsRequest\"\xa4\x01\n\x1eWatchFlowCellPositionsResponse\x12\x38\n\tadditions\x18\x01 \x03(\x0b\x32%.minknow_api.manager.FlowCellPosition\x12\x36\n\x07\x63hanges\x18\x02 \x03(\x0b\x32%.minknow_api.manager.FlowCellPosition\x12\x10\n\x08removals\x18\x03 \x03(\t\"8\n\x14ResetPositionRequest\x12\x11\n\tpositions\x18\x03 \x03(\t\x12\r\n\x05\x66orce\x18\x02 \x01(\x08\"\x17\n\x15ResetPositionResponse\"\x16\n\x14\x42\x61secallerApiRequest\"@\n\x15\x42\x61secallerApiResponse\x12\x0e\n\x06secure\x18\x01 \x01(\r\x12\x17\n\x0fsecure_grpc_web\x18\x03 \x01(\r\"\x15\n\x13GetGuppyInfoRequest\"^\n\x14GetGuppyInfoResponse\x12\x0e\n\x04port\x18\x01 \x01(\rH\x00\x12\x12\n\x08ipc_path\x18\x03 \x01(\tH\x00\x12\x0f\n\x07version\x18\x02 \x01(\tB\x11\n\x0f\x63onnection_type\"\x17\n\x15GetVersionInfoRequest\"1\n!ListProtocolOutputDirFilesRequest\x12\x0c\n\x04path\x18\x01 \x01(\t\"\xf8\x01\n\"ListProtocolOutputDirFilesResponse\x12Z\n\x0b\x64irectories\x18\x01 \x03(\x0b\x32\x45.minknow_api.manager.ListProtocolOutputDirFilesResponse.DirectoryInfo\x12\r\n\x05\x66iles\x18\x02 \x03(\t\x12\x1b\n\x13\x63urrent_listed_path\x18\x03 \x01(\t\x1aJ\n\rDirectoryInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x17\n\x0f\x64irectory_count\x18\x02 \x01(\x05\x12\x12\n\nfile_count\x18\x03 \x01(\x05\";\n\x16\x43reateDirectoryRequest\x12\x13\n\x0bparent_path\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\'\n\x17\x43reateDirectoryResponse\x12\x0c\n\x04path\x18\x01 \x01(\t\"\x87\x02\n\x17\x46ilesystemDiskSpaceInfo\x12\x15\n\rfilesystem_id\x18\x01 \x01(\t\x12\x17\n\x0f\x62ytes_available\x18\x02 \x01(\x04\x12\x16\n\x0e\x62ytes_capacity\x18\x03 \x01(\x04\x12\x19\n\x11\x66ile_types_stored\x18\x04 \x03(\t\x12\x1d\n\x15\x62ytes_to_stop_cleanly\x18\x05 \x01(\x04\x12\x1f\n\x17\x62ytes_when_alert_issued\x18\x06 \x01(\x04\x12\x17\n\x0frecommend_alert\x18\x07 \x01(\x08\x12\x16\n\x0erecommend_stop\x18\x08 \x01(\x08\x12\x18\n\x10\x62ytes_per_second\x18\t \x01(\x03\"\x19\n\x17GetDiskSpaceInfoRequest\",\n\x1aStreamDiskSpaceInfoRequest\x12\x0e\n\x06period\x18\x01 \x01(\r\"l\n\x18GetDiskSpaceInfoResponse\x12P\n\x1a\x66ilesystem_disk_space_info\x18\x01 \x03(\x0b\x32,.minknow_api.manager.FilesystemDiskSpaceInfo\"\x1a\n\x18GetBarcodeKitInfoRequest\"\xa8\x02\n\x19GetBarcodeKitInfoResponse\x12\\\n\x10\x62\x61rcode_kit_info\x18\x01 \x03(\x0b\x32\x42.minknow_api.manager.GetBarcodeKitInfoResponse.BarcodeKitInfoEntry\x1a\x37\n\x0e\x42\x61rcodeKitInfo\x12\x0f\n\x07is_dual\x18\x02 \x01(\x08\x12\x14\n\x0cis_both_ends\x18\x03 \x01(\x08\x1at\n\x13\x42\x61rcodeKitInfoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12L\n\x05value\x18\x02 \x01(\x0b\x32=.minknow_api.manager.GetBarcodeKitInfoResponse.BarcodeKitInfo:\x02\x38\x01\"\x17\n\x15GetLampKitInfoRequest\"+\n\x16GetLampKitInfoResponse\x12\x11\n\tlamp_kits\x18\x02 \x03(\t\"I\n\x15GetBarcodeKeysRequest\x12\x19\n\x11\x62\x61rcode_kit_names\x18\x01 \x03(\t\x12\x15\n\rlamp_kit_name\x18\x02 \x01(\t\"X\n\x16GetBarcodeKeysResponse\x12\x14\n\x0c\x62\x61rcode_keys\x18\x01 \x03(\t\x12\x11\n\tlamp_keys\x18\x02 \x03(\t\x12\x15\n\rcombined_keys\x18\x03 \x03(\t\"\x19\n\x17GetFlowCellTypesRequest\"\xdc\x01\n\x18GetFlowCellTypesResponse\x12\x41\n\x05types\x18\x01 \x03(\x0b\x32\x32.minknow_api.manager.GetFlowCellTypesResponse.Info\x1a}\n\x04Info\x12\x14\n\x0cproduct_code\x18\x01 \x01(\t\x12\x41\n\x0e\x63onnector_type\x18\x02 \x01(\x0e\x32).minknow_api.device.FlowCellConnectorType\x12\x1c\n\x14\x63\x61nnot_live_basecall\x18\x03 \x01(\x08\":\n\x18GetSequencingKitsRequest\x12\x1e\n\x16\x66low_cell_product_code\x18\x01 \x01(\t\"\xf2\x03\n\x19GetSequencingKitsResponse\x12@\n\x04kits\x18\x01 \x03(\x0b\x32\x32.minknow_api.manager.GetSequencingKitsResponse.Kit\x12\x66\n\x18\x62\x61rcoding_expansion_kits\x18\x02 \x03(\x0b\x32\x44.minknow_api.manager.GetSequencingKitsResponse.BarcodingExpansionKit\x1a\xfb\x01\n\x03Kit\x12\x14\n\x0cproduct_code\x18\x01 \x01(\t\x12 \n\x18\x62\x61rcoding_expansion_kits\x18\x02 \x03(\x05\x12\x1a\n\x12includes_barcoding\x18\x03 \x01(\x08\x12\x10\n\x08lamp_kit\x18\x10 \x01(\x08\x12\x1c\n\x14has_control_protocol\x18\x04 \x01(\x08\x12\x1e\n\x16no_sequencing_protocol\x18\x11 \x01(\x08\x12\x17\n\x0f\x66requently_used\x18\x12 \x01(\x08\x12\x0b\n\x03\x64na\x18\x05 \x01(\x08\x12\x0b\n\x03rna\x18\x06 \x01(\x08\x12\x0b\n\x03pcr\x18\x07 \x01(\x08\x12\x10\n\x08pcr_free\x18\x08 \x01(\x08\x1a-\n\x15\x42\x61rcodingExpansionKit\x12\x14\n\x0cproduct_code\x18\x01 \x01(\t\"m\n\x19\x41\x64\x64SimulatedDeviceRequest\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12<\n\x04type\x18\x02 \x01(\x0e\x32(.minknow_api.manager.SimulatedDeviceTypeB\x04\x88\xb5\x18\x01\"\x1c\n\x1a\x41\x64\x64SimulatedDeviceResponse\"2\n\x1cRemoveSimulatedDeviceRequest\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"\x1f\n\x1dRemoveSimulatedDeviceResponse\"%\n#LocalAuthenticationTokenPathRequest\"4\n$LocalAuthenticationTokenPathResponse\x12\x0c\n\x04path\x18\x01 \x01(\t\"7\n\'GetAlignmentReferenceInformationRequest\x12\x0c\n\x04path\x18\x01 \x01(\t\"\xf5\x01\n(GetAlignmentReferenceInformationResponse\x12#\n\x1b\x65stimated_load_time_seconds\x18\x01 \x01(\x02\x12&\n\x1e\x65stimated_reference_size_bases\x18\x02 \x01(\x04\x12\x1e\n\x16recommended_live_usage\x18\x03 \x01(\x08\x12+\n#recommended_adaptive_sampling_usage\x18\x04 \x01(\x08\x12/\n\'max_recommended_adaptive_sampling_bases\x18\x05 \x01(\x04\"D\n\x1c\x41ssociationDeviceCodeRequest\x12\x15\n\rposition_name\x18\x01 \x01(\tJ\x04\x08\x02\x10\x03R\x07offline\"-\n\x1d\x41ssociationDeviceCodeResponse\x12\x0c\n\x04\x63ode\x18\x01 \x01(\t\"V\n(ApplyOfflineAssociationUnlockCodeRequest\x12\x15\n\rposition_name\x18\x01 \x01(\t\x12\x13\n\x0bunlock_code\x18\x02 \x01(\t\"?\n)ApplyOfflineAssociationUnlockCodeResponse\x12\x12\n\nassociated\x18\x01 \x01(\x08\"\x1f\n\x1dListDeveloperApiTokensRequest\"\xd2\x01\n\x1eListDeveloperApiTokensResponse\x12U\n\x06tokens\x18\x01 \x03(\x0b\x32\x45.minknow_api.manager.ListDeveloperApiTokensResponse.DeveloperApiToken\x1aY\n\x11\x44\x65veloperApiToken\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12*\n\x06\x65xpiry\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"Z\n\x1e\x43reateDeveloperApiTokenRequest\x12\x0c\n\x04name\x18\x02 \x01(\t\x12*\n\x06\x65xpiry\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"<\n\x1f\x43reateDeveloperApiTokenResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05token\x18\x02 \x01(\t\",\n\x1eRevokeDeveloperApiTokenRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\"\n RevokeDeveloperApiTokensResponse\"\x8c\x01\n\x14\x46indProtocolsRequest\x12\x1e\n\x16\x66low_cell_product_code\x18\x01 \x01(\t\x12\x16\n\x0esequencing_kit\x18\x02 \x01(\t\x12<\n\x0f\x65xperiment_type\x18\x03 \x01(\x0e\x32#.minknow_api.manager.ExperimentType\"\xc9\x01\n\x15\x46indProtocolsResponse\x12\x46\n\tprotocols\x18\x01 \x03(\x0b\x32\x33.minknow_api.manager.FindProtocolsResponse.Protocol\x1ah\n\x08Protocol\x12\x12\n\nidentifier\x18\x01 \x01(\t\x12\'\n\x1frequires_flow_cell_product_code\x18\x02 \x01(\x08\x12\x1f\n\x17requires_sequencing_kit\x18\x03 \x01(\x08\"\xee\x01\n\x1eListSettingsForProtocolRequest\x12\x14\n\nidentifier\x18\x01 \x01(\tH\x00\x12Q\n\ncomponents\x18\x02 \x01(\x0b\x32;.minknow_api.protocol_settings.ProtocolIdentifierComponentsH\x00\x12L\n\x13\x66low_cell_connector\x18\x03 \x01(\x0e\x32).minknow_api.device.FlowCellConnectorTypeB\x04\x88\xb5\x18\x01\x42\x15\n\x13protocol_identifier\"\x8c\x1f\n\x1fListSettingsForProtocolResponse\x12M\n\x08protocol\x18\x01 \x01(\x0b\x32;.minknow_api.protocol_settings.ProtocolIdentifierComponents\x12T\n\x0brun_options\x18\x02 \x01(\x0b\x32?.minknow_api.manager.ListSettingsForProtocolResponse.RunOptions\x12U\n\x0b\x62\x61secalling\x18\x03 \x01(\x0b\x32@.minknow_api.manager.ListSettingsForProtocolResponse.Basecalling\x12K\n\x06output\x18\x04 \x01(\x0b\x32;.minknow_api.manager.ListSettingsForProtocolResponse.Output\x12I\n\x11protocol_settings\x18\x05 \x03(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x1a\xd5\x06\n\nRunOptions\x12\x42\n\nrun_length\x18\x01 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12\x44\n\x0c\x62ias_voltage\x18\x02 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12J\n\x12read_until_enabled\x18\x03 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12K\n\x13read_until_ref_file\x18\x04 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12K\n\x13read_until_channels\x18\x05 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12S\n\x1bread_until_bed_file_enabled\x18\x06 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12K\n\x13read_until_bed_file\x18\x07 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12M\n\x15read_until_enrichment\x18\x08 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12P\n\x18\x61\x63tive_channel_selection\x18\t \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12G\n\x0fmux_scan_period\x18\n \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12K\n\x13group_change_period\x18\x0b \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x1a\x8f\x06\n\x0b\x42\x61secalling\x12K\n\x13\x62\x61secalling_enabled\x18\x01 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12I\n\x11\x62\x61rcoding_enabled\x18\x02 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12\x46\n\x0e\x62\x61rcoding_kits\x18\x03 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12\x46\n\x0e\x62\x61secall_model\x18\x04 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12M\n\x15trim_barcodes_enabled\x18\x05 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12R\n\x1arequire_barcodes_both_ends\x18\x06 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12I\n\x11\x61lignment_enabled\x18\r \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12J\n\x12\x61lignment_ref_file\x18\x0e \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12R\n\x1a\x61lignment_bed_file_enabled\x18\x0f \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12J\n\x12\x61lignment_bed_file\x18\x10 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x1a\xea\x0e\n\x06Output\x12G\n\x0foutput_location\x18\x01 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12\x46\n\x0e\x66\x61st_q_enabled\x18\x02 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12M\n\x15\x66\x61st_q_reads_per_file\x18\x03 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12O\n\x17\x66\x61st_q_data_compression\x18\x04 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12\x46\n\x0e\x66\x61st_5_enabled\x18\x05 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12M\n\x15\x66\x61st_5_reads_per_file\x18\x06 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12O\n\x17\x66\x61st_5_data_trace_table\x18\x07 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12N\n\x16\x66\x61st_5_data_move_table\x18\x08 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12J\n\x12\x66\x61st_5_data_fast_q\x18\t \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12G\n\x0f\x66\x61st_5_data_raw\x18\n \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12O\n\x17\x66\x61st_5_data_compression\x18\x0b \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12\x43\n\x0b\x62\x61m_enabled\x18\x0c \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12N\n\x16read_filtering_enabled\x18\r \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12Q\n\x19read_filtering_min_qscore\x18\x0e \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12V\n\x1eread_filtering_min_read_length\x18\x0f \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12V\n\x1eread_filtering_max_read_length\x18\x10 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12I\n\x11\x62ulk_file_enabled\x18\x11 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12\x45\n\rbulk_file_raw\x18\x12 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12H\n\x10\x62ulk_file_events\x18\x13 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12L\n\x14\x62ulk_file_read_table\x18\x14 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12M\n\x15\x62ulk_file_raw_enabled\x18\x15 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12P\n\x18\x62ulk_file_events_enabled\x18\x16 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12T\n\x1c\x62ulk_file_read_table_enabled\x18\x17 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\x12X\n read_filtering_min_duplex_qscore\x18\x18 \x01(\x0b\x32..minknow_api.protocol_settings.ProtocolSetting\"\x1a\n\x07\x46\x65\x61ture\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\"\xe5\x01\n\x0b\x46\x65\x61tureList\x12\x33\n\rfeature_flags\x18\x03 \x01(\x0b\x32\x1c.minknow_api.manager.Feature\x12\x34\n\x0e\x65nrich_deplete\x18\x01 \x01(\x0b\x32\x1c.minknow_api.manager.Feature\x12\x37\n\x11\x62\x61rcode_balancing\x18\x02 \x01(\x0b\x32\x1c.minknow_api.manager.Feature\x12\x32\n\x0c\x64\x61ta_offload\x18\x04 \x01(\x0b\x32\x1c.minknow_api.manager.Feature\"\x14\n\x12GetFeaturesRequest\"\xde\x01\n\x13GetFeaturesResponse\x12=\n\x05state\x18\x01 \x01(\x0e\x32..minknow_api.manager.GetFeaturesResponse.State\x12\x32\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0b\x32 .minknow_api.manager.FeatureList\"T\n\x05State\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0b\n\x07NO_FILE\x10\x01\x12\x1b\n\x17\x45RROR_LOADING_FROM_FILE\x10\x02\x12\x14\n\x10LOADED_FROM_FILE\x10\x03\"H\n\x12SetFeaturesRequest\x12\x32\n\x08\x66\x65\x61tures\x18\x01 \x01(\x0b\x32 .minknow_api.manager.FeatureList\"\x15\n\x13SetFeaturesResponse\"\x1b\n\x19RestartDeviceAdminRequest\"\x1c\n\x1aRestartDeviceAdminResponse\"g\n\x13\x43heckBedFileRequest\x12\x15\n\rbed_file_path\x18\x01 \x01(\t\x12\x17\n\x0findex_file_path\x18\x02 \x01(\t\x12\x0e\n\x06strict\x18\x03 \x01(\x08\x12\x10\n\x08stranded\x18\x04 \x01(\x08\"&\n\x14\x43heckBedFileResponse\x12\x0e\n\x06passed\x18\x01 \x01(\x08*\x88\x01\n\x13SimpleProtocolState\x12\x15\n\x11NO_PROTOCOL_STATE\x10\x00\x12\x14\n\x10PROTOCOL_RUNNING\x10\x01\x12\"\n\x1ePROTOCOL_FINISHED_SUCCESSFULLY\x10\x02\x12 \n\x1cPROTOCOL_FINISHED_WITH_ERROR\x10\x03*q\n\x13SimulatedDeviceType\x12\x12\n\x0eSIMULATED_AUTO\x10\x00\x12\x14\n\x10SIMULATED_MINION\x10\x01\x12\x18\n\x14SIMULATED_PROMETHION\x10\x03\x12\x10\n\x0cSIMULATED_P2\x10\x04\"\x04\x08\x02\x10\x02*j\n\x0e\x45xperimentType\x12\x0e\n\nSEQUENCING\x10\x00\x12\x0b\n\x07\x43ONTROL\x10\x01\x12\n\n\x06\x43USTOM\x10\x02\x12\x15\n\x11\x41LL_EXCEPT_HIDDEN\x10\x03\x12\x18\n\x14\x41LL_INCLUDING_HIDDEN\x10\x04\x32\xb6!\n\x0eManagerService\x12i\n\rdescribe_host\x12(.minknow_api.manager.DescribeHostRequest\x1a).minknow_api.manager.DescribeHostResponse\"\x03\x90\x02\x01\x12\x85\x01\n\x17get_basecaller_features\x12\x31.minknow_api.manager.GetBasecallerFeaturesRequest\x1a\x32.minknow_api.manager.GetBasecallerFeaturesResponse\"\x03\x90\x02\x01\x12{\n\x13\x66low_cell_positions\x12-.minknow_api.manager.FlowCellPositionsRequest\x1a..minknow_api.manager.FlowCellPositionsResponse\"\x03\x90\x02\x01\x30\x01\x12\x8b\x01\n\x19watch_flow_cell_positions\x12\x32.minknow_api.manager.WatchFlowCellPositionsRequest\x1a\x33.minknow_api.manager.WatchFlowCellPositionsResponse\"\x03\x90\x02\x01\x30\x01\x12i\n\x0ereset_position\x12).minknow_api.manager.ResetPositionRequest\x1a*.minknow_api.manager.ResetPositionResponse\"\x00\x12l\n\x0e\x62\x61secaller_api\x12).minknow_api.manager.BasecallerApiRequest\x1a*.minknow_api.manager.BasecallerApiResponse\"\x03\x90\x02\x01\x12j\n\x0eget_guppy_info\x12(.minknow_api.manager.GetGuppyInfoRequest\x1a).minknow_api.manager.GetGuppyInfoResponse\"\x03\x90\x02\x01\x12q\n\x10get_version_info\x12*.minknow_api.manager.GetVersionInfoRequest\x1a,.minknow_api.instance.GetVersionInfoResponse\"\x03\x90\x02\x01\x12\x98\x01\n\x1elist_protocol_output_dir_files\x12\x36.minknow_api.manager.ListProtocolOutputDirFilesRequest\x1a\x37.minknow_api.manager.ListProtocolOutputDirFilesResponse\"\x03\x90\x02\x01\x30\x01\x12r\n\x10\x63reate_directory\x12+.minknow_api.manager.CreateDirectoryRequest\x1a,.minknow_api.manager.CreateDirectoryResponse\"\x03\x90\x02\x02\x12w\n\x13get_disk_space_info\x12,.minknow_api.manager.GetDiskSpaceInfoRequest\x1a-.minknow_api.manager.GetDiskSpaceInfoResponse\"\x03\x90\x02\x01\x12\x88\x01\n\x1eget_default_output_directories\x12\x38.minknow_api.instance.GetDefaultOutputDirectoriesRequest\x1a\'.minknow_api.instance.OutputDirectories\"\x03\x90\x02\x01\x12\x7f\n\x16stream_disk_space_info\x12/.minknow_api.manager.StreamDiskSpaceInfoRequest\x1a-.minknow_api.manager.GetDiskSpaceInfoResponse\"\x03\x90\x02\x01\x30\x01\x12z\n\x14get_barcode_kit_info\x12-.minknow_api.manager.GetBarcodeKitInfoRequest\x1a..minknow_api.manager.GetBarcodeKitInfoResponse\"\x03\x90\x02\x01\x12q\n\x11get_lamp_kit_info\x12*.minknow_api.manager.GetLampKitInfoRequest\x1a+.minknow_api.manager.GetLampKitInfoResponse\"\x03\x90\x02\x01\x12p\n\x10get_barcode_keys\x12*.minknow_api.manager.GetBarcodeKeysRequest\x1a+.minknow_api.manager.GetBarcodeKeysResponse\"\x03\x90\x02\x01\x12{\n\x13get_flow_cell_types\x12,.minknow_api.manager.GetFlowCellTypesRequest\x1a-.minknow_api.manager.GetFlowCellTypesResponse\"\x07\x90\x02\x01\x98\xb5\x18\x01\x12}\n\x13get_sequencing_kits\x12-.minknow_api.manager.GetSequencingKitsRequest\x1a..minknow_api.manager.GetSequencingKitsResponse\"\x07\x90\x02\x01\x98\xb5\x18\x01\x12y\n\x14\x61\x64\x64_simulated_device\x12..minknow_api.manager.AddSimulatedDeviceRequest\x1a/.minknow_api.manager.AddSimulatedDeviceResponse\"\x00\x12\x85\x01\n\x17remove_simulated_device\x12\x31.minknow_api.manager.RemoveSimulatedDeviceRequest\x1a\x32.minknow_api.manager.RemoveSimulatedDeviceResponse\"\x03\x90\x02\x02\x12\x9b\x01\n\x1flocal_authentication_token_path\x12\x38.minknow_api.manager.LocalAuthenticationTokenPathRequest\x1a\x39.minknow_api.manager.LocalAuthenticationTokenPathResponse\"\x03\x90\x02\x01\x12\xa7\x01\n#get_alignment_reference_information\x12<.minknow_api.manager.GetAlignmentReferenceInformationRequest\x1a=.minknow_api.manager.GetAlignmentReferenceInformationResponse\"\x03\x90\x02\x01\x12\x88\x01\n\x17\x61ssociation_device_code\x12\x31.minknow_api.manager.AssociationDeviceCodeRequest\x1a\x32.minknow_api.manager.AssociationDeviceCodeResponse\"\x06\x88\x02\x01\x90\x02\x01\x12\xae\x01\n%apply_offline_association_unlock_code\x12=.minknow_api.manager.ApplyOfflineAssociationUnlockCodeRequest\x1a>.minknow_api.manager.ApplyOfflineAssociationUnlockCodeResponse\"\x06\x88\x02\x01\x90\x02\x02\x12\x8c\x01\n\x19list_developer_api_tokens\x12\x32.minknow_api.manager.ListDeveloperApiTokensRequest\x1a\x33.minknow_api.manager.ListDeveloperApiTokensResponse\"\x06\x88\x02\x01\x90\x02\x02\x12\x8c\x01\n\x1a\x63reate_developer_api_token\x12\x33.minknow_api.manager.CreateDeveloperApiTokenRequest\x1a\x34.minknow_api.manager.CreateDeveloperApiTokenResponse\"\x03\x88\x02\x01\x12\x8d\x01\n\x1arevoke_developer_api_token\x12\x33.minknow_api.manager.RevokeDeveloperApiTokenRequest\x1a\x35.minknow_api.manager.RevokeDeveloperApiTokensResponse\"\x03\x88\x02\x01\x12m\n\x0e\x66ind_protocols\x12).minknow_api.manager.FindProtocolsRequest\x1a*.minknow_api.manager.FindProtocolsResponse\"\x04\x98\xb5\x18\x01\x12\x90\x01\n\x1alist_settings_for_protocol\x12\x33.minknow_api.manager.ListSettingsForProtocolRequest\x1a\x34.minknow_api.manager.ListSettingsForProtocolResponse\"\x07\x90\x02\x01\x98\xb5\x18\x01\x12j\n\x0cget_features\x12\'.minknow_api.manager.GetFeaturesRequest\x1a(.minknow_api.manager.GetFeaturesResponse\"\x07\x90\x02\x01\x98\xb5\x18\x01\x12g\n\x0cset_features\x12\'.minknow_api.manager.SetFeaturesRequest\x1a(.minknow_api.manager.SetFeaturesResponse\"\x04\x98\xb5\x18\x01\x12\x84\x01\n\x1crestart_device_admin_service\x12..minknow_api.manager.RestartDeviceAdminRequest\x1a/.minknow_api.manager.RestartDeviceAdminResponse\"\x03\x90\x02\x02\x12j\n\x0e\x63heck_bed_file\x12(.minknow_api.manager.CheckBedFileRequest\x1a).minknow_api.manager.CheckBedFileResponse\"\x03\x90\x02\x01\x42&\n\x1c\x63om.nanoporetech.minknow_api\xa2\x02\x05MKAPIb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -78,9 +78,9 @@ _globals['_MANAGERSERVICE'].methods_by_name['get_alignment_reference_information']._options = None _globals['_MANAGERSERVICE'].methods_by_name['get_alignment_reference_information']._serialized_options = b'\220\002\001' _globals['_MANAGERSERVICE'].methods_by_name['association_device_code']._options = None - _globals['_MANAGERSERVICE'].methods_by_name['association_device_code']._serialized_options = b'\220\002\001' + _globals['_MANAGERSERVICE'].methods_by_name['association_device_code']._serialized_options = b'\210\002\001\220\002\001' _globals['_MANAGERSERVICE'].methods_by_name['apply_offline_association_unlock_code']._options = None - _globals['_MANAGERSERVICE'].methods_by_name['apply_offline_association_unlock_code']._serialized_options = b'\220\002\002' + _globals['_MANAGERSERVICE'].methods_by_name['apply_offline_association_unlock_code']._serialized_options = b'\210\002\001\220\002\002' _globals['_MANAGERSERVICE'].methods_by_name['list_developer_api_tokens']._options = None _globals['_MANAGERSERVICE'].methods_by_name['list_developer_api_tokens']._serialized_options = b'\210\002\001\220\002\002' _globals['_MANAGERSERVICE'].methods_by_name['create_developer_api_token']._options = None @@ -97,200 +97,235 @@ _globals['_MANAGERSERVICE'].methods_by_name['set_features']._serialized_options = b'\230\265\030\001' _globals['_MANAGERSERVICE'].methods_by_name['restart_device_admin_service']._options = None _globals['_MANAGERSERVICE'].methods_by_name['restart_device_admin_service']._serialized_options = b'\220\002\002' - _globals['_SIMPLEPROTOCOLSTATE']._serialized_start=11530 - _globals['_SIMPLEPROTOCOLSTATE']._serialized_end=11666 - _globals['_SIMULATEDDEVICETYPE']._serialized_start=11669 - _globals['_SIMULATEDDEVICETYPE']._serialized_end=11799 - _globals['_EXPERIMENTTYPE']._serialized_start=11801 - _globals['_EXPERIMENTTYPE']._serialized_end=11907 + _globals['_MANAGERSERVICE'].methods_by_name['check_bed_file']._options = None + _globals['_MANAGERSERVICE'].methods_by_name['check_bed_file']._serialized_options = b'\220\002\001' + _globals['_SIMPLEPROTOCOLSTATE']._serialized_start=11739 + _globals['_SIMPLEPROTOCOLSTATE']._serialized_end=11875 + _globals['_SIMULATEDDEVICETYPE']._serialized_start=11877 + _globals['_SIMULATEDDEVICETYPE']._serialized_end=11990 + _globals['_EXPERIMENTTYPE']._serialized_start=11992 + _globals['_EXPERIMENTTYPE']._serialized_end=12098 _globals['_DESCRIBEHOSTREQUEST']._serialized_start=205 _globals['_DESCRIBEHOSTREQUEST']._serialized_end=226 _globals['_DESCRIBEHOSTRESPONSE']._serialized_start=229 - _globals['_DESCRIBEHOSTRESPONSE']._serialized_end=915 - _globals['_DESCRIBEHOSTRESPONSE_BASECALLERSUBSTRATE']._serialized_start=684 - _globals['_DESCRIBEHOSTRESPONSE_BASECALLERSUBSTRATE']._serialized_end=735 - _globals['_DESCRIBEHOSTRESPONSE_BASECALLINGAVAILABILITY']._serialized_start=738 - _globals['_DESCRIBEHOSTRESPONSE_BASECALLINGAVAILABILITY']._serialized_end=915 - _globals['_GETBASECALLERFEATURESREQUEST']._serialized_start=917 - _globals['_GETBASECALLERFEATURESREQUEST']._serialized_end=947 - _globals['_GETBASECALLERFEATURESRESPONSE']._serialized_start=949 - _globals['_GETBASECALLERFEATURESRESPONSE']._serialized_end=1044 - _globals['_FLOWCELLPOSITION']._serialized_start=1047 - _globals['_FLOWCELLPOSITION']._serialized_end=2038 - _globals['_FLOWCELLPOSITION_LOCATION']._serialized_start=1729 - _globals['_FLOWCELLPOSITION_LOCATION']._serialized_end=1761 - _globals['_FLOWCELLPOSITION_RPCPORTS']._serialized_start=1763 - _globals['_FLOWCELLPOSITION_RPCPORTS']._serialized_end=1814 - _globals['_FLOWCELLPOSITION_SHAREDHARDWAREGROUP']._serialized_start=1816 - _globals['_FLOWCELLPOSITION_SHAREDHARDWAREGROUP']._serialized_end=1855 - _globals['_FLOWCELLPOSITION_STATE']._serialized_start=1858 - _globals['_FLOWCELLPOSITION_STATE']._serialized_end=2038 - _globals['_FLOWCELLPOSITIONSREQUEST']._serialized_start=2040 - _globals['_FLOWCELLPOSITIONSREQUEST']._serialized_end=2066 - _globals['_FLOWCELLPOSITIONSRESPONSE']._serialized_start=2068 - _globals['_FLOWCELLPOSITIONSRESPONSE']._serialized_end=2174 - _globals['_WATCHFLOWCELLPOSITIONSREQUEST']._serialized_start=2176 - _globals['_WATCHFLOWCELLPOSITIONSREQUEST']._serialized_end=2207 - _globals['_WATCHFLOWCELLPOSITIONSRESPONSE']._serialized_start=2210 - _globals['_WATCHFLOWCELLPOSITIONSRESPONSE']._serialized_end=2374 - _globals['_RESETPOSITIONREQUEST']._serialized_start=2376 - _globals['_RESETPOSITIONREQUEST']._serialized_end=2432 - _globals['_RESETPOSITIONRESPONSE']._serialized_start=2434 - _globals['_RESETPOSITIONRESPONSE']._serialized_end=2457 - _globals['_BASECALLERAPIREQUEST']._serialized_start=2459 - _globals['_BASECALLERAPIREQUEST']._serialized_end=2481 - _globals['_BASECALLERAPIRESPONSE']._serialized_start=2483 - _globals['_BASECALLERAPIRESPONSE']._serialized_end=2547 - _globals['_GETGUPPYINFOREQUEST']._serialized_start=2549 - _globals['_GETGUPPYINFOREQUEST']._serialized_end=2570 - _globals['_GETGUPPYINFORESPONSE']._serialized_start=2572 - _globals['_GETGUPPYINFORESPONSE']._serialized_end=2666 - _globals['_GETVERSIONINFOREQUEST']._serialized_start=2668 - _globals['_GETVERSIONINFOREQUEST']._serialized_end=2691 - _globals['_LISTPROTOCOLOUTPUTDIRFILESREQUEST']._serialized_start=2693 - _globals['_LISTPROTOCOLOUTPUTDIRFILESREQUEST']._serialized_end=2742 - _globals['_LISTPROTOCOLOUTPUTDIRFILESRESPONSE']._serialized_start=2745 - _globals['_LISTPROTOCOLOUTPUTDIRFILESRESPONSE']._serialized_end=2993 - _globals['_LISTPROTOCOLOUTPUTDIRFILESRESPONSE_DIRECTORYINFO']._serialized_start=2919 - _globals['_LISTPROTOCOLOUTPUTDIRFILESRESPONSE_DIRECTORYINFO']._serialized_end=2993 - _globals['_CREATEDIRECTORYREQUEST']._serialized_start=2995 - _globals['_CREATEDIRECTORYREQUEST']._serialized_end=3054 - _globals['_CREATEDIRECTORYRESPONSE']._serialized_start=3056 - _globals['_CREATEDIRECTORYRESPONSE']._serialized_end=3095 - _globals['_FILESYSTEMDISKSPACEINFO']._serialized_start=3098 - _globals['_FILESYSTEMDISKSPACEINFO']._serialized_end=3361 - _globals['_GETDISKSPACEINFOREQUEST']._serialized_start=3363 - _globals['_GETDISKSPACEINFOREQUEST']._serialized_end=3388 - _globals['_STREAMDISKSPACEINFOREQUEST']._serialized_start=3390 - _globals['_STREAMDISKSPACEINFOREQUEST']._serialized_end=3434 - _globals['_GETDISKSPACEINFORESPONSE']._serialized_start=3436 - _globals['_GETDISKSPACEINFORESPONSE']._serialized_end=3544 - _globals['_GETBARCODEKITINFOREQUEST']._serialized_start=3546 - _globals['_GETBARCODEKITINFOREQUEST']._serialized_end=3572 - _globals['_GETBARCODEKITINFORESPONSE']._serialized_start=3575 - _globals['_GETBARCODEKITINFORESPONSE']._serialized_end=3871 - _globals['_GETBARCODEKITINFORESPONSE_BARCODEKITINFO']._serialized_start=3698 - _globals['_GETBARCODEKITINFORESPONSE_BARCODEKITINFO']._serialized_end=3753 - _globals['_GETBARCODEKITINFORESPONSE_BARCODEKITINFOENTRY']._serialized_start=3755 - _globals['_GETBARCODEKITINFORESPONSE_BARCODEKITINFOENTRY']._serialized_end=3871 - _globals['_GETLAMPKITINFOREQUEST']._serialized_start=3873 - _globals['_GETLAMPKITINFOREQUEST']._serialized_end=3896 - _globals['_GETLAMPKITINFORESPONSE']._serialized_start=3898 - _globals['_GETLAMPKITINFORESPONSE']._serialized_end=3941 - _globals['_GETBARCODEKEYSREQUEST']._serialized_start=3943 - _globals['_GETBARCODEKEYSREQUEST']._serialized_end=4016 - _globals['_GETBARCODEKEYSRESPONSE']._serialized_start=4018 - _globals['_GETBARCODEKEYSRESPONSE']._serialized_end=4106 - _globals['_GETFLOWCELLTYPESREQUEST']._serialized_start=4108 - _globals['_GETFLOWCELLTYPESREQUEST']._serialized_end=4133 - _globals['_GETFLOWCELLTYPESRESPONSE']._serialized_start=4136 - _globals['_GETFLOWCELLTYPESRESPONSE']._serialized_end=4356 - _globals['_GETFLOWCELLTYPESRESPONSE_INFO']._serialized_start=4231 - _globals['_GETFLOWCELLTYPESRESPONSE_INFO']._serialized_end=4356 - _globals['_GETSEQUENCINGKITSREQUEST']._serialized_start=4358 - _globals['_GETSEQUENCINGKITSREQUEST']._serialized_end=4416 - _globals['_GETSEQUENCINGKITSRESPONSE']._serialized_start=4419 - _globals['_GETSEQUENCINGKITSRESPONSE']._serialized_end=4917 - _globals['_GETSEQUENCINGKITSRESPONSE_KIT']._serialized_start=4619 - _globals['_GETSEQUENCINGKITSRESPONSE_KIT']._serialized_end=4870 - _globals['_GETSEQUENCINGKITSRESPONSE_BARCODINGEXPANSIONKIT']._serialized_start=4872 - _globals['_GETSEQUENCINGKITSRESPONSE_BARCODINGEXPANSIONKIT']._serialized_end=4917 - _globals['_ADDSIMULATEDDEVICEREQUEST']._serialized_start=4919 - _globals['_ADDSIMULATEDDEVICEREQUEST']._serialized_end=5028 - _globals['_ADDSIMULATEDDEVICERESPONSE']._serialized_start=5030 - _globals['_ADDSIMULATEDDEVICERESPONSE']._serialized_end=5058 - _globals['_REMOVESIMULATEDDEVICEREQUEST']._serialized_start=5060 - _globals['_REMOVESIMULATEDDEVICEREQUEST']._serialized_end=5110 - _globals['_REMOVESIMULATEDDEVICERESPONSE']._serialized_start=5112 - _globals['_REMOVESIMULATEDDEVICERESPONSE']._serialized_end=5143 - _globals['_LOCALAUTHENTICATIONTOKENPATHREQUEST']._serialized_start=5145 - _globals['_LOCALAUTHENTICATIONTOKENPATHREQUEST']._serialized_end=5182 - _globals['_LOCALAUTHENTICATIONTOKENPATHRESPONSE']._serialized_start=5184 - _globals['_LOCALAUTHENTICATIONTOKENPATHRESPONSE']._serialized_end=5236 - _globals['_GETALIGNMENTREFERENCEINFORMATIONREQUEST']._serialized_start=5238 - _globals['_GETALIGNMENTREFERENCEINFORMATIONREQUEST']._serialized_end=5293 - _globals['_GETALIGNMENTREFERENCEINFORMATIONRESPONSE']._serialized_start=5296 - _globals['_GETALIGNMENTREFERENCEINFORMATIONRESPONSE']._serialized_end=5541 - _globals['_ASSOCIATIONDEVICECODEREQUEST']._serialized_start=5543 - _globals['_ASSOCIATIONDEVICECODEREQUEST']._serialized_end=5611 - _globals['_ASSOCIATIONDEVICECODERESPONSE']._serialized_start=5613 - _globals['_ASSOCIATIONDEVICECODERESPONSE']._serialized_end=5658 - _globals['_APPLYOFFLINEASSOCIATIONUNLOCKCODEREQUEST']._serialized_start=5660 - _globals['_APPLYOFFLINEASSOCIATIONUNLOCKCODEREQUEST']._serialized_end=5746 - _globals['_APPLYOFFLINEASSOCIATIONUNLOCKCODERESPONSE']._serialized_start=5748 - _globals['_APPLYOFFLINEASSOCIATIONUNLOCKCODERESPONSE']._serialized_end=5811 - _globals['_LISTDEVELOPERAPITOKENSREQUEST']._serialized_start=5813 - _globals['_LISTDEVELOPERAPITOKENSREQUEST']._serialized_end=5844 - _globals['_LISTDEVELOPERAPITOKENSRESPONSE']._serialized_start=5847 - _globals['_LISTDEVELOPERAPITOKENSRESPONSE']._serialized_end=6057 - _globals['_LISTDEVELOPERAPITOKENSRESPONSE_DEVELOPERAPITOKEN']._serialized_start=5968 - _globals['_LISTDEVELOPERAPITOKENSRESPONSE_DEVELOPERAPITOKEN']._serialized_end=6057 - _globals['_CREATEDEVELOPERAPITOKENREQUEST']._serialized_start=6059 - _globals['_CREATEDEVELOPERAPITOKENREQUEST']._serialized_end=6149 - _globals['_CREATEDEVELOPERAPITOKENRESPONSE']._serialized_start=6151 - _globals['_CREATEDEVELOPERAPITOKENRESPONSE']._serialized_end=6211 - _globals['_REVOKEDEVELOPERAPITOKENREQUEST']._serialized_start=6213 - _globals['_REVOKEDEVELOPERAPITOKENREQUEST']._serialized_end=6257 - _globals['_REVOKEDEVELOPERAPITOKENSRESPONSE']._serialized_start=6259 - _globals['_REVOKEDEVELOPERAPITOKENSRESPONSE']._serialized_end=6293 - _globals['_FINDPROTOCOLSREQUEST']._serialized_start=6296 - _globals['_FINDPROTOCOLSREQUEST']._serialized_end=6436 - _globals['_FINDPROTOCOLSRESPONSE']._serialized_start=6439 - _globals['_FINDPROTOCOLSRESPONSE']._serialized_end=6640 - _globals['_FINDPROTOCOLSRESPONSE_PROTOCOL']._serialized_start=6536 - _globals['_FINDPROTOCOLSRESPONSE_PROTOCOL']._serialized_end=6640 - _globals['_LISTSETTINGSFORPROTOCOLREQUEST']._serialized_start=6643 - _globals['_LISTSETTINGSFORPROTOCOLREQUEST']._serialized_end=6881 - _globals['_LISTSETTINGSFORPROTOCOLRESPONSE']._serialized_start=6884 - _globals['_LISTSETTINGSFORPROTOCOLRESPONSE']._serialized_end=10864 - _globals['_LISTSETTINGSFORPROTOCOLRESPONSE_RUNOPTIONS']._serialized_start=7324 - _globals['_LISTSETTINGSFORPROTOCOLRESPONSE_RUNOPTIONS']._serialized_end=8177 - _globals['_LISTSETTINGSFORPROTOCOLRESPONSE_BASECALLING']._serialized_start=8180 - _globals['_LISTSETTINGSFORPROTOCOLRESPONSE_BASECALLING']._serialized_end=8963 - _globals['_LISTSETTINGSFORPROTOCOLRESPONSE_OUTPUT']._serialized_start=8966 - _globals['_LISTSETTINGSFORPROTOCOLRESPONSE_OUTPUT']._serialized_end=10864 - _globals['_FEATURE']._serialized_start=10866 - _globals['_FEATURE']._serialized_end=10892 - _globals['_FEATURELIST']._serialized_start=10895 - _globals['_FEATURELIST']._serialized_end=11124 - _globals['_GETFEATURESREQUEST']._serialized_start=11126 - _globals['_GETFEATURESREQUEST']._serialized_end=11146 - _globals['_GETFEATURESRESPONSE']._serialized_start=11149 - _globals['_GETFEATURESRESPONSE']._serialized_end=11371 - _globals['_GETFEATURESRESPONSE_STATE']._serialized_start=11287 - _globals['_GETFEATURESRESPONSE_STATE']._serialized_end=11371 - _globals['_SETFEATURESREQUEST']._serialized_start=11373 - _globals['_SETFEATURESREQUEST']._serialized_end=11445 - _globals['_SETFEATURESRESPONSE']._serialized_start=11447 - _globals['_SETFEATURESRESPONSE']._serialized_end=11468 - _globals['_RESTARTDEVICEADMINREQUEST']._serialized_start=11470 - _globals['_RESTARTDEVICEADMINREQUEST']._serialized_end=11497 - _globals['_RESTARTDEVICEADMINRESPONSE']._serialized_start=11499 - _globals['_RESTARTDEVICEADMINRESPONSE']._serialized_end=11527 - _globals['_MANAGERSERVICE']._serialized_start=11910 - _globals['_MANAGERSERVICE']._serialized_end=16074 -FindProtocolsRequest.__doc__ = """Attributes: - flow_cell_product_code: - Find protocols that are compatible with this flow cell product - code. Set to empty string to find protocols matching all flow - cell product codes. - sequencing_kit: - Limit to protocols that are compatible with this sequencing - kit. Set to empty string to find protocols matching all kits. - experiment_type: - Limit response to certain protocol types. + _globals['_DESCRIBEHOSTRESPONSE']._serialized_end=950 + _globals['_DESCRIBEHOSTRESPONSE_BASECALLERSUBSTRATE']._serialized_start=719 + _globals['_DESCRIBEHOSTRESPONSE_BASECALLERSUBSTRATE']._serialized_end=770 + _globals['_DESCRIBEHOSTRESPONSE_BASECALLINGAVAILABILITY']._serialized_start=773 + _globals['_DESCRIBEHOSTRESPONSE_BASECALLINGAVAILABILITY']._serialized_end=950 + _globals['_GETBASECALLERFEATURESREQUEST']._serialized_start=952 + _globals['_GETBASECALLERFEATURESREQUEST']._serialized_end=982 + _globals['_GETBASECALLERFEATURESRESPONSE']._serialized_start=984 + _globals['_GETBASECALLERFEATURESRESPONSE']._serialized_end=1079 + _globals['_FLOWCELLPOSITION']._serialized_start=1082 + _globals['_FLOWCELLPOSITION']._serialized_end=2102 + _globals['_FLOWCELLPOSITION_LOCATION']._serialized_start=1764 + _globals['_FLOWCELLPOSITION_LOCATION']._serialized_end=1796 + _globals['_FLOWCELLPOSITION_RPCPORTS']._serialized_start=1798 + _globals['_FLOWCELLPOSITION_RPCPORTS']._serialized_end=1849 + _globals['_FLOWCELLPOSITION_SHAREDHARDWAREGROUP']._serialized_start=1851 + _globals['_FLOWCELLPOSITION_SHAREDHARDWAREGROUP']._serialized_end=1890 + _globals['_FLOWCELLPOSITION_STATE']._serialized_start=1893 + _globals['_FLOWCELLPOSITION_STATE']._serialized_end=2102 + _globals['_FLOWCELLPOSITIONSREQUEST']._serialized_start=2104 + _globals['_FLOWCELLPOSITIONSREQUEST']._serialized_end=2130 + _globals['_FLOWCELLPOSITIONSRESPONSE']._serialized_start=2132 + _globals['_FLOWCELLPOSITIONSRESPONSE']._serialized_end=2238 + _globals['_WATCHFLOWCELLPOSITIONSREQUEST']._serialized_start=2240 + _globals['_WATCHFLOWCELLPOSITIONSREQUEST']._serialized_end=2271 + _globals['_WATCHFLOWCELLPOSITIONSRESPONSE']._serialized_start=2274 + _globals['_WATCHFLOWCELLPOSITIONSRESPONSE']._serialized_end=2438 + _globals['_RESETPOSITIONREQUEST']._serialized_start=2440 + _globals['_RESETPOSITIONREQUEST']._serialized_end=2496 + _globals['_RESETPOSITIONRESPONSE']._serialized_start=2498 + _globals['_RESETPOSITIONRESPONSE']._serialized_end=2521 + _globals['_BASECALLERAPIREQUEST']._serialized_start=2523 + _globals['_BASECALLERAPIREQUEST']._serialized_end=2545 + _globals['_BASECALLERAPIRESPONSE']._serialized_start=2547 + _globals['_BASECALLERAPIRESPONSE']._serialized_end=2611 + _globals['_GETGUPPYINFOREQUEST']._serialized_start=2613 + _globals['_GETGUPPYINFOREQUEST']._serialized_end=2634 + _globals['_GETGUPPYINFORESPONSE']._serialized_start=2636 + _globals['_GETGUPPYINFORESPONSE']._serialized_end=2730 + _globals['_GETVERSIONINFOREQUEST']._serialized_start=2732 + _globals['_GETVERSIONINFOREQUEST']._serialized_end=2755 + _globals['_LISTPROTOCOLOUTPUTDIRFILESREQUEST']._serialized_start=2757 + _globals['_LISTPROTOCOLOUTPUTDIRFILESREQUEST']._serialized_end=2806 + _globals['_LISTPROTOCOLOUTPUTDIRFILESRESPONSE']._serialized_start=2809 + _globals['_LISTPROTOCOLOUTPUTDIRFILESRESPONSE']._serialized_end=3057 + _globals['_LISTPROTOCOLOUTPUTDIRFILESRESPONSE_DIRECTORYINFO']._serialized_start=2983 + _globals['_LISTPROTOCOLOUTPUTDIRFILESRESPONSE_DIRECTORYINFO']._serialized_end=3057 + _globals['_CREATEDIRECTORYREQUEST']._serialized_start=3059 + _globals['_CREATEDIRECTORYREQUEST']._serialized_end=3118 + _globals['_CREATEDIRECTORYRESPONSE']._serialized_start=3120 + _globals['_CREATEDIRECTORYRESPONSE']._serialized_end=3159 + _globals['_FILESYSTEMDISKSPACEINFO']._serialized_start=3162 + _globals['_FILESYSTEMDISKSPACEINFO']._serialized_end=3425 + _globals['_GETDISKSPACEINFOREQUEST']._serialized_start=3427 + _globals['_GETDISKSPACEINFOREQUEST']._serialized_end=3452 + _globals['_STREAMDISKSPACEINFOREQUEST']._serialized_start=3454 + _globals['_STREAMDISKSPACEINFOREQUEST']._serialized_end=3498 + _globals['_GETDISKSPACEINFORESPONSE']._serialized_start=3500 + _globals['_GETDISKSPACEINFORESPONSE']._serialized_end=3608 + _globals['_GETBARCODEKITINFOREQUEST']._serialized_start=3610 + _globals['_GETBARCODEKITINFOREQUEST']._serialized_end=3636 + _globals['_GETBARCODEKITINFORESPONSE']._serialized_start=3639 + _globals['_GETBARCODEKITINFORESPONSE']._serialized_end=3935 + _globals['_GETBARCODEKITINFORESPONSE_BARCODEKITINFO']._serialized_start=3762 + _globals['_GETBARCODEKITINFORESPONSE_BARCODEKITINFO']._serialized_end=3817 + _globals['_GETBARCODEKITINFORESPONSE_BARCODEKITINFOENTRY']._serialized_start=3819 + _globals['_GETBARCODEKITINFORESPONSE_BARCODEKITINFOENTRY']._serialized_end=3935 + _globals['_GETLAMPKITINFOREQUEST']._serialized_start=3937 + _globals['_GETLAMPKITINFOREQUEST']._serialized_end=3960 + _globals['_GETLAMPKITINFORESPONSE']._serialized_start=3962 + _globals['_GETLAMPKITINFORESPONSE']._serialized_end=4005 + _globals['_GETBARCODEKEYSREQUEST']._serialized_start=4007 + _globals['_GETBARCODEKEYSREQUEST']._serialized_end=4080 + _globals['_GETBARCODEKEYSRESPONSE']._serialized_start=4082 + _globals['_GETBARCODEKEYSRESPONSE']._serialized_end=4170 + _globals['_GETFLOWCELLTYPESREQUEST']._serialized_start=4172 + _globals['_GETFLOWCELLTYPESREQUEST']._serialized_end=4197 + _globals['_GETFLOWCELLTYPESRESPONSE']._serialized_start=4200 + _globals['_GETFLOWCELLTYPESRESPONSE']._serialized_end=4420 + _globals['_GETFLOWCELLTYPESRESPONSE_INFO']._serialized_start=4295 + _globals['_GETFLOWCELLTYPESRESPONSE_INFO']._serialized_end=4420 + _globals['_GETSEQUENCINGKITSREQUEST']._serialized_start=4422 + _globals['_GETSEQUENCINGKITSREQUEST']._serialized_end=4480 + _globals['_GETSEQUENCINGKITSRESPONSE']._serialized_start=4483 + _globals['_GETSEQUENCINGKITSRESPONSE']._serialized_end=4981 + _globals['_GETSEQUENCINGKITSRESPONSE_KIT']._serialized_start=4683 + _globals['_GETSEQUENCINGKITSRESPONSE_KIT']._serialized_end=4934 + _globals['_GETSEQUENCINGKITSRESPONSE_BARCODINGEXPANSIONKIT']._serialized_start=4936 + _globals['_GETSEQUENCINGKITSRESPONSE_BARCODINGEXPANSIONKIT']._serialized_end=4981 + _globals['_ADDSIMULATEDDEVICEREQUEST']._serialized_start=4983 + _globals['_ADDSIMULATEDDEVICEREQUEST']._serialized_end=5092 + _globals['_ADDSIMULATEDDEVICERESPONSE']._serialized_start=5094 + _globals['_ADDSIMULATEDDEVICERESPONSE']._serialized_end=5122 + _globals['_REMOVESIMULATEDDEVICEREQUEST']._serialized_start=5124 + _globals['_REMOVESIMULATEDDEVICEREQUEST']._serialized_end=5174 + _globals['_REMOVESIMULATEDDEVICERESPONSE']._serialized_start=5176 + _globals['_REMOVESIMULATEDDEVICERESPONSE']._serialized_end=5207 + _globals['_LOCALAUTHENTICATIONTOKENPATHREQUEST']._serialized_start=5209 + _globals['_LOCALAUTHENTICATIONTOKENPATHREQUEST']._serialized_end=5246 + _globals['_LOCALAUTHENTICATIONTOKENPATHRESPONSE']._serialized_start=5248 + _globals['_LOCALAUTHENTICATIONTOKENPATHRESPONSE']._serialized_end=5300 + _globals['_GETALIGNMENTREFERENCEINFORMATIONREQUEST']._serialized_start=5302 + _globals['_GETALIGNMENTREFERENCEINFORMATIONREQUEST']._serialized_end=5357 + _globals['_GETALIGNMENTREFERENCEINFORMATIONRESPONSE']._serialized_start=5360 + _globals['_GETALIGNMENTREFERENCEINFORMATIONRESPONSE']._serialized_end=5605 + _globals['_ASSOCIATIONDEVICECODEREQUEST']._serialized_start=5607 + _globals['_ASSOCIATIONDEVICECODEREQUEST']._serialized_end=5675 + _globals['_ASSOCIATIONDEVICECODERESPONSE']._serialized_start=5677 + _globals['_ASSOCIATIONDEVICECODERESPONSE']._serialized_end=5722 + _globals['_APPLYOFFLINEASSOCIATIONUNLOCKCODEREQUEST']._serialized_start=5724 + _globals['_APPLYOFFLINEASSOCIATIONUNLOCKCODEREQUEST']._serialized_end=5810 + _globals['_APPLYOFFLINEASSOCIATIONUNLOCKCODERESPONSE']._serialized_start=5812 + _globals['_APPLYOFFLINEASSOCIATIONUNLOCKCODERESPONSE']._serialized_end=5875 + _globals['_LISTDEVELOPERAPITOKENSREQUEST']._serialized_start=5877 + _globals['_LISTDEVELOPERAPITOKENSREQUEST']._serialized_end=5908 + _globals['_LISTDEVELOPERAPITOKENSRESPONSE']._serialized_start=5911 + _globals['_LISTDEVELOPERAPITOKENSRESPONSE']._serialized_end=6121 + _globals['_LISTDEVELOPERAPITOKENSRESPONSE_DEVELOPERAPITOKEN']._serialized_start=6032 + _globals['_LISTDEVELOPERAPITOKENSRESPONSE_DEVELOPERAPITOKEN']._serialized_end=6121 + _globals['_CREATEDEVELOPERAPITOKENREQUEST']._serialized_start=6123 + _globals['_CREATEDEVELOPERAPITOKENREQUEST']._serialized_end=6213 + _globals['_CREATEDEVELOPERAPITOKENRESPONSE']._serialized_start=6215 + _globals['_CREATEDEVELOPERAPITOKENRESPONSE']._serialized_end=6275 + _globals['_REVOKEDEVELOPERAPITOKENREQUEST']._serialized_start=6277 + _globals['_REVOKEDEVELOPERAPITOKENREQUEST']._serialized_end=6321 + _globals['_REVOKEDEVELOPERAPITOKENSRESPONSE']._serialized_start=6323 + _globals['_REVOKEDEVELOPERAPITOKENSRESPONSE']._serialized_end=6357 + _globals['_FINDPROTOCOLSREQUEST']._serialized_start=6360 + _globals['_FINDPROTOCOLSREQUEST']._serialized_end=6500 + _globals['_FINDPROTOCOLSRESPONSE']._serialized_start=6503 + _globals['_FINDPROTOCOLSRESPONSE']._serialized_end=6704 + _globals['_FINDPROTOCOLSRESPONSE_PROTOCOL']._serialized_start=6600 + _globals['_FINDPROTOCOLSRESPONSE_PROTOCOL']._serialized_end=6704 + _globals['_LISTSETTINGSFORPROTOCOLREQUEST']._serialized_start=6707 + _globals['_LISTSETTINGSFORPROTOCOLREQUEST']._serialized_end=6945 + _globals['_LISTSETTINGSFORPROTOCOLRESPONSE']._serialized_start=6948 + _globals['_LISTSETTINGSFORPROTOCOLRESPONSE']._serialized_end=10928 + _globals['_LISTSETTINGSFORPROTOCOLRESPONSE_RUNOPTIONS']._serialized_start=7388 + _globals['_LISTSETTINGSFORPROTOCOLRESPONSE_RUNOPTIONS']._serialized_end=8241 + _globals['_LISTSETTINGSFORPROTOCOLRESPONSE_BASECALLING']._serialized_start=8244 + _globals['_LISTSETTINGSFORPROTOCOLRESPONSE_BASECALLING']._serialized_end=9027 + _globals['_LISTSETTINGSFORPROTOCOLRESPONSE_OUTPUT']._serialized_start=9030 + _globals['_LISTSETTINGSFORPROTOCOLRESPONSE_OUTPUT']._serialized_end=10928 + _globals['_FEATURE']._serialized_start=10930 + _globals['_FEATURE']._serialized_end=10956 + _globals['_FEATURELIST']._serialized_start=10959 + _globals['_FEATURELIST']._serialized_end=11188 + _globals['_GETFEATURESREQUEST']._serialized_start=11190 + _globals['_GETFEATURESREQUEST']._serialized_end=11210 + _globals['_GETFEATURESRESPONSE']._serialized_start=11213 + _globals['_GETFEATURESRESPONSE']._serialized_end=11435 + _globals['_GETFEATURESRESPONSE_STATE']._serialized_start=11351 + _globals['_GETFEATURESRESPONSE_STATE']._serialized_end=11435 + _globals['_SETFEATURESREQUEST']._serialized_start=11437 + _globals['_SETFEATURESREQUEST']._serialized_end=11509 + _globals['_SETFEATURESRESPONSE']._serialized_start=11511 + _globals['_SETFEATURESRESPONSE']._serialized_end=11532 + _globals['_RESTARTDEVICEADMINREQUEST']._serialized_start=11534 + _globals['_RESTARTDEVICEADMINREQUEST']._serialized_end=11561 + _globals['_RESTARTDEVICEADMINRESPONSE']._serialized_start=11563 + _globals['_RESTARTDEVICEADMINRESPONSE']._serialized_end=11591 + _globals['_CHECKBEDFILEREQUEST']._serialized_start=11593 + _globals['_CHECKBEDFILEREQUEST']._serialized_end=11696 + _globals['_CHECKBEDFILERESPONSE']._serialized_start=11698 + _globals['_CHECKBEDFILERESPONSE']._serialized_end=11736 + _globals['_MANAGERSERVICE']._serialized_start=12101 + _globals['_MANAGERSERVICE']._serialized_end=16379 +GetAlignmentReferenceInformationResponse.__doc__ = """Attributes: + estimated_load_time_seconds: + Estimated load time of the reference in seconds. + estimated_reference_size_bases: + Estimated size of the reference file in bases. + recommended_live_usage: + Does the reference file fit within the recommended live usage + memory size? This uses an estimate of how much memory a + reference may use when running in the basecaller and compares + to the amount of memory in the sequencer. It does not account + for whether the reference will run in real time. + recommended_adaptive_sampling_usage: + True if adaptive sampling is recommended based on reference + file size in bases, and device type Since 6.0 + max_recommended_adaptive_sampling_bases: + The maximum limit for adaptive sampling number of bases based + on device type Since 6.0 """ -FindProtocolsResponse.Protocol.__doc__ = """Attributes: - identifier: - An identifying string for protocol, of the form: - LOCATION:relative/path/to/protocol The identifier uniquely - identifies the protocol. - requires_flow_cell_product_code: - Whether the protocol requires a flow cell product code in - order to start. - requires_sequencing_kit: - Whether the protocol requires a sequencing kit in order to - start. +ListSettingsForProtocolResponse.__doc__ = """Attributes: + protocol_settings: + Any protocol settings not covered by the above structures, for + example those required for custom-scripts. +""" +GetBarcodeKeysResponse.__doc__ = """Attributes: + barcode_keys: + Returned barcode keys. + lamp_keys: + Returned lamp barcode ids. DEPRECATED 6.0: Lamp support has + been removed and this value will always be empty. + combined_keys: + Combined barcode and lamp keys. Returned keys are joined + strings of all requested barcode kits, giving the caller a + unique string to identify each barcode pair. eg. if both a + lamp kit + barcode kit are specified, NxM barcode keys are + returned: - barcode01_lamp01 - barcode01_lamp02 - + barcode01_lamp03 - barcode02_lamp01 - barcode02_lamp02 - + barcode02_lamp03 DEPRECATED 6.0: Lamp support has been + removed and this value will always be the same as + barcode_keys. +""" +CreateDirectoryRequest.__doc__ = """Attributes: + parent_path: + The path at which to create the directory. This must exist, + be a directory, and be within the protocol output directory. + This can be determined via calls to + list_protocol_output_dir_files(). + name: + The name of the directory to create. This must be a single + path component (ie: it cannot contain '/' or '\'). There may + be other restrictions on valid characters, depending on the + operating system. """ GetFlowCellTypesResponse.Info.__doc__ = """Information about a flow cell type. @@ -316,6 +351,72 @@ on the wire by allowing the common case of basecalling being possible to be omitted entirely). """ +GetSequencingKitsResponse.__doc__ = """Response message for `ManagerService.get_sequencing_kits`. + +Attributes: + kits: + The known sequencing kits. + barcoding_expansion_kits: + The possible barcoding expansion kits. These are kits that + can be used in combination with certain sequencing kits to add + (or extend) barcoding functionality. +""" +ApplyOfflineAssociationUnlockCodeRequest.__doc__ = """DEPRECATED: since 6.2 device association is no-longer required. + +Attributes: + position_name: + The flow cell position to unlock. This should be set (or not + set) to match the corresponding call to + `offline_association_device_code`. + unlock_code: + The unlock code provided by the user. This the code given by + the customer support portal when the corresponding device code + is entered into the device association page. +""" +GetAlignmentReferenceInformationRequest.__doc__ = """Attributes: + path: + The full path of the alignment reference. Should be a .fasta, + or .mmi file. +""" +BasecallerApiResponse.__doc__ = """Attributes: + secure: + The port to use to access the minknow_api.basecaller API using + the standard gRPC protocol over TLS + secure_grpc_web: + The port to use to access the minknow_api.basecaller API using + the gRPC-Web protocol over TLS +""" +CreateDirectoryResponse.__doc__ = """Attributes: + path: + The path to the created directory. +""" +ApplyOfflineAssociationUnlockCodeResponse.__doc__ = """DEPRECATED: since 6.2 device association is no-longer required. + +Attributes: + associated: + True if the association was successful (the unlock_code was + accepted), false otherwise. +""" +FeatureList.__doc__ = """Attributes: + feature_flags: + feature_flags is a special value If false, turns off all other + feature flags If true, allows individual flags to be enabled + and disabled +""" +ListDeveloperApiTokensResponse.DeveloperApiToken.__doc__ = """Attributes: + id: + Unique ID assigned to the token. + name: + User facing name describing the token (guaranteed unique + across tokens). + expiry: + Optional expiry of the token. +""" +RevokeDeveloperApiTokenRequest.__doc__ = """Attributes: + id: + The id passed back from [CreateDeveloperApiTokenRequest] or + [DeveloperApiToken]. +""" ListProtocolOutputDirFilesResponse.__doc__ = """Attributes: directories: List of sub-directories in the directory specified @@ -325,42 +426,108 @@ The absolute directory that is being listed within this response """ -GetBarcodeKitInfoResponse.__doc__ = """Attributes: - barcode_kit_info: - Map of barcode kit name to barcode kit info +FlowCellPosition.__doc__ = """Attributes: + name: + The name of the position. For MinIONs, this is the name of + the MinION (eg: MN12345). For integrated positions, this is + the label for the position on the sequencer (eg: X1 for + GridION, 1-A1-D1 for PromethION). + location: + For integrated flow cell positions, indicates where it is on + the sequencing unit. This information is not provided for + MinIONs (except for the MinION Mk1C, in which case the + position is always 0, 0). + state: + The state of the flow cell position. If the state is not + `STATE_RUNNING` or `STATE_INITIALISING`, the flow cell + position can be assumed to be unusable, and the `error_info` + field should be populated. + rpc_ports: + The ports the APIs for this flow cell position are provided + on. Always provided if `state` is `STATE_RUNNING`. May also + be provided when `state` is one of the hardware errors if the + software is still running. + error_info: + Provides a textual description of error states. When `state` + is not `STATE_INITIALISING`, `STATE_RUNNING` or + `STATE_RESETTING`, this provides some information (in English) + about the error. This will be a textual description of the + value in `state`, possibly with extra information about the + error (if available). This can be useful for dealing with + (new) unknown states. + shared_hardware_group: + Some positions may share hardware. Positions that share + hardware will have the same group-id. If positions do share + hardware, to reset the hardware you will need to reset all + positions in the group at the same time. + is_integrated: + Indicates that this is an integrated flow cell position. This + is true for the integrated positions on a PromethION, GridION + or MinION Mk1C, and false for a MinION Mk1B. Integrated + positions are always listed, even if (due to some hardware + error) they can't be found. They are never in + STATE_HARDWARE_REMOVED, and they always report a location. + Since 4.4 + can_sequence_offline: + Indicates that this position can sequence offline. For + integrated positions, this is the same as the corresponding + field returned from the describe_host RPC. + protocol_state: + Indicates the state of the last or current protocol on the + flow cell position. Since 5.0. + is_simulated: + Whether the device is simulated. If this is true, there is no + physical device - MinKNOW is simulating it. If it is false, + MinKNOW will be acquiring data from a real device. Since 5.2 + device_type: + The type of the device. Since 5.2 + parent_name: + The name of the device this flow cell position is part of. + For an integrated position, this will be the host serial, as + returned by describe_host(). For a MinION Mk1B, this will be + the same as the `name` field. For a P2 Solo, this will be the + name of the P2 Solo unit. Since 5.3 + firmware_is_updating: + Firmware is updating on the device and it should not be + unplugged. If the state is INITIALISING, this flag may be set + to true to indicate that the device's persistent memory is + being reprogrammed with new firmware. When this is the case, + the device should not be unplugged, as there is a small chance + this will cause the device to be rendered ununsable. It is + not set for devices that do not come with firmware pre-loaded + and have to have it loaded every time they are plugged in + (like the MinION Mk1B), as unplugging these devices during + firmware loading is fine. + has_progress: + Indicates the progress_percent field is being used. See that + field for more information. + progress_percent: + Indicates progress through the current state. This is + currently only used for long-running INITIALISING states, such + as when firmware is being updated. If it is being used, + has_progress will be true (which indicates it is sensible to + display a progress bar even if progress_percent is currently + 0). This field will always have values between 0 and 100 + (inclusive), and the value will increase over time. It is + intended for displaying a progress bar or similar. + progress_eta_seconds: + Indicates roughly how much time is remaining in this state. + If has_progress is true and this is non-zero, it will contain + an estimate of how much time is left in this state. Currently + it is only used for long-running INITIALISING states. If no + ETA can be calculated, this will be zero. Note that it is + always an estimate - it is recommended to round larger values, + like "about 2 minutes remaining". """ -AssociationDeviceCodeResponse.__doc__ = """Attributes: +AssociationDeviceCodeResponse.__doc__ = """DEPRECATED: since 6.2 device association is no-longer required. + +Attributes: code: The code required to associate the device with an account. If the request had `offline` set, this code is suitable for use in the customer portal offline association page. Otherwise, it is suitable for the online association APIs. """ -GetBarcodeKitInfoResponse.BarcodeKitInfo.__doc__ = """Attributes: - is_dual: - DEPRECATED 6.0: Dual barcoding support has been removed and - this value will always false. -""" -GetSequencingKitsRequest.__doc__ = """Request message for `ManagerService.get_sequencing_kits`. - -Attributes: - flow_cell_product_code: - The product code of the flow cell that will be used for - sequencing. Only kits compatible with this flow cell type - will be returned (currently, this means that there is at least - one (sequencing or control) protocol that is compatible with - both the kit and this flow cell product code). This may also - affect the returned information about the kit. For example, if - it isn't possible to basecall on the flow cell, none of the - kits will claim to be barcoding capable (or compatible with - any barcoding expansion kits). -""" -ListSettingsForProtocolResponse.Output.__doc__ = """Output - -Attributes: - read_filtering_min_duplex_qscore: - Since 5.8 -""" ListProtocolOutputDirFilesRequest.__doc__ = """Attributes: path: Specify the root path to list files from. If the path is left @@ -371,52 +538,79 @@ specified in the user config doesn't exist, then the NOT_FOUND error code will be returned """ -GetSequencingKitsResponse.Kit.__doc__ = """Information about a sequencing kit. - +FlowCellPositionsResponse.__doc__ = """Attributes: + total_count: + How many positions are available in total. This is the same + in every message returned from a single call, and allows the + caller to easily see how many further positions might be in + subsequent messages. + positions: + Known flow cell positions. Note that not all positions listed + here are necessarily available. In particular, integrated flow + cell positions (eg: on GridIONs or PromethIONs) will always be + listed. +""" +LocalAuthenticationTokenPathResponse.__doc__ = """Attributes: + path: + The full path of the local authentication token +""" +FindProtocolsResponse.__doc__ = """Attributes: + protocols: + Protocols available for starting. +""" +ListSettingsForProtocolResponse.Output.__doc__ = """Output + Attributes: - product_code: - The product code for the sequencing kit. This is the user- - visible name for the kit. It is the name used to order kits, - and is also displayed on the packaging. While most product - codes are 10-15 characters, be aware that longer (or shorter) - product codes can exist. Examples: "SQK-LSK109", "OND-SQK- - LP0096S". - barcoding_expansion_kits: - Compatible barcoding expansion kits. These are indexes into - the GetSequencingKitsResponse.barcoding_expansion_kits list. - For example, 0 would indicate the first kit in that list. The - values are guaranteed to be unique and valid indexes for that - list. - includes_barcoding: - Whether barcoding support is part of the sequencing kit. If - this is set, barcoding can be done without any expansion kits - (and, in fact, barcoding is an integral part of the kit). - lamp_kit: - Whether the kit can be used for LamPORE diagnostics. - DEPRECATED 6.0: Lamp support has been removed and this value - will always be false. - has_control_protocol: - Whether there is a "control" protocol available for this kit. - no_sequencing_protocol: - Indicates there is no sequencing protocol available for this - kit. This is an unusual situation. If a kit is known about, - it should generally have a sequencing protocol associated with - it, and it would be strange to have a control protocol - available but no sequencing protocol. - frequently_used: - Indicates that the sequencing kit is one of the most commonly - used ones. This can be used to display such kits first, or - otherwise highlight them in some way. - dna: - The kit can be used with DNA samples. - rna: - The kit can be used with RNA samples. - pcr: - The kit can be used with samples that have had PCR applied to - them. - pcr_free: - The kit can be used without a PCR step. + read_filtering_min_duplex_qscore: + Since 5.8 +""" +AddSimulatedDeviceRequest.__doc__ = """Attributes: + name: + The name of the position, this must be unique and the correct + format: For MinION Mk1B and Mk1C: "MS" followed by five + digits, eg: "MS12345". For GridION: "GS" followed by five + digits, eg: "GS12345". For P2 Solo: "P2S_" followed by five + digits, and then "-A" or "-B" eg: "P2S_12345-A". PromethION + and P2 Solo position-names have no format restriction, but + must be unique. It is strongly recommended to follow standard + naming conventions: For PromethION: start with "1A" and then + increase the number and/or the letter as you add more + positions. For P2 Solo: use "P2S_00000-A" and "P2S_00000-B" + (these fit the format of real P2 Solo devices, but do not + correspond to any real device). Future versions might + constrain PromethION and P2 Solo device names. Using the above + suggestions should ensure that your code will continue to + work. Note that MinKNOW Core 5.5 and earlier required the P2 + Solo device name to be "P2S" followed by four digits. This is + no longer recommended. + type: + The type of the simulated device to create. If left at + default (AUTO), then a sensible default device type is + selected. +""" +RemoveSimulatedDeviceRequest.__doc__ = """Attributes: + name: + The name of the simulated device to be removed +""" +GetSequencingKitsRequest.__doc__ = """Request message for `ManagerService.get_sequencing_kits`. + +Attributes: + flow_cell_product_code: + The product code of the flow cell that will be used for + sequencing. Only kits compatible with this flow cell type + will be returned (currently, this means that there is at least + one (sequencing or control) protocol that is compatible with + both the kit and this flow cell product code). This may also + affect the returned information about the kit. For example, if + it isn't possible to basecall on the flow cell, none of the + kits will claim to be barcoding capable (or compatible with + any barcoding expansion kits). +""" +Feature.__doc__ = """Attributes: + enabled: + Enable or disable the feature """ +GetLampKitInfoRequest.__doc__ = """DEPRECATED 6.0: Lamp support has been removed.""" ListSettingsForProtocolRequest.__doc__ = """Attributes: identifier: specify the protocol with a string containing all the @@ -434,33 +628,51 @@ get_flow_cell_types rpc in this service and the get_device_state rpc in the device service. """ -GetLampKitInfoRequest.__doc__ = """DEPRECATED 6.0: Lamp support has been removed.""" -GetAlignmentReferenceInformationRequest.__doc__ = """Attributes: - path: - The full path of the alignment reference. Should be a .fasta, - or .mmi file. -""" -ApplyOfflineAssociationUnlockCodeRequest.__doc__ = """Attributes: - position_name: - The flow cell position to unlock. This should be set (or not - set) to match the corresponding call to - `offline_association_device_code`. - unlock_code: - The unlock code provided by the user. This the code given by - the customer support portal when the corresponding device code - is entered into the device association page. +ListSettingsForProtocolResponse.RunOptions.__doc__ = """Run options + +Attributes: + active_channel_selection: + bool + mux_scan_period: + in hours """ -LocalAuthenticationTokenPathResponse.__doc__ = """Attributes: - path: - The full path of the local authentication token +FilesystemDiskSpaceInfo.__doc__ = """disk-usage information for one file-system + +Attributes: + filesystem_id: + The name of the file-system + bytes_available: + How much space is left on the file-system + bytes_capacity: + The total capacity of the file-system when empty. + what: + A list of what MinKNOW stores on this file-system, eg: reads, + logs, intermediate-files + bytes_to_stop_cleanly: + MinKNOW needs this much space to stop experiments. If + bytes_available goes below this number, data could be lost! + bytes_when_alert_issued: + The amount of space left on the file-system when + recommend_alert was set true. + recommend_alert: + MinKNOW recommends that you alert someone about the disk-usage + recommend_stop: + MinKNOW recommends that you stop experiments due to disk-usage + concerns + bytes_per_second: + Rate of change in bytes_available (per second) +'ve numbers + indicate that bytes_available is decreasing and space is being + used A value of 0 can indicate that this has not applicable or + not available. + file_types_stored: + A list of what types of file MinKNOW stores on this file- + system, eg: reads, logs, intermediate-files, etc. """ -CreateDeveloperApiTokenResponse.__doc__ = """Attributes: - id: - Unique ID assigned to the token for identification purposes. - Not valid as an authentication token. - token: - Created token, available to be used with minknow API's - immediately. +GetBasecallerFeaturesResponse.__doc__ = """Attributes: + is_live_basecalling_with_adaptive_sampling_recommended: + Is live basecalling with adaptive sampling recommended on this + hardware Currently not recommended for Apple or Mk1C Since + 5.9 """ DescribeHostResponse.__doc__ = """Attributes: product_code: @@ -493,7 +705,7 @@ The network name of the host. This is the name the host system believes it has on the network. This can be useful if an IP address was used to connect to the RPC system. For - customer computers, this is the only available identfying + customer computers, this is the only available identifying information for the system. needs_association: This device has not been associated with an account. @@ -505,13 +717,19 @@ sequencing units (eg: the MinION Mk1B) may require their own association (in which case they will individually report as ``STATE_NEEDS_ASSOCIATION`` - see the `flow_cell_positions` - RPC). Since 4.4 + RPC). Since 4.4 DEPRECATED since 6.2 device association is + no-longer required, this will always be false. can_sequence_offline: Whether the device can sequence while offline. Not all sequencing devices can sequence without an internet connection. This indicates whether it is possible for the integrated sequencing positions. Note that this will only be set if `needs_association` is true. Since 4.4 + can_connect_to_usb_device: + Whether or not the host system can connect to a USB sequencer. + This is true on all systems except iOS where it is true if and + only if the driver that is shipped with the app has been + enabled in system settings. Since 6.1 can_basecall: Whether the device can currently provide basecalling current_basecalling_hardware: @@ -522,130 +740,35 @@ be made, this field provides the details of those options. Typically this will be a list of 'unused' GPUs. """ -GetSequencingKitsResponse.__doc__ = """Response message for `ManagerService.get_sequencing_kits`. +GetLampKitInfoResponse.__doc__ = """DEPRECATED 6.0: Lamp support has been removed and this response will +always be empty. Attributes: - kits: - The known sequencing kits. - barcoding_expansion_kits: - The possible barcoding expansion kits. These are kits that - can be used in combination with certain sequencing kits to add - (or extend) barcoding functionality. + lamp_kits: + Lamp kit names """ -FlowCellPosition.Location.__doc__ = """Attributes: - x: - The column (counting from 0, left-to-right) of the flow cell - position on the sequencing unit when viewed from above/in - front. - y: - The row (counting from 0, top-to-bottom) of the flow cell - position on the sequencing unit when viewed from above/in - front. +GetBarcodeKeysRequest.__doc__ = """Attributes: + barcode_kit_names: + Names of barcode kits to obtain barcode names for Fails with + INVALID_ARGUMENT if any of the requested `barcode_kit_names` + are unavailable + lamp_kit_name: + Name of lamp kit to obtain barcode names for. Fails with + INVALID_ARGUMENT if the requested `lamp_kit_name` is + unavailable. DEPRECATED 6.0: Lamp support has been removed + and this option will be ignored. """ -FilesystemDiskSpaceInfo.__doc__ = """disk-usage information for one file-system +FlowCellPosition.RpcPorts.__doc__ = """Attributes: + secure: + A port providing the standard gRPC protocol over TLS + secure_grpc_web: + A port providing the gRPC-Web protocol over TLS +""" +GetFlowCellTypesResponse.__doc__ = """Response message for `ManagerService.get_flow_cell_types`. Attributes: - filesystem_id: - The name of the file-system - bytes_available: - How much space is left on the file-system - bytes_capacity: - The total capacity of the file-system when empty. - what: - A list of what MinKNOW stores on this file-system, eg: reads, - logs, intermediate-files - bytes_to_stop_cleanly: - MinKNOW needs this much space to stop experiments. If - bytes_available goes below this number, data could be lost! - bytes_when_alert_issued: - The amount of space left on the file-system when - recommend_alert was set true. - recommend_alert: - MinKNOW recommends that you alert someone about the disk-usage - recommend_stop: - MinKNOW recommends that you stop experiments due to disk-usage - concerns - bytes_per_second: - Rate of change in bytes_available (per second) +'ve numbers - indicate that bytes_available is decreasing and space is being - used A value of 0 can indicate that this has not applicable or - not available. - file_types_stored: - A list of what types of file MinKNOW stores on this file- - system, eg: reads, logs, intermediate-files, etc. -""" -AddSimulatedDeviceRequest.__doc__ = """Attributes: - name: - The name of the position, this must be unique and the correct - format: For MinION Mk1B and Mk1C: "MS" followed by five - digits, eg: "MS12345". For GridION: "GS" followed by five - digits, eg: "GS12345". For P2 Solo: "P2S_" followed by five - digits, and then "-A" or "-B" eg: "P2S_12345-A". PromethION - and P2 Solo position-names have no format restriction, but - must be unique. It is strongly recommended to follow standard - naming conventions: For PromethION: start with "1A" and then - increase the number and/or the letter as you add more - positions. For P2 Solo: use "P2S_00000-A" and "P2S_00000-B" - (these fit the format of real P2 Solo devices, but do not - correspond to any real device). Future versions might - constrain PromethION and P2 Solo device names. Using the above - suggestions should ensure that your code will continue to - work. Note that MinKNOW Core 5.5 and earlier required the P2 - Solo device name to be "P2S" followed by four digits. This is - no longer recommended. - type: - The type of the simulated device to create. If left at - default (AUTO), then a sensible default device type is - selected. -""" -FlowCellPositionsResponse.__doc__ = """Attributes: - total_count: - How many positions are available in total. This is the same - in every message returned from a single call, and allows the - caller to easily see how many further positions might be in - subsequent messages. - positions: - Known flow cell positions. Note that not all positions listed - here are necessarily available. In particular, integrated flow - cell positions (eg: on GridIONs or PromethIONs) will always be - listed. -""" -WatchFlowCellPositionsResponse.__doc__ = """Each flow cell position will first be listed in `additions`. After -that, it may appear in `changes` in zero or more messages. Then, it -may appear in `removals` once, after which it will either never appear -again, or appear in `additions` again (restarting the cycle). No -position will ever appear in more than one field in the same response -message. - -Attributes: - additions: - Flow cell positions that are new (to this call). Contains - flow cell positions that have not been seen before on this - call (or have re-appeared after being removed). Note that a - flow cell position being listed here does not mean it is - available. In particular, integrated flow cell positions (eg: - on GridIONs or PromethIONs) will always be provided, so that - they can be positioned appropriately. - changes: - Flow cell positions that have changed state. Every flow cell - position provided in this list will have previously been - provided in `additions`. - removals: - A flow cell position has been removed. Note that this can - only happen with MinIONs - integrated flow cell positions are - never removed (if they become unavailable, this will be noted - in the `changes` field). -""" -GetBarcodeKeysRequest.__doc__ = """Attributes: - barcode_kit_names: - Names of barcode kits to obtain barcode names for Fails with - INVALID_ARGUMENT if any of the requested `barcode_kit_names` - are unavailable - lamp_kit_name: - Name of lamp kit to obtain barcode names for. Fails with - INVALID_ARGUMENT if the requested `lamp_kit_name` is - unavailable. DEPRECATED 6.0: Lamp support has been removed - and this option will be ignored. + types: + The flow cell types. """ ResetPositionRequest.__doc__ = """Attributes: positions: @@ -654,83 +777,6 @@ Force the software to be restarted even when it appears to be in a healthy state (ie: STATE_RUNNING). """ -CreateDirectoryResponse.__doc__ = """Attributes: - path: - The path to the created directory. -""" -RevokeDeveloperApiTokenRequest.__doc__ = """Attributes: - id: - The id passed back from [CreateDeveloperApiTokenRequest] or - [DeveloperApiToken]. -""" -ListDeveloperApiTokensResponse.DeveloperApiToken.__doc__ = """Attributes: - id: - Unique ID assigned to the token. - name: - User facing name describing the token (guaranteed unique - across tokens). - expiry: - Optional expiry of the token. -""" -GetSequencingKitsResponse.BarcodingExpansionKit.__doc__ = """Information about a barcoding expansion kit. In the future, this may -include compatibility information for dual barcoding, for example. - -Attributes: - product_code: - The product code for the barcoding expansion kit. This is the - user-visible name for the kit. It is the name used to order - kits, and is also displayed on the packaging. While most - product codes are 10 characters, be aware that longer product - codes can exist. Example: "EXP-NBD104". -""" -GetBasecallerFeaturesResponse.__doc__ = """Attributes: - is_live_basecalling_with_adaptive_sampling_recommended: - Is live basecalling with adaptive sampling recommended on this - hardware Currently not recommended for Apple or Mk1C Since - 5.9 -""" -ListSettingsForProtocolResponse.__doc__ = """Attributes: - protocol_settings: - Any protocol settings not covered by the above structures, for - example those required for custom-scripts. -""" -GetBarcodeKeysResponse.__doc__ = """Attributes: - barcode_keys: - Returned barcode keys. - lamp_keys: - Returned lamp barcode ids. DEPRECATED 6.0: Lamp support has - been removed and this value will always be empty. - combined_keys: - Combined barcode and lamp keys. Returned keys are joined - strings of all requested barcode kits, giving the caller a - unique string to identify each barcode pair. eg. if both a - lamp kit + barcode kit are specified, NxM barcode keys are - returned: - barcode01_lamp01 - barcode01_lamp02 - - barcode01_lamp03 - barcode02_lamp01 - barcode02_lamp02 - - barcode02_lamp03 DEPRECATED 6.0: Lamp support has been - removed and this value will always be the same as - barcode_keys. -""" -FlowCellPosition.RpcPorts.__doc__ = """Attributes: - secure: - A port providing the standard gRPC protocol over TLS - secure_grpc_web: - A port providing the gRPC-Web protocol over TLS -""" -GetFlowCellTypesRequest.__doc__ = """Request message for `ManagerService.get_flow_cell_types`.""" -ApplyOfflineAssociationUnlockCodeResponse.__doc__ = """Attributes: - associated: - True if the association was successful (the unlock_code was - accepted), false otherwise. -""" -BasecallerApiResponse.__doc__ = """Attributes: - secure: - The port to use to access the minknow_api.basecaller API using - the standard gRPC protocol over TLS - secure_grpc_web: - The port to use to access the minknow_api.basecaller API using - the gRPC-Web protocol over TLS -""" DescribeHostResponse.BasecallerSubstrate.__doc__ = """Details about the hardware on which basecalling may be run. Attributes: @@ -744,108 +790,53 @@ field being empty _does not_ imply that CPU basecalling is in use. """ -FlowCellPosition.__doc__ = """Attributes: - name: - The name of the position. For MinIONs, this is the name of - the MinION (eg: MN12345). For integrated positions, this is - the label for the position on the sequencer (eg: X1 for - GridION, 1-A1-D1 for PromethION). - location: - For integrated flow cell positions, indicates where it is on - the sequencing unit. This information is not provided for - MinIONs (except for the MinION Mk1C, in which case the - position is always 0, 0). - state: - The state of the flow cell position. If the state is not - `STATE_RUNNING` or `STATE_INITIALISING`, the flow cell - position can be assumed to be unusable, and the `error_info` - field should be populated. - rpc_ports: - The ports the APIs for this flow cell position are provided - on. Always provided if `state` is `STATE_RUNNING`. May also - be provided when `state` is one of the hardware errors if the - software is still running. - error_info: - Provides a textual description of error states. When `state` - is not `STATE_INITIALISING`, `STATE_RUNNING` or - `STATE_RESETTING`, this provides some information (in English) - about the error. This will be a textual description of the - value in `state`, possibly with extra information about the - error (if available). This can be useful for dealing with - (new) unknown states. - shared_hardware_group: - Some positions may share hardware. Positions that share - hardware will have the same group-id. If positions do share - hardware, to reset the hardware you will need to reset all - positions in the group at the same time. - is_integrated: - Indicates that this is an integrated flow cell position. This - is true for the integrated positions on a PromethION, GridION - or MinION Mk1C, and false for a MinION Mk1B. Integrated - positions are always listed, even if (due to some hardware - error) they can't be found. They are never in - STATE_HARDWARE_REMOVED, and they always report a location. - Additionally, integrated positions cannot be associated - independently - if they are in STATE_NEEDS_ASSOCIATION, then - the host as a whole needs associating. Likewise, either all - integrated positions can run offline, or none of them can. - Since 4.4 - can_sequence_offline: - Indicates that this position can sequence offline. For - integrated positions, this is the same as the corresponding - field returned from the describe_host RPC. - protocol_state: - Indicates the state of the last or current protocol on the - flow cell position. Since 5.0. - is_simulated: - Whether the device is simulated. If this is true, there is no - physical device - MinKNOW is simulating it. If it is false, - MinKNOW will be acquiring data from a real device. Since 5.2 - device_type: - The type of the device. Since 5.2 - parent_name: - The name of the device this flow cell position is part of. - For an integrated position, this will be the host serial, as - returned by describe_host(). For a MinION Mk1B, this will be - the same as the `name` field. For a P2 Solo, this will be the - name of the P2 Solo unit. Since 5.3 - firmware_is_updating: - Firmware is updating on the device and it should not be - unplugged. If the state is INITIALISING, this flag may be set - to true to indicate that the device's persistent memory is - being reprogrammed with new firmware. When this is the case, - the device should not be unplugged, as there is a small chance - this will cause the device to be rendered ununsable. It is - not set for devices that do not come with firmware pre-loaded - and have to have it loaded every time they are plugged in - (like the MinION Mk1B), as unplugging these devices during - firmware loading is fine. - has_progress: - Indicates the progress_percent field is being used. See that - field for more information. - progress_percent: - Indicates progress through the current state. This is - currently only used for long-running INITIALISING states, such - as when firmware is being updated. If it is being used, - has_progress will be true (which indicates it is sensible to - display a progress bar even if progress_percent is currently - 0). This field will always have values between 0 and 100 - (inclusive), and the value will increase over time. It is - intended for displaying a progress bar or similar. - progress_eta_seconds: - Indicates roughly how much time is remaining in this state. - If has_progress is true and this is non-zero, it will contain - an estimate of how much time is left in this state. Currently - it is only used for long-running INITIALISING states. If no - ETA can be calculated, this will be zero. Note that it is - always an estimate - it is recommended to round larger values, - like "about 2 minutes remaining". +FindProtocolsResponse.Protocol.__doc__ = """Attributes: + identifier: + An identifying string for protocol, of the form: + LOCATION:relative/path/to/protocol The identifier uniquely + identifies the protocol. + requires_flow_cell_product_code: + Whether the protocol requires a flow cell product code in + order to start. + requires_sequencing_kit: + Whether the protocol requires a sequencing kit in order to + start. """ -FeatureList.__doc__ = """Attributes: - feature_flags: - feature_flags is a special value If false, turns off all - other feature flags If true, allows individual flags to be - enabled and disabled +CheckBedFileRequest.__doc__ = """Attributes: + bed_file_path: + The path to the BED file to validate + index_file_path: + The path to the index file that the BED file should validate + against Can be a .fasta, .fai or .mmi file + strict: + Strictly conforms to the BED file specification and allows + both tabs and spaces to be used as delimiters between columns + stranded: + Check strand values are allowed +""" +GetBarcodeKitInfoResponse.BarcodeKitInfo.__doc__ = """Attributes: + is_dual: + DEPRECATED 6.0: Dual barcoding support has been removed and + this value will always false. +""" +GetSequencingKitsResponse.BarcodingExpansionKit.__doc__ = """Information about a barcoding expansion kit. In the future, this may +include compatibility information for dual barcoding, for example. + +Attributes: + product_code: + The product code for the barcoding expansion kit. This is the + user-visible name for the kit. It is the name used to order + kits, and is also displayed on the packaging. While most + product codes are 10 characters, be aware that longer product + codes can exist. Example: "EXP-NBD104". +""" +CreateDeveloperApiTokenResponse.__doc__ = """Attributes: + id: + Unique ID assigned to the token for identification purposes. + Not valid as an authentication token. + token: + Created token, available to be used with minknow API's + immediately. """ CreateDeveloperApiTokenRequest.__doc__ = """Attributes: name: @@ -853,39 +844,26 @@ expiry: Optional expiry time for the token. """ -GetAlignmentReferenceInformationResponse.__doc__ = """Attributes: - estimated_load_time_seconds: - Estimated load time of the reference in seconds. - estimated_reference_size_bases: - Estimated size of the reference file in bases. - recommended_live_usage: - Does the reference file fit within the recommended live usage - memory size? This uses an estimate of how much memory a - reference may use when running in the basecaller and compares - to the amount of memory in the sequencer. It does not account - for whether the reference will run in real time. - recommended_adaptive_sampling_usage: - True if adaptive sampling is recommended based on reference - file size in bases, and device type Since 6.0 - max_recommended_adaptive_sampling_bases: - The maximum limit for adaptive sampling number of bases based - on device type Since 6.0 -""" -FindProtocolsResponse.__doc__ = """Attributes: - protocols: - Protocols available for starting. -""" -ListSettingsForProtocolResponse.RunOptions.__doc__ = """Run options - -Attributes: - active_channel_selection: - bool - mux_scan_period: - in hours +FindProtocolsRequest.__doc__ = """Attributes: + flow_cell_product_code: + Find protocols that are compatible with this flow cell product + code. Set to empty string to find protocols matching all flow + cell product codes. + sequencing_kit: + Limit to protocols that are compatible with this sequencing + kit. Set to empty string to find protocols matching all kits. + experiment_type: + Limit response to certain protocol types. """ -Feature.__doc__ = """Attributes: - enabled: - Enable or disable the feature +FlowCellPosition.Location.__doc__ = """Attributes: + x: + The column (counting from 0, left-to-right) of the flow cell + position on the sequencing unit when viewed from above/in + front. + y: + The row (counting from 0, top-to-bottom) of the flow cell + position on the sequencing unit when viewed from above/in + front. """ GetGuppyInfoResponse.__doc__ = """Attributes: port: @@ -896,11 +874,51 @@ version: The basecaller server version. """ -GetFlowCellTypesResponse.__doc__ = """Response message for `ManagerService.get_flow_cell_types`. +GetSequencingKitsResponse.Kit.__doc__ = """Information about a sequencing kit. Attributes: - types: - The flow cell types. + product_code: + The product code for the sequencing kit. This is the user- + visible name for the kit. It is the name used to order kits, + and is also displayed on the packaging. While most product + codes are 10-15 characters, be aware that longer (or shorter) + product codes can exist. Examples: "SQK-LSK109", "OND-SQK- + LP0096S". + barcoding_expansion_kits: + Compatible barcoding expansion kits. These are indexes into + the GetSequencingKitsResponse.barcoding_expansion_kits list. + For example, 0 would indicate the first kit in that list. The + values are guaranteed to be unique and valid indexes for that + list. + includes_barcoding: + Whether barcoding support is part of the sequencing kit. If + this is set, barcoding can be done without any expansion kits + (and, in fact, barcoding is an integral part of the kit). + lamp_kit: + Whether the kit can be used for LamPORE diagnostics. + DEPRECATED 6.0: Lamp support has been removed and this value + will always be false. + has_control_protocol: + Whether there is a "control" protocol available for this kit. + no_sequencing_protocol: + Indicates there is no sequencing protocol available for this + kit. This is an unusual situation. If a kit is known about, + it should generally have a sequencing protocol associated with + it, and it would be strange to have a control protocol + available but no sequencing protocol. + frequently_used: + Indicates that the sequencing kit is one of the most commonly + used ones. This can be used to display such kits first, or + otherwise highlight them in some way. + dna: + The kit can be used with DNA samples. + rna: + The kit can be used with RNA samples. + pcr: + The kit can be used with samples that have had PCR applied to + them. + pcr_free: + The kit can be used without a PCR step. """ StreamDiskSpaceInfoRequest.__doc__ = """Attributes: period: @@ -908,29 +926,7 @@ determining the period in seconds between updates. A period of 0 is invalid """ -GetLampKitInfoResponse.__doc__ = """DEPRECATED 6.0: Lamp support has been removed and this response will -always be empty. - -Attributes: - lamp_kits: - Lamp kit names -""" -CreateDirectoryRequest.__doc__ = """Attributes: - parent_path: - The path at which to create the directory. This must exist, - be a directory, and be within the protocol output directory. - This can be determined via calls to - list_protocol_output_dir_files(). - name: - The name of the directory to create. This must be a single - path component (ie: it cannot contain '/' or '\'). There may - be other restrictions on valid characters, depending on the - operating system. -""" -RemoveSimulatedDeviceRequest.__doc__ = """Attributes: - name: - The name of the simulated device to be removed -""" +GetFlowCellTypesRequest.__doc__ = """Request message for `ManagerService.get_flow_cell_types`.""" AssociationDeviceCodeRequest.__doc__ = """Offline association is now the default workflow The following are therefore reserved/deprecated @@ -945,4 +941,34 @@ field set to true. Passing a integrated flow cell position will return the code/key for the whole sequencing device. """ +GetBarcodeKitInfoResponse.__doc__ = """Attributes: + barcode_kit_info: + Map of barcode kit name to barcode kit info +""" +WatchFlowCellPositionsResponse.__doc__ = """Each flow cell position will first be listed in `additions`. After +that, it may appear in `changes` in zero or more messages. Then, it +may appear in `removals` once, after which it will either never appear +again, or appear in `additions` again (restarting the cycle). No +position will ever appear in more than one field in the same response +message. + +Attributes: + additions: + Flow cell positions that are new (to this call). Contains + flow cell positions that have not been seen before on this + call (or have re-appeared after being removed). Note that a + flow cell position being listed here does not mean it is + available. In particular, integrated flow cell positions (eg: + on GridIONs or PromethIONs) will always be provided, so that + they can be positioned appropriately. + changes: + Flow cell positions that have changed state. Every flow cell + position provided in this list will have previously been + provided in `additions`. + removals: + A flow cell position has been removed. Note that this can + only happen with MinIONs - integrated flow cell positions are + never removed (if they become unavailable, this will be noted + in the `changes` field). +""" # @@protoc_insertion_point(module_scope) diff --git a/python/minknow_api/manager_pb2_grpc.py b/python/minknow_api/manager_pb2_grpc.py index c22f61b..f6d03f7 100644 --- a/python/minknow_api/manager_pb2_grpc.py +++ b/python/minknow_api/manager_pb2_grpc.py @@ -175,6 +175,11 @@ def __init__(self, channel): request_serializer=minknow__api_dot_manager__pb2.RestartDeviceAdminRequest.SerializeToString, response_deserializer=minknow__api_dot_manager__pb2.RestartDeviceAdminResponse.FromString, ) + self.check_bed_file = channel.unary_unary( + '/minknow_api.manager.ManagerService/check_bed_file', + request_serializer=minknow__api_dot_manager__pb2.CheckBedFileRequest.SerializeToString, + response_deserializer=minknow__api_dot_manager__pb2.CheckBedFileResponse.FromString, + ) class ManagerServiceServicer(object): @@ -480,13 +485,7 @@ def get_alignment_reference_information(self, request, context): def association_device_code(self, request, context): """Get the device code/key for association. - This can be used to either get the code that the user must enter into the customer support - portal to associate the device with their account, or the key used for online association. - - Errors: - INVALID_ARGUMENT: The requested flow cell position does not exist. - - Since 4.4 + DEPRECATED since 6.2 device association is no-longer required. This RPC will return UNIMPLEMENTED. """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') @@ -495,21 +494,7 @@ def association_device_code(self, request, context): def apply_offline_association_unlock_code(self, request, context): """Apply the unlock code for offline association. - This is the code that the user receives from the customer support portal after entering the - device code for this device (see `offline_association_device_code`). - - This is only required if either `describe_host` indicates that the device as a whole needs - association, or `flow_cell_positions` indicates that a particular positions needs it. - - Errors: - INVALID_ARGUMENT: The requested flow cell position does not exist, or no unlock code - was provided. - - Note that you will need to check the result to see if the association was successful. Calling - this on an already-associated device with a valid unlock code will succeed, but have no - effect. - - Since 4.4 + DEPRECATED since 6.2 device association is no-longer required. This RPC will return UNIMPLEMENTED. """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') @@ -598,6 +583,18 @@ def restart_device_admin_service(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def check_bed_file(self, request, context): + """Checks the validity of a BED file against a corresponding index or genome file + + Errors: + INVALID_ARGUMENT if the bed_file_path or index_file_path is empty + + Since 6.1 + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_ManagerServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -761,6 +758,11 @@ def add_ManagerServiceServicer_to_server(servicer, server): request_deserializer=minknow__api_dot_manager__pb2.RestartDeviceAdminRequest.FromString, response_serializer=minknow__api_dot_manager__pb2.RestartDeviceAdminResponse.SerializeToString, ), + 'check_bed_file': grpc.unary_unary_rpc_method_handler( + servicer.check_bed_file, + request_deserializer=minknow__api_dot_manager__pb2.CheckBedFileRequest.FromString, + response_serializer=minknow__api_dot_manager__pb2.CheckBedFileResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'minknow_api.manager.ManagerService', rpc_method_handlers) @@ -1314,3 +1316,20 @@ def restart_device_admin_service(request, minknow__api_dot_manager__pb2.RestartDeviceAdminResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def check_bed_file(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/minknow_api.manager.ManagerService/check_bed_file', + minknow__api_dot_manager__pb2.CheckBedFileRequest.SerializeToString, + minknow__api_dot_manager__pb2.CheckBedFileResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/python/minknow_api/manager_service.py b/python/minknow_api/manager_service.py index f65aa7c..2bb4cfa 100644 --- a/python/minknow_api/manager_service.py +++ b/python/minknow_api/manager_service.py @@ -74,6 +74,8 @@ "SetFeaturesResponse", "RestartDeviceAdminRequest", "RestartDeviceAdminResponse", + "CheckBedFileRequest", + "CheckBedFileResponse", "SimpleProtocolState", "NO_PROTOCOL_STATE", "PROTOCOL_RUNNING", @@ -82,7 +84,6 @@ "SimulatedDeviceType", "SIMULATED_AUTO", "SIMULATED_MINION", - "SIMULATED_TRAXION", "SIMULATED_PROMETHION", "SIMULATED_P2", "ExperimentType", @@ -1232,13 +1233,7 @@ def get_alignment_reference_information(self, _message=None, _timeout=None, **kw def association_device_code(self, _message=None, _timeout=None, **kwargs): """Get the device code/key for association. - This can be used to either get the code that the user must enter into the customer support - portal to associate the device with their account, or the key used for online association. - - Errors: - INVALID_ARGUMENT: The requested flow cell position does not exist. - - Since 4.4 + DEPRECATED since 6.2 device association is no-longer required. This RPC will return UNIMPLEMENTED. This RPC has no side effects. Calling it will have no effect on the state of the system. It is safe to call repeatedly, or to retry on failure, although there is no @@ -1292,21 +1287,7 @@ def association_device_code(self, _message=None, _timeout=None, **kwargs): def apply_offline_association_unlock_code(self, _message=None, _timeout=None, **kwargs): """Apply the unlock code for offline association. - This is the code that the user receives from the customer support portal after entering the - device code for this device (see `offline_association_device_code`). - - This is only required if either `describe_host` indicates that the device as a whole needs - association, or `flow_cell_positions` indicates that a particular positions needs it. - - Errors: - INVALID_ARGUMENT: The requested flow cell position does not exist, or no unlock code - was provided. - - Note that you will need to check the result to see if the association was successful. Calling - this on an already-associated device with a valid unlock code will succeed, but have no - effect. - - Since 4.4 + DEPRECATED since 6.2 device association is no-longer required. This RPC will return UNIMPLEMENTED. This RPC is idempotent. It may change the state of the system, but if the requested change has already happened, it will not fail because of this, make any additional @@ -1765,3 +1746,69 @@ def restart_device_admin_service(self, _message=None, _timeout=None, **kwargs): _message, _timeout, [], "minknow_api.manager.ManagerService") + def check_bed_file(self, _message=None, _timeout=None, **kwargs): + """Checks the validity of a BED file against a corresponding index or genome file + + Errors: + INVALID_ARGUMENT if the bed_file_path or index_file_path is empty + + Since 6.1 + + This RPC has no side effects. Calling it will have no effect on the state of the + system. It is safe to call repeatedly, or to retry on failure, although there is no + guarantee it will return the same information each time. + + Args: + _message (minknow_api.manager_pb2.CheckBedFileRequest, optional): The message to send. + This can be passed instead of the keyword arguments. + _timeout (float, optional): The call will be cancelled after this number of seconds + if it has not been completed. + bed_file_path (str, optional): The path to the BED file to validate + index_file_path (str, optional): The path to the index file that the BED file should validate against + + Can be a .fasta, .fai or .mmi file + strict (bool, optional): Strictly conforms to the BED file specification and allows both tabs and spaces + to be used as delimiters between columns + stranded (bool, optional): Check strand values are allowed + + Returns: + minknow_api.manager_pb2.CheckBedFileResponse + + Note that the returned messages are actually wrapped in a type that collapses + submessages for fields marked with ``[rpc_unwrap]``. + """ + if _message is not None: + if isinstance(_message, MessageWrapper): + _message = _message._message + return run_with_retry(self._stub.check_bed_file, + _message, _timeout, + [], + "minknow_api.manager.ManagerService") + + unused_args = set(kwargs.keys()) + + _message = CheckBedFileRequest() + + if "bed_file_path" in kwargs: + unused_args.remove("bed_file_path") + _message.bed_file_path = kwargs['bed_file_path'] + + if "index_file_path" in kwargs: + unused_args.remove("index_file_path") + _message.index_file_path = kwargs['index_file_path'] + + if "strict" in kwargs: + unused_args.remove("strict") + _message.strict = kwargs['strict'] + + if "stranded" in kwargs: + unused_args.remove("stranded") + _message.stranded = kwargs['stranded'] + + if len(unused_args) > 0: + raise ArgumentError("Unexpected keyword arguments to check_bed_file: '{}'".format(", ".join(unused_args))) + + return run_with_retry(self._stub.check_bed_file, + _message, _timeout, + [], + "minknow_api.manager.ManagerService") diff --git a/python/minknow_api/minion_device_pb2.py b/python/minknow_api/minion_device_pb2.py index 6ee0beb..ef23687 100644 --- a/python/minknow_api/minion_device_pb2.py +++ b/python/minknow_api/minion_device_pb2.py @@ -74,14 +74,7 @@ _globals['_GETFANSPEEDRESPONSE']._serialized_end=3660 _globals['_MINIONDEVICESERVICE']._serialized_start=3663 _globals['_MINIONDEVICESERVICE']._serialized_end=4042 -ChangeSettingsRequest.__doc__ = """Attributes: - settings: - MinION device settings - channel_config_default: - The default channel configuration. This provides the default - configuration to apply to any channels not listed in - settings.channel_config. -""" +GetSettingsRequest.__doc__ = """Request for MinionDeviceService.get_settings""" TemperatureRange.__doc__ = """Temperature range. Attributes: @@ -98,11 +91,13 @@ equal to min. When soft temperature control is enabled, this is used as the target temperature, and ``min`` is not used. """ -GetSettingsResponse.__doc__ = """Response for MinionDeviceService.get_settings - -Attributes: +ChangeSettingsRequest.__doc__ = """Attributes: settings: MinION device settings + channel_config_default: + The default channel configuration. This provides the default + configuration to apply to any channels not listed in + settings.channel_config. """ MinionDeviceSettings.__doc__ = """Describes the MinION device settings. Both unset structures and *_KEEP values in enums indicate "no change". When changing settings, @@ -252,14 +247,14 @@ true. enable_bias_voltage_lookup: Use the bias voltage lookup table to set the bias voltage. If - this is enabled, the bias voltage will be updated every - millisecond with each entry in the bias voltage lookup table - (see ``bias_voltage_lookup_table``) in turn, cycling through - when the end of the table is reached. This has the effect of - producing a bias voltage waveform. When enabling this, it is - required to either provide the lookup table entries at the - same time, or to have already provided them in a previous - call. Default is false. + this is enabled, the bias voltage will be updated every 1.25ms + (ie: at 800Hz) with each entry in the bias voltage lookup + table (see ``bias_voltage_lookup_table``) in turn, cycling + through when the end of the table is reached. This has the + effect of producing a bias voltage waveform. When enabling + this, it is required to either provide the lookup table + entries at the same time, or to have already provided them in + a previous call. Default is false. bias_voltage_lookup_table: The bias voltage lookup table. If no entries are provided, the existing lookup table (if any) is preserved. See @@ -280,5 +275,10 @@ clock_speed: The speed of the high-speed clock. """ -GetSettingsRequest.__doc__ = """Request for MinionDeviceService.get_settings""" +GetSettingsResponse.__doc__ = """Response for MinionDeviceService.get_settings + +Attributes: + settings: + MinION device settings +""" # @@protoc_insertion_point(module_scope) diff --git a/python/minknow_api/minion_device_service.py b/python/minknow_api/minion_device_service.py index 6eda210..9e81a7b 100644 --- a/python/minknow_api/minion_device_service.py +++ b/python/minknow_api/minion_device_service.py @@ -231,9 +231,9 @@ def change_settings(self, _message=None, _timeout=None, **kwargs): Default is true. enable_bias_voltage_lookup (google.protobuf.wrappers_pb2.BoolValue, optional): Use the bias voltage lookup table to set the bias voltage. - If this is enabled, the bias voltage will be updated every millisecond with each entry in the - bias voltage lookup table (see ``bias_voltage_lookup_table``) in turn, cycling through when - the end of the table is reached. + If this is enabled, the bias voltage will be updated every 1.25ms (ie: at 800Hz) with each + entry in the bias voltage lookup table (see ``bias_voltage_lookup_table``) in turn, cycling + through when the end of the table is reached. This has the effect of producing a bias voltage waveform. diff --git a/python/minknow_api/pebble_device_pb2.py b/python/minknow_api/pebble_device_pb2.py new file mode 100644 index 0000000..739340e --- /dev/null +++ b/python/minknow_api/pebble_device_pb2.py @@ -0,0 +1,350 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: minknow_api/pebble_device.proto +# Protobuf Python Version: 4.25.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 +from minknow_api import rpc_options_pb2 as minknow__api_dot_rpc__options__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fminknow_api/pebble_device.proto\x12\x19minknow_api.pebble_device\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x1dminknow_api/rpc_options.proto\"]\n\x10WaveformSettings\x12\x10\n\x08voltages\x18\x01 \x03(\x01\x12\x37\n\x11samples_per_entry\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\"\xed\x02\n\x13TimingEnginePeriods\x12J\n\x06states\x18\x03 \x03(\x0b\x32:.minknow_api.pebble_device.TimingEnginePeriods.StatesEntry\x12\x36\n\x12use_default_values\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x1ag\n\x0bTimingState\x12-\n\x08\x64uration\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12)\n\x04mask\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x1ai\n\x0bStatesEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12I\n\x05value\x18\x02 \x01(\x0b\x32:.minknow_api.pebble_device.TimingEnginePeriods.TimingState:\x02\x38\x01\"\xd2\x01\n\x18OverloadProtectionConfig\x12+\n\x07\x65nabled\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\x07periods\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12,\n\x07min_adc\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12,\n\x07max_adc\x18\x04 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\"\xad\n\n\x0e\x44\x65viceSettings\x12\x30\n\x0bsample_rate\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x37\n\x12temperature_target\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12\x36\n\x11reference_voltage\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x34\n\x0funblock_voltage\x18\x04 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12X\n\x13regen_current_range\x18\x05 \x01(\x0e\x32;.minknow_api.pebble_device.DeviceSettings.RegenCurrentRange\x12\x32\n\rregen_current\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x41\n\x1bregen_current_voltage_clamp\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12\x34\n\x0c\x62ias_voltage\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.DoubleValueH\x00\x12L\n\x15\x62ias_voltage_waveform\x18\t \x01(\x0b\x32+.minknow_api.pebble_device.WaveformSettingsH\x00\x12\x32\n\rint_capacitor\x18\n \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12W\n\x11lpf_time_constant\x18\x0b \x01(\x0e\x32<.minknow_api.pebble_device.DeviceSettings.LowPassFilterValue\x12?\n\x07timings\x18\x0c \x01(\x0b\x32..minknow_api.pebble_device.TimingEnginePeriods\x12\x35\n\x11power_save_active\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12P\n\x13overload_protection\x18\x0e \x01(\x0b\x32\x33.minknow_api.pebble_device.OverloadProtectionConfig\"\xb5\x01\n\x11RegenCurrentRange\x12\x14\n\x10REGEN_RANGE_KEEP\x10\x00\x12 \n\x1cREGEN_RANGE_0_5nA_STEP_0_1nA\x10\x01\x12$\n REGEN_RANGE_0_667nA_STEP_0_133nA\x10\x02\x12 \n\x1cREGEN_RANGE_1_0nA_STEP_0_2nA\x10\x03\x12 \n\x1cREGEN_RANGE_2_0nA_STEP_0_4nA\x10\x04\"\xc5\x01\n\x12LowPassFilterValue\x12\x0c\n\x08LPF_KEEP\x10\x00\x12\x0c\n\x08LPF_0_us\x10\x01\x12\x13\n\x0fLPF_696kHz_2_us\x10\x02\x12\x13\n\x0fLPF_348kHz_4_us\x10\x03\x12\x13\n\x0fLPF_232kHz_7_us\x10\x04\x12\x13\n\x0fLPF_174kHz_9_us\x10\x05\x12\x14\n\x10LPF_139kHz_11_us\x10\x06\x12\x14\n\x10LPF_116kHz_13_us\x10\x07\x12\x13\n\x0fLPF_99kHz_16_us\x10\x08\x42\x16\n\x14\x62ias_voltage_setting\"`\n\x1b\x43hangeDeviceSettingsRequest\x12\x41\n\x08settings\x18\x01 \x01(\x0b\x32).minknow_api.pebble_device.DeviceSettingsB\x04\x90\xb5\x18\x01\"U\n\x1c\x43hangeDeviceSettingsResponse\x12\x35\n\x10real_sample_rate\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\"\x1a\n\x18GetDeviceSettingsRequest\"^\n\x19GetDeviceSettingsResponse\x12\x41\n\x08settings\x18\x01 \x01(\x0b\x32).minknow_api.pebble_device.DeviceSettingsB\x04\x90\xb5\x18\x01\"\xaf\x02\n\x0f\x43hannelSettings\x12\x45\n\x05input\x18\x01 \x01(\x0e\x32\x30.minknow_api.pebble_device.ChannelSettings.InputB\x04\x88\xb5\x18\x01\x12\x43\n\x04mode\x18\x02 \x01(\x0e\x32/.minknow_api.pebble_device.ChannelSettings.ModeB\x04\x88\xb5\x18\x01\"=\n\x05Input\x12\x11\n\rNO_CONNECTION\x10\x00\x12\n\n\x06WELL_1\x10\x01\x12\n\n\x06WELL_2\x10\x02\x12\t\n\x05OTHER\x10\x03\"Q\n\x04Mode\x12\x0c\n\x08INACTIVE\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\x0b\n\x07UNBLOCK\x10\x02\x12\x17\n\x13MEMBRANE_SIMULATION\x10\x03\x12\t\n\x05REGEN\x10\x04\"\x99\x02\n\x1c\x43hangeChannelSettingsRequest\x12W\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x45.minknow_api.pebble_device.ChangeChannelSettingsRequest.ChannelsEntry\x12\x43\n\x0f\x63hannel_default\x18\x02 \x01(\x0b\x32*.minknow_api.pebble_device.ChannelSettings\x1a[\n\rChannelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x39\n\x05value\x18\x02 \x01(\x0b\x32*.minknow_api.pebble_device.ChannelSettings:\x02\x38\x01\"\x1f\n\x1d\x43hangeChannelSettingsResponse\"3\n\x19GetChannelSettingsRequest\x12\x16\n\x08\x63hannels\x18\x01 \x03(\rB\x04\x88\xb5\x18\x01\"Z\n\x1aGetChannelSettingsResponse\x12<\n\x08\x63hannels\x18\x01 \x03(\x0b\x32*.minknow_api.pebble_device.ChannelSettings\"\xe0\x02\n\x14ResearchOnlySettings\x12V\n\x0b\x61sic_writes\x18\x05 \x03(\x0b\x32\x41.minknow_api.pebble_device.ResearchOnlySettings.AsicRegisterWrite\x12\x62\n\x11instrument_writes\x18\t \x03(\x0b\x32G.minknow_api.pebble_device.ResearchOnlySettings.InstrumentRegisterWrite\x1a\x42\n\x11\x41sicRegisterWrite\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\r\x12\r\n\x05value\x18\x03 \x01(\r\x12\r\n\x05\x64\x65lay\x18\x04 \x01(\r\x1aH\n\x17InstrumentRegisterWrite\x12\x0f\n\x07\x61\x64\x64ress\x18\x06 \x01(\r\x12\r\n\x05value\x18\x07 \x01(\r\x12\r\n\x05\x64\x65lay\x18\x08 \x01(\r\"l\n!ChangeResearchOnlySettingsRequest\x12G\n\x08settings\x18\x01 \x01(\x0b\x32/.minknow_api.pebble_device.ResearchOnlySettingsB\x04\x90\xb5\x18\x01\"$\n\"ChangeResearchOnlySettingsResponse2\xf5\x05\n\x13PebbleDeviceService\x12\x8e\x01\n\x16\x63hange_device_settings\x12\x36.minknow_api.pebble_device.ChangeDeviceSettingsRequest\x1a\x37.minknow_api.pebble_device.ChangeDeviceSettingsResponse\"\x03\x90\x02\x02\x12\x85\x01\n\x13get_device_settings\x12\x33.minknow_api.pebble_device.GetDeviceSettingsRequest\x1a\x34.minknow_api.pebble_device.GetDeviceSettingsResponse\"\x03\x90\x02\x01\x12\x91\x01\n\x17\x63hange_channel_settings\x12\x37.minknow_api.pebble_device.ChangeChannelSettingsRequest\x1a\x38.minknow_api.pebble_device.ChangeChannelSettingsResponse\"\x03\x90\x02\x02\x12\x88\x01\n\x14get_channel_settings\x12\x34.minknow_api.pebble_device.GetChannelSettingsRequest\x1a\x35.minknow_api.pebble_device.GetChannelSettingsResponse\"\x03\x90\x02\x01\x12\xa5\x01\n\x1d\x63hange_research_only_settings\x12<.minknow_api.pebble_device.ChangeResearchOnlySettingsRequest\x1a=.minknow_api.pebble_device.ChangeResearchOnlySettingsResponse\"\x07\x90\x02\x02\x98\xb5\x18\x01\x42&\n\x1c\x63om.nanoporetech.minknow_api\xa2\x02\x05MKAPIb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'minknow_api.pebble_device_pb2', _globals) +if _descriptor._USE_C_DESCRIPTORS == False: + _globals['DESCRIPTOR']._options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\034com.nanoporetech.minknow_api\242\002\005MKAPI' + _globals['_TIMINGENGINEPERIODS_STATESENTRY']._options = None + _globals['_TIMINGENGINEPERIODS_STATESENTRY']._serialized_options = b'8\001' + _globals['_CHANGEDEVICESETTINGSREQUEST'].fields_by_name['settings']._options = None + _globals['_CHANGEDEVICESETTINGSREQUEST'].fields_by_name['settings']._serialized_options = b'\220\265\030\001' + _globals['_GETDEVICESETTINGSRESPONSE'].fields_by_name['settings']._options = None + _globals['_GETDEVICESETTINGSRESPONSE'].fields_by_name['settings']._serialized_options = b'\220\265\030\001' + _globals['_CHANNELSETTINGS'].fields_by_name['input']._options = None + _globals['_CHANNELSETTINGS'].fields_by_name['input']._serialized_options = b'\210\265\030\001' + _globals['_CHANNELSETTINGS'].fields_by_name['mode']._options = None + _globals['_CHANNELSETTINGS'].fields_by_name['mode']._serialized_options = b'\210\265\030\001' + _globals['_CHANGECHANNELSETTINGSREQUEST_CHANNELSENTRY']._options = None + _globals['_CHANGECHANNELSETTINGSREQUEST_CHANNELSENTRY']._serialized_options = b'8\001' + _globals['_GETCHANNELSETTINGSREQUEST'].fields_by_name['channels']._options = None + _globals['_GETCHANNELSETTINGSREQUEST'].fields_by_name['channels']._serialized_options = b'\210\265\030\001' + _globals['_CHANGERESEARCHONLYSETTINGSREQUEST'].fields_by_name['settings']._options = None + _globals['_CHANGERESEARCHONLYSETTINGSREQUEST'].fields_by_name['settings']._serialized_options = b'\220\265\030\001' + _globals['_PEBBLEDEVICESERVICE'].methods_by_name['change_device_settings']._options = None + _globals['_PEBBLEDEVICESERVICE'].methods_by_name['change_device_settings']._serialized_options = b'\220\002\002' + _globals['_PEBBLEDEVICESERVICE'].methods_by_name['get_device_settings']._options = None + _globals['_PEBBLEDEVICESERVICE'].methods_by_name['get_device_settings']._serialized_options = b'\220\002\001' + _globals['_PEBBLEDEVICESERVICE'].methods_by_name['change_channel_settings']._options = None + _globals['_PEBBLEDEVICESERVICE'].methods_by_name['change_channel_settings']._serialized_options = b'\220\002\002' + _globals['_PEBBLEDEVICESERVICE'].methods_by_name['get_channel_settings']._options = None + _globals['_PEBBLEDEVICESERVICE'].methods_by_name['get_channel_settings']._serialized_options = b'\220\002\001' + _globals['_PEBBLEDEVICESERVICE'].methods_by_name['change_research_only_settings']._options = None + _globals['_PEBBLEDEVICESERVICE'].methods_by_name['change_research_only_settings']._serialized_options = b'\220\002\002\230\265\030\001' + _globals['_WAVEFORMSETTINGS']._serialized_start=125 + _globals['_WAVEFORMSETTINGS']._serialized_end=218 + _globals['_TIMINGENGINEPERIODS']._serialized_start=221 + _globals['_TIMINGENGINEPERIODS']._serialized_end=586 + _globals['_TIMINGENGINEPERIODS_TIMINGSTATE']._serialized_start=376 + _globals['_TIMINGENGINEPERIODS_TIMINGSTATE']._serialized_end=479 + _globals['_TIMINGENGINEPERIODS_STATESENTRY']._serialized_start=481 + _globals['_TIMINGENGINEPERIODS_STATESENTRY']._serialized_end=586 + _globals['_OVERLOADPROTECTIONCONFIG']._serialized_start=589 + _globals['_OVERLOADPROTECTIONCONFIG']._serialized_end=799 + _globals['_DEVICESETTINGS']._serialized_start=802 + _globals['_DEVICESETTINGS']._serialized_end=2127 + _globals['_DEVICESETTINGS_REGENCURRENTRANGE']._serialized_start=1722 + _globals['_DEVICESETTINGS_REGENCURRENTRANGE']._serialized_end=1903 + _globals['_DEVICESETTINGS_LOWPASSFILTERVALUE']._serialized_start=1906 + _globals['_DEVICESETTINGS_LOWPASSFILTERVALUE']._serialized_end=2103 + _globals['_CHANGEDEVICESETTINGSREQUEST']._serialized_start=2129 + _globals['_CHANGEDEVICESETTINGSREQUEST']._serialized_end=2225 + _globals['_CHANGEDEVICESETTINGSRESPONSE']._serialized_start=2227 + _globals['_CHANGEDEVICESETTINGSRESPONSE']._serialized_end=2312 + _globals['_GETDEVICESETTINGSREQUEST']._serialized_start=2314 + _globals['_GETDEVICESETTINGSREQUEST']._serialized_end=2340 + _globals['_GETDEVICESETTINGSRESPONSE']._serialized_start=2342 + _globals['_GETDEVICESETTINGSRESPONSE']._serialized_end=2436 + _globals['_CHANNELSETTINGS']._serialized_start=2439 + _globals['_CHANNELSETTINGS']._serialized_end=2742 + _globals['_CHANNELSETTINGS_INPUT']._serialized_start=2598 + _globals['_CHANNELSETTINGS_INPUT']._serialized_end=2659 + _globals['_CHANNELSETTINGS_MODE']._serialized_start=2661 + _globals['_CHANNELSETTINGS_MODE']._serialized_end=2742 + _globals['_CHANGECHANNELSETTINGSREQUEST']._serialized_start=2745 + _globals['_CHANGECHANNELSETTINGSREQUEST']._serialized_end=3026 + _globals['_CHANGECHANNELSETTINGSREQUEST_CHANNELSENTRY']._serialized_start=2935 + _globals['_CHANGECHANNELSETTINGSREQUEST_CHANNELSENTRY']._serialized_end=3026 + _globals['_CHANGECHANNELSETTINGSRESPONSE']._serialized_start=3028 + _globals['_CHANGECHANNELSETTINGSRESPONSE']._serialized_end=3059 + _globals['_GETCHANNELSETTINGSREQUEST']._serialized_start=3061 + _globals['_GETCHANNELSETTINGSREQUEST']._serialized_end=3112 + _globals['_GETCHANNELSETTINGSRESPONSE']._serialized_start=3114 + _globals['_GETCHANNELSETTINGSRESPONSE']._serialized_end=3204 + _globals['_RESEARCHONLYSETTINGS']._serialized_start=3207 + _globals['_RESEARCHONLYSETTINGS']._serialized_end=3559 + _globals['_RESEARCHONLYSETTINGS_ASICREGISTERWRITE']._serialized_start=3419 + _globals['_RESEARCHONLYSETTINGS_ASICREGISTERWRITE']._serialized_end=3485 + _globals['_RESEARCHONLYSETTINGS_INSTRUMENTREGISTERWRITE']._serialized_start=3487 + _globals['_RESEARCHONLYSETTINGS_INSTRUMENTREGISTERWRITE']._serialized_end=3559 + _globals['_CHANGERESEARCHONLYSETTINGSREQUEST']._serialized_start=3561 + _globals['_CHANGERESEARCHONLYSETTINGSREQUEST']._serialized_end=3669 + _globals['_CHANGERESEARCHONLYSETTINGSRESPONSE']._serialized_start=3671 + _globals['_CHANGERESEARCHONLYSETTINGSRESPONSE']._serialized_end=3707 + _globals['_PEBBLEDEVICESERVICE']._serialized_start=3710 + _globals['_PEBBLEDEVICESERVICE']._serialized_end=4467 +DeviceSettings.__doc__ = """Attributes: + sample_rate: + The number of measurements to take each second. Possible + values are between 1000, and 5000. If the value is outside of + this range, it will be clamped within it FAILED_PRECONDITION + will be returned if attempting to change during acquisition + temperature_target: + If the device is capable (see + device.get_device_info().temperature_controllable) then this + sets the minimum and maximum temperatures of the flow-cell. + These values must be between the limits specified in the + application config, see: min_user_setpoint_temperature_celsius + and max_user_setpoint_temperature_celsius + reference_voltage: + The reference voltage Vref This value must be within the + range of [700..1100](mV) and will be rounded down to the + nearest 50mV. INVALID_ARGUMENT will be returned if outside + these limits + unblock_voltage: + The unblock voltage to apply when a channel is unblocking. + The acceptable input range depends on Vref The default Vref of + 900mV gives the unblock level a range between [-840..900]mV + INVALID_ARGUMENT will be returned if outside of the limits set + depending on Vref + regen_current_range: + Determines the range of regen current available for selection + Range 0.5nA, step 0.1nA Range 0.667nA, step 0.133nA + Range 1.0nA, step 0.2nA (DEFAULT) Range 2.0nA, step + 0.4nA INVALID_ARGUMENT will be returned if range option does + not exist + regen_current: + Control the regeneration current used when regenerating + well's. The acceptable value is in pico Amps and depends on + the specified regen_current_range option. Will round down to + nearest acceptable step in value within the range. + INVALID_ARGUMENT will be returned if outside the acceptable + range + regen_current_voltage_clamp: + Voltage clamp for regeneration circuit (in millivolts) The + voltage in the regeneration circuit is clamped under this + value, whilst applying the current specified in each quads + settings. This is a +/- voltage relative to Vref The polarity + is determined by the regen current With a default Vref of + 900mV this gives the regen level a range of [0..840]mV + INVALID_ARGUMENT will be returned if outside the acceptable + range + bias_voltage_setting: + Settings controlling the device bias voltage + bias_voltage: + The value to apply as the bias voltage (in millivolts) Valid + values are in the range -1250mv..1250mv + bias_voltage_waveform: + The waveform settings + int_capacitor: + Integration capacitor used for controlling the Gain This size + of the capacitance used is based on the provided setting with + a value of [0..31] Refer to §2.3.1 of the OG2 ASIC + documentation for both the nominal and measured capacitance + that each setting produces. This value is applied globally to + all QUADs and therefore all channels INVALID_ARGUMENT will be + returned if outside the range of [0..31] + lpf_time_constant: + Low pass filter time constant This modifies the anti-alias + resistor to produce a specific time constant for the low pass + filter. + timings: + If specified, the device will adopt these timings to set how + long is spent at various stages of the current digitisation + processes. The message includes a way of returning to default + timings. This value cannot be changed during acquisition + power_save_active: + Enable ASIC power save. Setting to active will save power, + but doing so will allow the ASIC to cool down, and it will + take time to heat it up again along with performing a device + reset. + overload_protection: + Settings for the hardware based saturation/overload protection + (spike suppression) + sampling_frequency: + The number of measurements to take each second. Possible + values are between 1000, and 10000. If the value is outside of + this range, it will be clamped within it This value cannot be + changed during acquisition. + ramp_voltage: + The value to apply as the ramp voltage (in millivolts) Valid + values are in the range -1250mv..1250mv + saturation_control_enabled: + Enables saturation control on the device + fast_calibration_enabled: + Enable use of the fast calibration mode across the device + DEPRECATED since 5.5. This will be removed in a future + release. +""" +ResearchOnlySettings.InstrumentRegisterWrite.__doc__ = """Attributes: + address: + Register to write + value: + Value + delay: + Delay to add after this write, before the next +""" +TimingEnginePeriods.__doc__ = """ Timing-engine periods are specified in 5ns units. Some of the timing +mechanism can only achieve 10ns accuracy, so even numbers are +preferred. Note: There is a timing feature in the ASIC that requires +the sum of the RST1 and DATA periods to be a multiple of 16 + +Attributes: + states: + Zero index based map [0-15] of up to 16 timing engine states + use_default_values: + If written true, other fields will be ignored and the hardware + will use default timings. When read will return true if + previously set true, it will not tell you if the timing + periods you previously entered are the same as the default + values. + RST1: + Reset1 phase Note: Commands are written to the ASIC during + this period, to allow sufficient time to write the commands, + this should never be less than 1.2us or 240. + RST1_CDS1: + Reset1 to CDS1 transition + CDS1: + CDS1 phase (Correlated Double Sampling) sample-point 1 + CDS1_DATA: + CDS1 to DATA transition + DATA: + DATA transfer phase NOTE: Setting this value has no effect, + MinKNOW will choose a value for DATA itself to achieve the + required frame-rate. Reading it will return the chosen DATA + period. + DATA_RST2: + DATA transfer to Reset2 transition. MinKNOW may increase this + value by small amounts so that when changing the DATA period, + the sum of the RST1 and DATA periods is a multiple of 16 and + the frame-rate and integration-period are maintained. + RST2: + Reset2 + RST2_CDS2: + Reset2 to CDS2 transition + CDS2: + CDS2 Phase (sample-point 2) + CDS2_SH: + CDS2 to SH transition + SH: + SH phase (Sample and Hold) + SH_RST1: + SH to Reset1 transition +""" +ChangeChannelSettingsRequest.__doc__ = """Attributes: + channels: + 1 based map of up to 400 different channel settings + channel_default: + If supplied, contains settings applied to every channel before + then applying any specific settings in the per channel + settings. +""" +TimingEnginePeriods.TimingState.__doc__ = """Attributes: + duration: + The duration spent in each state is 1 more TEclock period than + set in the associated register, so setting 1 results in a + delay of 2 clock periods + mask: + The mask is built up of 7 user settable timing signals bit 0: + INT_RESET bit 1: CDS_SAMPLE bit 2: CDS_RESET bit 3: DIG_ENABLE + bit 4: CDS_SELECT bit 5: SYNC_MASTER bit 6: CML_ENABLE +""" +ChangeDeviceSettingsResponse.__doc__ = """Attributes: + real_sample_rate: + The sampling frequency actually applied to the hardware, as + close as possible to the requested rate. Note: only returned + if sampling rate was set as part of this call. + real_sampling_frequency: + The sampling frequency actually applied to the hardware, as + close as possible to the requested rate. Note: only returned + if sampling rate was set as part of this call. +""" +ChannelSettings.__doc__ = """Attributes: + input: + The input to be digitised + mode: + The channel mode +""" +GetChannelSettingsRequest.__doc__ = """Attributes: + channels: + The channels (one based) to return data for. +""" +GetChannelSettingsResponse.__doc__ = """Attributes: + channels: + List of all requested pixel settings, in the order requested. +""" +WaveformSettings.__doc__ = """Attributes: + voltages: + The waveform data applied to the device (in millivolts) Must + contain 32 values, in order to be a valid waveform. + samples_per_entry: + The number of samples each wavetable entry will be valid for + Valid value must be between [1..31] INVALID_ARGUMENT will be + returned if not between these values + frequency: + The frequency of the applied waveform, in Hz. Valid values + are between 7.8125Hz and 500Hz. +""" +ResearchOnlySettings.AsicRegisterWrite.__doc__ = """Attributes: + address: + Register to write to, value between 0..254 + value: + Value to write to the register, value between 0..255 Note: If + value over two registers (high and low) then two separate + writes required + delay: + Delay to add after this write, before the next +""" +OverloadProtectionConfig.__doc__ = """Attributes: + enabled: + Set to enable or disable hardware based overload protection + (saturation). + periods: + Threshold for the number of periods counted over threshold + before disconnection. Valid value must be between [0..7] + INVALID_ARGUMENT will be returned if not between these values + min_adc: + The minimum adc value that is not a saturation. If this value + is not specified, the previous value is kept. Valid value must + be between [-2047..2047] INVALID_ARGUMENT will be returned if + not between these values + max_adc: + The maximum adc value that is not a saturation. If this value + is not specified, the previous value is kept. Valid value must + be between [-2047..2047] INVALID_ARGUMENT will be returned if + not between these values +""" +ResearchOnlySettings.__doc__ = """Attributes: + asic_writes: + List of ASIC register writes to append Use at own risk as no + validation is performed on the address or value of the + individual writes. The number of writes in single request + limited to 128 due to internal MinKNOW limitations + INVALID_ARGUMENT will be returned if greater than this limit + instrument_writes: + List of instrument register writes Use at own risk as no + validation is performed on the address or value of the + individual writes. The number of writes in single request + limited to 16 due to internal MinKNOW limitations + INVALID_ARGUMENT will be returned if greater than this limit +""" +# @@protoc_insertion_point(module_scope) diff --git a/python/minknow_api/pebble_device_pb2_grpc.py b/python/minknow_api/pebble_device_pb2_grpc.py new file mode 100644 index 0000000..2f3d850 --- /dev/null +++ b/python/minknow_api/pebble_device_pb2_grpc.py @@ -0,0 +1,210 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + +from minknow_api import pebble_device_pb2 as minknow__api_dot_pebble__device__pb2 + + +class PebbleDeviceServiceStub(object): + """Interface to control Pebble devices. + This service should be treated as experimental and subject to change + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.change_device_settings = channel.unary_unary( + '/minknow_api.pebble_device.PebbleDeviceService/change_device_settings', + request_serializer=minknow__api_dot_pebble__device__pb2.ChangeDeviceSettingsRequest.SerializeToString, + response_deserializer=minknow__api_dot_pebble__device__pb2.ChangeDeviceSettingsResponse.FromString, + ) + self.get_device_settings = channel.unary_unary( + '/minknow_api.pebble_device.PebbleDeviceService/get_device_settings', + request_serializer=minknow__api_dot_pebble__device__pb2.GetDeviceSettingsRequest.SerializeToString, + response_deserializer=minknow__api_dot_pebble__device__pb2.GetDeviceSettingsResponse.FromString, + ) + self.change_channel_settings = channel.unary_unary( + '/minknow_api.pebble_device.PebbleDeviceService/change_channel_settings', + request_serializer=minknow__api_dot_pebble__device__pb2.ChangeChannelSettingsRequest.SerializeToString, + response_deserializer=minknow__api_dot_pebble__device__pb2.ChangeChannelSettingsResponse.FromString, + ) + self.get_channel_settings = channel.unary_unary( + '/minknow_api.pebble_device.PebbleDeviceService/get_channel_settings', + request_serializer=minknow__api_dot_pebble__device__pb2.GetChannelSettingsRequest.SerializeToString, + response_deserializer=minknow__api_dot_pebble__device__pb2.GetChannelSettingsResponse.FromString, + ) + self.change_research_only_settings = channel.unary_unary( + '/minknow_api.pebble_device.PebbleDeviceService/change_research_only_settings', + request_serializer=minknow__api_dot_pebble__device__pb2.ChangeResearchOnlySettingsRequest.SerializeToString, + response_deserializer=minknow__api_dot_pebble__device__pb2.ChangeResearchOnlySettingsResponse.FromString, + ) + + +class PebbleDeviceServiceServicer(object): + """Interface to control Pebble devices. + This service should be treated as experimental and subject to change + """ + + def change_device_settings(self, request, context): + """Change the settings which apply to the whole device. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def get_device_settings(self, request, context): + """Get the current settings which apply to the whole device. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def change_channel_settings(self, request, context): + """Change the settings which apply to the referenced channels. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def get_channel_settings(self, request, context): + """Get the channels settings for the requested channel's + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def change_research_only_settings(self, request, context): + """Experimental access for research purposes to modify low level settings + Note: Access will be removed once device integration complete + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_PebbleDeviceServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'change_device_settings': grpc.unary_unary_rpc_method_handler( + servicer.change_device_settings, + request_deserializer=minknow__api_dot_pebble__device__pb2.ChangeDeviceSettingsRequest.FromString, + response_serializer=minknow__api_dot_pebble__device__pb2.ChangeDeviceSettingsResponse.SerializeToString, + ), + 'get_device_settings': grpc.unary_unary_rpc_method_handler( + servicer.get_device_settings, + request_deserializer=minknow__api_dot_pebble__device__pb2.GetDeviceSettingsRequest.FromString, + response_serializer=minknow__api_dot_pebble__device__pb2.GetDeviceSettingsResponse.SerializeToString, + ), + 'change_channel_settings': grpc.unary_unary_rpc_method_handler( + servicer.change_channel_settings, + request_deserializer=minknow__api_dot_pebble__device__pb2.ChangeChannelSettingsRequest.FromString, + response_serializer=minknow__api_dot_pebble__device__pb2.ChangeChannelSettingsResponse.SerializeToString, + ), + 'get_channel_settings': grpc.unary_unary_rpc_method_handler( + servicer.get_channel_settings, + request_deserializer=minknow__api_dot_pebble__device__pb2.GetChannelSettingsRequest.FromString, + response_serializer=minknow__api_dot_pebble__device__pb2.GetChannelSettingsResponse.SerializeToString, + ), + 'change_research_only_settings': grpc.unary_unary_rpc_method_handler( + servicer.change_research_only_settings, + request_deserializer=minknow__api_dot_pebble__device__pb2.ChangeResearchOnlySettingsRequest.FromString, + response_serializer=minknow__api_dot_pebble__device__pb2.ChangeResearchOnlySettingsResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'minknow_api.pebble_device.PebbleDeviceService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class PebbleDeviceService(object): + """Interface to control Pebble devices. + This service should be treated as experimental and subject to change + """ + + @staticmethod + def change_device_settings(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/minknow_api.pebble_device.PebbleDeviceService/change_device_settings', + minknow__api_dot_pebble__device__pb2.ChangeDeviceSettingsRequest.SerializeToString, + minknow__api_dot_pebble__device__pb2.ChangeDeviceSettingsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def get_device_settings(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/minknow_api.pebble_device.PebbleDeviceService/get_device_settings', + minknow__api_dot_pebble__device__pb2.GetDeviceSettingsRequest.SerializeToString, + minknow__api_dot_pebble__device__pb2.GetDeviceSettingsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def change_channel_settings(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/minknow_api.pebble_device.PebbleDeviceService/change_channel_settings', + minknow__api_dot_pebble__device__pb2.ChangeChannelSettingsRequest.SerializeToString, + minknow__api_dot_pebble__device__pb2.ChangeChannelSettingsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def get_channel_settings(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/minknow_api.pebble_device.PebbleDeviceService/get_channel_settings', + minknow__api_dot_pebble__device__pb2.GetChannelSettingsRequest.SerializeToString, + minknow__api_dot_pebble__device__pb2.GetChannelSettingsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def change_research_only_settings(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/minknow_api.pebble_device.PebbleDeviceService/change_research_only_settings', + minknow__api_dot_pebble__device__pb2.ChangeResearchOnlySettingsRequest.SerializeToString, + minknow__api_dot_pebble__device__pb2.ChangeResearchOnlySettingsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/python/minknow_api/pebble_device_service.py b/python/minknow_api/pebble_device_service.py new file mode 100644 index 0000000..d16cbac --- /dev/null +++ b/python/minknow_api/pebble_device_service.py @@ -0,0 +1,418 @@ +### THIS FILE IS AUTOGENERATED. DO NOT EDIT THIS FILE DIRECTLY ### +import minknow_api +from minknow_api.pebble_device_pb2_grpc import * +import minknow_api.pebble_device_pb2 as pebble_device_pb2 +from minknow_api.pebble_device_pb2 import * +from minknow_api._support import MessageWrapper, ArgumentError +import time +import logging +import sys + +__all__ = [ + "PebbleDeviceService", + "WaveformSettings", + "TimingEnginePeriods", + "OverloadProtectionConfig", + "DeviceSettings", + "ChangeDeviceSettingsRequest", + "ChangeDeviceSettingsResponse", + "GetDeviceSettingsRequest", + "GetDeviceSettingsResponse", + "ChannelSettings", + "ChangeChannelSettingsRequest", + "ChangeChannelSettingsResponse", + "GetChannelSettingsRequest", + "GetChannelSettingsResponse", + "ResearchOnlySettings", + "ChangeResearchOnlySettingsRequest", + "ChangeResearchOnlySettingsResponse", +] + +def run_with_retry(method, message, timeout, unwraps, full_name): + retry_count = 20 + error = None + for i in range(retry_count): + try: + result = MessageWrapper(method(message, timeout=timeout), unwraps=unwraps) + return result + except grpc.RpcError as e: + # Retrying unidentified grpc errors to keep clients from crashing + retryable_error = (e.code() == grpc.StatusCode.UNKNOWN and "Stream removed" in e.details() or \ + (e.code() == grpc.StatusCode.INTERNAL and "RST_STREAM" in e.details())) + if retryable_error: + logging.info('Bypassed ({}: {}) error for grpc: {}. Attempt {}.'.format(e.code(), e.details(), full_name, i)) + else: + raise + error = e + time.sleep(1) + raise error + + +class PebbleDeviceService(object): + """Interface to control Pebble devices. + This service should be treated as experimental and subject to change""" + def __init__(self, channel): + self._stub = PebbleDeviceServiceStub(channel) + self._pb = pebble_device_pb2 + def change_device_settings(self, _message=None, _timeout=None, **kwargs): + """Change the settings which apply to the whole device. + + This RPC is idempotent. It may change the state of the system, but if the requested + change has already happened, it will not fail because of this, make any additional + changes or return a different value. + + Args: + _message (minknow_api.pebble_device_pb2.ChangeDeviceSettingsRequest, optional): The message to send. + This can be passed instead of the keyword arguments. + _timeout (float, optional): The call will be cancelled after this number of seconds + if it has not been completed. + sample_rate (google.protobuf.wrappers_pb2.Int32Value, optional): The number of measurements to take each second. + + Possible values are between 1000, and 5000. + If the value is outside of this range, it will be clamped within it + + FAILED_PRECONDITION will be returned if attempting to change during acquisition + temperature_target (google.protobuf.wrappers_pb2.FloatValue, optional): If the device is capable (see device.get_device_info().temperature_controllable) + then this sets the target temperature to keep the flow-cell at. + + This value must be between the limits specified in the application config, + see: min_user_setpoint_temperature_celsius and max_user_setpoint_temperature_celsius + INVALID_ARGUMENT will be returned if outside these limits + reference_voltage (google.protobuf.wrappers_pb2.Int32Value, optional): The reference voltage Vref + + This value must be within the range of [700..1100](mV) and will be rounded down + to the nearest 50mV. + INVALID_ARGUMENT will be returned if outside these limits + unblock_voltage (google.protobuf.wrappers_pb2.Int32Value, optional): The unblock voltage to apply when a channel is unblocking. + + The acceptable input range depends on Vref + The default Vref of 900mV gives the unblock level a range between [-840..900]mV + INVALID_ARGUMENT will be returned if outside of the limits set depending on Vref + regen_current_range (minknow_api.pebble_device_pb2.DeviceSettings.RegenCurrentRange, optional): Determines the range of regen current available for selection + Range 0.5nA, step 0.1nA + Range 0.667nA, step 0.133nA + Range 1.0nA, step 0.2nA (DEFAULT) + Range 2.0nA, step 0.4nA + INVALID_ARGUMENT will be returned if range option does not exist + regen_current (google.protobuf.wrappers_pb2.Int32Value, optional): Control the regeneration current used when regenerating well's. + + The acceptable value is in pico Amps and depends on the specified + regen_current_range option. Will round down to nearest acceptable + step in value within the range. + INVALID_ARGUMENT will be returned if outside the acceptable range + regen_current_voltage_clamp (google.protobuf.wrappers_pb2.UInt32Value, optional): Voltage clamp for regeneration circuit (in millivolts) + + The voltage in the regeneration circuit is clamped under this value, + whilst applying the current specified in each quads settings. + + This is a +/- voltage relative to Vref + The polarity is determined by the regen current + With a default Vref of 900mV this gives the regen level a range of [0..840]mV + INVALID_ARGUMENT will be returned if outside the acceptable range + bias_voltage (google.protobuf.wrappers_pb2.DoubleValue, optional): The value to apply as the bias voltage (in millivolts) + + Valid values are in the range [-Vref..Vref]mv + INVALID_ARGUMENT will be returned if outside this range + bias_voltage_waveform (minknow_api.pebble_device_pb2.WaveformSettings, optional): The wavetable settings + int_capacitor (google.protobuf.wrappers_pb2.Int32Value, optional): Integration capacitor used for controlling the Gain + This size of the capacitance used is based on the provided setting + with a value of [0..31] + + Refer to §2.3.1 of the OG2 ASIC documentation for both the nominal + and measured capacitance that each setting produces. + + This value is applied globally to all QUADs and therefore all channels + + INVALID_ARGUMENT will be returned if outside the range of [0..31] + lpf_time_constant (minknow_api.pebble_device_pb2.DeviceSettings.LowPassFilterValue, optional): Low pass filter time constant + This modifies the anti-alias resistor to produce a specific time constant + for the low pass filter. + timings (minknow_api.pebble_device_pb2.TimingEnginePeriods, optional): If specified, the device will adopt these timings to set how + long is spent at various stages of the sampling process. + The message includes a way of returning to default timings. + + FAILED_PRECONDITION will be returned if attempting to change during acquisition + power_save_active (google.protobuf.wrappers_pb2.BoolValue, optional): Enable ASIC power save. + + Setting to active will save power, but doing so will allow the ASIC to cool down, + and it will take time to heat it up again along with performing a device reset. + overload_protection (minknow_api.pebble_device_pb2.OverloadProtectionConfig, optional): Settings for the hardware based saturation/overload protection (spike suppression) + + Returns: + minknow_api.pebble_device_pb2.ChangeDeviceSettingsResponse + + Note that the returned messages are actually wrapped in a type that collapses + submessages for fields marked with ``[rpc_unwrap]``. + """ + if _message is not None: + if isinstance(_message, MessageWrapper): + _message = _message._message + return run_with_retry(self._stub.change_device_settings, + _message, _timeout, + [], + "minknow_api.pebble_device.PebbleDeviceService") + + unused_args = set(kwargs.keys()) + + _message = ChangeDeviceSettingsRequest() + + if "sample_rate" in kwargs: + unused_args.remove("sample_rate") + _message.settings.sample_rate.value = kwargs['sample_rate'] + + if "temperature_target" in kwargs: + unused_args.remove("temperature_target") + _message.settings.temperature_target.value = kwargs['temperature_target'] + + if "reference_voltage" in kwargs: + unused_args.remove("reference_voltage") + _message.settings.reference_voltage.value = kwargs['reference_voltage'] + + if "unblock_voltage" in kwargs: + unused_args.remove("unblock_voltage") + _message.settings.unblock_voltage.value = kwargs['unblock_voltage'] + + if "regen_current_range" in kwargs: + unused_args.remove("regen_current_range") + _message.settings.regen_current_range = kwargs['regen_current_range'] + + if "regen_current" in kwargs: + unused_args.remove("regen_current") + _message.settings.regen_current.value = kwargs['regen_current'] + + if "regen_current_voltage_clamp" in kwargs: + unused_args.remove("regen_current_voltage_clamp") + _message.settings.regen_current_voltage_clamp.value = kwargs['regen_current_voltage_clamp'] + + if "bias_voltage" in kwargs: + unused_args.remove("bias_voltage") + _message.settings.bias_voltage.value = kwargs['bias_voltage'] + + if "bias_voltage_waveform" in kwargs: + unused_args.remove("bias_voltage_waveform") + _message.settings.bias_voltage_waveform.CopyFrom(kwargs['bias_voltage_waveform']) + + if "int_capacitor" in kwargs: + unused_args.remove("int_capacitor") + _message.settings.int_capacitor.value = kwargs['int_capacitor'] + + if "lpf_time_constant" in kwargs: + unused_args.remove("lpf_time_constant") + _message.settings.lpf_time_constant = kwargs['lpf_time_constant'] + + if "timings" in kwargs: + unused_args.remove("timings") + _message.settings.timings.CopyFrom(kwargs['timings']) + + if "power_save_active" in kwargs: + unused_args.remove("power_save_active") + _message.settings.power_save_active.value = kwargs['power_save_active'] + + if "overload_protection" in kwargs: + unused_args.remove("overload_protection") + _message.settings.overload_protection.CopyFrom(kwargs['overload_protection']) + + if len(unused_args) > 0: + raise ArgumentError("Unexpected keyword arguments to change_device_settings: '{}'".format(", ".join(unused_args))) + + return run_with_retry(self._stub.change_device_settings, + _message, _timeout, + [], + "minknow_api.pebble_device.PebbleDeviceService") + def get_device_settings(self, _message=None, _timeout=None, **kwargs): + """Get the current settings which apply to the whole device. + + This RPC has no side effects. Calling it will have no effect on the state of the + system. It is safe to call repeatedly, or to retry on failure, although there is no + guarantee it will return the same information each time. + + Args: + _message (minknow_api.pebble_device_pb2.GetDeviceSettingsRequest, optional): The message to send. + This can be passed instead of the keyword arguments. + _timeout (float, optional): The call will be cancelled after this number of seconds + if it has not been completed. + + Returns: + minknow_api.pebble_device_pb2.GetDeviceSettingsResponse + + Note that the returned messages are actually wrapped in a type that collapses + submessages for fields marked with ``[rpc_unwrap]``. + """ + if _message is not None: + if isinstance(_message, MessageWrapper): + _message = _message._message + return run_with_retry(self._stub.get_device_settings, + _message, _timeout, + ['settings'], + "minknow_api.pebble_device.PebbleDeviceService") + + unused_args = set(kwargs.keys()) + + _message = GetDeviceSettingsRequest() + + if len(unused_args) > 0: + raise ArgumentError("Unexpected keyword arguments to get_device_settings: '{}'".format(", ".join(unused_args))) + + return run_with_retry(self._stub.get_device_settings, + _message, _timeout, + ['settings'], + "minknow_api.pebble_device.PebbleDeviceService") + def change_channel_settings(self, _message=None, _timeout=None, **kwargs): + """Change the settings which apply to the referenced channels. + + This RPC is idempotent. It may change the state of the system, but if the requested + change has already happened, it will not fail because of this, make any additional + changes or return a different value. + + Args: + _message (minknow_api.pebble_device_pb2.ChangeChannelSettingsRequest, optional): The message to send. + This can be passed instead of the keyword arguments. + _timeout (float, optional): The call will be cancelled after this number of seconds + if it has not been completed. + channels (minknow_api.pebble_device_pb2.ChangeChannelSettingsRequest.ChannelsEntry, optional): 1 based map of up to 400 different channel settings + channel_default (minknow_api.pebble_device_pb2.ChannelSettings, optional): If supplied, contains settings applied to every channel before then + applying any specific settings in the per channel settings. + + Returns: + minknow_api.pebble_device_pb2.ChangeChannelSettingsResponse + + Note that the returned messages are actually wrapped in a type that collapses + submessages for fields marked with ``[rpc_unwrap]``. + """ + if _message is not None: + if isinstance(_message, MessageWrapper): + _message = _message._message + return run_with_retry(self._stub.change_channel_settings, + _message, _timeout, + [], + "minknow_api.pebble_device.PebbleDeviceService") + + unused_args = set(kwargs.keys()) + + _message = ChangeChannelSettingsRequest() + + if "channels" in kwargs: + unused_args.remove("channels") + for key, value in kwargs['channels'].items(): + _message.channels[key].CopyFrom(value) + + if "channel_default" in kwargs: + unused_args.remove("channel_default") + _message.channel_default.CopyFrom(kwargs['channel_default']) + + if len(unused_args) > 0: + raise ArgumentError("Unexpected keyword arguments to change_channel_settings: '{}'".format(", ".join(unused_args))) + + return run_with_retry(self._stub.change_channel_settings, + _message, _timeout, + [], + "minknow_api.pebble_device.PebbleDeviceService") + def get_channel_settings(self, _message=None, _timeout=None, **kwargs): + """Get the channels settings for the requested channel's + + This RPC has no side effects. Calling it will have no effect on the state of the + system. It is safe to call repeatedly, or to retry on failure, although there is no + guarantee it will return the same information each time. + + Args: + _message (minknow_api.pebble_device_pb2.GetChannelSettingsRequest, optional): The message to send. + This can be passed instead of the keyword arguments. + _timeout (float, optional): The call will be cancelled after this number of seconds + if it has not been completed. + channels (int): The channels (one based) to return data for. + + Returns: + minknow_api.pebble_device_pb2.GetChannelSettingsResponse + + Note that the returned messages are actually wrapped in a type that collapses + submessages for fields marked with ``[rpc_unwrap]``. + """ + if _message is not None: + if isinstance(_message, MessageWrapper): + _message = _message._message + return run_with_retry(self._stub.get_channel_settings, + _message, _timeout, + [], + "minknow_api.pebble_device.PebbleDeviceService") + + unused_args = set(kwargs.keys()) + + _message = GetChannelSettingsRequest() + + if "channels" in kwargs: + unused_args.remove("channels") + _message.channels.extend(kwargs['channels']) + else: + raise ArgumentError("get_channel_settings requires a 'channels' argument") + + if len(unused_args) > 0: + raise ArgumentError("Unexpected keyword arguments to get_channel_settings: '{}'".format(", ".join(unused_args))) + + return run_with_retry(self._stub.get_channel_settings, + _message, _timeout, + [], + "minknow_api.pebble_device.PebbleDeviceService") + def change_research_only_settings(self, _message=None, _timeout=None, **kwargs): + """Experimental access for research purposes to modify low level settings + Note: Access will be removed once device integration complete + + This RPC is idempotent. It may change the state of the system, but if the requested + change has already happened, it will not fail because of this, make any additional + changes or return a different value. + + Note this API is experimental - it may be changed, revised or removed in future minor versions. + + Args: + _message (minknow_api.pebble_device_pb2.ChangeResearchOnlySettingsRequest, optional): The message to send. + This can be passed instead of the keyword arguments. + _timeout (float, optional): The call will be cancelled after this number of seconds + if it has not been completed. + asic_writes (minknow_api.pebble_device_pb2.ResearchOnlySettings.AsicRegisterWrite, optional): List of ASIC register writes to append + Use at own risk as no validation is performed on the address + or value of the individual writes. + + The number of writes in single request limited to 128 + due to internal MinKNOW limitations + INVALID_ARGUMENT will be returned if greater than this limit + instrument_writes (minknow_api.pebble_device_pb2.ResearchOnlySettings.InstrumentRegisterWrite, optional): List of instrument register writes + Use at own risk as no validation is performed on the address + or value of the individual writes. + + The number of writes in single request limited to 16 + due to internal MinKNOW limitations + INVALID_ARGUMENT will be returned if greater than this limit + + Returns: + minknow_api.pebble_device_pb2.ChangeResearchOnlySettingsResponse + + Note that the returned messages are actually wrapped in a type that collapses + submessages for fields marked with ``[rpc_unwrap]``. + """ + print("Warning: Method PebbleDeviceService.change_research_only_settings is experimental and may be changed, revised or removed in future minor versions.", file=sys.stderr) + if _message is not None: + if isinstance(_message, MessageWrapper): + _message = _message._message + return run_with_retry(self._stub.change_research_only_settings, + _message, _timeout, + [], + "minknow_api.pebble_device.PebbleDeviceService") + + unused_args = set(kwargs.keys()) + + _message = ChangeResearchOnlySettingsRequest() + + if "asic_writes" in kwargs: + unused_args.remove("asic_writes") + _message.settings.asic_writes.extend(kwargs['asic_writes']) + + if "instrument_writes" in kwargs: + unused_args.remove("instrument_writes") + _message.settings.instrument_writes.extend(kwargs['instrument_writes']) + + if len(unused_args) > 0: + raise ArgumentError("Unexpected keyword arguments to change_research_only_settings: '{}'".format(", ".join(unused_args))) + + return run_with_retry(self._stub.change_research_only_settings, + _message, _timeout, + [], + "minknow_api.pebble_device.PebbleDeviceService") diff --git a/python/minknow_api/promethion_device_pb2.py b/python/minknow_api/promethion_device_pb2.py index 35f9658..9f5e7fe 100644 --- a/python/minknow_api/promethion_device_pb2.py +++ b/python/minknow_api/promethion_device_pb2.py @@ -116,11 +116,152 @@ _globals['_GETTEMPERATURERESPONSE']._serialized_end=5418 _globals['_PROMETHIONDEVICESERVICE']._serialized_start=5421 _globals['_PROMETHIONDEVICESERVICE']._serialized_end=6499 -ChangeDeviceSettingsResponse.__doc__ = """Attributes: - real_sampling_frequency: - The sampling frequency actually applied to the hardware, as - close as possible to the requested rate. Note: only returned - if sampling rate was set as part of this call. +DeviceSettings.__doc__ = """Attributes: + sample_rate: + The number of measurements to take each second. Possible + values are between 1000, and 5000. If the value is outside of + this range, it will be clamped within it FAILED_PRECONDITION + will be returned if attempting to change during acquisition + temperature_target: + If the device is capable (see + device.get_device_info().temperature_controllable) then this + sets the minimum and maximum temperatures of the flow-cell. + These values must be between the limits specified in the + application config, see: min_user_setpoint_temperature_celsius + and max_user_setpoint_temperature_celsius + reference_voltage: + The reference voltage Vref This value must be within the + range of [700..1100](mV) and will be rounded down to the + nearest 50mV. INVALID_ARGUMENT will be returned if outside + these limits + unblock_voltage: + The unblock voltage to apply when a channel is unblocking. + The acceptable input range depends on Vref The default Vref of + 900mV gives the unblock level a range between [-840..900]mV + INVALID_ARGUMENT will be returned if outside of the limits set + depending on Vref + regen_current_range: + Determines the range of regen current available for selection + Range 0.5nA, step 0.1nA Range 0.667nA, step 0.133nA + Range 1.0nA, step 0.2nA (DEFAULT) Range 2.0nA, step + 0.4nA INVALID_ARGUMENT will be returned if range option does + not exist + regen_current: + Control the regeneration current used when regenerating + well's. The acceptable value is in pico Amps and depends on + the specified regen_current_range option. Will round down to + nearest acceptable step in value within the range. + INVALID_ARGUMENT will be returned if outside the acceptable + range + regen_current_voltage_clamp: + Voltage clamp for regeneration circuit (in millivolts) The + voltage in the regeneration circuit is clamped under this + value, whilst applying the current specified in each quads + settings. This is a +/- voltage relative to Vref The polarity + is determined by the regen current With a default Vref of + 900mV this gives the regen level a range of [0..840]mV + INVALID_ARGUMENT will be returned if outside the acceptable + range + bias_voltage_setting: + Settings controlling the device bias voltage + bias_voltage: + The value to apply as the bias voltage (in millivolts) Valid + values are in the range -1250mv..1250mv + bias_voltage_waveform: + The waveform settings + int_capacitor: + Integration capacitor used for controlling the Gain This size + of the capacitance used is based on the provided setting with + a value of [0..31] Refer to §2.3.1 of the OG2 ASIC + documentation for both the nominal and measured capacitance + that each setting produces. This value is applied globally to + all QUADs and therefore all channels INVALID_ARGUMENT will be + returned if outside the range of [0..31] + lpf_time_constant: + Low pass filter time constant This modifies the anti-alias + resistor to produce a specific time constant for the low pass + filter. + timings: + If specified, the device will adopt these timings to set how + long is spent at various stages of the current digitisation + processes. The message includes a way of returning to default + timings. This value cannot be changed during acquisition + power_save_active: + Enable ASIC power save. Setting to active will save power, + but doing so will allow the ASIC to cool down, and it will + take time to heat it up again along with performing a device + reset. + overload_protection: + Settings for the hardware based saturation/overload protection + (spike suppression) + sampling_frequency: + The number of measurements to take each second. Possible + values are between 1000, and 10000. If the value is outside of + this range, it will be clamped within it This value cannot be + changed during acquisition. + ramp_voltage: + The value to apply as the ramp voltage (in millivolts) Valid + values are in the range -1250mv..1250mv + saturation_control_enabled: + Enables saturation control on the device + fast_calibration_enabled: + Enable use of the fast calibration mode across the device + DEPRECATED since 5.5. This will be removed in a future + release. +""" +TimingEnginePeriods.__doc__ = """ Timing-engine periods are specified in 5ns units. Some of the timing +mechanism can only achieve 10ns accuracy, so even numbers are +preferred. Note: There is a timing feature in the ASIC that requires +the sum of the RST1 and DATA periods to be a multiple of 16 + +Attributes: + states: + Zero index based map [0-15] of up to 16 timing engine states + use_default_values: + If written true, other fields will be ignored and the hardware + will use default timings. When read will return true if + previously set true, it will not tell you if the timing + periods you previously entered are the same as the default + values. + RST1: + Reset1 phase Note: Commands are written to the ASIC during + this period, to allow sufficient time to write the commands, + this should never be less than 1.2us or 240. + RST1_CDS1: + Reset1 to CDS1 transition + CDS1: + CDS1 phase (Correlated Double Sampling) sample-point 1 + CDS1_DATA: + CDS1 to DATA transition + DATA: + DATA transfer phase NOTE: Setting this value has no effect, + MinKNOW will choose a value for DATA itself to achieve the + required frame-rate. Reading it will return the chosen DATA + period. + DATA_RST2: + DATA transfer to Reset2 transition. MinKNOW may increase this + value by small amounts so that when changing the DATA period, + the sum of the RST1 and DATA periods is a multiple of 16 and + the frame-rate and integration-period are maintained. + RST2: + Reset2 + RST2_CDS2: + Reset2 to CDS2 transition + CDS2: + CDS2 Phase (sample-point 2) + CDS2_SH: + CDS2 to SH transition + SH: + SH phase (Sample and Hold) + SH_RST1: + SH to Reset1 transition +""" +ChangePixelSettingsRequest.__doc__ = """Attributes: + pixels: + 1 based map of up to 3000 different pixel settings + pixel_default: + If supplied, contains settings applied to every pixel before + then applying any specific settings in the per pixel settings. """ PixelSettings.__doc__ = """Attributes: input: @@ -152,33 +293,52 @@ current via the channel adc value. bias_current: The bias current for the amplifier - this controls the level - of noise of the signal. The higher the bias current, the - lower the noise, but the bigger the heat and power drawn by - the amplifier. If it is set to off, no signal readings can be + of noise of the signal. The higher the bias current, the lower + the noise, but the bigger the heat and power drawn by the + amplifier. If it is set to off, no signal readings can be made. """ -StreamTemperatureRequest.__doc__ = """Attributes: - period_seconds: - How often temperature updates should be sent Defaults to a - period of 1 second, if not specified, or set to 0 - acquisition_run_id: - The acquisition id of the experiment. - data_selection: - The desired data selection. The units for all values are - `seconds since the start of the experiment`. +ChangeDeviceSettingsResponse.__doc__ = """Attributes: + real_sample_rate: + The sampling frequency actually applied to the hardware, as + close as possible to the requested rate. Note: only returned + if sampling rate was set as part of this call. + real_sampling_frequency: + The sampling frequency actually applied to the hardware, as + close as possible to the requested rate. Note: only returned + if sampling rate was set as part of this call. +""" +PixelSettings.InputWell.__doc__ = """Attributes: + input_well: + Control which well is driving the adc minknow reads from. ALL + is not a valid value here (other values are acceptable). + regeneration_well: + Control which wells are being regenerated (has the specified + regeneration current driven to it). All possible Input values + are acceptable, as long as the input is not the active adc + input. For example, { input: 1, regeneration: all } is + invalid, as an well cannot be both input and regenerated. +""" +GetPixelSettingsRequest.__doc__ = """Attributes: + pixels: + The channels (one based) to return data for. A sparse map is + accepted """ WaveformSettings.__doc__ = """Attributes: voltages: The waveform data applied to the device (in millivolts) Must contain 32 values, in order to be a valid waveform. + samples_per_entry: + The number of samples each wavetable entry will be valid for + Valid value must be between [1..31] INVALID_ARGUMENT will be + returned if not between these values frequency: The frequency of the applied waveform, in Hz. Valid values are between 7.8125Hz and 500Hz. """ -GetPixelSettingsRequest.__doc__ = """Attributes: +GetPixelSettingsResponse.__doc__ = """Attributes: pixels: - The channels (one based) to return data for. A sparse map is - accepted + List of all requested pixel settings, in the order requested. """ GetTemperatureResponse.__doc__ = """Attributes: target_temperature: @@ -194,99 +354,6 @@ Temperature measured at each sensor in the ASIC, there are 12 sensors, one sensor per pixel-block """ -ChangePixelBlockSettingsRequest.__doc__ = """Attributes: - pixel_blocks: - 1 based map of different pixel blocks settings, a sparse map - is accepted, keys should be integers between 1 and 12. - pixel_block_default: - If supplied, contains settings applied to every block before - then applying any specific settings in the per block settings. -""" -TimingEnginePeriods.__doc__ = """ Timing-engine periods are specified in 5ns units. Some of the timing -mechanism can only achieve 10ns accuracy, so even numbers are -preferred. Note: There is a timing feature in the ASIC that requires -the sum of the RST1 and DATA periods to be a multiple of 16 - -Attributes: - RST1: - Reset1 phase Note: Commands are written to the ASIC during - this period, to allow sufficient time to write the commands, - this should never be less than 1.2us or 240. - RST1_CDS1: - Reset1 to CDS1 transition - CDS1: - CDS1 phase (Correlated Double Sampling) sample-point 1 - CDS1_DATA: - CDS1 to DATA transition - DATA: - DATA transfer phase NOTE: Setting this value has no effect, - MinKNOW will choose a value for DATA itself to achieve the - required frame-rate. Reading it will return the chosen DATA - period. - DATA_RST2: - DATA transfer to Reset2 transition. MinKNOW may increase this - value by small amounts so that when changing the DATA period, - the sum of the RST1 and DATA periods is a multiple of 16 and - the frame-rate and integration-period are maintained. - RST2: - Reset2 - RST2_CDS2: - Reset2 to CDS2 transition - CDS2: - CDS2 Phase (sample-point 2) - CDS2_SH: - CDS2 to SH transition - SH: - SH phase (Sample and Hold) - SH_RST1: - SH to Reset1 transition - use_default_values: - If written true, other fields will be ignored and the hardware - will use default timings. When read will return true if - previously set true, it will not tell you if the timing - periods you previously entered are the same as the default - values. -""" -GetPixelBlockSettingsResponse.__doc__ = """Attributes: - pixel_blocks: - 1 based map of different pixel blocks settings, containing 12 - entries. -""" -DeviceSettings.__doc__ = """Attributes: - sampling_frequency: - The number of measurements to take each second. Possible - values are between 1000, and 10000. If the value is outside of - this range, it will be clamped within it This value cannot be - changed during acquisition. - ramp_voltage: - The value to apply as the ramp voltage (in millivolts) Valid - values are in the range -1250mv..1250mv - bias_voltage_setting: - Settings controlling the device bias voltage - bias_voltage: - The value to apply as the bias voltage (in millivolts) Valid - values are in the range -1250mv..1250mv - bias_voltage_waveform: - The waveform settings - saturation_control_enabled: - Enables saturation control on the device - fast_calibration_enabled: - Enable use of the fast calibration mode across the device - DEPRECATED since 5.5. This will be removed in a future - release. - temperature_target: - If the device is capable (see - device.get_device_info().temperature_controllable) then this - sets the minimum and maximum temperatures of the flow-cell. - These values must be between the limits specified in the - application config, see: min_user_setpoint_temperature_celsius - and max_user_setpoint_temperature_celsius - timings: - If specified, the device will adopt these timings to set how - long is spent at various stages of the current digitisation - processes. The message includes a way of returning to default - timings. This value cannot be changed during acquisition -""" PixelBlockSettings.__doc__ = """Attributes: regen_current_voltage_clamp: Voltage clamp for regeneration circuit (in millivolts) The @@ -298,26 +365,27 @@ The unblock voltage to apply when a pixel is unblocking. The acceptable input range is -1000..1000 (inclusive) """ -PixelSettings.InputWell.__doc__ = """Attributes: - input_well: - Control which well is driving the adc minknow reads from. ALL - is not a valid value here (other values are acceptable). - regeneration_well: - Control which wells are being regenerated (has the specified - regeneration current driven to it). All possible Input values - are acceptable, as long as the input is not the active adc - input. For example, { input: 1, regeneration: all } is - invalid, as an well cannot be both input and regenerated. +ChangePixelBlockSettingsRequest.__doc__ = """Attributes: + pixel_blocks: + 1 based map of different pixel blocks settings, a sparse map + is accepted, keys should be integers between 1 and 12. + pixel_block_default: + If supplied, contains settings applied to every block before + then applying any specific settings in the per block settings. """ -GetPixelSettingsResponse.__doc__ = """Attributes: - pixels: - List of all requested pixel settings, in the order requested. +GetPixelBlockSettingsResponse.__doc__ = """Attributes: + pixel_blocks: + 1 based map of different pixel blocks settings, containing 12 + entries. """ -ChangePixelSettingsRequest.__doc__ = """Attributes: - pixels: - 1 based map of up to 3000 different pixel settings - pixel_default: - If supplied, contains settings applied to every pixel before - then applying any specific settings in the per pixel settings. +StreamTemperatureRequest.__doc__ = """Attributes: + period_seconds: + How often temperature updates should be sent Defaults to a + period of 1 second, if not specified, or set to 0 + acquisition_run_id: + The acquisition id of the experiment. + data_selection: + The desired data selection. The units for all values are + `seconds since the start of the experiment`. """ # @@protoc_insertion_point(module_scope) diff --git a/python/minknow_api/protocol_pb2.py b/python/minknow_api/protocol_pb2.py index 3d28e4c..9e3f006 100644 --- a/python/minknow_api/protocol_pb2.py +++ b/python/minknow_api/protocol_pb2.py @@ -22,7 +22,7 @@ from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1aminknow_api/protocol.proto\x12\x14minknow_api.protocol\x1a\x1dminknow_api/acquisition.proto\x1a$minknow_api/analysis_workflows.proto\x1a\x1cminknow_api/basecaller.proto\x1a\x18minknow_api/device.proto\x1a#minknow_api/protocol_settings.proto\x1a\x1dminknow_api/rpc_options.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\xcb\x03\n\x0f\x42\x61rcodeUserData\x12\x14\n\x0c\x62\x61rcode_name\x18\x01 \x01(\t\x12\x1d\n\x15\x62\x61rcode_name_internal\x18\x05 \x01(\t\x12\x17\n\x0flamp_barcode_id\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t\x12>\n\x04type\x18\x04 \x01(\x0e\x32\x30.minknow_api.protocol.BarcodeUserData.SampleType\x12P\n\x0epassenger_info\x18\x06 \x03(\x0b\x32\x38.minknow_api.protocol.BarcodeUserData.PassengerInfoEntry\x1a\x34\n\x12PassengerInfoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x92\x01\n\nSampleType\x12\x0f\n\x0btest_sample\x10\x00\x12\x14\n\x10positive_control\x10\x01\x12\x14\n\x10negative_control\x10\x02\x12\x17\n\x13no_template_control\x10\x03\x12\x16\n\x12positive_control_1\x10\x04\x12\x16\n\x12positive_control_2\x10\x05\"A\n\x07KitInfo\x12\x16\n\x0esequencing_kit\x18\x01 \x01(\t\x12\x1e\n\x16\x62\x61rcode_expansion_kits\x18\x02 \x03(\t\"\xf8\x02\n\x13ProtocolRunUserInfo\x12\x37\n\x11protocol_group_id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\tsample_id\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12@\n\x11\x62\x61rcode_user_info\x18\x03 \x03(\x0b\x32%.minknow_api.protocol.BarcodeUserData\x12\x41\n\x1buser_specified_flow_cell_id\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x41\n\x1buser_specified_product_code\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08kit_info\x18\x06 \x01(\x0b\x32\x1d.minknow_api.protocol.KitInfo\"R\n\x13OffloadLocationInfo\x12\x1c\n\x14offload_location_ids\x18\x01 \x03(\t\x12\x1d\n\x15offload_location_path\x18\x02 \x01(\t\"\xba\x01\n\x17\x41nalysisWorkflowRequest\x12\x43\n\rproxy_request\x18\x01 \x01(\x0b\x32,.minknow_api.analysis_workflows.ProxyRequest\x12@\n\x04when\x18\x02 \x01(\x0e\x32\x32.minknow_api.protocol.AnalysisWorkflowRequest.When\"\x18\n\x04When\x12\x10\n\x0cPROTOCOL_END\x10\x00\"\xf2\x02\n\x14StartProtocolRequest\x12\x18\n\nidentifier\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12\x0c\n\x04\x61rgs\x18\x02 \x03(\t\x12<\n\tuser_info\x18\x03 \x01(\x0b\x32).minknow_api.protocol.ProtocolRunUserInfo\x12H\n\x15offload_location_info\x18\x04 \x01(\x0b\x32).minknow_api.protocol.OffloadLocationInfo\x12R\n\x19target_run_until_criteria\x18\x05 \x01(\x0b\x32/.minknow_api.acquisition.TargetRunUntilCriteria\x12P\n\x19\x61nalysis_workflow_request\x18\x07 \x01(\x0b\x32-.minknow_api.protocol.AnalysisWorkflowRequestJ\x04\x08\x06\x10\x07\"\'\n\x15StartProtocolResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"c\n\x13StopProtocolRequest\x12L\n\x13\x64\x61ta_action_on_stop\x18\x01 \x01(\x0e\x32/.minknow_api.acquisition.StopRequest.DataAction\"\x16\n\x14StopProtocolResponse\"\x16\n\x14PauseProtocolRequest\"\x17\n\x15PauseProtocolResponse\"\x17\n\x15ResumeProtocolRequest\"\x18\n\x16ResumeProtocolResponse\"\x17\n\x15TriggerMuxScanRequest\"\x18\n\x16TriggerMuxScanResponse\",\n\x14ListProtocolsRequest\x12\x14\n\x0c\x66orce_reload\x18\x01 \x01(\x08\"\xff\x03\n\x0cProtocolInfo\x12\x12\n\nidentifier\x18\x01 \x01(\t\x12:\n\x04tags\x18\x02 \x03(\x0b\x32,.minknow_api.protocol.ProtocolInfo.TagsEntry\x12\x0c\n\x04name\x18\x03 \x01(\t\x12U\n\x15tag_extraction_result\x18\x04 \x01(\x0b\x32\x36.minknow_api.protocol.ProtocolInfo.TagExtractionResult\x1a\xa1\x01\n\x08TagValue\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x14\n\nbool_value\x18\x02 \x01(\x08H\x00\x12\x13\n\tint_value\x18\x03 \x01(\x03H\x00\x12\x16\n\x0c\x64ouble_value\x18\x04 \x01(\x01H\x00\x12\x15\n\x0b\x61rray_value\x18\x05 \x01(\tH\x00\x12\x16\n\x0cobject_value\x18\x06 \x01(\tH\x00\x42\x0b\n\ttag_value\x1a<\n\x13TagExtractionResult\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x14\n\x0c\x65rror_report\x18\x02 \x01(\t\x1aX\n\tTagsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12:\n\x05value\x18\x02 \x01(\x0b\x32+.minknow_api.protocol.ProtocolInfo.TagValue:\x02\x38\x01\"N\n\x15ListProtocolsResponse\x12\x35\n\tprotocols\x18\x01 \x03(\x0b\x32\".minknow_api.protocol.ProtocolInfo\"\xff\x01\n\x16WaitForFinishedRequest\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12M\n\x05state\x18\x02 \x01(\x0e\x32>.minknow_api.protocol.WaitForFinishedRequest.NotificationState\x12\x0f\n\x07timeout\x18\x03 \x01(\x02\"o\n\x11NotificationState\x12\x19\n\x15NOTIFY_ON_TERMINATION\x10\x00\x12\x1d\n\x19NOTIFY_BEFORE_TERMINATION\x10\x01\x12 \n\x1cNOTIFY_ON_SCRIPT_TERMINATION\x10\x02\"#\n\x11GetRunInfoRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"\xa5\x03\n\rRequestOrigin\x12\x38\n\x04user\x18\x01 \x01(\x0b\x32(.minknow_api.protocol.RequestOrigin.UserH\x00\x12>\n\x07minknow\x18\x02 \x01(\x0b\x32+.minknow_api.protocol.RequestOrigin.MinKNOWH\x00\x12`\n\x19protocol_phase_management\x18\x03 \x01(\x0b\x32;.minknow_api.protocol.RequestOrigin.ProtocolPhaseManagementH\x00\x12\x41\n\trun_until\x18\x04 \x01(\x0b\x32,.minknow_api.protocol.RequestOrigin.RunUntilH\x00\x1a\x18\n\x04User\x12\x10\n\x08identity\x18\x01 \x01(\t\x1a\x18\n\x07MinKNOW\x12\r\n\x05\x63\x61use\x18\x01 \x01(\t\x1a\x19\n\x17ProtocolPhaseManagement\x1a\x1c\n\x08RunUntil\x12\x10\n\x08\x63riteria\x18\x01 \x01(\tB\x08\n\x06origin\"2\n\x17\x45pi2meWorkflowReference\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0b\n\x03url\x18\x02 \x01(\t\"\xf7\x01\n AssociatedPostProcessingAnalysis\x12\x12\n\nstarted_id\x18\x01 \x01(\t\x12;\n\rstart_request\x18\x02 \x01(\x0b\x32$.minknow_api.basecaller.StartRequest\x12K\n\x05state\x18\x03 \x01(\x0e\x32<.minknow_api.protocol.AssociatedPostProcessingAnalysis.State\"5\n\x05State\x12\n\n\x06QUEUED\x10\x00\x12\x0b\n\x07STARTED\x10\x01\x12\x13\n\x0f\x46\x41ILED_TO_START\x10\x02\"R\n\x10PlatformQcResult\x12\x14\n\x0c\x66low_cell_id\x18\x01 \x01(\t\x12\x0e\n\x06passed\x18\x02 \x01(\x08\x12\x18\n\x10total_pore_count\x18\x03 \x01(\r\"\xd4\x02\n\x13HardwareCheckResult\x12M\n\x06status\x18\x01 \x01(\x0e\x32=.minknow_api.protocol.HardwareCheckResult.HardwareCheckStatus\x12\\\n\x0e\x66\x61ilure_reason\x18\x02 \x01(\x0e\x32\x44.minknow_api.protocol.HardwareCheckResult.HardwareCheckFailureReason\"G\n\x13HardwareCheckStatus\x12\x08\n\x04None\x10\x00\x12\x0b\n\x07Started\x10\x01\x12\r\n\tSucceeded\x10\x02\x12\n\n\x06\x46\x61iled\x10\x03\"G\n\x1aHardwareCheckFailureReason\x12\x0b\n\x07NoError\x10\x00\x12\x0b\n\x07Unknown\x10\x01\x12\x0f\n\x0bScriptError\x10\x02\"&\n\x0f\x45xternalOffload\x12\x13\n\x0boffload_ids\x18\x01 \x03(\t\"\xa6\x05\n\x16GetVersionInfoResponse\x12L\n\x07minknow\x18\x01 \x01(\x0b\x32;.minknow_api.protocol.GetVersionInfoResponse.MinknowVersion\x12\r\n\x05\x62ream\x18\x02 \x01(\t\x12\x1c\n\x14\x64istribution_version\x18\x03 \x01(\t\x12\\\n\x13\x64istribution_status\x18\x04 \x01(\x0e\x32?.minknow_api.protocol.GetVersionInfoResponse.DistributionStatus\x12\x1e\n\x16protocol_configuration\x18\x05 \x01(\t\x12X\n\x11installation_type\x18\x06 \x01(\x0e\x32=.minknow_api.protocol.GetVersionInfoResponse.InstallationType\x12 \n\x18\x62\x61secaller_build_version\x18\t \x01(\t\x12$\n\x1c\x62\x61secaller_connected_version\x18\n \x01(\t\x1aK\n\x0eMinknowVersion\x12\r\n\x05major\x18\x01 \x01(\x05\x12\r\n\x05minor\x18\x02 \x01(\x05\x12\r\n\x05patch\x18\x03 \x01(\x05\x12\x0c\n\x04\x66ull\x18\x04 \x01(\t\"I\n\x12\x44istributionStatus\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06STABLE\x10\x01\x12\x0c\n\x08UNSTABLE\x10\x02\x12\x0c\n\x08MODIFIED\x10\x03\"M\n\x10InstallationType\x12\x07\n\x03ONT\x10\x00\x12\x06\n\x02NC\x10\x01\x12\x08\n\x04PROD\x10\x02\x12\r\n\tQ_RELEASE\x10\x03\x12\x0f\n\x0bOND_RELEASE\x10\x04J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\t\"\x9d\x03\n\x14\x41nalysisWorkflowInfo\x12>\n\x07request\x18\x01 \x01(\x0b\x32-.minknow_api.protocol.AnalysisWorkflowRequest\x12\x13\n\x0bworkflow_id\x18\x02 \x01(\t\x12\x15\n\rworkflow_name\x18\x03 \x01(\t\x12\x18\n\x10workflow_version\x18\x04 \x01(\t\x12J\n\x0fworkflow_status\x18\x05 \x01(\x0e\x32\x31.minknow_api.protocol.AnalysisWorkflowInfo.Status\x12\x1c\n\x14workflow_stop_reason\x18\x06 \x01(\t\x12\x14\n\x0creport_names\x18\x07 \x03(\t\"\x7f\n\x06Status\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06QUEUED\x10\x06\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tCOMPLETED\x10\x02\x12\x13\n\x0fSTOPPED_BY_USER\x10\x03\x12\x16\n\x12STOPPED_WITH_ERROR\x10\x04\x12\x13\n\x0f\x46\x41ILED_TO_START\x10\x05\"\x81\x0c\n\x0fProtocolRunInfo\x12\x0e\n\x06run_id\x18\x01 \x01(\t\x12\x13\n\x0bprotocol_id\x18\x02 \x01(\t\x12\x0c\n\x04\x61rgs\x18\x03 \x03(\t\x12\x45\n\x08settings\x18\x19 \x03(\x0b\x32\x33.minknow_api.protocol.ProtocolRunInfo.SettingsEntry\x12\x13\n\x0boutput_path\x18\x0b \x01(\t\x12!\n\x14reported_output_path\x18\x18 \x01(\tH\x00\x88\x01\x01\x12\x32\n\x05state\x18\x04 \x01(\x0e\x32#.minknow_api.protocol.ProtocolState\x12\x32\n\x05phase\x18\x10 \x01(\x0e\x32#.minknow_api.protocol.ProtocolPhase\x12\x35\n\x11last_phase_change\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x11\n\tcan_pause\x18\x12 \x01(\x08\x12\x1c\n\x14\x63\x61n_trigger_mux_scan\x18\x13 \x01(\x08\x12.\n\nstart_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x33\n\x0fscript_end_time\x18\t \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x38\n\x0bstop_origin\x18\x17 \x01(\x0b\x32#.minknow_api.protocol.RequestOrigin\x12\x1b\n\x13\x61\x63quisition_run_ids\x18\x07 \x03(\t\x12<\n\tuser_info\x18\x08 \x01(\x0b\x32).minknow_api.protocol.ProtocolRunUserInfo\x12G\n\x10\x65pi2me_workflows\x18\n \x03(\x0b\x32-.minknow_api.protocol.Epi2meWorkflowReference\x12\x39\n\x06\x64\x65vice\x18\x0c \x01(\x0b\x32).minknow_api.device.GetDeviceInfoResponse\x12>\n\tflow_cell\x18\r \x01(\x0b\x32+.minknow_api.device.GetFlowCellInfoResponse\x12\x35\n\tmeta_info\x18\x0e \x01(\x0b\x32\".minknow_api.protocol.ProtocolInfo\x12\x63\n#associated_post_processing_analysis\x18\x0f \x03(\x0b\x32\x36.minknow_api.protocol.AssociatedPostProcessingAnalysis\x12\x45\n\x11\x61nalysis_workflow\x18\x1b \x01(\x0b\x32*.minknow_api.protocol.AnalysisWorkflowInfo\x12:\n\npqc_result\x18\x14 \x01(\x0b\x32&.minknow_api.protocol.PlatformQcResult\x12H\n\x15hardware_check_result\x18\x1a \x01(\x0b\x32).minknow_api.protocol.HardwareCheckResult\x12?\n\x10\x65xternal_offload\x18\x15 \x01(\x0b\x32%.minknow_api.protocol.ExternalOffload\x12G\n\x11software_versions\x18\x16 \x01(\x0b\x32,.minknow_api.protocol.GetVersionInfoResponse\x1at\n\rSettingsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12R\n\x05value\x18\x02 \x01(\x0b\x32\x43.minknow_api.protocol_settings.ProtocolSetting.ProtocolSettingValue:\x02\x38\x01\x42\x17\n\x15_reported_output_path\"\xfb\x03\n\rFilteringInfo\x12H\n\npqc_filter\x18\x01 \x01(\x0b\x32\x34.minknow_api.protocol.FilteringInfo.PlatformQcFilter\x12V\n\x15hardware_check_filter\x18\x04 \x01(\x0b\x32\x37.minknow_api.protocol.FilteringInfo.HardwareCheckFilter\x12\x1e\n\x11protocol_group_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12M\n\x15\x65xperiment_start_time\x18\x03 \x01(\x0b\x32..minknow_api.protocol.FilteringInfo.TimeFilter\x1a>\n\x10PlatformQcFilter\x12\x19\n\x0c\x66low_cell_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x0f\n\r_flow_cell_id\x1a\x15\n\x13HardwareCheckFilter\x1al\n\nTimeFilter\x12/\n\x0bstart_range\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12-\n\tend_range\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x14\n\x12_protocol_group_id\"S\n\x17ListProtocolRunsRequest\x12\x38\n\x0b\x66ilter_info\x18\x01 \x01(\x0b\x32#.minknow_api.protocol.FilteringInfo\"+\n\x18ListProtocolRunsResponse\x12\x0f\n\x07run_ids\x18\x01 \x03(\t\"\x1e\n\x1cGetCurrentProtocolRunRequest\"X\n\x1dGetCurrentProtocolRunResponse\x12\x37\n\x08run_info\x18\x03 \x01(\x0b\x32%.minknow_api.protocol.ProtocolRunInfo\" \n\x1eWatchCurrentProtocolRunRequest\"\x17\n\x15GetContextInfoRequest\"\xa1\x01\n\x16GetContextInfoResponse\x12S\n\x0c\x63ontext_info\x18\x01 \x03(\x0b\x32=.minknow_api.protocol.GetContextInfoResponse.ContextInfoEntry\x1a\x32\n\x10\x43ontextInfoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x9f\x01\n\x15SetContextInfoRequest\x12R\n\x0c\x63ontext_info\x18\x01 \x03(\x0b\x32<.minknow_api.protocol.SetContextInfoRequest.ContextInfoEntry\x1a\x32\n\x10\x43ontextInfoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x18\n\x16SetContextInfoResponse\"\x1b\n\x19GetProtocolPurposeRequest\"-\n\x1aGetProtocolPurposeResponse\x12\x0f\n\x07purpose\x18\x01 \x01(\t\",\n\x19SetProtocolPurposeRequest\x12\x0f\n\x07purpose\x18\x01 \x01(\t\"\x1c\n\x1aSetProtocolPurposeResponse\"~\n\x18\x41\x64\x64\x45pi2meWorkflowRequest\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12L\n\x0f\x65pi2me_workflow\x18\x02 \x01(\x0b\x32-.minknow_api.protocol.Epi2meWorkflowReferenceB\x04\x88\xb5\x18\x01\"\x1b\n\x19\x41\x64\x64\x45pi2meWorkflowResponse\"`\n\x13ProtocolGroupIdInfo\x12\x19\n\x11protocol_group_id\x18\x01 \x01(\t\x12.\n\nstart_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"W\n\x1bListProtocolGroupIdsRequest\x12\x38\n\x0b\x66ilter_info\x18\x01 \x01(\x0b\x32#.minknow_api.protocol.FilteringInfo\"\x86\x01\n\x1cListProtocolGroupIdsResponse\x12\x1a\n\x12protocol_group_ids\x18\x01 \x03(\t\x12J\n\x17protocol_group_ids_info\x18\x02 \x03(\x0b\x32).minknow_api.protocol.ProtocolGroupIdInfo\"\x1b\n\x19\x42\x65ginHardwareCheckRequest\",\n\x1a\x42\x65ginHardwareCheckResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"\x18\n\x16\x42\x65ginPlatformQcRequest\")\n\x17\x42\x65ginPlatformQcResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"\x8c\x05\n\x14\x42\x65ginProtocolRequest\x12\x14\n\nidentifier\x18\x01 \x01(\tH\x00\x12Q\n\ncomponents\x18\x02 \x01(\x0b\x32;.minknow_api.protocol_settings.ProtocolIdentifierComponentsH\x00\x12<\n\tuser_info\x18\x03 \x01(\x0b\x32).minknow_api.protocol.ProtocolRunUserInfo\x12H\n\x15offload_location_info\x18\x05 \x01(\x0b\x32).minknow_api.protocol.OffloadLocationInfo\x12R\n\x19target_run_until_criteria\x18\x06 \x01(\x0b\x32/.minknow_api.acquisition.TargetRunUntilCriteria\x12J\n\x08settings\x18\x04 \x03(\x0b\x32\x38.minknow_api.protocol.BeginProtocolRequest.SettingsEntry\x12P\n\x19\x61nalysis_workflow_request\x18\x08 \x01(\x0b\x32-.minknow_api.protocol.AnalysisWorkflowRequest\x1at\n\rSettingsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12R\n\x05value\x18\x02 \x01(\x0b\x32\x43.minknow_api.protocol_settings.ProtocolSetting.ProtocolSettingValue:\x02\x38\x01\x42\x15\n\x13protocol_identifierJ\x04\x08\x07\x10\x08\"\'\n\x15\x42\x65ginProtocolResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"q\n\x1aSetPlatformQcResultRequest\x12\x17\n\x0fprotocol_run_id\x18\x01 \x01(\t\x12:\n\npqc_result\x18\x02 \x01(\x0b\x32&.minknow_api.protocol.PlatformQcResult\"\x1d\n\x1bSetPlatformQcResultResponse\"s\n\x1dSetHardwareCheckResultRequest\x12\x17\n\x0fprotocol_run_id\x18\x01 \x01(\t\x12\x39\n\x06result\x18\x02 \x01(\x0b\x32).minknow_api.protocol.HardwareCheckResult\" \n\x1eSetHardwareCheckResultResponse\"u\n&AssociatePostProcessingAnalysisRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\t\x12;\n\rstart_request\x18\x02 \x01(\x0b\x32$.minknow_api.basecaller.StartRequest\"5\n\'AssociatePostProcessingAnalysisResponse\x12\n\n\x02id\x18\x01 \x01(\t\"7\n\x1f\x43learProtocolHistoryDataRequest\x12\x14\n\x0cprotocol_ids\x18\x01 \x03(\t\"\"\n ClearProtocolHistoryDataResponse\"\xf2\x01\n\x1eProtocolPhaseManagementRequest\x12[\n\x10set_capabilities\x18\x01 \x01(\x0b\x32\x41.minknow_api.protocol.ProtocolPhaseManagementRequest.Capabilities\x12\x32\n\x05phase\x18\x02 \x01(\x0e\x32#.minknow_api.protocol.ProtocolPhase\x1a?\n\x0c\x43\x61pabilities\x12\x11\n\tcan_pause\x18\x01 \x01(\x08\x12\x1c\n\x14\x63\x61n_trigger_mux_scan\x18\x02 \x01(\x08\"O\n\x1fProtocolPhaseManagementResponse\x12,\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x1c.minknow_api.protocol.Action\"O\n\x18GenerateRunReportRequest\x12\x17\n\x0fprotocol_run_id\x18\x01 \x01(\t\x12\x1a\n\x12include_input_data\x18\x02 \x01(\x08\"\x97\x01\n\x19GenerateRunReportResponse\x12\x17\n\x0fprotocol_run_id\x18\x01 \x01(\t\x12\x13\n\x0breport_data\x18\x02 \x01(\t\x12\x18\n\x10remaining_length\x18\x03 \x01(\x05\x12\x12\n\ninput_data\x18\x04 \x01(\t\x12\x1e\n\x16remaining_input_length\x18\x05 \x01(\x05*\xa9\x06\n\rProtocolState\x12\x14\n\x10PROTOCOL_RUNNING\x10\x00\x12$\n PROTOCOL_WAITING_FOR_TEMPERATURE\x10\x04\x12$\n PROTOCOL_WAITING_FOR_ACQUISITION\x10\x05\x12\x16\n\x12PROTOCOL_COMPLETED\x10\x01\x12\x1c\n\x18PROTOCOL_STOPPED_BY_USER\x10\x02\x12 \n\x1cPROTOCOL_FINISHED_WITH_ERROR\x10\x03\x12\'\n#PROTOCOL_FINISHED_WITH_DEVICE_ERROR\x10\x06\x12.\n*PROTOCOL_FINISHED_UNABLE_TO_SEND_TELEMETRY\x10\x07\x12/\n+PROTOCOL_FINISHED_WITH_FLOW_CELL_DISCONNECT\x10\x08\x12,\n(PROTOCOL_FINISHED_WITH_DEVICE_DISCONNECT\x10\t\x12,\n(PROTOCOL_FINISHED_WITH_ERROR_CALIBRATION\x10\x14\x12\x32\n.PROTOCOL_FINISHED_WITH_ERROR_BASECALL_SETTINGS\x10\x15\x12\x35\n1PROTOCOL_FINISHED_WITH_ERROR_TEMPERATURE_REQUIRED\x10\x16\x12.\n*PROTOCOL_FINISHED_WITH_ERROR_NO_DISK_SPACE\x10\x17\x12\x31\n-PROTOCOL_FINISHED_WITH_ERROR_TEMPERATURE_HIGH\x10\x19\x12\x39\n5PROTOCOL_FINISHED_WITH_ERROR_BASECALLER_COMMUNICATION\x10\x1a\x12\x36\n2PROTOCOL_FINISHED_WITH_NO_FLOWCELL_FOR_ACQUISITION\x10\x1b\x12\x37\n3PROTOCOL_FINISHED_WITH_ERROR_BASECALLER_UNAVAILABLE\x10\x1c*\xea\x01\n\rProtocolPhase\x12\x11\n\rPHASE_UNKNOWN\x10\x00\x12\x16\n\x12PHASE_INITIALISING\x10\x01\x12\x14\n\x10PHASE_SEQUENCING\x10\x02\x12 \n\x1cPHASE_PREPARING_FOR_MUX_SCAN\x10\x03\x12\x12\n\x0ePHASE_MUX_SCAN\x10\x04\x12\x10\n\x0cPHASE_PAUSED\x10\x05\x12\x11\n\rPHASE_PAUSING\x10\x06\x12)\n%PHASE_BAD_TEMPERATURE_AUTOMATIC_PAUSE\x10\x08\x12\x12\n\x0ePHASE_RESUMING\x10\x07*[\n\x06\x41\x63tion\x12\x0f\n\x0b\x41\x43TION_NONE\x10\x00\x12\x10\n\x0c\x41\x43TION_PAUSE\x10\x01\x12\x11\n\rACTION_RESUME\x10\x02\x12\x1b\n\x17\x41\x43TION_TRIGGER_MUX_SCAN\x10\x03\x32\xb7\x19\n\x0fProtocolService\x12k\n\x0estart_protocol\x12*.minknow_api.protocol.StartProtocolRequest\x1a+.minknow_api.protocol.StartProtocolResponse\"\x00\x12h\n\rstop_protocol\x12).minknow_api.protocol.StopProtocolRequest\x1a*.minknow_api.protocol.StopProtocolResponse\"\x00\x12n\n\x0epause_protocol\x12*.minknow_api.protocol.PauseProtocolRequest\x1a+.minknow_api.protocol.PauseProtocolResponse\"\x03\x90\x02\x02\x12q\n\x0fresume_protocol\x12+.minknow_api.protocol.ResumeProtocolRequest\x1a,.minknow_api.protocol.ResumeProtocolResponse\"\x03\x90\x02\x02\x12r\n\x10trigger_mux_scan\x12+.minknow_api.protocol.TriggerMuxScanRequest\x1a,.minknow_api.protocol.TriggerMuxScanResponse\"\x03\x90\x02\x02\x12m\n\x11wait_for_finished\x12,.minknow_api.protocol.WaitForFinishedRequest\x1a%.minknow_api.protocol.ProtocolRunInfo\"\x03\x90\x02\x01\x12\x63\n\x0cget_run_info\x12\'.minknow_api.protocol.GetRunInfoRequest\x1a%.minknow_api.protocol.ProtocolRunInfo\"\x03\x90\x02\x01\x12x\n\x12list_protocol_runs\x12-.minknow_api.protocol.ListProtocolRunsRequest\x1a..minknow_api.protocol.ListProtocolRunsResponse\"\x03\x90\x02\x01\x12z\n\x18get_current_protocol_run\x12\x32.minknow_api.protocol.GetCurrentProtocolRunRequest\x1a%.minknow_api.protocol.ProtocolRunInfo\"\x03\x90\x02\x01\x12\x80\x01\n\x1awatch_current_protocol_run\x12\x34.minknow_api.protocol.WatchCurrentProtocolRunRequest\x1a%.minknow_api.protocol.ProtocolRunInfo\"\x03\x90\x02\x01\x30\x01\x12n\n\x0elist_protocols\x12*.minknow_api.protocol.ListProtocolsRequest\x1a+.minknow_api.protocol.ListProtocolsResponse\"\x03\x90\x02\x02\x12r\n\x10get_context_info\x12+.minknow_api.protocol.GetContextInfoRequest\x1a,.minknow_api.protocol.GetContextInfoResponse\"\x03\x90\x02\x01\x12r\n\x10set_context_info\x12+.minknow_api.protocol.SetContextInfoRequest\x1a,.minknow_api.protocol.SetContextInfoResponse\"\x03\x90\x02\x02\x12~\n\x14get_protocol_purpose\x12/.minknow_api.protocol.GetProtocolPurposeRequest\x1a\x30.minknow_api.protocol.GetProtocolPurposeResponse\"\x03\x90\x02\x01\x12~\n\x14set_protocol_purpose\x12/.minknow_api.protocol.SetProtocolPurposeRequest\x1a\x30.minknow_api.protocol.SetProtocolPurposeResponse\"\x03\x90\x02\x02\x12x\n\x13\x61\x64\x64_epi2me_workflow\x12..minknow_api.protocol.AddEpi2meWorkflowRequest\x1a/.minknow_api.protocol.AddEpi2meWorkflowResponse\"\x00\x12\x85\x01\n\x17list_protocol_group_ids\x12\x31.minknow_api.protocol.ListProtocolGroupIdsRequest\x1a\x32.minknow_api.protocol.ListProtocolGroupIdsResponse\"\x03\x90\x02\x01\x12\x7f\n\x14\x62\x65gin_hardware_check\x12/.minknow_api.protocol.BeginHardwareCheckRequest\x1a\x30.minknow_api.protocol.BeginHardwareCheckResponse\"\x04\x98\xb5\x18\x01\x12v\n\x11\x62\x65gin_platform_qc\x12,.minknow_api.protocol.BeginPlatformQcRequest\x1a-.minknow_api.protocol.BeginPlatformQcResponse\"\x04\x98\xb5\x18\x01\x12o\n\x0e\x62\x65gin_protocol\x12*.minknow_api.protocol.BeginProtocolRequest\x1a+.minknow_api.protocol.BeginProtocolResponse\"\x04\x98\xb5\x18\x01\x12\x82\x01\n\x16set_platform_qc_result\x12\x30.minknow_api.protocol.SetPlatformQcResultRequest\x1a\x31.minknow_api.protocol.SetPlatformQcResultResponse\"\x03\x90\x02\x02\x12\x8b\x01\n\x19set_hardware_check_result\x12\x33.minknow_api.protocol.SetHardwareCheckResultRequest\x1a\x34.minknow_api.protocol.SetHardwareCheckResultResponse\"\x03\x90\x02\x02\x12\xb0\x01\n/associate_post_processing_analysis_for_protocol\x12<.minknow_api.protocol.AssociatePostProcessingAnalysisRequest\x1a=.minknow_api.protocol.AssociatePostProcessingAnalysisResponse\"\x00\x12\x8e\x01\n\x1b\x63lear_protocol_history_data\x12\x35.minknow_api.protocol.ClearProtocolHistoryDataRequest\x1a\x36.minknow_api.protocol.ClearProtocolHistoryDataResponse\"\x00\x12\x8e\x01\n\x19protocol_phase_management\x12\x34.minknow_api.protocol.ProtocolPhaseManagementRequest\x1a\x35.minknow_api.protocol.ProtocolPhaseManagementResponse\"\x00(\x01\x30\x01\x12}\n\x13generate_run_report\x12..minknow_api.protocol.GenerateRunReportRequest\x1a/.minknow_api.protocol.GenerateRunReportResponse\"\x03\x90\x02\x02\x30\x01\x42&\n\x1c\x63om.nanoporetech.minknow_api\xa2\x02\x05MKAPIb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1aminknow_api/protocol.proto\x12\x14minknow_api.protocol\x1a\x1dminknow_api/acquisition.proto\x1a$minknow_api/analysis_workflows.proto\x1a\x1cminknow_api/basecaller.proto\x1a\x18minknow_api/device.proto\x1a#minknow_api/protocol_settings.proto\x1a\x1dminknow_api/rpc_options.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\xcb\x03\n\x0f\x42\x61rcodeUserData\x12\x14\n\x0c\x62\x61rcode_name\x18\x01 \x01(\t\x12\x1d\n\x15\x62\x61rcode_name_internal\x18\x05 \x01(\t\x12\x17\n\x0flamp_barcode_id\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t\x12>\n\x04type\x18\x04 \x01(\x0e\x32\x30.minknow_api.protocol.BarcodeUserData.SampleType\x12P\n\x0epassenger_info\x18\x06 \x03(\x0b\x32\x38.minknow_api.protocol.BarcodeUserData.PassengerInfoEntry\x1a\x34\n\x12PassengerInfoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x92\x01\n\nSampleType\x12\x0f\n\x0btest_sample\x10\x00\x12\x14\n\x10positive_control\x10\x01\x12\x14\n\x10negative_control\x10\x02\x12\x17\n\x13no_template_control\x10\x03\x12\x16\n\x12positive_control_1\x10\x04\x12\x16\n\x12positive_control_2\x10\x05\"A\n\x07KitInfo\x12\x16\n\x0esequencing_kit\x18\x01 \x01(\t\x12\x1e\n\x16\x62\x61rcode_expansion_kits\x18\x02 \x03(\t\"\xf8\x02\n\x13ProtocolRunUserInfo\x12\x37\n\x11protocol_group_id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\tsample_id\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12@\n\x11\x62\x61rcode_user_info\x18\x03 \x03(\x0b\x32%.minknow_api.protocol.BarcodeUserData\x12\x41\n\x1buser_specified_flow_cell_id\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x41\n\x1buser_specified_product_code\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x08kit_info\x18\x06 \x01(\x0b\x32\x1d.minknow_api.protocol.KitInfo\"R\n\x13OffloadLocationInfo\x12\x1c\n\x14offload_location_ids\x18\x01 \x03(\t\x12\x1d\n\x15offload_location_path\x18\x02 \x01(\t\"\xba\x01\n\x17\x41nalysisWorkflowRequest\x12\x43\n\rproxy_request\x18\x01 \x01(\x0b\x32,.minknow_api.analysis_workflows.ProxyRequest\x12@\n\x04when\x18\x02 \x01(\x0e\x32\x32.minknow_api.protocol.AnalysisWorkflowRequest.When\"\x18\n\x04When\x12\x10\n\x0cPROTOCOL_END\x10\x00\"\xf2\x02\n\x14StartProtocolRequest\x12\x18\n\nidentifier\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12\x0c\n\x04\x61rgs\x18\x02 \x03(\t\x12<\n\tuser_info\x18\x03 \x01(\x0b\x32).minknow_api.protocol.ProtocolRunUserInfo\x12H\n\x15offload_location_info\x18\x04 \x01(\x0b\x32).minknow_api.protocol.OffloadLocationInfo\x12R\n\x19target_run_until_criteria\x18\x05 \x01(\x0b\x32/.minknow_api.acquisition.TargetRunUntilCriteria\x12P\n\x19\x61nalysis_workflow_request\x18\x07 \x01(\x0b\x32-.minknow_api.protocol.AnalysisWorkflowRequestJ\x04\x08\x06\x10\x07\"\'\n\x15StartProtocolResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"c\n\x13StopProtocolRequest\x12L\n\x13\x64\x61ta_action_on_stop\x18\x01 \x01(\x0e\x32/.minknow_api.acquisition.StopRequest.DataAction\"\x16\n\x14StopProtocolResponse\"\x16\n\x14PauseProtocolRequest\"\x17\n\x15PauseProtocolResponse\"\x17\n\x15ResumeProtocolRequest\"\x18\n\x16ResumeProtocolResponse\"\x17\n\x15TriggerMuxScanRequest\"\x18\n\x16TriggerMuxScanResponse\",\n\x14ListProtocolsRequest\x12\x14\n\x0c\x66orce_reload\x18\x01 \x01(\x08\"\xff\x03\n\x0cProtocolInfo\x12\x12\n\nidentifier\x18\x01 \x01(\t\x12:\n\x04tags\x18\x02 \x03(\x0b\x32,.minknow_api.protocol.ProtocolInfo.TagsEntry\x12\x0c\n\x04name\x18\x03 \x01(\t\x12U\n\x15tag_extraction_result\x18\x04 \x01(\x0b\x32\x36.minknow_api.protocol.ProtocolInfo.TagExtractionResult\x1a\xa1\x01\n\x08TagValue\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x14\n\nbool_value\x18\x02 \x01(\x08H\x00\x12\x13\n\tint_value\x18\x03 \x01(\x03H\x00\x12\x16\n\x0c\x64ouble_value\x18\x04 \x01(\x01H\x00\x12\x15\n\x0b\x61rray_value\x18\x05 \x01(\tH\x00\x12\x16\n\x0cobject_value\x18\x06 \x01(\tH\x00\x42\x0b\n\ttag_value\x1a<\n\x13TagExtractionResult\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x14\n\x0c\x65rror_report\x18\x02 \x01(\t\x1aX\n\tTagsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12:\n\x05value\x18\x02 \x01(\x0b\x32+.minknow_api.protocol.ProtocolInfo.TagValue:\x02\x38\x01\"N\n\x15ListProtocolsResponse\x12\x35\n\tprotocols\x18\x01 \x03(\x0b\x32\".minknow_api.protocol.ProtocolInfo\"\xff\x01\n\x16WaitForFinishedRequest\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12M\n\x05state\x18\x02 \x01(\x0e\x32>.minknow_api.protocol.WaitForFinishedRequest.NotificationState\x12\x0f\n\x07timeout\x18\x03 \x01(\x02\"o\n\x11NotificationState\x12\x19\n\x15NOTIFY_ON_TERMINATION\x10\x00\x12\x1d\n\x19NOTIFY_BEFORE_TERMINATION\x10\x01\x12 \n\x1cNOTIFY_ON_SCRIPT_TERMINATION\x10\x02\"#\n\x11GetRunInfoRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"\xa5\x03\n\rRequestOrigin\x12\x38\n\x04user\x18\x01 \x01(\x0b\x32(.minknow_api.protocol.RequestOrigin.UserH\x00\x12>\n\x07minknow\x18\x02 \x01(\x0b\x32+.minknow_api.protocol.RequestOrigin.MinKNOWH\x00\x12`\n\x19protocol_phase_management\x18\x03 \x01(\x0b\x32;.minknow_api.protocol.RequestOrigin.ProtocolPhaseManagementH\x00\x12\x41\n\trun_until\x18\x04 \x01(\x0b\x32,.minknow_api.protocol.RequestOrigin.RunUntilH\x00\x1a\x18\n\x04User\x12\x10\n\x08identity\x18\x01 \x01(\t\x1a\x18\n\x07MinKNOW\x12\r\n\x05\x63\x61use\x18\x01 \x01(\t\x1a\x19\n\x17ProtocolPhaseManagement\x1a\x1c\n\x08RunUntil\x12\x10\n\x08\x63riteria\x18\x01 \x01(\tB\x08\n\x06origin\"\xaf\x01\n\x15ProtocolPhaseSnapshot\x12\x32\n\x05phase\x18\x01 \x01(\x0e\x32#.minknow_api.protocol.ProtocolPhase\x12-\n\ttimestamp\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x33\n\x06origin\x18\x03 \x01(\x0b\x32#.minknow_api.protocol.RequestOrigin\"2\n\x17\x45pi2meWorkflowReference\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0b\n\x03url\x18\x02 \x01(\t\"\xf7\x01\n AssociatedPostProcessingAnalysis\x12\x12\n\nstarted_id\x18\x01 \x01(\t\x12;\n\rstart_request\x18\x02 \x01(\x0b\x32$.minknow_api.basecaller.StartRequest\x12K\n\x05state\x18\x03 \x01(\x0e\x32<.minknow_api.protocol.AssociatedPostProcessingAnalysis.State\"5\n\x05State\x12\n\n\x06QUEUED\x10\x00\x12\x0b\n\x07STARTED\x10\x01\x12\x13\n\x0f\x46\x41ILED_TO_START\x10\x02\"R\n\x10PlatformQcResult\x12\x14\n\x0c\x66low_cell_id\x18\x01 \x01(\t\x12\x0e\n\x06passed\x18\x02 \x01(\x08\x12\x18\n\x10total_pore_count\x18\x03 \x01(\r\"\xd4\x02\n\x13HardwareCheckResult\x12M\n\x06status\x18\x01 \x01(\x0e\x32=.minknow_api.protocol.HardwareCheckResult.HardwareCheckStatus\x12\\\n\x0e\x66\x61ilure_reason\x18\x02 \x01(\x0e\x32\x44.minknow_api.protocol.HardwareCheckResult.HardwareCheckFailureReason\"G\n\x13HardwareCheckStatus\x12\x08\n\x04None\x10\x00\x12\x0b\n\x07Started\x10\x01\x12\r\n\tSucceeded\x10\x02\x12\n\n\x06\x46\x61iled\x10\x03\"G\n\x1aHardwareCheckFailureReason\x12\x0b\n\x07NoError\x10\x00\x12\x0b\n\x07Unknown\x10\x01\x12\x0f\n\x0bScriptError\x10\x02\"&\n\x0f\x45xternalOffload\x12\x13\n\x0boffload_ids\x18\x01 \x03(\t\"\xa6\x05\n\x16GetVersionInfoResponse\x12L\n\x07minknow\x18\x01 \x01(\x0b\x32;.minknow_api.protocol.GetVersionInfoResponse.MinknowVersion\x12\r\n\x05\x62ream\x18\x02 \x01(\t\x12\x1c\n\x14\x64istribution_version\x18\x03 \x01(\t\x12\\\n\x13\x64istribution_status\x18\x04 \x01(\x0e\x32?.minknow_api.protocol.GetVersionInfoResponse.DistributionStatus\x12\x1e\n\x16protocol_configuration\x18\x05 \x01(\t\x12X\n\x11installation_type\x18\x06 \x01(\x0e\x32=.minknow_api.protocol.GetVersionInfoResponse.InstallationType\x12 \n\x18\x62\x61secaller_build_version\x18\t \x01(\t\x12$\n\x1c\x62\x61secaller_connected_version\x18\n \x01(\t\x1aK\n\x0eMinknowVersion\x12\r\n\x05major\x18\x01 \x01(\x05\x12\r\n\x05minor\x18\x02 \x01(\x05\x12\r\n\x05patch\x18\x03 \x01(\x05\x12\x0c\n\x04\x66ull\x18\x04 \x01(\t\"I\n\x12\x44istributionStatus\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06STABLE\x10\x01\x12\x0c\n\x08UNSTABLE\x10\x02\x12\x0c\n\x08MODIFIED\x10\x03\"M\n\x10InstallationType\x12\x07\n\x03ONT\x10\x00\x12\x06\n\x02NC\x10\x01\x12\x08\n\x04PROD\x10\x02\x12\r\n\tQ_RELEASE\x10\x03\x12\x0f\n\x0bOND_RELEASE\x10\x04J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\t\"\x9d\x03\n\x14\x41nalysisWorkflowInfo\x12>\n\x07request\x18\x01 \x01(\x0b\x32-.minknow_api.protocol.AnalysisWorkflowRequest\x12\x13\n\x0bworkflow_id\x18\x02 \x01(\t\x12\x15\n\rworkflow_name\x18\x03 \x01(\t\x12\x18\n\x10workflow_version\x18\x04 \x01(\t\x12J\n\x0fworkflow_status\x18\x05 \x01(\x0e\x32\x31.minknow_api.protocol.AnalysisWorkflowInfo.Status\x12\x1c\n\x14workflow_stop_reason\x18\x06 \x01(\t\x12\x14\n\x0creport_names\x18\x07 \x03(\t\"\x7f\n\x06Status\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06QUEUED\x10\x06\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tCOMPLETED\x10\x02\x12\x13\n\x0fSTOPPED_BY_USER\x10\x03\x12\x16\n\x12STOPPED_WITH_ERROR\x10\x04\x12\x13\n\x0f\x46\x41ILED_TO_START\x10\x05\"\xc5\x0c\n\x0fProtocolRunInfo\x12\x0e\n\x06run_id\x18\x01 \x01(\t\x12\x13\n\x0bprotocol_id\x18\x02 \x01(\t\x12\x0c\n\x04\x61rgs\x18\x03 \x03(\t\x12\x45\n\x08settings\x18\x19 \x03(\x0b\x32\x33.minknow_api.protocol.ProtocolRunInfo.SettingsEntry\x12\x13\n\x0boutput_path\x18\x0b \x01(\t\x12!\n\x14reported_output_path\x18\x18 \x01(\tH\x00\x88\x01\x01\x12\x32\n\x05state\x18\x04 \x01(\x0e\x32#.minknow_api.protocol.ProtocolState\x12\x32\n\x05phase\x18\x10 \x01(\x0e\x32#.minknow_api.protocol.ProtocolPhase\x12\x35\n\x11last_phase_change\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x42\n\rphase_history\x18\x1c \x03(\x0b\x32+.minknow_api.protocol.ProtocolPhaseSnapshot\x12\x11\n\tcan_pause\x18\x12 \x01(\x08\x12\x1c\n\x14\x63\x61n_trigger_mux_scan\x18\x13 \x01(\x08\x12.\n\nstart_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x33\n\x0fscript_end_time\x18\t \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x38\n\x0bstop_origin\x18\x17 \x01(\x0b\x32#.minknow_api.protocol.RequestOrigin\x12\x1b\n\x13\x61\x63quisition_run_ids\x18\x07 \x03(\t\x12<\n\tuser_info\x18\x08 \x01(\x0b\x32).minknow_api.protocol.ProtocolRunUserInfo\x12G\n\x10\x65pi2me_workflows\x18\n \x03(\x0b\x32-.minknow_api.protocol.Epi2meWorkflowReference\x12\x39\n\x06\x64\x65vice\x18\x0c \x01(\x0b\x32).minknow_api.device.GetDeviceInfoResponse\x12>\n\tflow_cell\x18\r \x01(\x0b\x32+.minknow_api.device.GetFlowCellInfoResponse\x12\x35\n\tmeta_info\x18\x0e \x01(\x0b\x32\".minknow_api.protocol.ProtocolInfo\x12\x63\n#associated_post_processing_analysis\x18\x0f \x03(\x0b\x32\x36.minknow_api.protocol.AssociatedPostProcessingAnalysis\x12\x45\n\x11\x61nalysis_workflow\x18\x1b \x01(\x0b\x32*.minknow_api.protocol.AnalysisWorkflowInfo\x12:\n\npqc_result\x18\x14 \x01(\x0b\x32&.minknow_api.protocol.PlatformQcResult\x12H\n\x15hardware_check_result\x18\x1a \x01(\x0b\x32).minknow_api.protocol.HardwareCheckResult\x12?\n\x10\x65xternal_offload\x18\x15 \x01(\x0b\x32%.minknow_api.protocol.ExternalOffload\x12G\n\x11software_versions\x18\x16 \x01(\x0b\x32,.minknow_api.protocol.GetVersionInfoResponse\x1at\n\rSettingsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12R\n\x05value\x18\x02 \x01(\x0b\x32\x43.minknow_api.protocol_settings.ProtocolSetting.ProtocolSettingValue:\x02\x38\x01\x42\x17\n\x15_reported_output_path\"\xfb\x03\n\rFilteringInfo\x12H\n\npqc_filter\x18\x01 \x01(\x0b\x32\x34.minknow_api.protocol.FilteringInfo.PlatformQcFilter\x12V\n\x15hardware_check_filter\x18\x04 \x01(\x0b\x32\x37.minknow_api.protocol.FilteringInfo.HardwareCheckFilter\x12\x1e\n\x11protocol_group_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12M\n\x15\x65xperiment_start_time\x18\x03 \x01(\x0b\x32..minknow_api.protocol.FilteringInfo.TimeFilter\x1a>\n\x10PlatformQcFilter\x12\x19\n\x0c\x66low_cell_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x0f\n\r_flow_cell_id\x1a\x15\n\x13HardwareCheckFilter\x1al\n\nTimeFilter\x12/\n\x0bstart_range\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12-\n\tend_range\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x14\n\x12_protocol_group_id\"S\n\x17ListProtocolRunsRequest\x12\x38\n\x0b\x66ilter_info\x18\x01 \x01(\x0b\x32#.minknow_api.protocol.FilteringInfo\"+\n\x18ListProtocolRunsResponse\x12\x0f\n\x07run_ids\x18\x01 \x03(\t\"\x1e\n\x1cGetCurrentProtocolRunRequest\"X\n\x1dGetCurrentProtocolRunResponse\x12\x37\n\x08run_info\x18\x03 \x01(\x0b\x32%.minknow_api.protocol.ProtocolRunInfo\" \n\x1eWatchCurrentProtocolRunRequest\"\x17\n\x15GetContextInfoRequest\"\xa1\x01\n\x16GetContextInfoResponse\x12S\n\x0c\x63ontext_info\x18\x01 \x03(\x0b\x32=.minknow_api.protocol.GetContextInfoResponse.ContextInfoEntry\x1a\x32\n\x10\x43ontextInfoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x9f\x01\n\x15SetContextInfoRequest\x12R\n\x0c\x63ontext_info\x18\x01 \x03(\x0b\x32<.minknow_api.protocol.SetContextInfoRequest.ContextInfoEntry\x1a\x32\n\x10\x43ontextInfoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x18\n\x16SetContextInfoResponse\"\x1b\n\x19GetProtocolPurposeRequest\"-\n\x1aGetProtocolPurposeResponse\x12\x0f\n\x07purpose\x18\x01 \x01(\t\",\n\x19SetProtocolPurposeRequest\x12\x0f\n\x07purpose\x18\x01 \x01(\t\"\x1c\n\x1aSetProtocolPurposeResponse\"~\n\x18\x41\x64\x64\x45pi2meWorkflowRequest\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12L\n\x0f\x65pi2me_workflow\x18\x02 \x01(\x0b\x32-.minknow_api.protocol.Epi2meWorkflowReferenceB\x04\x88\xb5\x18\x01\"\x1b\n\x19\x41\x64\x64\x45pi2meWorkflowResponse\"`\n\x13ProtocolGroupIdInfo\x12\x19\n\x11protocol_group_id\x18\x01 \x01(\t\x12.\n\nstart_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"W\n\x1bListProtocolGroupIdsRequest\x12\x38\n\x0b\x66ilter_info\x18\x01 \x01(\x0b\x32#.minknow_api.protocol.FilteringInfo\"\x86\x01\n\x1cListProtocolGroupIdsResponse\x12\x1a\n\x12protocol_group_ids\x18\x01 \x03(\t\x12J\n\x17protocol_group_ids_info\x18\x02 \x03(\x0b\x32).minknow_api.protocol.ProtocolGroupIdInfo\"\x1b\n\x19\x42\x65ginHardwareCheckRequest\",\n\x1a\x42\x65ginHardwareCheckResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"\x18\n\x16\x42\x65ginPlatformQcRequest\")\n\x17\x42\x65ginPlatformQcResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"\xa7\x05\n\x14\x42\x65ginProtocolRequest\x12\x14\n\nidentifier\x18\x01 \x01(\tH\x00\x12Q\n\ncomponents\x18\x02 \x01(\x0b\x32;.minknow_api.protocol_settings.ProtocolIdentifierComponentsH\x00\x12<\n\tuser_info\x18\x03 \x01(\x0b\x32).minknow_api.protocol.ProtocolRunUserInfo\x12H\n\x15offload_location_info\x18\x05 \x01(\x0b\x32).minknow_api.protocol.OffloadLocationInfo\x12R\n\x19target_run_until_criteria\x18\x06 \x01(\x0b\x32/.minknow_api.acquisition.TargetRunUntilCriteria\x12J\n\x08settings\x18\x04 \x03(\x0b\x32\x38.minknow_api.protocol.BeginProtocolRequest.SettingsEntry\x12P\n\x19\x61nalysis_workflow_request\x18\x08 \x01(\x0b\x32-.minknow_api.protocol.AnalysisWorkflowRequest\x12\x19\n\x11simulation_source\x18\t \x01(\t\x1at\n\rSettingsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12R\n\x05value\x18\x02 \x01(\x0b\x32\x43.minknow_api.protocol_settings.ProtocolSetting.ProtocolSettingValue:\x02\x38\x01\x42\x15\n\x13protocol_identifierJ\x04\x08\x07\x10\x08\"\'\n\x15\x42\x65ginProtocolResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"q\n\x1aSetPlatformQcResultRequest\x12\x17\n\x0fprotocol_run_id\x18\x01 \x01(\t\x12:\n\npqc_result\x18\x02 \x01(\x0b\x32&.minknow_api.protocol.PlatformQcResult\"\x1d\n\x1bSetPlatformQcResultResponse\"s\n\x1dSetHardwareCheckResultRequest\x12\x17\n\x0fprotocol_run_id\x18\x01 \x01(\t\x12\x39\n\x06result\x18\x02 \x01(\x0b\x32).minknow_api.protocol.HardwareCheckResult\" \n\x1eSetHardwareCheckResultResponse\"u\n&AssociatePostProcessingAnalysisRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\t\x12;\n\rstart_request\x18\x02 \x01(\x0b\x32$.minknow_api.basecaller.StartRequest\"5\n\'AssociatePostProcessingAnalysisResponse\x12\n\n\x02id\x18\x01 \x01(\t\"7\n\x1f\x43learProtocolHistoryDataRequest\x12\x14\n\x0cprotocol_ids\x18\x01 \x03(\t\"\"\n ClearProtocolHistoryDataResponse\"\xf2\x01\n\x1eProtocolPhaseManagementRequest\x12[\n\x10set_capabilities\x18\x01 \x01(\x0b\x32\x41.minknow_api.protocol.ProtocolPhaseManagementRequest.Capabilities\x12\x32\n\x05phase\x18\x02 \x01(\x0e\x32#.minknow_api.protocol.ProtocolPhase\x1a?\n\x0c\x43\x61pabilities\x12\x11\n\tcan_pause\x18\x01 \x01(\x08\x12\x1c\n\x14\x63\x61n_trigger_mux_scan\x18\x02 \x01(\x08\"O\n\x1fProtocolPhaseManagementResponse\x12,\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x1c.minknow_api.protocol.Action\"O\n\x18GenerateRunReportRequest\x12\x17\n\x0fprotocol_run_id\x18\x01 \x01(\t\x12\x1a\n\x12include_input_data\x18\x02 \x01(\x08\"\x97\x01\n\x19GenerateRunReportResponse\x12\x17\n\x0fprotocol_run_id\x18\x01 \x01(\t\x12\x13\n\x0breport_data\x18\x02 \x01(\t\x12\x18\n\x10remaining_length\x18\x03 \x01(\x05\x12\x12\n\ninput_data\x18\x04 \x01(\t\x12\x1e\n\x16remaining_input_length\x18\x05 \x01(\x05*\xa9\x06\n\rProtocolState\x12\x14\n\x10PROTOCOL_RUNNING\x10\x00\x12$\n PROTOCOL_WAITING_FOR_TEMPERATURE\x10\x04\x12$\n PROTOCOL_WAITING_FOR_ACQUISITION\x10\x05\x12\x16\n\x12PROTOCOL_COMPLETED\x10\x01\x12\x1c\n\x18PROTOCOL_STOPPED_BY_USER\x10\x02\x12 \n\x1cPROTOCOL_FINISHED_WITH_ERROR\x10\x03\x12\'\n#PROTOCOL_FINISHED_WITH_DEVICE_ERROR\x10\x06\x12.\n*PROTOCOL_FINISHED_UNABLE_TO_SEND_TELEMETRY\x10\x07\x12/\n+PROTOCOL_FINISHED_WITH_FLOW_CELL_DISCONNECT\x10\x08\x12,\n(PROTOCOL_FINISHED_WITH_DEVICE_DISCONNECT\x10\t\x12,\n(PROTOCOL_FINISHED_WITH_ERROR_CALIBRATION\x10\x14\x12\x32\n.PROTOCOL_FINISHED_WITH_ERROR_BASECALL_SETTINGS\x10\x15\x12\x35\n1PROTOCOL_FINISHED_WITH_ERROR_TEMPERATURE_REQUIRED\x10\x16\x12.\n*PROTOCOL_FINISHED_WITH_ERROR_NO_DISK_SPACE\x10\x17\x12\x31\n-PROTOCOL_FINISHED_WITH_ERROR_TEMPERATURE_HIGH\x10\x19\x12\x39\n5PROTOCOL_FINISHED_WITH_ERROR_BASECALLER_COMMUNICATION\x10\x1a\x12\x36\n2PROTOCOL_FINISHED_WITH_NO_FLOWCELL_FOR_ACQUISITION\x10\x1b\x12\x37\n3PROTOCOL_FINISHED_WITH_ERROR_BASECALLER_UNAVAILABLE\x10\x1c*\xff\x01\n\rProtocolPhase\x12\x11\n\rPHASE_UNKNOWN\x10\x00\x12\x16\n\x12PHASE_INITIALISING\x10\x01\x12\x14\n\x10PHASE_SEQUENCING\x10\x02\x12 \n\x1cPHASE_PREPARING_FOR_MUX_SCAN\x10\x03\x12\x12\n\x0ePHASE_MUX_SCAN\x10\x04\x12\x10\n\x0cPHASE_PAUSED\x10\x05\x12\x11\n\rPHASE_PAUSING\x10\x06\x12)\n%PHASE_BAD_TEMPERATURE_AUTOMATIC_PAUSE\x10\x08\x12\x12\n\x0ePHASE_RESUMING\x10\x07\x12\x13\n\x0fPHASE_COMPLETED\x10\t*[\n\x06\x41\x63tion\x12\x0f\n\x0b\x41\x43TION_NONE\x10\x00\x12\x10\n\x0c\x41\x43TION_PAUSE\x10\x01\x12\x11\n\rACTION_RESUME\x10\x02\x12\x1b\n\x17\x41\x43TION_TRIGGER_MUX_SCAN\x10\x03\x32\xb7\x19\n\x0fProtocolService\x12k\n\x0estart_protocol\x12*.minknow_api.protocol.StartProtocolRequest\x1a+.minknow_api.protocol.StartProtocolResponse\"\x00\x12h\n\rstop_protocol\x12).minknow_api.protocol.StopProtocolRequest\x1a*.minknow_api.protocol.StopProtocolResponse\"\x00\x12n\n\x0epause_protocol\x12*.minknow_api.protocol.PauseProtocolRequest\x1a+.minknow_api.protocol.PauseProtocolResponse\"\x03\x90\x02\x02\x12q\n\x0fresume_protocol\x12+.minknow_api.protocol.ResumeProtocolRequest\x1a,.minknow_api.protocol.ResumeProtocolResponse\"\x03\x90\x02\x02\x12r\n\x10trigger_mux_scan\x12+.minknow_api.protocol.TriggerMuxScanRequest\x1a,.minknow_api.protocol.TriggerMuxScanResponse\"\x03\x90\x02\x02\x12m\n\x11wait_for_finished\x12,.minknow_api.protocol.WaitForFinishedRequest\x1a%.minknow_api.protocol.ProtocolRunInfo\"\x03\x90\x02\x01\x12\x63\n\x0cget_run_info\x12\'.minknow_api.protocol.GetRunInfoRequest\x1a%.minknow_api.protocol.ProtocolRunInfo\"\x03\x90\x02\x01\x12x\n\x12list_protocol_runs\x12-.minknow_api.protocol.ListProtocolRunsRequest\x1a..minknow_api.protocol.ListProtocolRunsResponse\"\x03\x90\x02\x01\x12z\n\x18get_current_protocol_run\x12\x32.minknow_api.protocol.GetCurrentProtocolRunRequest\x1a%.minknow_api.protocol.ProtocolRunInfo\"\x03\x90\x02\x01\x12\x80\x01\n\x1awatch_current_protocol_run\x12\x34.minknow_api.protocol.WatchCurrentProtocolRunRequest\x1a%.minknow_api.protocol.ProtocolRunInfo\"\x03\x90\x02\x01\x30\x01\x12n\n\x0elist_protocols\x12*.minknow_api.protocol.ListProtocolsRequest\x1a+.minknow_api.protocol.ListProtocolsResponse\"\x03\x90\x02\x02\x12r\n\x10get_context_info\x12+.minknow_api.protocol.GetContextInfoRequest\x1a,.minknow_api.protocol.GetContextInfoResponse\"\x03\x90\x02\x01\x12r\n\x10set_context_info\x12+.minknow_api.protocol.SetContextInfoRequest\x1a,.minknow_api.protocol.SetContextInfoResponse\"\x03\x90\x02\x02\x12~\n\x14get_protocol_purpose\x12/.minknow_api.protocol.GetProtocolPurposeRequest\x1a\x30.minknow_api.protocol.GetProtocolPurposeResponse\"\x03\x90\x02\x01\x12~\n\x14set_protocol_purpose\x12/.minknow_api.protocol.SetProtocolPurposeRequest\x1a\x30.minknow_api.protocol.SetProtocolPurposeResponse\"\x03\x90\x02\x02\x12x\n\x13\x61\x64\x64_epi2me_workflow\x12..minknow_api.protocol.AddEpi2meWorkflowRequest\x1a/.minknow_api.protocol.AddEpi2meWorkflowResponse\"\x00\x12\x85\x01\n\x17list_protocol_group_ids\x12\x31.minknow_api.protocol.ListProtocolGroupIdsRequest\x1a\x32.minknow_api.protocol.ListProtocolGroupIdsResponse\"\x03\x90\x02\x01\x12\x7f\n\x14\x62\x65gin_hardware_check\x12/.minknow_api.protocol.BeginHardwareCheckRequest\x1a\x30.minknow_api.protocol.BeginHardwareCheckResponse\"\x04\x98\xb5\x18\x01\x12v\n\x11\x62\x65gin_platform_qc\x12,.minknow_api.protocol.BeginPlatformQcRequest\x1a-.minknow_api.protocol.BeginPlatformQcResponse\"\x04\x98\xb5\x18\x01\x12o\n\x0e\x62\x65gin_protocol\x12*.minknow_api.protocol.BeginProtocolRequest\x1a+.minknow_api.protocol.BeginProtocolResponse\"\x04\x98\xb5\x18\x01\x12\x82\x01\n\x16set_platform_qc_result\x12\x30.minknow_api.protocol.SetPlatformQcResultRequest\x1a\x31.minknow_api.protocol.SetPlatformQcResultResponse\"\x03\x90\x02\x02\x12\x8b\x01\n\x19set_hardware_check_result\x12\x33.minknow_api.protocol.SetHardwareCheckResultRequest\x1a\x34.minknow_api.protocol.SetHardwareCheckResultResponse\"\x03\x90\x02\x02\x12\xb0\x01\n/associate_post_processing_analysis_for_protocol\x12<.minknow_api.protocol.AssociatePostProcessingAnalysisRequest\x1a=.minknow_api.protocol.AssociatePostProcessingAnalysisResponse\"\x00\x12\x8e\x01\n\x1b\x63lear_protocol_history_data\x12\x35.minknow_api.protocol.ClearProtocolHistoryDataRequest\x1a\x36.minknow_api.protocol.ClearProtocolHistoryDataResponse\"\x00\x12\x8e\x01\n\x19protocol_phase_management\x12\x34.minknow_api.protocol.ProtocolPhaseManagementRequest\x1a\x35.minknow_api.protocol.ProtocolPhaseManagementResponse\"\x00(\x01\x30\x01\x12}\n\x13generate_run_report\x12..minknow_api.protocol.GenerateRunReportRequest\x1a/.minknow_api.protocol.GenerateRunReportResponse\"\x03\x90\x02\x02\x30\x01\x42&\n\x1c\x63om.nanoporetech.minknow_api\xa2\x02\x05MKAPIb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -90,12 +90,12 @@ _globals['_PROTOCOLSERVICE'].methods_by_name['set_hardware_check_result']._serialized_options = b'\220\002\002' _globals['_PROTOCOLSERVICE'].methods_by_name['generate_run_report']._options = None _globals['_PROTOCOLSERVICE'].methods_by_name['generate_run_report']._serialized_options = b'\220\002\002' - _globals['_PROTOCOLSTATE']._serialized_start=10718 - _globals['_PROTOCOLSTATE']._serialized_end=11527 - _globals['_PROTOCOLPHASE']._serialized_start=11530 - _globals['_PROTOCOLPHASE']._serialized_end=11764 - _globals['_ACTION']._serialized_start=11766 - _globals['_ACTION']._serialized_end=11857 + _globals['_PROTOCOLSTATE']._serialized_start=10991 + _globals['_PROTOCOLSTATE']._serialized_end=11800 + _globals['_PROTOCOLPHASE']._serialized_start=11803 + _globals['_PROTOCOLPHASE']._serialized_end=12058 + _globals['_ACTION']._serialized_start=12060 + _globals['_ACTION']._serialized_end=12151 _globals['_BARCODEUSERDATA']._serialized_start=311 _globals['_BARCODEUSERDATA']._serialized_end=770 _globals['_BARCODEUSERDATA_PASSENGERINFOENTRY']._serialized_start=569 @@ -160,243 +160,302 @@ _globals['_REQUESTORIGIN_PROTOCOLPHASEMANAGEMENT']._serialized_end=3498 _globals['_REQUESTORIGIN_RUNUNTIL']._serialized_start=3500 _globals['_REQUESTORIGIN_RUNUNTIL']._serialized_end=3528 - _globals['_EPI2MEWORKFLOWREFERENCE']._serialized_start=3540 - _globals['_EPI2MEWORKFLOWREFERENCE']._serialized_end=3590 - _globals['_ASSOCIATEDPOSTPROCESSINGANALYSIS']._serialized_start=3593 - _globals['_ASSOCIATEDPOSTPROCESSINGANALYSIS']._serialized_end=3840 - _globals['_ASSOCIATEDPOSTPROCESSINGANALYSIS_STATE']._serialized_start=3787 - _globals['_ASSOCIATEDPOSTPROCESSINGANALYSIS_STATE']._serialized_end=3840 - _globals['_PLATFORMQCRESULT']._serialized_start=3842 - _globals['_PLATFORMQCRESULT']._serialized_end=3924 - _globals['_HARDWARECHECKRESULT']._serialized_start=3927 - _globals['_HARDWARECHECKRESULT']._serialized_end=4267 - _globals['_HARDWARECHECKRESULT_HARDWARECHECKSTATUS']._serialized_start=4123 - _globals['_HARDWARECHECKRESULT_HARDWARECHECKSTATUS']._serialized_end=4194 - _globals['_HARDWARECHECKRESULT_HARDWARECHECKFAILUREREASON']._serialized_start=4196 - _globals['_HARDWARECHECKRESULT_HARDWARECHECKFAILUREREASON']._serialized_end=4267 - _globals['_EXTERNALOFFLOAD']._serialized_start=4269 - _globals['_EXTERNALOFFLOAD']._serialized_end=4307 - _globals['_GETVERSIONINFORESPONSE']._serialized_start=4310 - _globals['_GETVERSIONINFORESPONSE']._serialized_end=4988 - _globals['_GETVERSIONINFORESPONSE_MINKNOWVERSION']._serialized_start=4747 - _globals['_GETVERSIONINFORESPONSE_MINKNOWVERSION']._serialized_end=4822 - _globals['_GETVERSIONINFORESPONSE_DISTRIBUTIONSTATUS']._serialized_start=4824 - _globals['_GETVERSIONINFORESPONSE_DISTRIBUTIONSTATUS']._serialized_end=4897 - _globals['_GETVERSIONINFORESPONSE_INSTALLATIONTYPE']._serialized_start=4899 - _globals['_GETVERSIONINFORESPONSE_INSTALLATIONTYPE']._serialized_end=4976 - _globals['_ANALYSISWORKFLOWINFO']._serialized_start=4991 - _globals['_ANALYSISWORKFLOWINFO']._serialized_end=5404 - _globals['_ANALYSISWORKFLOWINFO_STATUS']._serialized_start=5277 - _globals['_ANALYSISWORKFLOWINFO_STATUS']._serialized_end=5404 - _globals['_PROTOCOLRUNINFO']._serialized_start=5407 - _globals['_PROTOCOLRUNINFO']._serialized_end=6944 - _globals['_PROTOCOLRUNINFO_SETTINGSENTRY']._serialized_start=6803 - _globals['_PROTOCOLRUNINFO_SETTINGSENTRY']._serialized_end=6919 - _globals['_FILTERINGINFO']._serialized_start=6947 - _globals['_FILTERINGINFO']._serialized_end=7454 - _globals['_FILTERINGINFO_PLATFORMQCFILTER']._serialized_start=7237 - _globals['_FILTERINGINFO_PLATFORMQCFILTER']._serialized_end=7299 - _globals['_FILTERINGINFO_HARDWARECHECKFILTER']._serialized_start=7301 - _globals['_FILTERINGINFO_HARDWARECHECKFILTER']._serialized_end=7322 - _globals['_FILTERINGINFO_TIMEFILTER']._serialized_start=7324 - _globals['_FILTERINGINFO_TIMEFILTER']._serialized_end=7432 - _globals['_LISTPROTOCOLRUNSREQUEST']._serialized_start=7456 - _globals['_LISTPROTOCOLRUNSREQUEST']._serialized_end=7539 - _globals['_LISTPROTOCOLRUNSRESPONSE']._serialized_start=7541 - _globals['_LISTPROTOCOLRUNSRESPONSE']._serialized_end=7584 - _globals['_GETCURRENTPROTOCOLRUNREQUEST']._serialized_start=7586 - _globals['_GETCURRENTPROTOCOLRUNREQUEST']._serialized_end=7616 - _globals['_GETCURRENTPROTOCOLRUNRESPONSE']._serialized_start=7618 - _globals['_GETCURRENTPROTOCOLRUNRESPONSE']._serialized_end=7706 - _globals['_WATCHCURRENTPROTOCOLRUNREQUEST']._serialized_start=7708 - _globals['_WATCHCURRENTPROTOCOLRUNREQUEST']._serialized_end=7740 - _globals['_GETCONTEXTINFOREQUEST']._serialized_start=7742 - _globals['_GETCONTEXTINFOREQUEST']._serialized_end=7765 - _globals['_GETCONTEXTINFORESPONSE']._serialized_start=7768 - _globals['_GETCONTEXTINFORESPONSE']._serialized_end=7929 - _globals['_GETCONTEXTINFORESPONSE_CONTEXTINFOENTRY']._serialized_start=7879 - _globals['_GETCONTEXTINFORESPONSE_CONTEXTINFOENTRY']._serialized_end=7929 - _globals['_SETCONTEXTINFOREQUEST']._serialized_start=7932 - _globals['_SETCONTEXTINFOREQUEST']._serialized_end=8091 - _globals['_SETCONTEXTINFOREQUEST_CONTEXTINFOENTRY']._serialized_start=7879 - _globals['_SETCONTEXTINFOREQUEST_CONTEXTINFOENTRY']._serialized_end=7929 - _globals['_SETCONTEXTINFORESPONSE']._serialized_start=8093 - _globals['_SETCONTEXTINFORESPONSE']._serialized_end=8117 - _globals['_GETPROTOCOLPURPOSEREQUEST']._serialized_start=8119 - _globals['_GETPROTOCOLPURPOSEREQUEST']._serialized_end=8146 - _globals['_GETPROTOCOLPURPOSERESPONSE']._serialized_start=8148 - _globals['_GETPROTOCOLPURPOSERESPONSE']._serialized_end=8193 - _globals['_SETPROTOCOLPURPOSEREQUEST']._serialized_start=8195 - _globals['_SETPROTOCOLPURPOSEREQUEST']._serialized_end=8239 - _globals['_SETPROTOCOLPURPOSERESPONSE']._serialized_start=8241 - _globals['_SETPROTOCOLPURPOSERESPONSE']._serialized_end=8269 - _globals['_ADDEPI2MEWORKFLOWREQUEST']._serialized_start=8271 - _globals['_ADDEPI2MEWORKFLOWREQUEST']._serialized_end=8397 - _globals['_ADDEPI2MEWORKFLOWRESPONSE']._serialized_start=8399 - _globals['_ADDEPI2MEWORKFLOWRESPONSE']._serialized_end=8426 - _globals['_PROTOCOLGROUPIDINFO']._serialized_start=8428 - _globals['_PROTOCOLGROUPIDINFO']._serialized_end=8524 - _globals['_LISTPROTOCOLGROUPIDSREQUEST']._serialized_start=8526 - _globals['_LISTPROTOCOLGROUPIDSREQUEST']._serialized_end=8613 - _globals['_LISTPROTOCOLGROUPIDSRESPONSE']._serialized_start=8616 - _globals['_LISTPROTOCOLGROUPIDSRESPONSE']._serialized_end=8750 - _globals['_BEGINHARDWARECHECKREQUEST']._serialized_start=8752 - _globals['_BEGINHARDWARECHECKREQUEST']._serialized_end=8779 - _globals['_BEGINHARDWARECHECKRESPONSE']._serialized_start=8781 - _globals['_BEGINHARDWARECHECKRESPONSE']._serialized_end=8825 - _globals['_BEGINPLATFORMQCREQUEST']._serialized_start=8827 - _globals['_BEGINPLATFORMQCREQUEST']._serialized_end=8851 - _globals['_BEGINPLATFORMQCRESPONSE']._serialized_start=8853 - _globals['_BEGINPLATFORMQCRESPONSE']._serialized_end=8894 - _globals['_BEGINPROTOCOLREQUEST']._serialized_start=8897 - _globals['_BEGINPROTOCOLREQUEST']._serialized_end=9549 - _globals['_BEGINPROTOCOLREQUEST_SETTINGSENTRY']._serialized_start=6803 - _globals['_BEGINPROTOCOLREQUEST_SETTINGSENTRY']._serialized_end=6919 - _globals['_BEGINPROTOCOLRESPONSE']._serialized_start=9551 - _globals['_BEGINPROTOCOLRESPONSE']._serialized_end=9590 - _globals['_SETPLATFORMQCRESULTREQUEST']._serialized_start=9592 - _globals['_SETPLATFORMQCRESULTREQUEST']._serialized_end=9705 - _globals['_SETPLATFORMQCRESULTRESPONSE']._serialized_start=9707 - _globals['_SETPLATFORMQCRESULTRESPONSE']._serialized_end=9736 - _globals['_SETHARDWARECHECKRESULTREQUEST']._serialized_start=9738 - _globals['_SETHARDWARECHECKRESULTREQUEST']._serialized_end=9853 - _globals['_SETHARDWARECHECKRESULTRESPONSE']._serialized_start=9855 - _globals['_SETHARDWARECHECKRESULTRESPONSE']._serialized_end=9887 - _globals['_ASSOCIATEPOSTPROCESSINGANALYSISREQUEST']._serialized_start=9889 - _globals['_ASSOCIATEPOSTPROCESSINGANALYSISREQUEST']._serialized_end=10006 - _globals['_ASSOCIATEPOSTPROCESSINGANALYSISRESPONSE']._serialized_start=10008 - _globals['_ASSOCIATEPOSTPROCESSINGANALYSISRESPONSE']._serialized_end=10061 - _globals['_CLEARPROTOCOLHISTORYDATAREQUEST']._serialized_start=10063 - _globals['_CLEARPROTOCOLHISTORYDATAREQUEST']._serialized_end=10118 - _globals['_CLEARPROTOCOLHISTORYDATARESPONSE']._serialized_start=10120 - _globals['_CLEARPROTOCOLHISTORYDATARESPONSE']._serialized_end=10154 - _globals['_PROTOCOLPHASEMANAGEMENTREQUEST']._serialized_start=10157 - _globals['_PROTOCOLPHASEMANAGEMENTREQUEST']._serialized_end=10399 - _globals['_PROTOCOLPHASEMANAGEMENTREQUEST_CAPABILITIES']._serialized_start=10336 - _globals['_PROTOCOLPHASEMANAGEMENTREQUEST_CAPABILITIES']._serialized_end=10399 - _globals['_PROTOCOLPHASEMANAGEMENTRESPONSE']._serialized_start=10401 - _globals['_PROTOCOLPHASEMANAGEMENTRESPONSE']._serialized_end=10480 - _globals['_GENERATERUNREPORTREQUEST']._serialized_start=10482 - _globals['_GENERATERUNREPORTREQUEST']._serialized_end=10561 - _globals['_GENERATERUNREPORTRESPONSE']._serialized_start=10564 - _globals['_GENERATERUNREPORTRESPONSE']._serialized_end=10715 - _globals['_PROTOCOLSERVICE']._serialized_start=11860 - _globals['_PROTOCOLSERVICE']._serialized_end=15115 -ProtocolRunInfo.__doc__ = """Attributes: + _globals['_PROTOCOLPHASESNAPSHOT']._serialized_start=3541 + _globals['_PROTOCOLPHASESNAPSHOT']._serialized_end=3716 + _globals['_EPI2MEWORKFLOWREFERENCE']._serialized_start=3718 + _globals['_EPI2MEWORKFLOWREFERENCE']._serialized_end=3768 + _globals['_ASSOCIATEDPOSTPROCESSINGANALYSIS']._serialized_start=3771 + _globals['_ASSOCIATEDPOSTPROCESSINGANALYSIS']._serialized_end=4018 + _globals['_ASSOCIATEDPOSTPROCESSINGANALYSIS_STATE']._serialized_start=3965 + _globals['_ASSOCIATEDPOSTPROCESSINGANALYSIS_STATE']._serialized_end=4018 + _globals['_PLATFORMQCRESULT']._serialized_start=4020 + _globals['_PLATFORMQCRESULT']._serialized_end=4102 + _globals['_HARDWARECHECKRESULT']._serialized_start=4105 + _globals['_HARDWARECHECKRESULT']._serialized_end=4445 + _globals['_HARDWARECHECKRESULT_HARDWARECHECKSTATUS']._serialized_start=4301 + _globals['_HARDWARECHECKRESULT_HARDWARECHECKSTATUS']._serialized_end=4372 + _globals['_HARDWARECHECKRESULT_HARDWARECHECKFAILUREREASON']._serialized_start=4374 + _globals['_HARDWARECHECKRESULT_HARDWARECHECKFAILUREREASON']._serialized_end=4445 + _globals['_EXTERNALOFFLOAD']._serialized_start=4447 + _globals['_EXTERNALOFFLOAD']._serialized_end=4485 + _globals['_GETVERSIONINFORESPONSE']._serialized_start=4488 + _globals['_GETVERSIONINFORESPONSE']._serialized_end=5166 + _globals['_GETVERSIONINFORESPONSE_MINKNOWVERSION']._serialized_start=4925 + _globals['_GETVERSIONINFORESPONSE_MINKNOWVERSION']._serialized_end=5000 + _globals['_GETVERSIONINFORESPONSE_DISTRIBUTIONSTATUS']._serialized_start=5002 + _globals['_GETVERSIONINFORESPONSE_DISTRIBUTIONSTATUS']._serialized_end=5075 + _globals['_GETVERSIONINFORESPONSE_INSTALLATIONTYPE']._serialized_start=5077 + _globals['_GETVERSIONINFORESPONSE_INSTALLATIONTYPE']._serialized_end=5154 + _globals['_ANALYSISWORKFLOWINFO']._serialized_start=5169 + _globals['_ANALYSISWORKFLOWINFO']._serialized_end=5582 + _globals['_ANALYSISWORKFLOWINFO_STATUS']._serialized_start=5455 + _globals['_ANALYSISWORKFLOWINFO_STATUS']._serialized_end=5582 + _globals['_PROTOCOLRUNINFO']._serialized_start=5585 + _globals['_PROTOCOLRUNINFO']._serialized_end=7190 + _globals['_PROTOCOLRUNINFO_SETTINGSENTRY']._serialized_start=7049 + _globals['_PROTOCOLRUNINFO_SETTINGSENTRY']._serialized_end=7165 + _globals['_FILTERINGINFO']._serialized_start=7193 + _globals['_FILTERINGINFO']._serialized_end=7700 + _globals['_FILTERINGINFO_PLATFORMQCFILTER']._serialized_start=7483 + _globals['_FILTERINGINFO_PLATFORMQCFILTER']._serialized_end=7545 + _globals['_FILTERINGINFO_HARDWARECHECKFILTER']._serialized_start=7547 + _globals['_FILTERINGINFO_HARDWARECHECKFILTER']._serialized_end=7568 + _globals['_FILTERINGINFO_TIMEFILTER']._serialized_start=7570 + _globals['_FILTERINGINFO_TIMEFILTER']._serialized_end=7678 + _globals['_LISTPROTOCOLRUNSREQUEST']._serialized_start=7702 + _globals['_LISTPROTOCOLRUNSREQUEST']._serialized_end=7785 + _globals['_LISTPROTOCOLRUNSRESPONSE']._serialized_start=7787 + _globals['_LISTPROTOCOLRUNSRESPONSE']._serialized_end=7830 + _globals['_GETCURRENTPROTOCOLRUNREQUEST']._serialized_start=7832 + _globals['_GETCURRENTPROTOCOLRUNREQUEST']._serialized_end=7862 + _globals['_GETCURRENTPROTOCOLRUNRESPONSE']._serialized_start=7864 + _globals['_GETCURRENTPROTOCOLRUNRESPONSE']._serialized_end=7952 + _globals['_WATCHCURRENTPROTOCOLRUNREQUEST']._serialized_start=7954 + _globals['_WATCHCURRENTPROTOCOLRUNREQUEST']._serialized_end=7986 + _globals['_GETCONTEXTINFOREQUEST']._serialized_start=7988 + _globals['_GETCONTEXTINFOREQUEST']._serialized_end=8011 + _globals['_GETCONTEXTINFORESPONSE']._serialized_start=8014 + _globals['_GETCONTEXTINFORESPONSE']._serialized_end=8175 + _globals['_GETCONTEXTINFORESPONSE_CONTEXTINFOENTRY']._serialized_start=8125 + _globals['_GETCONTEXTINFORESPONSE_CONTEXTINFOENTRY']._serialized_end=8175 + _globals['_SETCONTEXTINFOREQUEST']._serialized_start=8178 + _globals['_SETCONTEXTINFOREQUEST']._serialized_end=8337 + _globals['_SETCONTEXTINFOREQUEST_CONTEXTINFOENTRY']._serialized_start=8125 + _globals['_SETCONTEXTINFOREQUEST_CONTEXTINFOENTRY']._serialized_end=8175 + _globals['_SETCONTEXTINFORESPONSE']._serialized_start=8339 + _globals['_SETCONTEXTINFORESPONSE']._serialized_end=8363 + _globals['_GETPROTOCOLPURPOSEREQUEST']._serialized_start=8365 + _globals['_GETPROTOCOLPURPOSEREQUEST']._serialized_end=8392 + _globals['_GETPROTOCOLPURPOSERESPONSE']._serialized_start=8394 + _globals['_GETPROTOCOLPURPOSERESPONSE']._serialized_end=8439 + _globals['_SETPROTOCOLPURPOSEREQUEST']._serialized_start=8441 + _globals['_SETPROTOCOLPURPOSEREQUEST']._serialized_end=8485 + _globals['_SETPROTOCOLPURPOSERESPONSE']._serialized_start=8487 + _globals['_SETPROTOCOLPURPOSERESPONSE']._serialized_end=8515 + _globals['_ADDEPI2MEWORKFLOWREQUEST']._serialized_start=8517 + _globals['_ADDEPI2MEWORKFLOWREQUEST']._serialized_end=8643 + _globals['_ADDEPI2MEWORKFLOWRESPONSE']._serialized_start=8645 + _globals['_ADDEPI2MEWORKFLOWRESPONSE']._serialized_end=8672 + _globals['_PROTOCOLGROUPIDINFO']._serialized_start=8674 + _globals['_PROTOCOLGROUPIDINFO']._serialized_end=8770 + _globals['_LISTPROTOCOLGROUPIDSREQUEST']._serialized_start=8772 + _globals['_LISTPROTOCOLGROUPIDSREQUEST']._serialized_end=8859 + _globals['_LISTPROTOCOLGROUPIDSRESPONSE']._serialized_start=8862 + _globals['_LISTPROTOCOLGROUPIDSRESPONSE']._serialized_end=8996 + _globals['_BEGINHARDWARECHECKREQUEST']._serialized_start=8998 + _globals['_BEGINHARDWARECHECKREQUEST']._serialized_end=9025 + _globals['_BEGINHARDWARECHECKRESPONSE']._serialized_start=9027 + _globals['_BEGINHARDWARECHECKRESPONSE']._serialized_end=9071 + _globals['_BEGINPLATFORMQCREQUEST']._serialized_start=9073 + _globals['_BEGINPLATFORMQCREQUEST']._serialized_end=9097 + _globals['_BEGINPLATFORMQCRESPONSE']._serialized_start=9099 + _globals['_BEGINPLATFORMQCRESPONSE']._serialized_end=9140 + _globals['_BEGINPROTOCOLREQUEST']._serialized_start=9143 + _globals['_BEGINPROTOCOLREQUEST']._serialized_end=9822 + _globals['_BEGINPROTOCOLREQUEST_SETTINGSENTRY']._serialized_start=7049 + _globals['_BEGINPROTOCOLREQUEST_SETTINGSENTRY']._serialized_end=7165 + _globals['_BEGINPROTOCOLRESPONSE']._serialized_start=9824 + _globals['_BEGINPROTOCOLRESPONSE']._serialized_end=9863 + _globals['_SETPLATFORMQCRESULTREQUEST']._serialized_start=9865 + _globals['_SETPLATFORMQCRESULTREQUEST']._serialized_end=9978 + _globals['_SETPLATFORMQCRESULTRESPONSE']._serialized_start=9980 + _globals['_SETPLATFORMQCRESULTRESPONSE']._serialized_end=10009 + _globals['_SETHARDWARECHECKRESULTREQUEST']._serialized_start=10011 + _globals['_SETHARDWARECHECKRESULTREQUEST']._serialized_end=10126 + _globals['_SETHARDWARECHECKRESULTRESPONSE']._serialized_start=10128 + _globals['_SETHARDWARECHECKRESULTRESPONSE']._serialized_end=10160 + _globals['_ASSOCIATEPOSTPROCESSINGANALYSISREQUEST']._serialized_start=10162 + _globals['_ASSOCIATEPOSTPROCESSINGANALYSISREQUEST']._serialized_end=10279 + _globals['_ASSOCIATEPOSTPROCESSINGANALYSISRESPONSE']._serialized_start=10281 + _globals['_ASSOCIATEPOSTPROCESSINGANALYSISRESPONSE']._serialized_end=10334 + _globals['_CLEARPROTOCOLHISTORYDATAREQUEST']._serialized_start=10336 + _globals['_CLEARPROTOCOLHISTORYDATAREQUEST']._serialized_end=10391 + _globals['_CLEARPROTOCOLHISTORYDATARESPONSE']._serialized_start=10393 + _globals['_CLEARPROTOCOLHISTORYDATARESPONSE']._serialized_end=10427 + _globals['_PROTOCOLPHASEMANAGEMENTREQUEST']._serialized_start=10430 + _globals['_PROTOCOLPHASEMANAGEMENTREQUEST']._serialized_end=10672 + _globals['_PROTOCOLPHASEMANAGEMENTREQUEST_CAPABILITIES']._serialized_start=10609 + _globals['_PROTOCOLPHASEMANAGEMENTREQUEST_CAPABILITIES']._serialized_end=10672 + _globals['_PROTOCOLPHASEMANAGEMENTRESPONSE']._serialized_start=10674 + _globals['_PROTOCOLPHASEMANAGEMENTRESPONSE']._serialized_end=10753 + _globals['_GENERATERUNREPORTREQUEST']._serialized_start=10755 + _globals['_GENERATERUNREPORTREQUEST']._serialized_end=10834 + _globals['_GENERATERUNREPORTRESPONSE']._serialized_start=10837 + _globals['_GENERATERUNREPORTRESPONSE']._serialized_end=10988 + _globals['_PROTOCOLSERVICE']._serialized_start=12154 + _globals['_PROTOCOLSERVICE']._serialized_end=15409 +KitInfo.__doc__ = """Attributes: + sequencing_kit: + The sequencing kit used to select the protocol e.g. "SQK- + LSK108" + barcode_expansion_kits: + The expansion barcoding kits that the protocol supports e.g. + "EXP-NBD104" +""" +AssociatePostProcessingAnalysisResponse.__doc__ = """Attributes: + id: + Id of the basecaller.proto post processing task that was + triggered, if the post processing analysis was executed + immediately (protocol was finished). +""" +ExternalOffload.__doc__ = """Attributes: + offload_ids: + The `id`s associated with active external data offloads + associated with the protocol The offload status can be queried + using `mooneye.offload_manager.watch_offloads()`` +""" +RequestOrigin.RunUntil.__doc__ = """A request made by the run until script due to certain criteria being +met + +Attributes: + criteria: + What criteria caused the state change +""" +BeginProtocolResponse.__doc__ = """Attributes: run_id: - The unique identifier assigned to this run. This is - guaranteed to be made of ASCII characters, and at most 40 - characters. It is globally unique across all protocols runs on - all MinKNOW instances. - protocol_id: - The identifier of the protocol, as passed to start_protocol(). + UUID generated when the protocol is started, to uniquely + represent this protocol instance +""" +StartProtocolRequest.__doc__ = """ passenger_info + +Attributes: + identifier: + The identifier of the protocol, as provided by + list_protocols(). args: - The arguments passed to start_protocol(). - settings: - Any settings changed from the defaults specified in the - protocol's .toml file. These settings were passed as part of - begin_protocol() - output_path: - Output location for protocol data (eg. reads). If data - offload is being used, this is the offload source directory. - Any files written to this location will be output alongside - the rest of the experiment data Since 1.16. - reported_output_path: - Output location to report to the user This is the location at - which files will eventually be written. This path will be - present, but empty, when writing to user-specified offload - locations, as there isn't a "local output path" when offload - is used. For backwards compatibility, if this this field is - not present, then `output_path` can be reported to the user - instead. Since 5.9 - state: - Indicates the current state of the protocol run. - phase: - The phase of the protocol. This is the state reported by the - protocol. If the protocol has not reported any state, it will - be PHASE_UNKNOWN. Completed protocols also report - PHASE_UNKNOWN. Note that clients should handle unexpected - values of this field gracefully. This can happen if new phases - are added but the client is still using an older version of - the API specification. Since 4.4. - last_phase_change: - The last time the phase changed. This can be used to - determine how long the protocol has been in the current phase. - NB: This will not be set if the phase is PHASE_UNKNOWN. Since - 4.4. - can_pause: - Whether the protocol can be paused. Not all protocols can be - paused, and cannot be paused in all phases. Note that if this - is true and the phase is PHASE_PAUSING or PHASE_PAUSED, - pausing will not actually do anything. Since 4.4. - can_trigger_mux_scan: - Whether a mux scan can be triggered for the protocol. Since - 4.4. - start_time: - When the protocol was started (UTC). - script_end_time: - When the protocol script terminated (UTC). Unset if the - protocol script is still running. Note that the protocol may - still run until final acquisition completes. - end_time: - When the protocol terminated (UTC), indicating both the - protocol script and the final acquisition were completed. - Unset if the protocol is still running. - stop_origin: - Who is responsible for stopping the protocol Candidates: - MinKNOW: Any error that causes the protocol to stop UI: - Through stop_protocol API RunUntil: Through stop criteria - acquisition_run_ids: - A list of acquisition periods started whilst this protocol was - running. + The arguments to pass to the protocol. user_info: - User specified information associated with the protocol at - start time. Since 1.11. - epi2me_workflows: - List of workflows from epi2me associated with this protocol - Since 1.15. - device: - Information about the device a protocol was started with - Since 3.4 - flow_cell: - Information about the flow cell a protocol was started with - Since 3.4 - meta_info: - Meta-info about the protocol Since 3.8 - associated_post_processing_analysis: - List of scheduled post processing analysis tasks - analysis_workflow: - The analysis workflow (if any) associated with the protocol - pqc_result: - Platform QC result. Set by bream by calling - `set_platform_qc_result()`. Possible to not be set (e.g. not a - pqc run) - hardware_check_result: - Hardware check result. Set by bream calling - `set_hardware_check_result()`. Not set if not a hardware check - protocol - external_offload: - Contains information about external data offloads associated - with this protocol Since 5.0 - software_versions: - For storing version numbers to output to run report Since 5.6 + User input describing the protocol. + offload_location_info: + Information about data offload locations to use to store data + Since 5.0. + target_run_until_criteria: + Initial Target Run-Until Criteria to use when starting an + acquisition for this protocol. These can be updated during the + acquisition using the Run-Until API. Since 5.3 + analysis_workflow_request: + Workflow request that should be started when the protocol is + started EXPERIMENTAL: This field may change or be removed + between minor versions without warning """ -BeginPlatformQcResponse.__doc__ = """Attributes: +StartProtocolResponse.__doc__ = """Attributes: run_id: UUID generated when the protocol is started, to uniquely represent this protocol instance """ -ListProtocolGroupIdsResponse.__doc__ = """Attributes: - protocol_group_ids: - A list of protocol group ids used in any protocol started on - this instance of minknow. deprecated and replaced by string - protocol_group_id in message ProtocolGroupIdInfo string data - is guaranteed to be ordered by most recent start time, since - 5.6 - protocol_group_ids_info: - A list of the most recent start time for each protocol group - id on this instance of minknow. guaranteed to be ordered by - most recent start time since 5.6 +WaitForFinishedRequest.__doc__ = """Attributes: + run_id: + Only consider a specific protocol run. + state: + Control what to wait for. Specifying + NOTIFY_BEFORE_TERMINATION allows a caller to be notified the + script will be ended _soon_, and do final work to end cleanly. + Since 1.11 + timeout: + Timeout to wait for finished, if the timeout expires before + the protocol is complete (in the state requested) then the + response returns. By default the timeout will wait forever. + Since 1.15 +""" +Epi2meWorkflowReference.__doc__ = """Attributes: + id: + The unique identifier for a workflow ( unique to a specific + instance of epi2me ) + url: + URL that links to the workflow report. Syntax for a local + workflow: file:// otherwise: http(s):// +""" +AssociatePostProcessingAnalysisRequest.__doc__ = """Attributes: + run_id: + Protocol id to associate analysis with: +""" +ProtocolPhaseManagementRequest.Capabilities.__doc__ = """Attributes: + can_pause: + Indicate that the protocol will respond to pause and resume + requests. + can_trigger_mux_scan: + Indicate that the protocol will respond to mux scan requests. +""" +ProtocolPhaseSnapshot.__doc__ = """Attributes: + phase: + The new protocol phase when the phase request happened + timestamp: + UTC timestamp of when the protocol phase changed was requested + origin: + Who requested the phase change Candidates: + ProtocolPhaseMangement: Through protocol_phase_management API + MinKNOW: When the protocol ends and the phase is marked + PHASE_COMPLETED +""" +FilteringInfo.__doc__ = """Attributes: + pqc_filter: + Filter by runs that have platform QC results Just + initialising this message is enough to filter out runs with + platform QC results from ones that don't Further filtering on + the platform QC results can be applied by using the fields + within PlatformQcFilter + hardware_check_filter: + Filter by runs that have hardware check results Initialising + this message means that only runs with a hardware check result + will be returned + protocol_group_id: + Filter runs by a specific protocol_group_id +""" +ProtocolPhaseManagementRequest.__doc__ = """Attributes: + set_capabilities: + Update the set of capabilities (messages that will be + responded to by the protocol). + phase: + Update the protocol phase. Leave empty (ie: PHASE_UNKNOWN) to + keep the previous phase. +""" +GetRunInfoRequest.__doc__ = """Attributes: + run_id: + The protocol run to get information about. +""" +RequestOrigin.MinKNOW.__doc__ = """A request from minknow will usually come in the form of something +ending naturally, or an error occurring where minknow has to take +action + +Attributes: + cause: + Optional further details on the cause of the request +""" +GetVersionInfoResponse.__doc__ = """Version of the basecaller MinKNOW is running with. Since 5.0 This +field has been updated since 6.0 guppy_connected_version + +Attributes: + minknow: + What minknow version is installed. Split into major, minor and + patch versions Also includes the full version as a string, + which contain the major, minor and patch numbers as well as if + the version is pre-release version (~pre), whether it is a + release candidate (~rc#) or whether it is a variant version + (i.e. for conferences) (-variant). For non-release builds it + also includes the hash of the commit it is based on, and + whether the working copy is different from that has (-dirty) + bream: + The version of Bream that is installed. An invalid + installation will cause this to return "0.0.0". Prior to 5.0, + this field was called "protocols". Since 5.0 + distribution_version: + Describes the distribution that this MinKNOW installation is + part of, usually this will be the Metapackage version + number/identity, this will be "unknown" if the distribution- + version hasn't been set. This information is also communicated + in the Manager's DaemonMessage in daemon.proto + distribution_status: + Indicates if the MinKNOW distribution including components + such as Bream are stable, unstable or have been modified. + protocol_configuration: + The version of the protocol configuration files that is + installed. An invalid installation will cause this to return + "0.0.0". Prior to 5.0, this field was called "configuration". + Since 5.0 + installation_type: + The installation type of MinKNOW. The installation type may + affect the available features, or the update process. Since + 4.1 """ OffloadLocationInfo.__doc__ = """Attributes: offload_location_ids: @@ -424,41 +483,77 @@ location. - If both are set, an error is returned This does not require a running instance of Mooneye Since 5.0 """ -FilteringInfo.__doc__ = """Attributes: - pqc_filter: - Filter by runs that have platform QC results Just - initialising this message is enough to filter out runs with - platform QC results from ones that don't Further filtering on - the platform QC results can be applied by using the fields - within PlatformQcFilter - hardware_check_filter: - Filter by runs that have hardware check results Initialising - this message means that only runs with a hardware check result - will be returned - protocol_group_id: - Filter runs by a specific protocol_group_id +AnalysisWorkflowRequest.__doc__ = """ EXPERIMENTAL: All fields within this message are marked as +experimental and may change or be removed between minor versions +without warning + +Attributes: + proxy_request: + The workflow request to start + when: + When to start the request """ -StartProtocolRequest.__doc__ = """ passenger_info +ListProtocolsRequest.__doc__ = """Attributes: + force_reload: + If this is false, then will try to use the cached value of the + protocol list where possible (still subject to changes in flow + cell). If this is true, then will force a reload of the + protocol list Defaults to false +""" +AssociatedPostProcessingAnalysis.__doc__ = """Attributes: + started_id: + Id of analysis if this has been triggered (otherwise empty). + start_request: + Start request for analysis +""" +PlatformQcResult.__doc__ = """Attributes: + flow_cell_id: + The flow cell id that the pqc was performed for + passed: + Whether the flow cell passed the platform qc check + total_pore_count: + Total number of pores that were found on the flow cell, across + all muxes. +""" +HardwareCheckResult.__doc__ = """The data sent to the UI Attributes: - identifier: - The identifier of the protocol, as provided by - list_protocols(). - args: - The arguments to pass to the protocol. - user_info: - User input describing the protocol. - offload_location_info: - Information about data offload locations to use to store data - Since 5.0. - target_run_until_criteria: - Initial Target Run-Until Criteria to use when starting an - acquisition for this protocol. These can be updated during the - acquisition using the Run-Until API. Since 5.3 - analysis_workflow_request: - Workflow request that should be started when the protocol is + failure_reason: + `failure_reason` is guaranteed to be: - `NoError` if `status` + is NOT `Failed` - NOT `NoError` if `status` is `Failed` + hardware_check_id: + The ID of this hardware check result. + start_time: + The time (UTC) when the hardware check was started. + end_time: + The time (UTC) when the hardware check completed. Unset if + the check is still running. + hardware_check_script_data: + The data from the hardware check script +""" +SetPlatformQcResultRequest.__doc__ = """Attributes: + protocol_run_id: + The protocol_run_id that was given when the pqc run was started """ +ListProtocolGroupIdsResponse.__doc__ = """Attributes: + protocol_group_ids: + A list of protocol group ids used in any protocol started on + this instance of minknow. deprecated and replaced by string + protocol_group_id in message ProtocolGroupIdInfo string data + is guaranteed to be ordered by most recent start time, since + 5.6 + protocol_group_ids_info: + A list of the most recent start time for each protocol group + id on this instance of minknow. guaranteed to be ordered by + most recent start time since 5.6 +""" +ProtocolGroupIdInfo.__doc__ = """timestamp for the last activity for experiment ordering since 5.6 + +Attributes: + start_time: + Most recent start time for the protocol group id +""" ProtocolPhaseManagementResponse.__doc__ = """Attributes: action: Requests that the protocol changes phase. The client should @@ -468,68 +563,190 @@ this is set to ACTION_NONE, the message should be ignored (this is for future compatibility). """ -ExternalOffload.__doc__ = """Attributes: - offload_ids: - The `id`s associated with active external data offloads - associated with the protocol The offload status can be queried - using `mooneye.offload_manager.watch_offloads()`` +RequestOrigin.User.__doc__ = """'User' based changes will typically come from calls made by the UI +such as 'stop_protocol' + +Attributes: + identity: + If available then provide any identity information MinKNOW has + about the client that made the RPC request """ -BeginProtocolResponse.__doc__ = """Attributes: +AnalysisWorkflowInfo.__doc__ = """ EXPERIMENTAL: All fields within this message are marked as +experimental and may change or be removed between minor versions +without warning + +Attributes: + request: + The request that started the analysis workflow + workflow_id: + The workflow id of the started analysis workflow. May be + empty if the workflow was unable to start + workflow_name: + Human-readable name of the workflow. + workflow_version: + What version the analysis workflow is running + workflow_status: + Current status of the workflow. + workflow_stop_reason: + If 'workflow_status' is STOPPED_WITH_ERROR, then this field + will be populated with a human readable error message + describing why the workflow was stopped. For any other + status, it is empty. + report_names: + The main report(s) for the analysis workflow Indicates that + the report(s) are able to be retrieved from the Reception + server +""" +StopProtocolRequest.__doc__ = """Attributes: + data_action_on_stop: + Specify how any running acquisition should be handled when + stopping the protocol. Protocol state will enter + PROTOCOL_WAITING_FOR_ACQUISITION whilst any running + acquisition is finished. If a script ends on its own any + analysis that was started is stopped, and it is allowed to + catchup. If the caller wants to end catchup they can call + stop_protocol to end catchup. Since 1.15 +""" +BeginHardwareCheckResponse.__doc__ = """Attributes: run_id: UUID generated when the protocol is started, to uniquely represent this protocol instance """ -SetHardwareCheckResultRequest.__doc__ = """Attributes: - protocol_run_id: - The protocol_run_id that was given when the hardware check run - was started -""" -StartProtocolResponse.__doc__ = """Attributes: +BeginPlatformQcResponse.__doc__ = """Attributes: run_id: UUID generated when the protocol is started, to uniquely represent this protocol instance """ -GenerateRunReportRequest.__doc__ = """Attributes: +SetHardwareCheckResultRequest.__doc__ = """Attributes: protocol_run_id: - The protocol_run_id to generate a report for. - include_input_data: - Optionally return the input data used to generate the report. - This input data is represented as the data seen in - report_data.proto + The protocol_run_id that was given when the hardware check run + was started """ -AssociatePostProcessingAnalysisRequest.__doc__ = """Attributes: - run_id: - Protocol id to associate analysis with: +GenerateRunReportResponse.__doc__ = """Attributes: + protocol_run_id: + Protocol ID the run report is for. + report_data: + A section of the run report data (note the api to return this + data may stream back several sections). + remaining_length: + How many further characters of data remain after this message + (excluding of this message). + input_data: + If include_input_data was set, this will be a section of that + data (note the api to return this data may stream back several + sections). + remaining_input_length: + If include_input_data was set, how many further characters of + input data remain after this message (excluding of this + message). """ -WaitForFinishedRequest.__doc__ = """Attributes: +RequestOrigin.ProtocolPhaseManagement.__doc__ = """The protocol script/bream is mainly responsible for making changes via +protocol_phase_management""" +ProtocolRunInfo.__doc__ = """Attributes: run_id: - Only consider a specific protocol run. + The unique identifier assigned to this run. This is + guaranteed to be made of ASCII characters, and at most 40 + characters. It is globally unique across all protocols runs on + all MinKNOW instances. + protocol_id: + The identifier of the protocol, as passed to start_protocol(). + args: + The arguments passed to start_protocol(). + settings: + Any settings changed from the defaults specified in the + protocol's .toml file. These settings were passed as part of + begin_protocol() + output_path: + Output location for protocol data (eg. reads). If data + offload is being used, this is the offload source directory. + Any files written to this location will be output alongside + the rest of the experiment data Since 1.16. + reported_output_path: + Output location to report to the user This is the location at + which files will eventually be written. This path will be + present, but empty, when writing to user-specified offload + locations, as there isn't a "local output path" when offload + is used. For backwards compatibility, if this this field is + not present, then `output_path` can be reported to the user + instead. Since 5.9 state: - Control what to wait for. Specifying - NOTIFY_BEFORE_TERMINATION allows a caller to be notified the - script will be ended _soon_, and do final work to end cleanly. - Since 1.11 - timeout: - Timeout to wait for finished, if the timeout expires before - the protocol is complete (in the state requested) then the - response returns. By default the timeout will wait forever. - Since 1.15 -""" -ProtocolRunUserInfo.__doc__ = """Attributes: - protocol_group_id: - The group which the experiment should be held in. note: This - value could be unset if a user did not specify a group_id when - starting the protocol. - sample_id: - sample_id created by the user - barcode_user_info: - User supplied info for barcodes - user_specified_flow_cell_id: - user_specified_flow_cell_id created by the user - user_specified_product_code: - user_specified_product_code created by the user - kit_info: - Kit information the user requested + Indicates the current state of the protocol run. + phase: + The phase of the protocol. This is the state reported by the + protocol. If the protocol has not reported any state, it will + be PHASE_UNKNOWN. Completed protocols also report + PHASE_UNKNOWN. Note that clients should handle unexpected + values of this field gracefully. This can happen if new phases + are added but the client is still using an older version of + the API specification. Since 4.4. DEPRECATED 6.1: Use + phase_history instead + last_phase_change: + The last time the phase changed. This can be used to + determine how long the protocol has been in the current phase. + NB: This will not be set if the phase is PHASE_UNKNOWN. Since + 4.4. DEPRECATED 6.1: Use phase_history instead + phase_history: + The phase history of the protocol Describes all phases that + the protocol went through, with timestamps at each stage to + track how long it had taken between each phase Since 6.1 + can_pause: + Whether the protocol can be paused. Not all protocols can be + paused, and cannot be paused in all phases. Note that if this + is true and the phase is PHASE_PAUSING or PHASE_PAUSED, + pausing will not actually do anything. Since 4.4. + can_trigger_mux_scan: + Whether a mux scan can be triggered for the protocol. Since + 4.4. + start_time: + When the protocol was started (UTC). + script_end_time: + When the protocol script terminated (UTC). Unset if the + protocol script is still running. Note that the protocol may + still run until final acquisition completes. + end_time: + When the protocol terminated (UTC), indicating both the + protocol script and the final acquisition were completed. + Unset if the protocol is still running. + stop_origin: + Who is responsible for stopping the protocol Candidates: + MinKNOW: Any error that causes the protocol to stop UI: + Through stop_protocol API RunUntil: Through stop criteria + acquisition_run_ids: + A list of acquisition periods started whilst this protocol was + running. + user_info: + User specified information associated with the protocol at + start time. Since 1.11. + epi2me_workflows: + List of workflows from epi2me associated with this protocol + Since 1.15. + device: + Information about the device a protocol was started with + Since 3.4 + flow_cell: + Information about the flow cell a protocol was started with + Since 3.4 + meta_info: + Meta-info about the protocol Since 3.8 + associated_post_processing_analysis: + List of scheduled post processing analysis tasks + analysis_workflow: + The analysis workflow (if any) associated with the protocol + EXPERIMENTAL: This field may change or be removed between + minor versions without warning + pqc_result: + Platform QC result. Set by bream by calling + `set_platform_qc_result()`. Possible to not be set (e.g. not a + pqc run) + hardware_check_result: + Hardware check result. Set by bream calling + `set_hardware_check_result()`. Not set if not a hardware check + protocol + external_offload: + Contains information about external data offloads associated + with this protocol Since 5.0 + software_versions: + For storing version numbers to output to run report Since 5.6 """ BeginProtocolRequest.__doc__ = """ passenger_info @@ -558,182 +775,9 @@ analysis_workflow_request: Workflow request that should be started when the protocol is started -""" -AssociatePostProcessingAnalysisResponse.__doc__ = """Attributes: - id: - Id of the basecaller.proto post processing task that was - triggered, if the post processing analysis was executed - immediately (protocol was finished). -""" -GenerateRunReportResponse.__doc__ = """Attributes: - protocol_run_id: - Protocol ID the run report is for. - report_data: - A section of the run report data (note the api to return this - data may stream back several sections). - remaining_length: - How many further characters of data remain after this message - (excluding of this message). - input_data: - If include_input_data was set, this will be a section of that - data (note the api to return this data may stream back several - sections). - remaining_input_length: - If include_input_data was set, how many further characters of - input data remain after this message (excluding of this - message). -""" -BeginHardwareCheckResponse.__doc__ = """Attributes: - run_id: - UUID generated when the protocol is started, to uniquely - represent this protocol instance -""" -KitInfo.__doc__ = """Attributes: - sequencing_kit: - The sequencing kit used to select the protocol e.g. "SQK- - LSK108" - barcode_expansion_kits: - The expansion barcoding kits that the protocol supports e.g. - "EXP-NBD104" -""" -SetPlatformQcResultRequest.__doc__ = """Attributes: - protocol_run_id: - The protocol_run_id that was given when the pqc run was - started -""" -AnalysisWorkflowInfo.__doc__ = """Attributes: - request: - The request that started the analysis workflow - workflow_id: - The workflow id of the started analysis workflow. May be - empty if the workflow was unable to start - workflow_name: - Human-readable name of the workflow. - workflow_version: - What version the analysis workflow is running - workflow_status: - Current status of the workflow. - workflow_stop_reason: - If 'workflow_status' is STOPPED_WITH_ERROR, then this field - will be populated with a human readable error message - describing why the workflow was stopped. For any other - status, it is empty. - report_names: - The main report(s) for the analysis workflow Indicates that - the report(s) are able to be retrieved from the Reception - server -""" -GetVersionInfoResponse.__doc__ = """Version of the basecaller MinKNOW is running with. Since 5.0 This -field has been updated since 6.0 guppy_connected_version - -Attributes: - minknow: - What minknow version is installed. Split into major, minor and - patch versions Also includes the full version as a string, - which contain the major, minor and patch numbers as well as if - the version is pre-release version (-pre), whether it is a - release candidate (-rc#) or whether it is a variant version - (i.e. for conferences) (-variant). For non-release builds it - also includes the hash of the commit it is based on, and - whether the working copy is different from that has (-dirty) - bream: - The version of Bream that is installed. An invalid - installation will cause this to return "0.0.0". Prior to 5.0, - this field was called "protocols". Since 5.0 - distribution_version: - Describes the distribution that this MinKNOW installation is - part of, usually this will be the Metapackage version - number/identity, this will be "unknown" if the distribution- - version hasn't been set. This information is also communicated - in the Manager's DaemonMessage in daemon.proto - distribution_status: - Indicates if the MinKNOW distribution including components - such as Bream are stable, unstable or have been modified. - protocol_configuration: - The version of the protocol configuration files that is - installed. An invalid installation will cause this to return - "0.0.0". Prior to 5.0, this field was called "configuration". - Since 5.0 - installation_type: - The installation type of MinKNOW. The installation type may - affect the available features, or the update process. Since - 4.1 -""" -ProtocolPhaseManagementRequest.__doc__ = """Attributes: - set_capabilities: - Update the set of capabilities (messages that will be - responded to by the protocol). - phase: - Update the protocol phase. Leave empty (ie: PHASE_UNKNOWN) to - keep the previous phase. -""" -RequestOrigin.MinKNOW.__doc__ = """A request from minknow will usually come in the form of something -ending naturally, or an error occurring where minknow has to take -action - -Attributes: - cause: - Optional further details on the cause of the request -""" -RequestOrigin.ProtocolPhaseManagement.__doc__ = """The protocol script/bream is mainly responsible for making changes via -protocol_phase_management""" -HardwareCheckResult.__doc__ = """Attributes: - failure_reason: - `failure_reason` is guaranteed to be: - `NoError` if `status` - is NOT `Failed` - NOT `NoError` if `status` is `Failed` -""" -ProtocolPhaseManagementRequest.Capabilities.__doc__ = """Attributes: - can_pause: - Indicate that the protocol will respond to pause and resume - requests. - can_trigger_mux_scan: - Indicate that the protocol will respond to mux scan requests. -""" -Epi2meWorkflowReference.__doc__ = """Attributes: - id: - The unique identifier for a workflow ( unique to a specific - instance of epi2me ) - url: - URL that links to the workflow report. Syntax for a local - workflow: file:// otherwise: http(s):// -""" -AssociatedPostProcessingAnalysis.__doc__ = """Attributes: - started_id: - Id of analysis if this has been triggered (otherwise empty). - start_request: - Start request for analysis -""" -RequestOrigin.RunUntil.__doc__ = """A request made by the run until script due to certain criteria being -met - -Attributes: - criteria: - What criteria caused the state change -""" -PlatformQcResult.__doc__ = """Attributes: - flow_cell_id: - The flow cell id that the pqc was performed for - passed: - Whether the flow cell passed the platform qc check - total_pore_count: - Total number of pores that were found on the flow cell, across - all muxes. -""" -StopProtocolRequest.__doc__ = """Attributes: - data_action_on_stop: - Specify how any running acquisition should be handled when - stopping the protocol. Protocol state will enter - PROTOCOL_WAITING_FOR_ACQUISITION whilst any running - acquisition is finished. If a script ends on its own any - analysis that was started is stopped, and it is allowed to - catchup. If the caller wants to end catchup they can call - stop_protocol to end catchup. Since 1.15 -""" -ProtocolGroupIdInfo.__doc__ = """timestamp for the last activity for experiment ordering since 5.6 - -Attributes: - start_time: - Most recent start time for the protocol group id + simulation_source: + Simulation source for playback device data, either an hdf file + or directory for use with arrow playback files. Since 6.2 """ BarcodeUserData.__doc__ = """Attributes: barcode_name: @@ -753,29 +797,28 @@ passenger_info: Extra context per barcode """ -GetRunInfoRequest.__doc__ = """Attributes: - run_id: - The protocol run to get information about. -""" -ListProtocolsRequest.__doc__ = """Attributes: - force_reload: - If this is false, then will try to use the cached value of the - protocol list where possible (still subject to changes in flow - cell). If this is true, then will force a reload of the - protocol list Defaults to false -""" -AnalysisWorkflowRequest.__doc__ = """Attributes: - proxy_request: - The workflow request to start - when: - When to start the request +GenerateRunReportRequest.__doc__ = """Attributes: + protocol_run_id: + The protocol_run_id to generate a report for. + include_input_data: + Optionally return the input data used to generate the report. + This input data is represented as the data seen in + report_data.proto """ -RequestOrigin.User.__doc__ = """'User' based changes will typically come from calls made by the UI -such as 'stop_protocol' - -Attributes: - identity: - If available then provide any identity information MinKNOW has - about the client that made the RPC request +ProtocolRunUserInfo.__doc__ = """Attributes: + protocol_group_id: + The group which the experiment should be held in. note: This + value could be unset if a user did not specify a group_id when + starting the protocol. + sample_id: + sample_id created by the user + barcode_user_info: + User supplied info for barcodes + user_specified_flow_cell_id: + user_specified_flow_cell_id created by the user + user_specified_product_code: + user_specified_product_code created by the user + kit_info: + Kit information the user requested """ # @@protoc_insertion_point(module_scope) diff --git a/python/minknow_api/protocol_service.py b/python/minknow_api/protocol_service.py index fc3dbb8..e714087 100644 --- a/python/minknow_api/protocol_service.py +++ b/python/minknow_api/protocol_service.py @@ -31,6 +31,7 @@ "WaitForFinishedRequest", "GetRunInfoRequest", "RequestOrigin", + "ProtocolPhaseSnapshot", "Epi2meWorkflowReference", "AssociatedPostProcessingAnalysis", "PlatformQcResult", @@ -105,6 +106,7 @@ "PHASE_PAUSING", "PHASE_BAD_TEMPERATURE_AUTOMATIC_PAUSE", "PHASE_RESUMING", + "PHASE_COMPLETED", "Action", "ACTION_NONE", "ACTION_PAUSE", @@ -159,6 +161,8 @@ def start_protocol(self, _message=None, _timeout=None, **kwargs): Since 5.3 analysis_workflow_request (minknow_api.protocol_pb2.AnalysisWorkflowRequest, optional): Workflow request that should be started when the protocol is started + EXPERIMENTAL: This field may change or be removed between minor versions without warning + Returns: minknow_api.protocol_pb2.StartProtocolResponse @@ -1090,6 +1094,9 @@ def begin_protocol(self, _message=None, _timeout=None, **kwargs): Since 5.3 settings (minknow_api.protocol_pb2.BeginProtocolRequest.SettingsEntry, optional): Any settings changed from the defaults specified in the protocol's .toml file. analysis_workflow_request (minknow_api.protocol_pb2.AnalysisWorkflowRequest, optional): Workflow request that should be started when the protocol is started + simulation_source (str, optional): Simulation source for playback device data, either an hdf file or directory for use with arrow playback files. + + Since 6.2 Returns: minknow_api.protocol_pb2.BeginProtocolResponse @@ -1148,6 +1155,10 @@ def begin_protocol(self, _message=None, _timeout=None, **kwargs): unused_args.remove("analysis_workflow_request") _message.analysis_workflow_request.CopyFrom(kwargs['analysis_workflow_request']) + if "simulation_source" in kwargs: + unused_args.remove("simulation_source") + _message.simulation_source = kwargs['simulation_source'] + if len(unused_args) > 0: raise ArgumentError("Unexpected keyword arguments to begin_protocol: '{}'".format(", ".join(unused_args))) diff --git a/python/minknow_api/protocol_settings_pb2.py b/python/minknow_api/protocol_settings_pb2.py index f1cd8ff..30fa405 100644 --- a/python/minknow_api/protocol_settings_pb2.py +++ b/python/minknow_api/protocol_settings_pb2.py @@ -50,21 +50,6 @@ _globals['_PROTOCOLSETTING_UNIT']._serialized_end=2081 _globals['_PROTOCOLSETTING_VISIBILITY']._serialized_start=2083 _globals['_PROTOCOLSETTING_VISIBILITY']._serialized_end=2146 -ProtocolIdentifierComponents.__doc__ = """Attributes: - location: - If not specified, will default to "ANY" - experiment_type: - one of "custom", "sequencing", "control", "ctc", "platform qc" - or "flowcell_plugin" - name: - Name (or path) of the protocol, without the .toml extension - eg: "sequencing/sequencing_MIN106_DNA" this is relative to the - system or user protocol directory - flow_cell_product_code: - eg: "FLO-MIN106" - kit: - eg: "SQK-RPB004" -""" ProtocolSetting.__doc__ = """Attributes: identifier: Identifier is the unique primary-key for referring to @@ -109,4 +94,19 @@ choices: when unit is CHOICE, this defines the acceptable choices. """ +ProtocolIdentifierComponents.__doc__ = """Attributes: + location: + If not specified, will default to "ANY" + experiment_type: + one of "custom", "sequencing", "control", "ctc", "platform qc" + or "flowcell_plugin" + name: + Name (or path) of the protocol, without the .toml extension + eg: "sequencing/sequencing_MIN106_DNA" this is relative to the + system or user protocol directory + flow_cell_product_code: + eg: "FLO-MIN106" + kit: + eg: "SQK-RPB004" +""" # @@protoc_insertion_point(module_scope) diff --git a/python/minknow_api/report_data_pb2.py b/python/minknow_api/report_data_pb2.py index 74fd9a3..16a620e 100644 --- a/python/minknow_api/report_data_pb2.py +++ b/python/minknow_api/report_data_pb2.py @@ -58,8 +58,6 @@ basecaller_config: Information about the basecaller configuration Since 5.9 """ -Host.__doc__ = """This is a subset of the information available from the describe_host() -call""" ReportData.__doc__ = """This field has been removed Since 5.6 Attributes: @@ -73,4 +71,6 @@ report_data_generation_time: The time at which the report data was generated (UTC) """ +Host.__doc__ = """This is a subset of the information available from the describe_host() +call""" # @@protoc_insertion_point(module_scope) diff --git a/python/minknow_api/run_until_pb2.py b/python/minknow_api/run_until_pb2.py index 2389d38..9fc251c 100644 --- a/python/minknow_api/run_until_pb2.py +++ b/python/minknow_api/run_until_pb2.py @@ -89,6 +89,42 @@ _globals['_STREAMUPDATESRESPONSE']._serialized_end=2851 _globals['_RUNUNTILSERVICE']._serialized_start=2854 _globals['_RUNUNTILSERVICE']._serialized_end=3359 +ErrorUpdate.OtherError.__doc__ = """An error that is not covered by one of the other error types, above.""" +StreamUpdatesRequest.__doc__ = """Attributes: + acquisition_run_id: + The acquisition to stream Run-Until updates for + start_idx: + The index of the first update to send. If an index is set + that is greater than the current greatest update index, no + past updates will be sent, but any future updates will be + sent. This may mean that you receive updates with an `idx` + smaller than `start_idx`. In order to receive only updates + that are sent after the call to `stream_updates()`, and no + historic updates, set `start_idx` to `int64_max`. Setting + `start_idx` to a negative number will be treated as an offset + from the end of the updates history. A `start_idx` of `-1` + will cause the last update to be sent, and any future updates + to be streamed. The negative value is clamped such that a + "large" negative number will be equivalent to setting a + `start_idx` of `0`. By default, `start_idx` is `0`, which + means that all updates from the first update onwards will be + sent. +""" +EstimatedTimeRemainingUpdate.EstimatedTimes.__doc__ = """Map of Run-Until Criterion to `EstimatedTime` when the criterion will +be fulfilled Only criteria for which an update is being provided are +contained in the map.""" +ScriptUpdate.Started.__doc__ = """Indicates that the run-until script has started and is running""" +Update.__doc__ = """Attributes: + current_progress_update: + Gives the current values of the criteria (Compare to + stream_target_criteria call to see %) + other: + Space for custom updates from custom Run-Until scripts +""" +WriteUpdatesRequest.__doc__ = """Attributes: + acquisition_run_id: + The acquisition this Run-Until update applies to +""" StreamUpdatesResponse.__doc__ = """Attributes: idx: The index of this update The index is incremented after each @@ -101,6 +137,16 @@ update: The update data itself """ +CriteriaValues.__doc__ = """A map of criterion name -> value This message is deliberately +flexible, to allow custom Run-Until Scripts to expand the range and +types of available criteria.""" +StreamTargetCriteriaRequest.__doc__ = """Attributes: + acquisition_run_id: + The acquisition to obtain the Run-Until Criteria for +""" +EstimatedTimeRemainingUpdate.NotEstimated.__doc__ = """Indicates that a time is not estimated""" +ScriptUpdate.CriteriaUpdated.__doc__ = """Indicates the the Run-Until Script has update its criteria in response +to receiving a `StreamTargetCriteriaResponse` message""" EstimatedTimeRemainingUpdate.Estimated.__doc__ = """ These times are estimates of the (UTC) time at which the condition will be fulfilled Some idea of the expected accuracy of this estimate can be obtained by comparing `min_time` with `max_time`. If the @@ -118,52 +164,10 @@ Estimated upper bound on the time at which the condition will occur (UTC) """ -Update.__doc__ = """Attributes: - current_progress_update: - Gives the current values of the criteria (Compare to - stream_target_criteria call to see %) - other: - Space for custom updates from custom Run-Until scripts -""" -EstimatedTimeRemainingUpdate.NotEstimated.__doc__ = """Indicates that a time is not estimated""" -CriteriaValues.__doc__ = """A map of criterion name -> value This message is deliberately -flexible, to allow custom Run-Until Scripts to expand the range and -types of available criteria.""" -ScriptUpdate.Started.__doc__ = """Indicates that the run-until script has started and is running""" -ErrorUpdate.InvalidCriteria.__doc__ = """Indicates that one or more of the supplied target criteria is not -recognised by the Run-Until Script. Unrecognised target criteria -will not be used to pause or stop the run.""" -StreamUpdatesRequest.__doc__ = """Attributes: - acquisition_run_id: - The acquisition to stream Run-Until updates for - start_idx: - The index of the first update to send. If an index is set - that is greater than the current greatest update index, no - past updates will be sent, but any future updates will be - sent. This may mean that you receive updates with an `idx` - smaller than `start_idx`. In order to receive only updates - that are sent after the call to `stream_updates()`, and no - historic updates, set `start_idx` to `int64_max`. Setting - `start_idx` to a negative number will be treated as an offset - from the end of the updates history. A `start_idx` of `-1` - will cause the last update to be sent, and any future updates - to be streamed. The negative value is clamped such that a - "large" negative number will be equivalent to setting a - `start_idx` of `0`. By default, `start_idx` is `0`, which - means that all updates from the first update onwards will be - sent. -""" -ScriptUpdate.CriteriaUpdated.__doc__ = """Indicates the the Run-Until Script has update its criteria in response -to receiving a `StreamTargetCriteriaResponse` message""" -StreamTargetCriteriaRequest.__doc__ = """Attributes: - acquisition_run_id: - The acquisition to obtain the Run-Until Criteria for -""" -WriteUpdatesRequest.__doc__ = """Attributes: +WriteTargetCriteriaRequest.__doc__ = """Attributes: acquisition_run_id: - The acquisition this Run-Until update applies to + The acquisition to set the Run-Until Criteria for """ -ErrorUpdate.__doc__ = """Indicates that a problem has been encountered by the Run-Until Script""" ActionUpdate.__doc__ = """Indicates that an action has been performed When a request is sent using `write_updates()`, MinKNOW performs the specified action. @@ -171,15 +175,11 @@ criteria: The criteria associated with this action """ -WriteTargetCriteriaRequest.__doc__ = """Attributes: - acquisition_run_id: - The acquisition to set the Run-Until Criteria for -""" -ErrorUpdate.OtherError.__doc__ = """An error that is not covered by one of the other error types, above.""" -EstimatedTimeRemainingUpdate.EstimatedTimes.__doc__ = """Map of Run-Until Criterion to `EstimatedTime` when the criterion will -be fulfilled Only criteria for which an update is being provided are -contained in the map.""" +ErrorUpdate.InvalidCriteria.__doc__ = """Indicates that one or more of the supplied target criteria is not +recognised by the Run-Until Script. Unrecognised target criteria +will not be used to pause or stop the run.""" EstimatedTimeRemainingUpdate.__doc__ = """Indicates the estimated time remaining An estimated time may be provided for each Run-Until Criterion that is specified as an end- point.""" +ErrorUpdate.__doc__ = """Indicates that a problem has been encountered by the Run-Until Script""" # @@protoc_insertion_point(module_scope) diff --git a/python/minknow_api/run_until_pb2_grpc.py b/python/minknow_api/run_until_pb2_grpc.py index 08b74c8..33c907d 100644 --- a/python/minknow_api/run_until_pb2_grpc.py +++ b/python/minknow_api/run_until_pb2_grpc.py @@ -26,10 +26,10 @@ class RunUntilServiceStub(object): time remaining, and Run-Until actions (i.e. starting/stopping the experiment). Finally, this service provides an API for Run-Until Scripts. A Run-Until Script is responsible - for actually implementing the Run-Until functionality. The Run-Until Script reads the Target + for actually implementing the Run-Until functionality. The Run-Until Script reads the Target Run-Until Criteria that are set by the user. It then monitors the experiment's progress, and pauses or stops the experiment when the Run-Until Criteria have been fulfilled. There is a - "standard" ONT-provided run-until script, which supports the "standard" Run-Until Criteria. + "standard" ONT-provided run-until script, which supports the "standard" Run-Until Criteria. Custom Run-Until Scripts can be implemented which extend the "standard" Run-Until Script to provide support for additional criteria. @@ -115,7 +115,7 @@ class RunUntilServiceStub(object): stream as follows: - When the protocol starts, an empty message is added to the history - - When an update is received on the `write_updates()` interface, the values of the + - When an update is received on the `write_updates()` interface, the values of the `estimated_time_remaining_update` and `current_progress_update` fields are updated, by "merging" the corresponding fields of the last message in the history. "Merging" here means copying keys/values which appear in the "previous" message, but which don't have @@ -127,7 +127,7 @@ class RunUntilServiceStub(object): previous message in the history is overwritten with the "merged" message - Otherwise, the "merged" message is appended to the history. - After updating the history, the final entry in the history is sent to any open + After updating the history, the final entry in the history is sent to any open `stream_updates()` streams. The `idx` in the `StreamUpdatesResponse` message is set equal to the index of the entry in the history. This means that the `stream_updates()` stream will likely contain repeated `idx` values -- this will happen when the previous message in the @@ -186,10 +186,10 @@ class RunUntilServiceServicer(object): time remaining, and Run-Until actions (i.e. starting/stopping the experiment). Finally, this service provides an API for Run-Until Scripts. A Run-Until Script is responsible - for actually implementing the Run-Until functionality. The Run-Until Script reads the Target + for actually implementing the Run-Until functionality. The Run-Until Script reads the Target Run-Until Criteria that are set by the user. It then monitors the experiment's progress, and pauses or stops the experiment when the Run-Until Criteria have been fulfilled. There is a - "standard" ONT-provided run-until script, which supports the "standard" Run-Until Criteria. + "standard" ONT-provided run-until script, which supports the "standard" Run-Until Criteria. Custom Run-Until Scripts can be implemented which extend the "standard" Run-Until Script to provide support for additional criteria. @@ -275,7 +275,7 @@ class RunUntilServiceServicer(object): stream as follows: - When the protocol starts, an empty message is added to the history - - When an update is received on the `write_updates()` interface, the values of the + - When an update is received on the `write_updates()` interface, the values of the `estimated_time_remaining_update` and `current_progress_update` fields are updated, by "merging" the corresponding fields of the last message in the history. "Merging" here means copying keys/values which appear in the "previous" message, but which don't have @@ -287,7 +287,7 @@ class RunUntilServiceServicer(object): previous message in the history is overwritten with the "merged" message - Otherwise, the "merged" message is appended to the history. - After updating the history, the final entry in the history is sent to any open + After updating the history, the final entry in the history is sent to any open `stream_updates()` streams. The `idx` in the `StreamUpdatesResponse` message is set equal to the index of the entry in the history. This means that the `stream_updates()` stream will likely contain repeated `idx` values -- this will happen when the previous message in the @@ -394,10 +394,10 @@ class RunUntilService(object): time remaining, and Run-Until actions (i.e. starting/stopping the experiment). Finally, this service provides an API for Run-Until Scripts. A Run-Until Script is responsible - for actually implementing the Run-Until functionality. The Run-Until Script reads the Target + for actually implementing the Run-Until functionality. The Run-Until Script reads the Target Run-Until Criteria that are set by the user. It then monitors the experiment's progress, and pauses or stops the experiment when the Run-Until Criteria have been fulfilled. There is a - "standard" ONT-provided run-until script, which supports the "standard" Run-Until Criteria. + "standard" ONT-provided run-until script, which supports the "standard" Run-Until Criteria. Custom Run-Until Scripts can be implemented which extend the "standard" Run-Until Script to provide support for additional criteria. @@ -483,7 +483,7 @@ class RunUntilService(object): stream as follows: - When the protocol starts, an empty message is added to the history - - When an update is received on the `write_updates()` interface, the values of the + - When an update is received on the `write_updates()` interface, the values of the `estimated_time_remaining_update` and `current_progress_update` fields are updated, by "merging" the corresponding fields of the last message in the history. "Merging" here means copying keys/values which appear in the "previous" message, but which don't have @@ -495,7 +495,7 @@ class RunUntilService(object): previous message in the history is overwritten with the "merged" message - Otherwise, the "merged" message is appended to the history. - After updating the history, the final entry in the history is sent to any open + After updating the history, the final entry in the history is sent to any open `stream_updates()` streams. The `idx` in the `StreamUpdatesResponse` message is set equal to the index of the entry in the history. This means that the `stream_updates()` stream will likely contain repeated `idx` values -- this will happen when the previous message in the diff --git a/python/minknow_api/run_until_service.py b/python/minknow_api/run_until_service.py index 1f52b02..e065c7c 100644 --- a/python/minknow_api/run_until_service.py +++ b/python/minknow_api/run_until_service.py @@ -67,10 +67,10 @@ class RunUntilService(object): time remaining, and Run-Until actions (i.e. starting/stopping the experiment). Finally, this service provides an API for Run-Until Scripts. A Run-Until Script is responsible - for actually implementing the Run-Until functionality. The Run-Until Script reads the Target + for actually implementing the Run-Until functionality. The Run-Until Script reads the Target Run-Until Criteria that are set by the user. It then monitors the experiment's progress, and pauses or stops the experiment when the Run-Until Criteria have been fulfilled. There is a - "standard" ONT-provided run-until script, which supports the "standard" Run-Until Criteria. + "standard" ONT-provided run-until script, which supports the "standard" Run-Until Criteria. Custom Run-Until Scripts can be implemented which extend the "standard" Run-Until Script to provide support for additional criteria. @@ -156,7 +156,7 @@ class RunUntilService(object): stream as follows: - When the protocol starts, an empty message is added to the history - - When an update is received on the `write_updates()` interface, the values of the + - When an update is received on the `write_updates()` interface, the values of the `estimated_time_remaining_update` and `current_progress_update` fields are updated, by "merging" the corresponding fields of the last message in the history. "Merging" here means copying keys/values which appear in the "previous" message, but which don't have @@ -168,7 +168,7 @@ class RunUntilService(object): previous message in the history is overwritten with the "merged" message - Otherwise, the "merged" message is appended to the history. - After updating the history, the final entry in the history is sent to any open + After updating the history, the final entry in the history is sent to any open `stream_updates()` streams. The `idx` in the `StreamUpdatesResponse` message is set equal to the index of the entry in the history. This means that the `stream_updates()` stream will likely contain repeated `idx` values -- this will happen when the previous message in the diff --git a/python/minknow_api/statistics_pb2.py b/python/minknow_api/statistics_pb2.py index ea766c9..0a7940c 100644 --- a/python/minknow_api/statistics_pb2.py +++ b/python/minknow_api/statistics_pb2.py @@ -16,7 +16,7 @@ from minknow_api import rpc_options_pb2 as minknow__api_dot_rpc__options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1cminknow_api/statistics.proto\x12\x16minknow_api.statistics\x1a\x1dminknow_api/acquisition.proto\x1a\x1dminknow_api/rpc_options.proto\"9\n\rDataSelection\x12\r\n\x05start\x18\x01 \x01(\x03\x12\x0c\n\x04step\x18\x02 \x01(\x04\x12\x0b\n\x03\x65nd\x18\x03 \x01(\x03\"h\n\x12\x46loatDataSelection\x12\x12\n\x05start\x18\x01 \x01(\x02H\x00\x88\x01\x01\x12\x11\n\x04step\x18\x02 \x01(\x02H\x01\x88\x01\x01\x12\x10\n\x03\x65nd\x18\x03 \x01(\x02H\x02\x88\x01\x01\x42\x08\n\x06_startB\x07\n\x05_stepB\x06\n\x04_end\"x\n\x15StreamDutyTimeRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12=\n\x0e\x64\x61ta_selection\x18\x02 \x01(\x0b\x32%.minknow_api.statistics.DataSelection\"\x91\x03\n\x16StreamDutyTimeResponse\x12Q\n\rbucket_ranges\x18\x01 \x03(\x0b\x32:.minknow_api.statistics.StreamDutyTimeResponse.BucketRange\x12Y\n\x0e\x63hannel_states\x18\x02 \x03(\x0b\x32\x41.minknow_api.statistics.StreamDutyTimeResponse.ChannelStatesEntry\x1a)\n\x0b\x42ucketRange\x12\r\n\x05start\x18\x01 \x01(\r\x12\x0b\n\x03\x65nd\x18\x02 \x01(\r\x1a\'\n\x10\x43hannelStateData\x12\x13\n\x0bstate_times\x18\x01 \x03(\x04\x1au\n\x12\x43hannelStatesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12N\n\x05value\x18\x02 \x01(\x0b\x32?.minknow_api.statistics.StreamDutyTimeResponse.ChannelStateData:\x02\x38\x01\"X\n\x16ReadLengthHistogramKey\x12>\n\x0fread_end_reason\x18\x01 \x01(\x0e\x32%.minknow_api.statistics.ReadEndReason\"3\n\x18ReadLengthHistogramSplit\x12\x17\n\x0fread_end_reason\x18\x01 \x01(\x08\"\xc9\x03\n StreamReadLengthHistogramRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12\x19\n\x11poll_time_seconds\x18\x02 \x01(\r\x12@\n\x10read_length_type\x18\x03 \x01(\x0e\x32&.minknow_api.statistics.ReadLengthType\x12=\n\x0e\x64\x61ta_selection\x18\x04 \x01(\x0b\x32%.minknow_api.statistics.DataSelection\x12\x42\n\x11\x62ucket_value_type\x18\x05 \x01(\x0e\x32\'.minknow_api.statistics.BucketValueType\x12\x1f\n\x17\x64iscard_outlier_percent\x18\x06 \x01(\x02\x12\x41\n\tfiltering\x18\x07 \x03(\x0b\x32..minknow_api.statistics.ReadLengthHistogramKey\x12?\n\x05split\x18\x08 \x01(\x0b\x32\x30.minknow_api.statistics.ReadLengthHistogramSplit\"\xb9\x04\n!StreamReadLengthHistogramResponse\x12@\n\x10read_length_type\x18\x01 \x01(\x0e\x32&.minknow_api.statistics.ReadLengthType\x12\\\n\rbucket_ranges\x18\x02 \x03(\x0b\x32\x45.minknow_api.statistics.StreamReadLengthHistogramResponse.BucketRange\x12\x17\n\x0fsource_data_end\x18\x05 \x01(\x04\x12\x42\n\x11\x62ucket_value_type\x18\x03 \x01(\x0e\x32\'.minknow_api.statistics.BucketValueType\x12i\n\x0ehistogram_data\x18\x04 \x03(\x0b\x32Q.minknow_api.statistics.StreamReadLengthHistogramResponse.ReadLengthHistogramData\x1a)\n\x0b\x42ucketRange\x12\r\n\x05start\x18\x01 \x01(\x04\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x04\x1a\x80\x01\n\x17ReadLengthHistogramData\x12\x41\n\tfiltering\x18\x03 \x03(\x0b\x32..minknow_api.statistics.ReadLengthHistogramKey\x12\x15\n\rbucket_values\x18\x01 \x03(\x04\x12\x0b\n\x03n50\x18\x02 \x01(\x02\"8\n\x14ReadLengthN50Request\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"\xa2\x01\n\x15ReadLengthN50Response\x12K\n\x08n50_data\x18\x01 \x01(\x0b\x32\x39.minknow_api.statistics.ReadLengthN50Response.ReadN50Data\x1a<\n\x0bReadN50Data\x12\x15\n\restimated_n50\x18\x01 \x01(\x02\x12\x16\n\x0e\x62\x61secalled_n50\x18\x02 \x01(\x02\"=\n\x19GetReadLengthTypesRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"]\n\x1aGetReadLengthTypesResponse\x12?\n\x0f\x61vailable_types\x18\x01 \x03(\x0e\x32&.minknow_api.statistics.ReadLengthType\"\x9a\x02\n\x12QScoreHistogramKey\x12\x46\n\tread_type\x18\x01 \x01(\x0e\x32\x33.minknow_api.statistics.QScoreHistogramKey.ReadType\x12N\n\x0b\x63\x61ll_status\x18\x02 \x01(\x0e\x32\x39.minknow_api.statistics.QScoreHistogramKey.BasecallStatus\",\n\x08ReadType\x12\x07\n\x03\x41ll\x10\x00\x12\x0b\n\x07Simplex\x10\x01\x12\n\n\x06\x44uplex\x10\x02\">\n\x0e\x42\x61secallStatus\x12\x07\n\x03\x41ny\x10\x00\x12\x0b\n\x07Skipped\x10\x01\x12\n\n\x06\x46\x61iled\x10\x02\x12\n\n\x06Passed\x10\x03\"\xf2\x01\n\x1cStreamQScoreHistogramRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12\x19\n\x11poll_time_seconds\x18\x02 \x01(\r\x12\x42\n\x0e\x64\x61ta_selection\x18\x03 \x01(\x0b\x32*.minknow_api.statistics.FloatDataSelection\x12Q\n\x11\x62ucket_value_type\x18\x04 \x01(\x0e\x32\x36.minknow_api.statistics.QScoreHistogramBucketValueType\"\xbd\x04\n\x1dStreamQScoreHistogramResponse\x12Q\n\x11\x62ucket_value_type\x18\x01 \x01(\x0e\x32\x36.minknow_api.statistics.QScoreHistogramBucketValueType\x12X\n\rbucket_ranges\x18\x02 \x03(\x0b\x32\x41.minknow_api.statistics.StreamQScoreHistogramResponse.BucketRange\x12\\\n\x11source_data_range\x18\x03 \x01(\x0b\x32\x41.minknow_api.statistics.StreamQScoreHistogramResponse.BucketRange\x12\x61\n\x0ehistogram_data\x18\x04 \x03(\x0b\x32I.minknow_api.statistics.StreamQScoreHistogramResponse.QScoreHistogramData\x1a)\n\x0b\x42ucketRange\x12\r\n\x05start\x18\x01 \x01(\x02\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x02\x1a\x82\x01\n\x13QScoreHistogramData\x12=\n\tfiltering\x18\x01 \x03(\x0b\x32*.minknow_api.statistics.QScoreHistogramKey\x12\x15\n\rbucket_values\x18\x02 \x03(\x04\x12\x15\n\rmodal_q_score\x18\x03 \x01(\x02\"\xa3\x02\n\x15QAccuracyHistogramKey\x12I\n\tread_type\x18\x01 \x01(\x0e\x32\x36.minknow_api.statistics.QAccuracyHistogramKey.ReadType\x12Q\n\x0b\x63\x61ll_status\x18\x02 \x01(\x0e\x32<.minknow_api.statistics.QAccuracyHistogramKey.BasecallStatus\",\n\x08ReadType\x12\x07\n\x03\x41ll\x10\x00\x12\x0b\n\x07Simplex\x10\x01\x12\n\n\x06\x44uplex\x10\x02\">\n\x0e\x42\x61secallStatus\x12\x07\n\x03\x41ny\x10\x00\x12\x0b\n\x07Skipped\x10\x01\x12\n\n\x06\x46\x61iled\x10\x02\x12\n\n\x06Passed\x10\x03\"\xf8\x01\n\x1fStreamQAccuracyHistogramRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12\x19\n\x11poll_time_seconds\x18\x02 \x01(\r\x12\x42\n\x0e\x64\x61ta_selection\x18\x03 \x01(\x0b\x32*.minknow_api.statistics.FloatDataSelection\x12T\n\x11\x62ucket_value_type\x18\x04 \x01(\x0e\x32\x39.minknow_api.statistics.QAccuracyHistogramBucketValueType\"\xd8\x04\n StreamQAccuracyHistogramResponse\x12T\n\x11\x62ucket_value_type\x18\x01 \x01(\x0e\x32\x39.minknow_api.statistics.QAccuracyHistogramBucketValueType\x12[\n\rbucket_ranges\x18\x02 \x03(\x0b\x32\x44.minknow_api.statistics.StreamQAccuracyHistogramResponse.BucketRange\x12_\n\x11source_data_range\x18\x03 \x01(\x0b\x32\x44.minknow_api.statistics.StreamQAccuracyHistogramResponse.BucketRange\x12g\n\x0ehistogram_data\x18\x04 \x03(\x0b\x32O.minknow_api.statistics.StreamQAccuracyHistogramResponse.QAccuracyHistogramData\x1a)\n\x0b\x42ucketRange\x12\r\n\x05start\x18\x01 \x01(\x02\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x02\x1a\x8b\x01\n\x16QAccuracyHistogramData\x12@\n\tfiltering\x18\x01 \x03(\x0b\x32-.minknow_api.statistics.QAccuracyHistogramKey\x12\x15\n\rbucket_values\x18\x02 \x03(\x04\x12\x18\n\x10modal_q_accuracy\x18\x03 \x01(\x02\"\x9c\x02\n\x14\x41\x63quisitionOutputKey\x12\x14\n\x0c\x62\x61rcode_name\x18\x01 \x01(\t\x12\x1b\n\x13\x61lignment_reference\x18\x02 \x01(\t\x12!\n\x19\x61lignment_bed_file_region\x18\x03 \x01(\t\x12&\n\x1e\x61lignment_bed_file_region_name\x18\x08 \x01(\t\x12\x17\n\x0flamp_barcode_id\x18\x04 \x01(\t\x12\x16\n\x0elamp_target_id\x18\x05 \x01(\t\x12\x15\n\rbarcode_alias\x18\x06 \x01(\t\x12>\n\x0fread_end_reason\x18\x07 \x01(\x0e\x32%.minknow_api.statistics.ReadEndReason\"\xb8\x01\n\x16\x41\x63quisitionOutputSplit\x12\x14\n\x0c\x62\x61rcode_name\x18\x01 \x01(\x08\x12\x1b\n\x13\x61lignment_reference\x18\x02 \x01(\x08\x12!\n\x19\x61lignment_bed_file_region\x18\x03 \x01(\x08\x12\x17\n\x0flamp_barcode_id\x18\x04 \x01(\x08\x12\x16\n\x0elamp_target_id\x18\x05 \x01(\x08\x12\x17\n\x0fread_end_reason\x18\x06 \x01(\x08\"\x81\x02\n\x1eStreamAcquisitionOutputRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12=\n\x0e\x64\x61ta_selection\x18\x02 \x01(\x0b\x32%.minknow_api.statistics.DataSelection\x12?\n\tfiltering\x18\x03 \x03(\x0b\x32,.minknow_api.statistics.AcquisitionOutputKey\x12=\n\x05split\x18\x04 \x01(\x0b\x32..minknow_api.statistics.AcquisitionOutputSplit\"u\n\x19\x41\x63quisitionOutputSnapshot\x12\x0f\n\x07seconds\x18\x01 \x01(\r\x12G\n\ryield_summary\x18\x02 \x01(\x0b\x32\x30.minknow_api.acquisition.AcquisitionYieldSummary\"\x9c\x02\n\x1fStreamAcquisitionOutputResponse\x12\\\n\tsnapshots\x18\x01 \x03(\x0b\x32I.minknow_api.statistics.StreamAcquisitionOutputResponse.FilteredSnapshots\x1a\x9a\x01\n\x11\x46ilteredSnapshots\x12?\n\tfiltering\x18\x01 \x03(\x0b\x32,.minknow_api.statistics.AcquisitionOutputKey\x12\x44\n\tsnapshots\x18\x02 \x03(\x0b\x32\x31.minknow_api.statistics.AcquisitionOutputSnapshot\"|\n\x19StreamWriterOutputRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12=\n\x0e\x64\x61ta_selection\x18\x02 \x01(\x0b\x32%.minknow_api.statistics.DataSelection\"q\n\x14WriterOutputSnapshot\x12\x0f\n\x07seconds\x18\x01 \x01(\r\x12H\n\rwriter_output\x18\x02 \x01(\x0b\x32\x31.minknow_api.acquisition.AcquisitionWriterSummary\"]\n\x1aStreamWriterOutputResponse\x12?\n\tsnapshots\x18\x01 \x03(\x0b\x32,.minknow_api.statistics.WriterOutputSnapshot\"Q\n-StreamEncounteredAcquisitionOutputKeysRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"\x7f\n.StreamEncounteredAcquisitionOutputKeysResponse\x12M\n\x17\x61\x63quisition_output_keys\x18\x01 \x03(\x0b\x32,.minknow_api.statistics.AcquisitionOutputKey\"{\n\x18StreamTemperatureRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12=\n\x0e\x64\x61ta_selection\x18\x02 \x01(\x0b\x32%.minknow_api.statistics.DataSelection\"\xe1\x03\n\x11TemperaturePacket\x12M\n\x06minion\x18\x01 \x01(\x0b\x32;.minknow_api.statistics.TemperaturePacket.MinIONTemperatureH\x00\x12U\n\npromethion\x18\x02 \x01(\x0b\x32?.minknow_api.statistics.TemperaturePacket.PromethIONTemperatureH\x00\x12K\n\x12target_temperature\x18\x03 \x01(\x0b\x32/.minknow_api.statistics.TemperaturePacket.Range\x1a)\n\x05Range\x12\x0f\n\x07minimum\x18\x01 \x01(\x02\x12\x0f\n\x07maximum\x18\x02 \x01(\x02\x1aK\n\x11MinIONTemperature\x12\x18\n\x10\x61sic_temperature\x18\x01 \x01(\x01\x12\x1c\n\x14heatsink_temperature\x18\x02 \x01(\x01\x1aR\n\x15PromethIONTemperature\x12\x1c\n\x14\x66lowcell_temperature\x18\x01 \x01(\x01\x12\x1b\n\x13\x63hamber_temperature\x18\x02 \x01(\x01\x42\r\n\x0btemperature\"\\\n\x19StreamTemperatureResponse\x12?\n\x0ctemperatures\x18\x01 \x03(\x0b\x32).minknow_api.statistics.TemperaturePacket\"Z\n\x11\x42iasVoltagePacket\x12\x19\n\x11\x61\x63quisition_index\x18\x01 \x01(\x04\x12\x14\n\x0c\x62ias_voltage\x18\x02 \x01(\x01\x12\x14\n\x0ctime_seconds\x18\x03 \x01(\x04\"=\n\x19StreamBiasVoltagesRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"^\n\x1aStreamBiasVoltagesResponse\x12@\n\rbias_voltages\x18\x01 \x03(\x0b\x32).minknow_api.statistics.BiasVoltagePacket\"\xee\x01\n\x14StreamBoxplotRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12K\n\tdata_type\x18\x02 \x01(\x0e\x32\x38.minknow_api.statistics.StreamBoxplotRequest.BoxplotType\x12\x15\n\rdataset_width\x18\x03 \x01(\r\x12\x11\n\tpoll_time\x18\x04 \x01(\r\"=\n\x0b\x42oxplotType\x12\n\n\x06QSCORE\x10\x00\x12\x14\n\x10\x42\x41SES_PER_SECOND\x10\x01\x12\x0c\n\x08\x41\x43\x43URACY\x10\x02\"\x9a\x02\n\x0f\x42oxplotResponse\x12H\n\x08\x64\x61tasets\x18\x01 \x03(\x0b\x32\x36.minknow_api.statistics.BoxplotResponse.BoxplotDataset\x1a\xbc\x01\n\x0e\x42oxplotDataset\x12\x0b\n\x03min\x18\x01 \x01(\x02\x12\x0b\n\x03q25\x18\x02 \x01(\x02\x12\x0b\n\x03q50\x18\x03 \x01(\x02\x12\x0b\n\x03q75\x18\x04 \x01(\x02\x12\x0b\n\x03max\x18\x05 \x01(\x02\x12\r\n\x05\x63ount\x18\x06 \x01(\x04\x12%\n\x1dlower_full_width_half_maximum\x18\x07 \x01(\x02\x12\x0c\n\x04mode\x18\x08 \x01(\x02\x12%\n\x1dupper_full_width_half_maximum\x18\t \x01(\x02*L\n\x0eReadLengthType\x12\x11\n\rMinknowEvents\x10\x00\x12\x12\n\x0e\x45stimatedBases\x10\x01\x12\x13\n\x0f\x42\x61secalledBases\x10\x02*2\n\x0f\x42ucketValueType\x12\x0e\n\nReadCounts\x10\x00\x12\x0f\n\x0bReadLengths\x10\x01*\xa0\x01\n\rReadEndReason\x12\x07\n\x03\x41ll\x10\x00\x12\x0b\n\x07Unknown\x10\x01\x12\x0b\n\x07Partial\x10\x02\x12\r\n\tMuxChange\x10\x03\x12\x14\n\x10UnblockMuxChange\x10\x04\x12\x12\n\x0eSignalPositive\x10\x05\x12\x12\n\x0eSignalNegative\x10\x06\x12\x1f\n\x1b\x44\x61taServiceUnblockMuxChange\x10\x07*S\n\x1eQScoreHistogramBucketValueType\x12\x15\n\x11QScore_ReadCounts\x10\x00\x12\x1a\n\x16QScore_BasecalledBases\x10\x01*\\\n!QAccuracyHistogramBucketValueType\x12\x18\n\x14QAccuracy_ReadCounts\x10\x00\x12\x1d\n\x19QAccuracy_BasecalledBases\x10\x01\x32\xb6\r\n\x11StatisticsService\x12x\n\x10stream_duty_time\x12-.minknow_api.statistics.StreamDutyTimeRequest\x1a..minknow_api.statistics.StreamDutyTimeResponse\"\x03\x90\x02\x01\x30\x01\x12\x93\x01\n\x19stream_acquisition_output\x12\x36.minknow_api.statistics.StreamAcquisitionOutputRequest\x1a\x37.minknow_api.statistics.StreamAcquisitionOutputResponse\"\x03\x90\x02\x01\x30\x01\x12\x84\x01\n\x14stream_writer_output\x12\x31.minknow_api.statistics.StreamWriterOutputRequest\x1a\x32.minknow_api.statistics.StreamWriterOutputResponse\"\x03\x90\x02\x01\x30\x01\x12\xc2\x01\n*stream_encountered_acquisition_output_keys\x12\x45.minknow_api.statistics.StreamEncounteredAcquisitionOutputKeysRequest\x1a\x46.minknow_api.statistics.StreamEncounteredAcquisitionOutputKeysResponse\"\x03\x90\x02\x01\x30\x01\x12\x80\x01\n\x12stream_temperature\x12\x30.minknow_api.statistics.StreamTemperatureRequest\x1a\x31.minknow_api.statistics.StreamTemperatureResponse\"\x03\x90\x02\x01\x30\x01\x12\x84\x01\n\x14stream_bias_voltages\x12\x31.minknow_api.statistics.StreamBiasVoltagesRequest\x1a\x32.minknow_api.statistics.StreamBiasVoltagesResponse\"\x03\x90\x02\x01\x30\x01\x12\x9a\x01\n\x1cstream_read_length_histogram\x12\x38.minknow_api.statistics.StreamReadLengthHistogramRequest\x1a\x39.minknow_api.statistics.StreamReadLengthHistogramResponse\"\x03\x90\x02\x01\x30\x01\x12s\n\x0fread_length_n50\x12,.minknow_api.statistics.ReadLengthN50Request\x1a-.minknow_api.statistics.ReadLengthN50Response\"\x03\x90\x02\x01\x12\x83\x01\n\x15get_read_length_types\x12\x31.minknow_api.statistics.GetReadLengthTypesRequest\x1a\x32.minknow_api.statistics.GetReadLengthTypesResponse\"\x03\x90\x02\x01\x12\x8e\x01\n\x18stream_q_score_histogram\x12\x34.minknow_api.statistics.StreamQScoreHistogramRequest\x1a\x35.minknow_api.statistics.StreamQScoreHistogramResponse\"\x03\x90\x02\x01\x30\x01\x12\x97\x01\n\x1bstream_q_accuracy_histogram\x12\x37.minknow_api.statistics.StreamQAccuracyHistogramRequest\x1a\x38.minknow_api.statistics.StreamQAccuracyHistogramResponse\"\x03\x90\x02\x01\x30\x01\x12x\n\x18stream_basecall_boxplots\x12,.minknow_api.statistics.StreamBoxplotRequest\x1a\'.minknow_api.statistics.BoxplotResponse\"\x03\x90\x02\x01\x30\x01\x42&\n\x1c\x63om.nanoporetech.minknow_api\xa2\x02\x05MKAPIb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1cminknow_api/statistics.proto\x12\x16minknow_api.statistics\x1a\x1dminknow_api/acquisition.proto\x1a\x1dminknow_api/rpc_options.proto\"9\n\rDataSelection\x12\r\n\x05start\x18\x01 \x01(\x03\x12\x0c\n\x04step\x18\x02 \x01(\x04\x12\x0b\n\x03\x65nd\x18\x03 \x01(\x03\"h\n\x12\x46loatDataSelection\x12\x12\n\x05start\x18\x01 \x01(\x02H\x00\x88\x01\x01\x12\x11\n\x04step\x18\x02 \x01(\x02H\x01\x88\x01\x01\x12\x10\n\x03\x65nd\x18\x03 \x01(\x02H\x02\x88\x01\x01\x42\x08\n\x06_startB\x07\n\x05_stepB\x06\n\x04_end\"x\n\x15StreamDutyTimeRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12=\n\x0e\x64\x61ta_selection\x18\x02 \x01(\x0b\x32%.minknow_api.statistics.DataSelection\"\x91\x03\n\x16StreamDutyTimeResponse\x12Q\n\rbucket_ranges\x18\x01 \x03(\x0b\x32:.minknow_api.statistics.StreamDutyTimeResponse.BucketRange\x12Y\n\x0e\x63hannel_states\x18\x02 \x03(\x0b\x32\x41.minknow_api.statistics.StreamDutyTimeResponse.ChannelStatesEntry\x1a)\n\x0b\x42ucketRange\x12\r\n\x05start\x18\x01 \x01(\r\x12\x0b\n\x03\x65nd\x18\x02 \x01(\r\x1a\'\n\x10\x43hannelStateData\x12\x13\n\x0bstate_times\x18\x01 \x03(\x04\x1au\n\x12\x43hannelStatesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12N\n\x05value\x18\x02 \x01(\x0b\x32?.minknow_api.statistics.StreamDutyTimeResponse.ChannelStateData:\x02\x38\x01\"X\n\x16ReadLengthHistogramKey\x12>\n\x0fread_end_reason\x18\x01 \x01(\x0e\x32%.minknow_api.statistics.ReadEndReason\"3\n\x18ReadLengthHistogramSplit\x12\x17\n\x0fread_end_reason\x18\x01 \x01(\x08\"\xc9\x03\n StreamReadLengthHistogramRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12\x19\n\x11poll_time_seconds\x18\x02 \x01(\r\x12@\n\x10read_length_type\x18\x03 \x01(\x0e\x32&.minknow_api.statistics.ReadLengthType\x12=\n\x0e\x64\x61ta_selection\x18\x04 \x01(\x0b\x32%.minknow_api.statistics.DataSelection\x12\x42\n\x11\x62ucket_value_type\x18\x05 \x01(\x0e\x32\'.minknow_api.statistics.BucketValueType\x12\x1f\n\x17\x64iscard_outlier_percent\x18\x06 \x01(\x02\x12\x41\n\tfiltering\x18\x07 \x03(\x0b\x32..minknow_api.statistics.ReadLengthHistogramKey\x12?\n\x05split\x18\x08 \x01(\x0b\x32\x30.minknow_api.statistics.ReadLengthHistogramSplit\"\xb9\x04\n!StreamReadLengthHistogramResponse\x12@\n\x10read_length_type\x18\x01 \x01(\x0e\x32&.minknow_api.statistics.ReadLengthType\x12\\\n\rbucket_ranges\x18\x02 \x03(\x0b\x32\x45.minknow_api.statistics.StreamReadLengthHistogramResponse.BucketRange\x12\x17\n\x0fsource_data_end\x18\x05 \x01(\x04\x12\x42\n\x11\x62ucket_value_type\x18\x03 \x01(\x0e\x32\'.minknow_api.statistics.BucketValueType\x12i\n\x0ehistogram_data\x18\x04 \x03(\x0b\x32Q.minknow_api.statistics.StreamReadLengthHistogramResponse.ReadLengthHistogramData\x1a)\n\x0b\x42ucketRange\x12\r\n\x05start\x18\x01 \x01(\x04\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x04\x1a\x80\x01\n\x17ReadLengthHistogramData\x12\x41\n\tfiltering\x18\x03 \x03(\x0b\x32..minknow_api.statistics.ReadLengthHistogramKey\x12\x15\n\rbucket_values\x18\x01 \x03(\x04\x12\x0b\n\x03n50\x18\x02 \x01(\x02\"8\n\x14ReadLengthN50Request\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"\xa2\x01\n\x15ReadLengthN50Response\x12K\n\x08n50_data\x18\x01 \x01(\x0b\x32\x39.minknow_api.statistics.ReadLengthN50Response.ReadN50Data\x1a<\n\x0bReadN50Data\x12\x15\n\restimated_n50\x18\x01 \x01(\x02\x12\x16\n\x0e\x62\x61secalled_n50\x18\x02 \x01(\x02\"=\n\x19GetReadLengthTypesRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"]\n\x1aGetReadLengthTypesResponse\x12?\n\x0f\x61vailable_types\x18\x01 \x03(\x0e\x32&.minknow_api.statistics.ReadLengthType\"\x9a\x02\n\x12QScoreHistogramKey\x12\x46\n\tread_type\x18\x01 \x01(\x0e\x32\x33.minknow_api.statistics.QScoreHistogramKey.ReadType\x12N\n\x0b\x63\x61ll_status\x18\x02 \x01(\x0e\x32\x39.minknow_api.statistics.QScoreHistogramKey.BasecallStatus\",\n\x08ReadType\x12\x07\n\x03\x41ll\x10\x00\x12\x0b\n\x07Simplex\x10\x01\x12\n\n\x06\x44uplex\x10\x02\">\n\x0e\x42\x61secallStatus\x12\x07\n\x03\x41ny\x10\x00\x12\x0b\n\x07Skipped\x10\x01\x12\n\n\x06\x46\x61iled\x10\x02\x12\n\n\x06Passed\x10\x03\"\xf2\x01\n\x1cStreamQScoreHistogramRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12\x19\n\x11poll_time_seconds\x18\x02 \x01(\r\x12\x42\n\x0e\x64\x61ta_selection\x18\x03 \x01(\x0b\x32*.minknow_api.statistics.FloatDataSelection\x12Q\n\x11\x62ucket_value_type\x18\x04 \x01(\x0e\x32\x36.minknow_api.statistics.QScoreHistogramBucketValueType\"\xbd\x04\n\x1dStreamQScoreHistogramResponse\x12Q\n\x11\x62ucket_value_type\x18\x01 \x01(\x0e\x32\x36.minknow_api.statistics.QScoreHistogramBucketValueType\x12X\n\rbucket_ranges\x18\x02 \x03(\x0b\x32\x41.minknow_api.statistics.StreamQScoreHistogramResponse.BucketRange\x12\\\n\x11source_data_range\x18\x03 \x01(\x0b\x32\x41.minknow_api.statistics.StreamQScoreHistogramResponse.BucketRange\x12\x61\n\x0ehistogram_data\x18\x04 \x03(\x0b\x32I.minknow_api.statistics.StreamQScoreHistogramResponse.QScoreHistogramData\x1a)\n\x0b\x42ucketRange\x12\r\n\x05start\x18\x01 \x01(\x02\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x02\x1a\x82\x01\n\x13QScoreHistogramData\x12=\n\tfiltering\x18\x01 \x03(\x0b\x32*.minknow_api.statistics.QScoreHistogramKey\x12\x15\n\rbucket_values\x18\x02 \x03(\x04\x12\x15\n\rmodal_q_score\x18\x03 \x01(\x02\"\xa3\x02\n\x15QAccuracyHistogramKey\x12I\n\tread_type\x18\x01 \x01(\x0e\x32\x36.minknow_api.statistics.QAccuracyHistogramKey.ReadType\x12Q\n\x0b\x63\x61ll_status\x18\x02 \x01(\x0e\x32<.minknow_api.statistics.QAccuracyHistogramKey.BasecallStatus\",\n\x08ReadType\x12\x07\n\x03\x41ll\x10\x00\x12\x0b\n\x07Simplex\x10\x01\x12\n\n\x06\x44uplex\x10\x02\">\n\x0e\x42\x61secallStatus\x12\x07\n\x03\x41ny\x10\x00\x12\x0b\n\x07Skipped\x10\x01\x12\n\n\x06\x46\x61iled\x10\x02\x12\n\n\x06Passed\x10\x03\"\xf8\x01\n\x1fStreamQAccuracyHistogramRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12\x19\n\x11poll_time_seconds\x18\x02 \x01(\r\x12\x42\n\x0e\x64\x61ta_selection\x18\x03 \x01(\x0b\x32*.minknow_api.statistics.FloatDataSelection\x12T\n\x11\x62ucket_value_type\x18\x04 \x01(\x0e\x32\x39.minknow_api.statistics.QAccuracyHistogramBucketValueType\"\xd8\x04\n StreamQAccuracyHistogramResponse\x12T\n\x11\x62ucket_value_type\x18\x01 \x01(\x0e\x32\x39.minknow_api.statistics.QAccuracyHistogramBucketValueType\x12[\n\rbucket_ranges\x18\x02 \x03(\x0b\x32\x44.minknow_api.statistics.StreamQAccuracyHistogramResponse.BucketRange\x12_\n\x11source_data_range\x18\x03 \x01(\x0b\x32\x44.minknow_api.statistics.StreamQAccuracyHistogramResponse.BucketRange\x12g\n\x0ehistogram_data\x18\x04 \x03(\x0b\x32O.minknow_api.statistics.StreamQAccuracyHistogramResponse.QAccuracyHistogramData\x1a)\n\x0b\x42ucketRange\x12\r\n\x05start\x18\x01 \x01(\x02\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x02\x1a\x8b\x01\n\x16QAccuracyHistogramData\x12@\n\tfiltering\x18\x01 \x03(\x0b\x32-.minknow_api.statistics.QAccuracyHistogramKey\x12\x15\n\rbucket_values\x18\x02 \x03(\x04\x12\x18\n\x10modal_q_accuracy\x18\x03 \x01(\x02\"\x9c\x02\n\x14\x41\x63quisitionOutputKey\x12\x14\n\x0c\x62\x61rcode_name\x18\x01 \x01(\t\x12\x1b\n\x13\x61lignment_reference\x18\x02 \x01(\t\x12!\n\x19\x61lignment_bed_file_region\x18\x03 \x01(\t\x12&\n\x1e\x61lignment_bed_file_region_name\x18\x08 \x01(\t\x12\x17\n\x0flamp_barcode_id\x18\x04 \x01(\t\x12\x16\n\x0elamp_target_id\x18\x05 \x01(\t\x12\x15\n\rbarcode_alias\x18\x06 \x01(\t\x12>\n\x0fread_end_reason\x18\x07 \x01(\x0e\x32%.minknow_api.statistics.ReadEndReason\"\xb8\x01\n\x16\x41\x63quisitionOutputSplit\x12\x14\n\x0c\x62\x61rcode_name\x18\x01 \x01(\x08\x12\x1b\n\x13\x61lignment_reference\x18\x02 \x01(\x08\x12!\n\x19\x61lignment_bed_file_region\x18\x03 \x01(\x08\x12\x17\n\x0flamp_barcode_id\x18\x04 \x01(\x08\x12\x16\n\x0elamp_target_id\x18\x05 \x01(\x08\x12\x17\n\x0fread_end_reason\x18\x06 \x01(\x08\"\x81\x02\n\x1eStreamAcquisitionOutputRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12=\n\x0e\x64\x61ta_selection\x18\x02 \x01(\x0b\x32%.minknow_api.statistics.DataSelection\x12?\n\tfiltering\x18\x03 \x03(\x0b\x32,.minknow_api.statistics.AcquisitionOutputKey\x12=\n\x05split\x18\x04 \x01(\x0b\x32..minknow_api.statistics.AcquisitionOutputSplit\"u\n\x19\x41\x63quisitionOutputSnapshot\x12\x0f\n\x07seconds\x18\x01 \x01(\r\x12G\n\ryield_summary\x18\x02 \x01(\x0b\x32\x30.minknow_api.acquisition.AcquisitionYieldSummary\"\x9c\x02\n\x1fStreamAcquisitionOutputResponse\x12\\\n\tsnapshots\x18\x01 \x03(\x0b\x32I.minknow_api.statistics.StreamAcquisitionOutputResponse.FilteredSnapshots\x1a\x9a\x01\n\x11\x46ilteredSnapshots\x12?\n\tfiltering\x18\x01 \x03(\x0b\x32,.minknow_api.statistics.AcquisitionOutputKey\x12\x44\n\tsnapshots\x18\x02 \x03(\x0b\x32\x31.minknow_api.statistics.AcquisitionOutputSnapshot\"|\n\x19StreamWriterOutputRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12=\n\x0e\x64\x61ta_selection\x18\x02 \x01(\x0b\x32%.minknow_api.statistics.DataSelection\"q\n\x14WriterOutputSnapshot\x12\x0f\n\x07seconds\x18\x01 \x01(\r\x12H\n\rwriter_output\x18\x02 \x01(\x0b\x32\x31.minknow_api.acquisition.AcquisitionWriterSummary\"]\n\x1aStreamWriterOutputResponse\x12?\n\tsnapshots\x18\x01 \x03(\x0b\x32,.minknow_api.statistics.WriterOutputSnapshot\"Q\n-StreamEncounteredAcquisitionOutputKeysRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"\x7f\n.StreamEncounteredAcquisitionOutputKeysResponse\x12M\n\x17\x61\x63quisition_output_keys\x18\x01 \x03(\x0b\x32,.minknow_api.statistics.AcquisitionOutputKey\"{\n\x18StreamTemperatureRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12=\n\x0e\x64\x61ta_selection\x18\x02 \x01(\x0b\x32%.minknow_api.statistics.DataSelection\"\xff\x04\n\x11TemperaturePacket\x12M\n\x06minion\x18\x01 \x01(\x0b\x32;.minknow_api.statistics.TemperaturePacket.MinIONTemperatureH\x00\x12U\n\npromethion\x18\x02 \x01(\x0b\x32?.minknow_api.statistics.TemperaturePacket.PromethIONTemperatureH\x00\x12M\n\x06pebble\x18\x04 \x01(\x0b\x32;.minknow_api.statistics.TemperaturePacket.PebbleTemperatureH\x00\x12K\n\x12target_temperature\x18\x03 \x01(\x0b\x32/.minknow_api.statistics.TemperaturePacket.Range\x1a)\n\x05Range\x12\x0f\n\x07minimum\x18\x01 \x01(\x02\x12\x0f\n\x07maximum\x18\x02 \x01(\x02\x1aK\n\x11MinIONTemperature\x12\x18\n\x10\x61sic_temperature\x18\x01 \x01(\x01\x12\x1c\n\x14heatsink_temperature\x18\x02 \x01(\x01\x1aR\n\x15PromethIONTemperature\x12\x1c\n\x14\x66lowcell_temperature\x18\x01 \x01(\x01\x12\x1b\n\x13\x63hamber_temperature\x18\x02 \x01(\x01\x1aM\n\x11PebbleTemperature\x12\x18\n\x10\x61sic_temperature\x18\x01 \x01(\x01\x12\x1e\n\x16instrument_temperature\x18\x02 \x01(\x01\x42\r\n\x0btemperature\"\\\n\x19StreamTemperatureResponse\x12?\n\x0ctemperatures\x18\x01 \x03(\x0b\x32).minknow_api.statistics.TemperaturePacket\"Z\n\x11\x42iasVoltagePacket\x12\x19\n\x11\x61\x63quisition_index\x18\x01 \x01(\x04\x12\x14\n\x0c\x62ias_voltage\x18\x02 \x01(\x01\x12\x14\n\x0ctime_seconds\x18\x03 \x01(\x04\"=\n\x19StreamBiasVoltagesRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"^\n\x1aStreamBiasVoltagesResponse\x12@\n\rbias_voltages\x18\x01 \x03(\x0b\x32).minknow_api.statistics.BiasVoltagePacket\"\xee\x01\n\x14StreamBoxplotRequest\x12 \n\x12\x61\x63quisition_run_id\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12K\n\tdata_type\x18\x02 \x01(\x0e\x32\x38.minknow_api.statistics.StreamBoxplotRequest.BoxplotType\x12\x15\n\rdataset_width\x18\x03 \x01(\r\x12\x11\n\tpoll_time\x18\x04 \x01(\r\"=\n\x0b\x42oxplotType\x12\n\n\x06QSCORE\x10\x00\x12\x14\n\x10\x42\x41SES_PER_SECOND\x10\x01\x12\x0c\n\x08\x41\x43\x43URACY\x10\x02\"\x9a\x02\n\x0f\x42oxplotResponse\x12H\n\x08\x64\x61tasets\x18\x01 \x03(\x0b\x32\x36.minknow_api.statistics.BoxplotResponse.BoxplotDataset\x1a\xbc\x01\n\x0e\x42oxplotDataset\x12\x0b\n\x03min\x18\x01 \x01(\x02\x12\x0b\n\x03q25\x18\x02 \x01(\x02\x12\x0b\n\x03q50\x18\x03 \x01(\x02\x12\x0b\n\x03q75\x18\x04 \x01(\x02\x12\x0b\n\x03max\x18\x05 \x01(\x02\x12\r\n\x05\x63ount\x18\x06 \x01(\x04\x12%\n\x1dlower_full_width_half_maximum\x18\x07 \x01(\x02\x12\x0c\n\x04mode\x18\x08 \x01(\x02\x12%\n\x1dupper_full_width_half_maximum\x18\t \x01(\x02*L\n\x0eReadLengthType\x12\x11\n\rMinknowEvents\x10\x00\x12\x12\n\x0e\x45stimatedBases\x10\x01\x12\x13\n\x0f\x42\x61secalledBases\x10\x02*2\n\x0f\x42ucketValueType\x12\x0e\n\nReadCounts\x10\x00\x12\x0f\n\x0bReadLengths\x10\x01*\xa0\x01\n\rReadEndReason\x12\x07\n\x03\x41ll\x10\x00\x12\x0b\n\x07Unknown\x10\x01\x12\x0b\n\x07Partial\x10\x02\x12\r\n\tMuxChange\x10\x03\x12\x14\n\x10UnblockMuxChange\x10\x04\x12\x12\n\x0eSignalPositive\x10\x05\x12\x12\n\x0eSignalNegative\x10\x06\x12\x1f\n\x1b\x44\x61taServiceUnblockMuxChange\x10\x07*S\n\x1eQScoreHistogramBucketValueType\x12\x15\n\x11QScore_ReadCounts\x10\x00\x12\x1a\n\x16QScore_BasecalledBases\x10\x01*\\\n!QAccuracyHistogramBucketValueType\x12\x18\n\x14QAccuracy_ReadCounts\x10\x00\x12\x1d\n\x19QAccuracy_BasecalledBases\x10\x01\x32\xb6\r\n\x11StatisticsService\x12x\n\x10stream_duty_time\x12-.minknow_api.statistics.StreamDutyTimeRequest\x1a..minknow_api.statistics.StreamDutyTimeResponse\"\x03\x90\x02\x01\x30\x01\x12\x93\x01\n\x19stream_acquisition_output\x12\x36.minknow_api.statistics.StreamAcquisitionOutputRequest\x1a\x37.minknow_api.statistics.StreamAcquisitionOutputResponse\"\x03\x90\x02\x01\x30\x01\x12\x84\x01\n\x14stream_writer_output\x12\x31.minknow_api.statistics.StreamWriterOutputRequest\x1a\x32.minknow_api.statistics.StreamWriterOutputResponse\"\x03\x90\x02\x01\x30\x01\x12\xc2\x01\n*stream_encountered_acquisition_output_keys\x12\x45.minknow_api.statistics.StreamEncounteredAcquisitionOutputKeysRequest\x1a\x46.minknow_api.statistics.StreamEncounteredAcquisitionOutputKeysResponse\"\x03\x90\x02\x01\x30\x01\x12\x80\x01\n\x12stream_temperature\x12\x30.minknow_api.statistics.StreamTemperatureRequest\x1a\x31.minknow_api.statistics.StreamTemperatureResponse\"\x03\x90\x02\x01\x30\x01\x12\x84\x01\n\x14stream_bias_voltages\x12\x31.minknow_api.statistics.StreamBiasVoltagesRequest\x1a\x32.minknow_api.statistics.StreamBiasVoltagesResponse\"\x03\x90\x02\x01\x30\x01\x12\x9a\x01\n\x1cstream_read_length_histogram\x12\x38.minknow_api.statistics.StreamReadLengthHistogramRequest\x1a\x39.minknow_api.statistics.StreamReadLengthHistogramResponse\"\x03\x90\x02\x01\x30\x01\x12s\n\x0fread_length_n50\x12,.minknow_api.statistics.ReadLengthN50Request\x1a-.minknow_api.statistics.ReadLengthN50Response\"\x03\x90\x02\x01\x12\x83\x01\n\x15get_read_length_types\x12\x31.minknow_api.statistics.GetReadLengthTypesRequest\x1a\x32.minknow_api.statistics.GetReadLengthTypesResponse\"\x03\x90\x02\x01\x12\x8e\x01\n\x18stream_q_score_histogram\x12\x34.minknow_api.statistics.StreamQScoreHistogramRequest\x1a\x35.minknow_api.statistics.StreamQScoreHistogramResponse\"\x03\x90\x02\x01\x30\x01\x12\x97\x01\n\x1bstream_q_accuracy_histogram\x12\x37.minknow_api.statistics.StreamQAccuracyHistogramRequest\x1a\x38.minknow_api.statistics.StreamQAccuracyHistogramResponse\"\x03\x90\x02\x01\x30\x01\x12x\n\x18stream_basecall_boxplots\x12,.minknow_api.statistics.StreamBoxplotRequest\x1a\'.minknow_api.statistics.BoxplotResponse\"\x03\x90\x02\x01\x30\x01\x42&\n\x1c\x63om.nanoporetech.minknow_api\xa2\x02\x05MKAPIb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -74,16 +74,16 @@ _globals['_STATISTICSSERVICE'].methods_by_name['stream_q_accuracy_histogram']._serialized_options = b'\220\002\001' _globals['_STATISTICSSERVICE'].methods_by_name['stream_basecall_boxplots']._options = None _globals['_STATISTICSSERVICE'].methods_by_name['stream_basecall_boxplots']._serialized_options = b'\220\002\001' - _globals['_READLENGTHTYPE']._serialized_start=7787 - _globals['_READLENGTHTYPE']._serialized_end=7863 - _globals['_BUCKETVALUETYPE']._serialized_start=7865 - _globals['_BUCKETVALUETYPE']._serialized_end=7915 - _globals['_READENDREASON']._serialized_start=7918 - _globals['_READENDREASON']._serialized_end=8078 - _globals['_QSCOREHISTOGRAMBUCKETVALUETYPE']._serialized_start=8080 - _globals['_QSCOREHISTOGRAMBUCKETVALUETYPE']._serialized_end=8163 - _globals['_QACCURACYHISTOGRAMBUCKETVALUETYPE']._serialized_start=8165 - _globals['_QACCURACYHISTOGRAMBUCKETVALUETYPE']._serialized_end=8257 + _globals['_READLENGTHTYPE']._serialized_start=7945 + _globals['_READLENGTHTYPE']._serialized_end=8021 + _globals['_BUCKETVALUETYPE']._serialized_start=8023 + _globals['_BUCKETVALUETYPE']._serialized_end=8073 + _globals['_READENDREASON']._serialized_start=8076 + _globals['_READENDREASON']._serialized_end=8236 + _globals['_QSCOREHISTOGRAMBUCKETVALUETYPE']._serialized_start=8238 + _globals['_QSCOREHISTOGRAMBUCKETVALUETYPE']._serialized_end=8321 + _globals['_QACCURACYHISTOGRAMBUCKETVALUETYPE']._serialized_start=8323 + _globals['_QACCURACYHISTOGRAMBUCKETVALUETYPE']._serialized_end=8415 _globals['_DATASELECTION']._serialized_start=118 _globals['_DATASELECTION']._serialized_end=175 _globals['_FLOATDATASELECTION']._serialized_start=177 @@ -173,69 +173,143 @@ _globals['_STREAMTEMPERATUREREQUEST']._serialized_start=6307 _globals['_STREAMTEMPERATUREREQUEST']._serialized_end=6430 _globals['_TEMPERATUREPACKET']._serialized_start=6433 - _globals['_TEMPERATUREPACKET']._serialized_end=6914 - _globals['_TEMPERATUREPACKET_RANGE']._serialized_start=6697 - _globals['_TEMPERATUREPACKET_RANGE']._serialized_end=6738 - _globals['_TEMPERATUREPACKET_MINIONTEMPERATURE']._serialized_start=6740 - _globals['_TEMPERATUREPACKET_MINIONTEMPERATURE']._serialized_end=6815 - _globals['_TEMPERATUREPACKET_PROMETHIONTEMPERATURE']._serialized_start=6817 - _globals['_TEMPERATUREPACKET_PROMETHIONTEMPERATURE']._serialized_end=6899 - _globals['_STREAMTEMPERATURERESPONSE']._serialized_start=6916 - _globals['_STREAMTEMPERATURERESPONSE']._serialized_end=7008 - _globals['_BIASVOLTAGEPACKET']._serialized_start=7010 - _globals['_BIASVOLTAGEPACKET']._serialized_end=7100 - _globals['_STREAMBIASVOLTAGESREQUEST']._serialized_start=7102 - _globals['_STREAMBIASVOLTAGESREQUEST']._serialized_end=7163 - _globals['_STREAMBIASVOLTAGESRESPONSE']._serialized_start=7165 - _globals['_STREAMBIASVOLTAGESRESPONSE']._serialized_end=7259 - _globals['_STREAMBOXPLOTREQUEST']._serialized_start=7262 - _globals['_STREAMBOXPLOTREQUEST']._serialized_end=7500 - _globals['_STREAMBOXPLOTREQUEST_BOXPLOTTYPE']._serialized_start=7439 - _globals['_STREAMBOXPLOTREQUEST_BOXPLOTTYPE']._serialized_end=7500 - _globals['_BOXPLOTRESPONSE']._serialized_start=7503 - _globals['_BOXPLOTRESPONSE']._serialized_end=7785 - _globals['_BOXPLOTRESPONSE_BOXPLOTDATASET']._serialized_start=7597 - _globals['_BOXPLOTRESPONSE_BOXPLOTDATASET']._serialized_end=7785 - _globals['_STATISTICSSERVICE']._serialized_start=8260 - _globals['_STATISTICSSERVICE']._serialized_end=9978 -StreamReadLengthHistogramResponse.__doc__ = """Attributes: - read_length_type: - The data source for the histograms Also specifies the units - for `data_selection` and `n50` See `ReadLengthType` for - further information about the possible options. + _globals['_TEMPERATUREPACKET']._serialized_end=7072 + _globals['_TEMPERATUREPACKET_RANGE']._serialized_start=6776 + _globals['_TEMPERATUREPACKET_RANGE']._serialized_end=6817 + _globals['_TEMPERATUREPACKET_MINIONTEMPERATURE']._serialized_start=6819 + _globals['_TEMPERATUREPACKET_MINIONTEMPERATURE']._serialized_end=6894 + _globals['_TEMPERATUREPACKET_PROMETHIONTEMPERATURE']._serialized_start=6896 + _globals['_TEMPERATUREPACKET_PROMETHIONTEMPERATURE']._serialized_end=6978 + _globals['_TEMPERATUREPACKET_PEBBLETEMPERATURE']._serialized_start=6980 + _globals['_TEMPERATUREPACKET_PEBBLETEMPERATURE']._serialized_end=7057 + _globals['_STREAMTEMPERATURERESPONSE']._serialized_start=7074 + _globals['_STREAMTEMPERATURERESPONSE']._serialized_end=7166 + _globals['_BIASVOLTAGEPACKET']._serialized_start=7168 + _globals['_BIASVOLTAGEPACKET']._serialized_end=7258 + _globals['_STREAMBIASVOLTAGESREQUEST']._serialized_start=7260 + _globals['_STREAMBIASVOLTAGESREQUEST']._serialized_end=7321 + _globals['_STREAMBIASVOLTAGESRESPONSE']._serialized_start=7323 + _globals['_STREAMBIASVOLTAGESRESPONSE']._serialized_end=7417 + _globals['_STREAMBOXPLOTREQUEST']._serialized_start=7420 + _globals['_STREAMBOXPLOTREQUEST']._serialized_end=7658 + _globals['_STREAMBOXPLOTREQUEST_BOXPLOTTYPE']._serialized_start=7597 + _globals['_STREAMBOXPLOTREQUEST_BOXPLOTTYPE']._serialized_end=7658 + _globals['_BOXPLOTRESPONSE']._serialized_start=7661 + _globals['_BOXPLOTRESPONSE']._serialized_end=7943 + _globals['_BOXPLOTRESPONSE_BOXPLOTDATASET']._serialized_start=7755 + _globals['_BOXPLOTRESPONSE_BOXPLOTDATASET']._serialized_end=7943 + _globals['_STATISTICSSERVICE']._serialized_start=8418 + _globals['_STATISTICSSERVICE']._serialized_end=10136 +GetReadLengthTypesResponse.__doc__ = """Attributes: + available_types: + Array of the types of bucket for which a histogram is + currently available +""" +ReadLengthHistogramKey.__doc__ = """Attributes: + read_end_reason: + Only return data for the given ReadEndReason. Special values: + - Specify `ReadEndReason::All` to return data for all read end + reasons If unspecified all read end reasons are returned. +""" +StreamQAccuracyHistogramResponse.QAccuracyHistogramData.__doc__ = """Attributes: + filtering: + The filtering parameters which contributed to this bucket. + bucket_values: + Counts for each histogram bucket Units and type of + accumulated values are as specified in `bucket_value_type` The + range covered by each bucket is as in `bucket_ranges` + modal_q_accuracy: + The modal q accuracy, calculated using the `bucket_value_type` +""" +StreamQScoreHistogramResponse.__doc__ = """Attributes: + bucket_value_type: + The data accumulated in the histogram buckets See + `QScoreHistogramBucketValueType` for further information about + the possible options. bucket_ranges: The range covered by each bucket in the histogram data - source_data_end: - The right hand edge of the last source bucket which contains - data Measured across all source data, after excluding the - reads specified by `discard_outlier_percent` in the stream - request. - bucket_value_type: - The data accumulated in the read length histogram buckets See - `BucketValueType` for further information about the possible - options. + source_data_range: + The range covered by non-empty buckets in the source data histogram_data: - The histogram data -""" -StreamAcquisitionOutputResponse.__doc__ = """Attributes: - snapshots: - Snapshots split by requested filtering parameters. + The histogram data If duplex basecalling is not enabled, then + Simplex histogram data will be returned If duplex basecalling + is enabled, then Simplex, Duplex and "All" (i.e. overall) + histogram data will be returned """ -StreamTemperatureRequest.__doc__ = """Attributes: - period_seconds: - How often temperature updates should be sent Defaults to a - period of 1 second, if not specified, or set to 0 +ReadLengthN50Request.__doc__ = """Attributes: acquisition_run_id: - The acquisition id of the experiment. - data_selection: - The desired data selection. The units for all values are - `seconds since the start of the experiment`. + The `acquisition_run_id` of the acquisition to obtain data for """ -StreamDutyTimeResponse.BucketRange.__doc__ = """Attributes: - start: - The range covered by a bucket Values are in seconds The range - [start, end) is half open (i.e. the start value is included, - the end value is not). +StreamDutyTimeResponse.__doc__ = """Attributes: + bucket_ranges: + The range covered by each entry in state_times + channel_states: + Map between channel state names, and a list of bucketed duty + time data +""" +AcquisitionOutputSplit.__doc__ = """Attributes: + barcode_name: + Split data for every individual barcode. + alignment_reference: + Split data for each individual alignment reference. + References are defined in alignment references. + alignment_bed_file_region: + Split data for each target region. Target regions are defined + in bed files. + lamp_barcode_id: + Split data for each lamp barcode id. Lamp barcodes are + defined by the active lamp kit. DEPRECATED 6.0: Lamp support + has been removed and this option will always be ignored. + lamp_target_id: + Split data for each lamp targets id. Lamp targets are defined + by the active lamp kit. DEPRECATED 6.0: Lamp support has been + removed and this option will always be ignored. + read_end_reason: + Split returned data by read_end_reason +""" +AcquisitionOutputKey.__doc__ = """Attributes: + barcode_name: + Only return data for the given barcode. Special values: - + Specify "unclassified" for data which does not have a barcode. + - Specify "classified" for all data which has a barcode. If + unspecified all barcodes are returned. + alignment_reference: + Only return data for the given alignment reference. Special + values: - Specify "unaligned" for data which does not align + to a reference - Specify "aligned" for all data which aligns + to a reference If unspecified all alignment targets are + returned. + alignment_bed_file_region: + Only return data for the given target region. Target regions + are defined in bed files. The region is a string which + identifies an entry in the bed file. Special values: - + Specify "offtarget" for data which does not have a bed region. + - Specify "ontarget" for all data which has a bed region. If + unspecified all alignment regions are returned. + alignment_bed_file_region_name: + An alias to `alignment_bed_file_region` An optional name can + be used to identify a target region in the bed file + lamp_barcode_id: + Only return data for the given lamp barcode. Special values: + - Specify "unclassified" for data which does not have a lamp + barcode. - Specify "classified" for all data which has a + lamp barcode. If unspecified all lamp barcodes are returned. + DEPRECATED 6.0: Lamp support has been removed and this option + will always be ignored. + lamp_target_id: + Only return data for the given lamp target. Special values: + - Specify "unclassified" for data which does not have a lamp + target. - Specify "classified" for all data which has a lamp + target. Using barcode terms here as lamp is part of barcoding + pipeline If unspecified all lamp target are returned. + DEPRECATED 6.0: Lamp support has been removed and this option + will always be ignored. + barcode_alias: + The barcode alias corresponding to the `barcode_name` + read_end_reason: + Only return data for the given ReadEndReason. Special values: + - Specify `ReadEndReason::All` to return data for all read end + reasons If unspecified all read end reasons are returned. """ AcquisitionOutputSnapshot.__doc__ = """A snapshot of acquisition output data, for a given set of filtering criteria. @@ -249,7 +323,40 @@ yield_summary: The yield summary data. """ -StreamQScoreHistogramRequest.__doc__ = """Attributes: +StreamTemperatureRequest.__doc__ = """Attributes: + period_seconds: + How often temperature updates should be sent Defaults to a + period of 1 second, if not specified, or set to 0 + acquisition_run_id: + The acquisition id of the experiment. + data_selection: + The desired data selection. The units for all values are + `seconds since the start of the experiment`. +""" +FloatDataSelection.__doc__ = """Specify a desired data selection, using floating point values The +actual data selection used may differ from the desired one. They are +adjusted in the following sequence: 1. The selection is set equal to +the desired selection 2. Any selection value that is not set is +adjusted to its default value: - `start` and `step` will be set +to the minimum valid value - `end` will be set to the maximum +valid value 3. Values which are outside of the valid range are +clamped to the nearest valid value: - Values less than minimum +valid value will be set equal to the minimum valid value - Values +greater than the maximum valid value will be set equal to the maximum +valid value 4. Finally, all values are 'rounded' to a nearby valid +value - `start` and `step` will be rounded down to the first +valid value less than or equal to their current values - +`end` will be rounded up to the first valid value that is greater than +or equal to its current value - This means that the range +that is specified after rounding includes the range that was +specified prior to rounding""" +StreamReadLengthHistogramResponse.BucketRange.__doc__ = """Attributes: + start: + The range covered by a bucket Units are as set in + `read_length_type`, above The range [start, end) is half open + (i.e. the start value is included, the end value is not). +""" +StreamReadLengthHistogramRequest.__doc__ = """Attributes: acquisition_run_id: The `acquisition_run_id` of the acquisition to obtain data for If this is set to the `acquisition_run_id` of an acquisition @@ -277,14 +384,77 @@ returned for an acquisition that has already finished, this parameter has no effect. The final histogram data will be returned, and the call will complete. + read_length_type: + The source of the read lengths in the histogram If MinKNOW is + unable to supply data from the requested source (e.g. if the + user requests BasecalledBases, but basecalling is not + enabled), then this call will fail with the status + `FAILED_PRECONDITION`. See `ReadLengthType` for further + information about the available options. data_selection: - The desired q score range which histograms should cover. + The desired read length range which histograms should cover. + Units are as set in `read_length_type`, above. bucket_value_type: - What data to accumulate in the histogram buckets See - `QScoreHistogramBucketValueType` for further information about - the available options. + What data to accumulate in the read length histogram buckets + See `BucketValueType` for further information about the + available options. + discard_outlier_percent: + If set greater than zero then discard some percent of data at + the upper end of the source data before producing histograms + and N50 values. This is intended to assist in the case where + a small number of outliers with very long read lengths cause + the histogram axes and N50 to be skewed. Defaults to 0 - no + data discarded. Values should be specified in percent - a + value of 0.05 will cause the top 5% of the data to be + discarded before producing outputs. For histograms, the data + discarded depends on the bucket_value_type. If `ReadCounts`, + then a percentage of the total number of reads reads will be + discarded; if `ReadLengths` then a percentage of the total + read lengths will be discarded. For the N50 value, + `discard_outlier_percent` always causes a percentage of the + total read lengths to be discarded (since it is always + calculated from read length data) + filtering: + Define filtering parameters for streamed data. + split: + Define how results are split for returned data. """ -StreamQAccuracyHistogramRequest.__doc__ = """Attributes: +StreamQScoreHistogramResponse.QScoreHistogramData.__doc__ = """Attributes: + filtering: + The filtering parameters which contributed to this bucket. + bucket_values: + Counts for each histogram bucket Units and type of + accumulated values are as specified in `bucket_value_type` The + range covered by each bucket is as in `bucket_ranges` + modal_q_score: + The modal q score, calculated using the `bucket_value_type` +""" +StreamReadLengthHistogramResponse.ReadLengthHistogramData.__doc__ = """Attributes: + filtering: + The filtering parameters which contributed to this bucket. + bucket_values: + Counts for each histogram bucket Units are as specified in + `read_length_type` The range covered by each bucket is as in + `bucket_ranges` The type of data accumulated in each bucket is + given by `bucket_value_type` + n50: + The N50 value for the read length data for the selected + `read_length_type` and `read_end_reasons`. Units are as + specified by `read_length_type`. Measured across all source + data, after excluding the reads specified by + `discard_outlier_percent` in the stream request. +""" +TemperaturePacket.PromethIONTemperature.__doc__ = """Packet of temperatures appropriate for a PromethION. + +Attributes: + flowcell_temperature: + Temperature as measured by thermistor TH2 on the P-Chip. + chamber_temperature: + Mean of 12 pixel-blocks temperatures measured with sensors in + the ASIC. +""" +TemperaturePacket.Range.__doc__ = """Represents a range of values.""" +StreamQScoreHistogramRequest.__doc__ = """Attributes: acquisition_run_id: The `acquisition_run_id` of the acquisition to obtain data for If this is set to the `acquisition_run_id` of an acquisition @@ -313,111 +483,20 @@ parameter has no effect. The final histogram data will be returned, and the call will complete. data_selection: - The desired q accuracy range which histograms should cover. + The desired q score range which histograms should cover. bucket_value_type: What data to accumulate in the histogram buckets See - `QAccuracyHistogramBucketValueType` for further information - about the available options. + `QScoreHistogramBucketValueType` for further information about + the available options. """ -TemperaturePacket.__doc__ = """Attributes: - target_temperature: - The range is based on the requested target temperature and - tolerance. For example, if the target temperature is 35, and - the tolerance is 1 then target temperatures will return as - 34(min) and 36(max). -""" -StreamBiasVoltagesRequest.__doc__ = """Attributes: - acquisition_run_id: - The acquisition id of the experiment. -""" -ReadLengthN50Response.__doc__ = """Attributes: - n50_data: - The N50 return data -""" -StreamQScoreHistogramResponse.__doc__ = """Attributes: - bucket_value_type: - The data accumulated in the histogram buckets See - `QScoreHistogramBucketValueType` for further information about - the possible options. - bucket_ranges: - The range covered by each bucket in the histogram data - source_data_range: - The range covered by non-empty buckets in the source data - histogram_data: - The histogram data If duplex basecalling is not enabled, then - Simplex histogram data will be returned If duplex basecalling - is enabled, then Simplex, Duplex and "All" (i.e. overall) - histogram data will be returned -""" -FloatDataSelection.__doc__ = """Specify a desired data selection, using floating point values The -actual data selection used may differ from the desired one. They are -adjusted in the following sequence: 1. The selection is set equal to -the desired selection 2. Any selection value that is not set is -adjusted to its default value: - `start` and `step` will be set -to the minimum valid value - `end` will be set to the maximum -valid value 3. Values which are outside of the valid range are -clamped to the nearest valid value: - Values less than minimum -valid value will be set equal to the minimum valid value - Values -greater than the maximum valid value will be set equal to the maximum -valid value 4. Finally, all values are 'rounded' to a nearby valid -value - `start` and `step` will be rounded down to the first -valid value less than or equal to their current values - -`end` will be rounded up to the first valid value that is greater than -or equal to its current value - This means that the range -that is specified after rounding includes the range that was -specified prior to rounding""" -DataSelection.__doc__ = """Specify a desired data selection. Units for values are as specified -in the corresponding Request The actual data selection used may -differ from the desired one. They are adjusted in the following -sequence: 1. All values are set equal to the corresponding desired -value. 2. Negative `start` or `end` values are fixed up by adding the -current maximum value to the specified value - Negative start -and end values are only supported for certain requests; typically they -are supported for time-series data - If, after adding the -current bucket count, the `start` value is still negative, then the -start value is adjusted to `0` - If, after adding the current -bucket count, the `end` value is still negative, or is zero, -then the data selection is empty - If data collection is still -ongoing, then the current bucket count may change between rpc -calls as more data is collected. 3. Values which are not set, or -which are set at `0`, are then adjusted to a default value: - -`start` and `step` will be set to the minimum valid value - `end` -will be set to the maximum valid value 4. Values which are outside of -the valid range are clamped to the nearest valid value: - Values -less than minimum valid value will be set equal to the minimum valid -value - Values greater than the maximum valid value will be set -equal to the maximum valid value 5. Finally, all values are 'rounded' -to a nearby valid value - `start` and `step` will be rounded down -to the first valid value less than or equal to their current -values - `end` will be rounded up to the first valid value that -is greater than or equal to its current value - This means -that the range that is specified after rounding includes the range -that was specified prior to rounding If (`end` - `start`) is -not an exact integer multiple of `step`, then the final bucket will -cover a smaller range than that specified by `step`. Note also that -the maximum valid start and end value may not be known if data -collection is still ongoing -- for example, the maximum valid time for -time series data. If this is the case, then the maximum valid value -will be determined when the experiment ends, and values in use will be -adjusted accordingly.""" -TemperaturePacket.PromethIONTemperature.__doc__ = """Packet of temperatures appropriate for a PromethION. - -Attributes: - flowcell_temperature: - Temperature as measured by thermistor TH2 on the P-Chip. - chamber_temperature: - Mean of 12 pixel-blocks temperatures measured with sensors in - the ASIC. +StreamQAccuracyHistogramResponse.BucketRange.__doc__ = """Attributes: + start: + The range covered by a bucket The range [start, end) is half + open (i.e. the start value is included, the end value is not). """ -StreamQAccuracyHistogramResponse.QAccuracyHistogramData.__doc__ = """Attributes: - filtering: - The filtering parameters which contributed to this bucket. - bucket_values: - Counts for each histogram bucket Units and type of - accumulated values are as specified in `bucket_value_type` The - range covered by each bucket is as in `bucket_ranges` - modal_q_accuracy: - The modal q accuracy, calculated using the `bucket_value_type` +StreamAcquisitionOutputResponse.__doc__ = """Attributes: + snapshots: + Snapshots split by requested filtering parameters. """ BoxplotResponse.BoxplotDataset.__doc__ = """Attributes: min: @@ -443,10 +522,44 @@ the mode. provides some estimate on the sharpness of the mode peak. """ -StreamQScoreHistogramResponse.BucketRange.__doc__ = """Attributes: +StreamDutyTimeRequest.__doc__ = """Attributes: + acquisition_run_id: + The acquisition id of the experiment. + data_selection: + The desired data selection. The units for all values are + `seconds since the start of the experiment`. +""" +TemperaturePacket.__doc__ = """Attributes: + target_temperature: + The range is based on the requested target temperature and + tolerance. For example, if the target temperature is 35, and + the tolerance is 1 then target temperatures will return as + 34(min) and 36(max). +""" +StreamReadLengthHistogramResponse.__doc__ = """Attributes: + read_length_type: + The data source for the histograms Also specifies the units + for `data_selection` and `n50` See `ReadLengthType` for + further information about the possible options. + bucket_ranges: + The range covered by each bucket in the histogram data + source_data_end: + The right hand edge of the last source bucket which contains + data Measured across all source data, after excluding the + reads specified by `discard_outlier_percent` in the stream + request. + bucket_value_type: + The data accumulated in the read length histogram buckets See + `BucketValueType` for further information about the possible + options. + histogram_data: + The histogram data +""" +StreamDutyTimeResponse.BucketRange.__doc__ = """Attributes: start: - The range covered by a bucket The range [start, end) is half - open (i.e. the start value is included, the end value is not). + The range covered by a bucket Values are in seconds The range + [start, end) is half open (i.e. the start value is included, + the end value is not). """ StreamBoxplotRequest.__doc__ = """Attributes: acquisition_run_id: @@ -477,14 +590,7 @@ basecalled_stats_refresh_rate_seconds in the configs (set to 1 second in MinKNOW 3.2). If unspecified, defaults to 1 minute. """ -ReadLengthN50Response.ReadN50Data.__doc__ = """Attributes: - estimated_n50: - The estimated N50 value in bases This is always set - basecalled_n50: - The basecalled N50 value If the acquisition did/does not have - live basecalling enabled, this will be 0.0 -""" -StreamReadLengthHistogramRequest.__doc__ = """Attributes: +StreamQAccuracyHistogramRequest.__doc__ = """Attributes: acquisition_run_id: The `acquisition_run_id` of the acquisition to obtain data for If this is set to the `acquisition_run_id` of an acquisition @@ -512,40 +618,71 @@ returned for an acquisition that has already finished, this parameter has no effect. The final histogram data will be returned, and the call will complete. - read_length_type: - The source of the read lengths in the histogram If MinKNOW is - unable to supply data from the requested source (e.g. if the - user requests BasecalledBases, but basecalling is not - enabled), then this call will fail with the status - `FAILED_PRECONDITION`. See `ReadLengthType` for further - information about the available options. data_selection: - The desired read length range which histograms should cover. - Units are as set in `read_length_type`, above. + The desired q accuracy range which histograms should cover. bucket_value_type: - What data to accumulate in the read length histogram buckets - See `BucketValueType` for further information about the - available options. - discard_outlier_percent: - If set greater than zero then discard some percent of data at - the upper end of the source data before producing histograms - and N50 values. This is intended to assist in the case where - a small number of outliers with very long read lengths cause - the histogram axes and N50 to be skewed. Defaults to 0 - no - data discarded. Values should be specified in percent - a - value of 0.05 will cause the top 5% of the data to be - discarded before producing outputs. For histograms, the data - discarded depends on the bucket_value_type. If `ReadCounts`, - then a percentage of the total number of reads reads will be - discarded; if `ReadLengths` then a percentage of the total - read lengths will be discarded. For the N50 value, - `discard_outlier_percent` always causes a percentage of the - total read lengths to be discarded (since it is always - calculated from read length data) - filtering: - Define filtering parameters for streamed data. - split: - Define how results are split for returned data. + What data to accumulate in the histogram buckets See + `QAccuracyHistogramBucketValueType` for further information + about the available options. +""" +TemperaturePacket.PebbleTemperature.__doc__ = """Packet of temperatures appropriate for a Pebble. + +Attributes: + asic_temperature: + Temperature as measured by probe inside the ASIC. + instrument_temperature: + Temperature as measured by thermistor on the instrument. +""" +StreamDutyTimeResponse.ChannelStateData.__doc__ = """Attributes: + state_times: + How much time (in samples) spent in this channel state, for + each bucket +""" +StreamBiasVoltagesRequest.__doc__ = """Attributes: + acquisition_run_id: + The acquisition id of the experiment. +""" +ReadLengthHistogramSplit.__doc__ = """Attributes: + read_end_reason: + Split returned data by read_end_reason +""" +StreamWriterOutputRequest.__doc__ = """Attributes: + acquisition_run_id: + The acquisition id of the experiment. + data_selection: + The desired data selection. The units for all values are + `seconds since the start of the experiment`. +""" +ReadLengthN50Response.__doc__ = """Attributes: + n50_data: + The N50 return data +""" +BoxplotResponse.__doc__ = """Attributes: + datasets: + Result boxplots are stored in this array. This is an overview + of the stored data from the START of the acquisition period. + This includes ALL the basecalled stats from MinKNOW, not just + updates since previous calls! +""" +ReadLengthN50Response.ReadN50Data.__doc__ = """Attributes: + estimated_n50: + The estimated N50 value in bases This is always set + basecalled_n50: + The basecalled N50 value If the acquisition did/does not have + live basecalling enabled, this will be 0.0 +""" +StreamQScoreHistogramResponse.BucketRange.__doc__ = """Attributes: + start: + The range covered by a bucket The range [start, end) is half + open (i.e. the start value is included, the end value is not). +""" +TemperaturePacket.MinIONTemperature.__doc__ = """Packet of temperatures appropriate for a MinION. + +Attributes: + asic_temperature: + Temperature as measured by the probe inside the asic. + heatsink_temperature: + Temperature as measured by the probe in the minion heatsink. """ StreamQAccuracyHistogramResponse.__doc__ = """Attributes: bucket_value_type: @@ -562,97 +699,47 @@ is enabled, then Simplex, Duplex and "All" (i.e. overall) histogram data will be returned """ -AcquisitionOutputKey.__doc__ = """Attributes: - barcode_name: - Only return data for the given barcode. Special values: - - Specify "unclassified" for data which does not have a barcode. - - Specify "classified" for all data which has a barcode. If - unspecified all barcodes are returned. - alignment_reference: - Only return data for the given alignment reference. Special - values: - Specify "unaligned" for data which does not align - to a reference - Specify "aligned" for all data which aligns - to a reference If unspecified all alignment targets are - returned. - alignment_bed_file_region: - Only return data for the given target region. Target regions - are defined in bed files. The region is a string which - identifies an entry in the bed file. Special values: - - Specify "offtarget" for data which does not have a bed region. - - Specify "ontarget" for all data which has a bed region. If - unspecified all alignment regions are returned. - alignment_bed_file_region_name: - An alias to `alignment_bed_file_region` An optional name can - be used to identify a target region in the bed file - lamp_barcode_id: - Only return data for the given lamp barcode. Special values: - - Specify "unclassified" for data which does not have a lamp - barcode. - Specify "classified" for all data which has a - lamp barcode. If unspecified all lamp barcodes are returned. - DEPRECATED 6.0: Lamp support has been removed and this option - will always be ignored. - lamp_target_id: - Only return data for the given lamp target. Special values: - - Specify "unclassified" for data which does not have a lamp - target. - Specify "classified" for all data which has a lamp - target. Using barcode terms here as lamp is part of barcoding - pipeline If unspecified all lamp target are returned. - DEPRECATED 6.0: Lamp support has been removed and this option - will always be ignored. - barcode_alias: - The barcode alias corresponding to the `barcode_name` - read_end_reason: - Only return data for the given ReadEndReason. Special values: - - Specify `ReadEndReason::All` to return data for all read end - reasons If unspecified all read end reasons are returned. -""" -TemperaturePacket.Range.__doc__ = """Represents a range of values.""" -StreamQScoreHistogramResponse.QScoreHistogramData.__doc__ = """Attributes: - filtering: - The filtering parameters which contributed to this bucket. - bucket_values: - Counts for each histogram bucket Units and type of - accumulated values are as specified in `bucket_value_type` The - range covered by each bucket is as in `bucket_ranges` - modal_q_score: - The modal q score, calculated using the `bucket_value_type` -""" -StreamDutyTimeRequest.__doc__ = """Attributes: - acquisition_run_id: - The acquisition id of the experiment. - data_selection: - The desired data selection. The units for all values are - `seconds since the start of the experiment`. -""" -GetReadLengthTypesRequest.__doc__ = """Attributes: +StreamEncounteredAcquisitionOutputKeysRequest.__doc__ = """Attributes: acquisition_run_id: The acquisition id of the experiment. """ -AcquisitionOutputSplit.__doc__ = """Attributes: - barcode_name: - Split data for every individual barcode. - alignment_reference: - Split data for each individual alignment reference. - References are defined in alignment references. - alignment_bed_file_region: - Split data for each target region. Target regions are defined - in bed files. - lamp_barcode_id: - Split data for each lamp barcode id. Lamp barcodes are - defined by the active lamp kit. DEPRECATED 6.0: Lamp support - has been removed and this option will always be ignored. - lamp_target_id: - Split data for each lamp targets id. Lamp targets are defined - by the active lamp kit. DEPRECATED 6.0: Lamp support has been - removed and this option will always be ignored. - read_end_reason: - Split returned data by read_end_reason -""" -StreamReadLengthHistogramResponse.BucketRange.__doc__ = """Attributes: - start: - The range covered by a bucket Units are as set in - `read_length_type`, above The range [start, end) is half open - (i.e. the start value is included, the end value is not). +DataSelection.__doc__ = """Specify a desired data selection. Units for values are as specified +in the corresponding Request The actual data selection used may +differ from the desired one. They are adjusted in the following +sequence: 1. All values are set equal to the corresponding desired +value. 2. Negative `start` or `end` values are fixed up by adding the +current maximum value to the specified value - Negative start +and end values are only supported for certain requests; typically they +are supported for time-series data - If, after adding the +current bucket count, the `start` value is still negative, then the +start value is adjusted to `0` - If, after adding the current +bucket count, the `end` value is still negative, or is zero, +then the data selection is empty - If data collection is still +ongoing, then the current bucket count may change between rpc +calls as more data is collected. 3. Values which are not set, or +which are set at `0`, are then adjusted to a default value: - +`start` and `step` will be set to the minimum valid value - `end` +will be set to the maximum valid value 4. Values which are outside of +the valid range are clamped to the nearest valid value: - Values +less than minimum valid value will be set equal to the minimum valid +value - Values greater than the maximum valid value will be set +equal to the maximum valid value 5. Finally, all values are 'rounded' +to a nearby valid value - `start` and `step` will be rounded down +to the first valid value less than or equal to their current +values - `end` will be rounded up to the first valid value that +is greater than or equal to its current value - This means +that the range that is specified after rounding includes the range +that was specified prior to rounding If (`end` - `start`) is +not an exact integer multiple of `step`, then the final bucket will +cover a smaller range than that specified by `step`. Note also that +the maximum valid start and end value may not be known if data +collection is still ongoing -- for example, the maximum valid time for +time series data. If this is the case, then the maximum valid value +will be determined when the experiment ends, and values in use will be +adjusted accordingly.""" +StreamAcquisitionOutputResponse.FilteredSnapshots.__doc__ = """Attributes: + filtering: + The filtering parameters which contributed to this bucket. """ WriterOutputSnapshot.__doc__ = """A snapshot of writer data. @@ -665,51 +752,6 @@ writer_output: The writer data for this bucket. """ -ReadLengthN50Request.__doc__ = """Attributes: - acquisition_run_id: - The `acquisition_run_id` of the acquisition to obtain data for -""" -TemperaturePacket.MinIONTemperature.__doc__ = """Packet of temperatures appropriate for a MinION. - -Attributes: - asic_temperature: - Temperature as measured by the probe inside the asic. - heatsink_temperature: - Temperature as measured by the probe in the minion heatsink. -""" -ReadLengthHistogramKey.__doc__ = """Attributes: - read_end_reason: - Only return data for the given ReadEndReason. Special values: - - Specify `ReadEndReason::All` to return data for all read end - reasons If unspecified all read end reasons are returned. -""" -GetReadLengthTypesResponse.__doc__ = """Attributes: - available_types: - Array of the types of bucket for which a histogram is - currently available -""" -StreamDutyTimeResponse.__doc__ = """Attributes: - bucket_ranges: - The range covered by each entry in state_times - channel_states: - Map between channel state names, and a list of bucketed duty - time data -""" -StreamReadLengthHistogramResponse.ReadLengthHistogramData.__doc__ = """Attributes: - filtering: - The filtering parameters which contributed to this bucket. - bucket_values: - Counts for each histogram bucket Units are as specified in - `read_length_type` The range covered by each bucket is as in - `bucket_ranges` The type of data accumulated in each bucket is - given by `bucket_value_type` - n50: - The N50 value for the read length data for the selected - `read_length_type` and `read_end_reasons`. Units are as - specified by `read_length_type`. Measured across all source - data, after excluding the reads specified by - `discard_outlier_percent` in the stream request. -""" StreamAcquisitionOutputRequest.__doc__ = """Attributes: acquisition_run_id: The acquisition id of the experiment. @@ -721,39 +763,7 @@ split: Define how results are split for returned data. """ -StreamDutyTimeResponse.ChannelStateData.__doc__ = """Attributes: - state_times: - How much time (in samples) spent in this channel state, for - each bucket -""" -StreamWriterOutputRequest.__doc__ = """Attributes: - acquisition_run_id: - The acquisition id of the experiment. - data_selection: - The desired data selection. The units for all values are - `seconds since the start of the experiment`. -""" -BoxplotResponse.__doc__ = """Attributes: - datasets: - Result boxplots are stored in this array. This is an overview - of the stored data from the START of the acquisition period. - This includes ALL the basecalled stats from MinKNOW, not just - updates since previous calls! -""" -StreamAcquisitionOutputResponse.FilteredSnapshots.__doc__ = """Attributes: - filtering: - The filtering parameters which contributed to this bucket. -""" -StreamQAccuracyHistogramResponse.BucketRange.__doc__ = """Attributes: - start: - The range covered by a bucket The range [start, end) is half - open (i.e. the start value is included, the end value is not). -""" -ReadLengthHistogramSplit.__doc__ = """Attributes: - read_end_reason: - Split returned data by read_end_reason -""" -StreamEncounteredAcquisitionOutputKeysRequest.__doc__ = """Attributes: +GetReadLengthTypesRequest.__doc__ = """Attributes: acquisition_run_id: The acquisition id of the experiment. """ diff --git a/python/minknow_api/testutils.py b/python/minknow_api/testutils.py index ec51ca6..075220d 100644 --- a/python/minknow_api/testutils.py +++ b/python/minknow_api/testutils.py @@ -53,7 +53,7 @@ def find_test_certs_dir(extra_stack_frames_up=0): new_cert_root = cert_root.parent logging.info("%s %s", new_cert_root, cert_root) if new_cert_root == cert_root: - raise Exception("Failed to find test certficates directory") + raise Exception("Failed to find test certificates directory") cert_root = new_cert_root found_test_certs_dir = certs_dir diff --git a/python/minknow_api/tools/compatibility_helpers.py b/python/minknow_api/tools/compatibility_helpers.py new file mode 100644 index 0000000..a0082ee --- /dev/null +++ b/python/minknow_api/tools/compatibility_helpers.py @@ -0,0 +1,18 @@ +import datetime +import importlib.resources + + +def datetime_utc_now(): + """Compatibility function getting the current utc date/time""" + try: + return datetime.datetime.now(datetime.UTC) + except AttributeError: + return datetime.datetime.utcnow() + + +def read_binary_resource(package, file): + """Compatibility function reading a binary resource with a python package""" + try: + return (importlib.resources.files(package) / file).read_bytes() + except AttributeError: + return importlib.resources.read_binary(package, file) diff --git a/python/minknow_api/tools/protocols.py b/python/minknow_api/tools/protocols.py index e88aaf9..f2e6a8b 100644 --- a/python/minknow_api/tools/protocols.py +++ b/python/minknow_api/tools/protocols.py @@ -2,6 +2,7 @@ import collections import dataclasses +from pathlib import Path import logging from typing import Optional, List, Sequence @@ -10,6 +11,7 @@ from .. import Connection from minknow_api import protocol_pb2, run_until_pb2, acquisition_pb2 from minknow_api.protocol_pb2 import BarcodeUserData +from minknow_api.protocol_pb2 import AnalysisWorkflowRequest from minknow_api.tools.any_helpers import make_float_any, make_uint64_any LOGGER = logging.getLogger(__name__) @@ -19,6 +21,7 @@ def find_protocol( device_connection: Connection, product_code: str, kit: str, + config_name: Optional[str], basecalling: bool = False, basecall_config: Optional[str] = None, barcoding: bool = False, @@ -36,6 +39,7 @@ def find_protocol( device_connection (:obj:`Connection`): As returned by minknow.manager.FlowCellPosition().connect(). product_code (:obj:`str`): The flow-cell type, as in flow_cell_info.product_code. kit (:obj:`str`): The kit to be sequenced. eg: "SQK-LSK108". + config_name (:obj:`str`): Optional name of a config to select. basecalling (bool): True if base-calling is required basecall_config (:obj:`str): The base-calling model that the protocol should support. If absent, the protocol default will be used (if specified) @@ -69,6 +73,15 @@ def find_protocol( # the tags provide a way to filter the experiments tags = protocol.tags + # ...with the correct name... + if config_name is not None and protocol.name != config_name: + LOGGER.debug( + "Protocol is not named correctly %s, not %s", + protocol.name, + config_name, + ) + continue + # want a sequencing experiment... if experiment_type and tags["experiment type"].string_value != experiment_type: LOGGER.debug( @@ -218,6 +231,7 @@ def make_protocol_arguments( bam_arguments: OutputArgs = None, disable_active_channel_selection: bool = False, mux_scan_period: float = 1.5, + simulation_path: Optional[Path] = None, args: Optional[List[str]] = None, is_flongle: bool = False, ) -> List[str]: @@ -234,6 +248,7 @@ def make_protocol_arguments( bam_arguments(:obj:`OutputArgs`): Control bam file generation. 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. args(:obj:`list`): Extra arguments to pass to protocol. is_flongle(bool): Specify if the flow cell to be sequenced on is a flongle. @@ -369,6 +384,13 @@ def on_off(value: bool): if not disable_active_channel_selection: protocol_args.append("--mux_scan_period={}".format(mux_scan_period)) + if simulation_path: + if not simulation_path.exists(): + raise Exception( + f"Non-existent path '{simulation_path}' passed for simulation." + ) + protocol_args.extend(["--simulation", str(simulation_path)]) + if args: protocol_args.extend(args) @@ -427,6 +449,7 @@ def start_protocol( barcode_info: Optional[Sequence[BarcodeUserData]], stop_criteria: Optional[CriteriaValues] = None, experiment_duration: Optional[float] = None, + analysis_workflow_request: Optional[AnalysisWorkflowRequest] = None, *args, **kwargs, ) -> str: @@ -439,6 +462,8 @@ def start_protocol( experiment_group(str): Experiment group of protocol to start. barcode_info(Sequence[:obj:`BarcodeUserData`]): Barcode user data (sample type and alias) + analysis_workflow_request: Optional[AnalysisWorkflowRequest]: + Analysis workflow request message stop_criteria(::obj::`TargetCriteria`): When to stop the acquisition experiment_duration(float): Length of the experiment in hours. *args: Additional arguments forwarded to {make_protocol_arguments} @@ -472,11 +497,17 @@ def start_protocol( experiment_duration=experiment_duration, ) + # Only pass analysis_workflow_request to start_protocol() if the user explicitly supplied it + additional_params = {} + if analysis_workflow_request is not None: + additional_params["analysis_workflow_request"] = analysis_workflow_request + result = device_connection.protocol.start_protocol( identifier=identifier, args=protocol_arguments, user_info=user_info, target_run_until_criteria=target_run_until_criteria, + **additional_params, ) return result.run_id diff --git a/python/test/example_tests/sample_sheets/bad_column_names/alias_no_barcoding.csv b/python/test/example_tests/sample_sheets/bad_column_names/alias_no_barcoding.csv index 4fcd0b5..c6989a4 100644 --- a/python/test/example_tests/sample_sheets/bad_column_names/alias_no_barcoding.csv +++ b/python/test/example_tests/sample_sheets/bad_column_names/alias_no_barcoding.csv @@ -1 +1 @@ -flow_cell_id,sample_id,alias \ No newline at end of file +flow_cell_id,sample_id,alias diff --git a/python/test/example_tests/sample_sheets/bad_column_names/barcoding_no_alias.csv b/python/test/example_tests/sample_sheets/bad_column_names/barcoding_no_alias.csv index 995fe6d..828489c 100644 --- a/python/test/example_tests/sample_sheets/bad_column_names/barcoding_no_alias.csv +++ b/python/test/example_tests/sample_sheets/bad_column_names/barcoding_no_alias.csv @@ -1 +1 @@ -flow_cell_id,internal_barcode,external_barcode \ No newline at end of file +flow_cell_id,internal_barcode,external_barcode diff --git a/python/test/example_tests/sample_sheets/bad_column_names/both_position_information.csv b/python/test/example_tests/sample_sheets/bad_column_names/both_position_information.csv index a52de4f..b73fe7c 100644 --- a/python/test/example_tests/sample_sheets/bad_column_names/both_position_information.csv +++ b/python/test/example_tests/sample_sheets/bad_column_names/both_position_information.csv @@ -1 +1 @@ -flow_cell_id,position_id,sample_id \ No newline at end of file +flow_cell_id,position_id,sample_id diff --git a/python/test/example_tests/sample_sheets/bad_column_names/conflicting_barcoding_columns.csv b/python/test/example_tests/sample_sheets/bad_column_names/conflicting_barcoding_columns.csv index e15b7b4..af92b1c 100644 --- a/python/test/example_tests/sample_sheets/bad_column_names/conflicting_barcoding_columns.csv +++ b/python/test/example_tests/sample_sheets/bad_column_names/conflicting_barcoding_columns.csv @@ -1 +1 @@ -flow_cell_id,barcode,internal_barcode,external_barcode \ No newline at end of file +flow_cell_id,barcode,internal_barcode,external_barcode diff --git a/python/test/example_tests/sample_sheets/bad_column_names/duplicate_columns.csv b/python/test/example_tests/sample_sheets/bad_column_names/duplicate_columns.csv index 5820758..f76bd63 100644 --- a/python/test/example_tests/sample_sheets/bad_column_names/duplicate_columns.csv +++ b/python/test/example_tests/sample_sheets/bad_column_names/duplicate_columns.csv @@ -1 +1 @@ -sample_id,sample_id \ No newline at end of file +sample_id,sample_id diff --git a/python/test/example_tests/sample_sheets/bad_column_names/missing_barcoding_column.csv b/python/test/example_tests/sample_sheets/bad_column_names/missing_barcoding_column.csv index 0dd20ec..a604157 100644 --- a/python/test/example_tests/sample_sheets/bad_column_names/missing_barcoding_column.csv +++ b/python/test/example_tests/sample_sheets/bad_column_names/missing_barcoding_column.csv @@ -1 +1 @@ -flow_cell_id,alias,internal_barcode \ No newline at end of file +flow_cell_id,alias,internal_barcode diff --git a/python/test/example_tests/sample_sheets/bad_column_names/no_position_information.csv b/python/test/example_tests/sample_sheets/bad_column_names/no_position_information.csv index 26d82d4..9ca0fb3 100644 --- a/python/test/example_tests/sample_sheets/bad_column_names/no_position_information.csv +++ b/python/test/example_tests/sample_sheets/bad_column_names/no_position_information.csv @@ -1 +1 @@ -sample_id \ No newline at end of file +sample_id diff --git a/python/test/example_tests/sample_sheets/bad_column_names/no_user_info_columns.csv b/python/test/example_tests/sample_sheets/bad_column_names/no_user_info_columns.csv index c4c8091..3fc4808 100644 --- a/python/test/example_tests/sample_sheets/bad_column_names/no_user_info_columns.csv +++ b/python/test/example_tests/sample_sheets/bad_column_names/no_user_info_columns.csv @@ -1 +1 @@ -flow_cell_id \ No newline at end of file +flow_cell_id diff --git a/python/test/example_tests/sample_sheets/bad_column_names/type_no_barcoding.csv b/python/test/example_tests/sample_sheets/bad_column_names/type_no_barcoding.csv index 936ee1f..a0cfdeb 100644 --- a/python/test/example_tests/sample_sheets/bad_column_names/type_no_barcoding.csv +++ b/python/test/example_tests/sample_sheets/bad_column_names/type_no_barcoding.csv @@ -1 +1 @@ -flow_cell_id,sample_id,type \ No newline at end of file +flow_cell_id,sample_id,type diff --git a/python/test/example_tests/sample_sheets/bad_records/barcode.csv b/python/test/example_tests/sample_sheets/bad_records/barcode.csv index 525df84..7045354 100644 --- a/python/test/example_tests/sample_sheets/bad_records/barcode.csv +++ b/python/test/example_tests/sample_sheets/bad_records/barcode.csv @@ -1,2 +1,2 @@ flow_cell_id,barcode,alias -FC001,bad,alias \ No newline at end of file +FC001,bad,alias diff --git a/python/test/example_tests/sample_sheets/bad_records/duplicate_alias.csv b/python/test/example_tests/sample_sheets/bad_records/duplicate_alias.csv index e3c0e32..7cba2c1 100644 --- a/python/test/example_tests/sample_sheets/bad_records/duplicate_alias.csv +++ b/python/test/example_tests/sample_sheets/bad_records/duplicate_alias.csv @@ -1,3 +1,3 @@ flow_cell_id,barcode,alias FC001,barcode01,alias -FC001,barcode02,alias \ No newline at end of file +FC001,barcode02,alias diff --git a/python/test/example_tests/sample_sheets/bad_records/duplicate_barcode.csv b/python/test/example_tests/sample_sheets/bad_records/duplicate_barcode.csv index 631f877..11b4b92 100644 --- a/python/test/example_tests/sample_sheets/bad_records/duplicate_barcode.csv +++ b/python/test/example_tests/sample_sheets/bad_records/duplicate_barcode.csv @@ -1,3 +1,3 @@ flow_cell_id,barcode,alias FC001,barcode01,alias -FC001,barcode01,other_alias \ No newline at end of file +FC001,barcode01,other_alias diff --git a/python/test/example_tests/sample_sheets/bad_records/experiment_id.csv b/python/test/example_tests/sample_sheets/bad_records/experiment_id.csv index d814cd4..b68b136 100644 --- a/python/test/example_tests/sample_sheets/bad_records/experiment_id.csv +++ b/python/test/example_tests/sample_sheets/bad_records/experiment_id.csv @@ -1,3 +1,3 @@ flow_cell_id,experiment_id FC001,abc -FC002,123 \ No newline at end of file +FC002,123 diff --git a/python/test/example_tests/sample_sheets/bad_records/external_barcode.csv b/python/test/example_tests/sample_sheets/bad_records/external_barcode.csv index 9f8c36d..35a0451 100644 --- a/python/test/example_tests/sample_sheets/bad_records/external_barcode.csv +++ b/python/test/example_tests/sample_sheets/bad_records/external_barcode.csv @@ -1,2 +1,2 @@ flow_cell_id,internal_barcode,external_barcode,alias -FC001,internal01,bad,alias \ No newline at end of file +FC001,internal01,bad,alias diff --git a/python/test/example_tests/sample_sheets/bad_records/internal_barcode.csv b/python/test/example_tests/sample_sheets/bad_records/internal_barcode.csv index b9f9168..34e7d0e 100644 --- a/python/test/example_tests/sample_sheets/bad_records/internal_barcode.csv +++ b/python/test/example_tests/sample_sheets/bad_records/internal_barcode.csv @@ -1,2 +1,2 @@ flow_cell_id,internal_barcode,external_barcode,alias -FC001,bad,external01,alias \ No newline at end of file +FC001,bad,external01,alias diff --git a/python/test/example_tests/sample_sheets/bad_records/sample_id.csv b/python/test/example_tests/sample_sheets/bad_records/sample_id.csv index 5fbda77..bd2f6ff 100644 --- a/python/test/example_tests/sample_sheets/bad_records/sample_id.csv +++ b/python/test/example_tests/sample_sheets/bad_records/sample_id.csv @@ -1,3 +1,3 @@ flow_cell_id,sample_id FC001,sample1 -FC001,sample2 \ No newline at end of file +FC001,sample2 diff --git a/python/test/example_tests/sample_sheets/bad_records/sample_type.csv b/python/test/example_tests/sample_sheets/bad_records/sample_type.csv index 211bb9a..9017831 100644 --- a/python/test/example_tests/sample_sheets/bad_records/sample_type.csv +++ b/python/test/example_tests/sample_sheets/bad_records/sample_type.csv @@ -1,2 +1,2 @@ flow_cell_id,barcode,type,alias -FC001,barcode01,invalid_type,alias01 \ No newline at end of file +FC001,barcode01,invalid_type,alias01 diff --git a/python/test/example_tests/sample_sheets/good/dual_barcoding.csv b/python/test/example_tests/sample_sheets/good/dual_barcoding.csv index 7706174..e6dcd89 100644 --- a/python/test/example_tests/sample_sheets/good/dual_barcoding.csv +++ b/python/test/example_tests/sample_sheets/good/dual_barcoding.csv @@ -1,3 +1,3 @@ flow_cell_id,internal_barcode,external_barcode,alias FC001,internal01,external01,alias01 -FC001,internal01,external02,alias02 \ No newline at end of file +FC001,internal01,external02,alias02 diff --git a/python/test/example_tests/sample_sheets/good/multiple_positions.csv b/python/test/example_tests/sample_sheets/good/multiple_positions.csv index 2bd4cc3..e986aa4 100644 --- a/python/test/example_tests/sample_sheets/good/multiple_positions.csv +++ b/python/test/example_tests/sample_sheets/good/multiple_positions.csv @@ -1,3 +1,3 @@ position_id,sample_id,experiment_id,barcode,alias A1,my_sample_1,my_experiment,barcode01,alias01 -A2,my_sample_2,my_experiment,barcode01,alias01 \ No newline at end of file +A2,my_sample_2,my_experiment,barcode01,alias01 diff --git a/python/test/example_tests/sample_sheets/good/no_barcoding.csv b/python/test/example_tests/sample_sheets/good/no_barcoding.csv index d37844b..78dff94 100644 --- a/python/test/example_tests/sample_sheets/good/no_barcoding.csv +++ b/python/test/example_tests/sample_sheets/good/no_barcoding.csv @@ -1,2 +1,2 @@ flow_cell_id,sample_id,experiment_id -FC001,my_sample,my_experiment \ No newline at end of file +FC001,my_sample,my_experiment diff --git a/python/test/example_tests/sample_sheets/good/passenger_info.csv b/python/test/example_tests/sample_sheets/good/passenger_info.csv index c63e111..f04d4db 100644 --- a/python/test/example_tests/sample_sheets/good/passenger_info.csv +++ b/python/test/example_tests/sample_sheets/good/passenger_info.csv @@ -1,3 +1,3 @@ flow_cell_id,barcode,alias,type,operator,species FC001,barcode01,alias01,test_sample,smooth, -FC001,barcode02,alias02,positive_control,,alien \ No newline at end of file +FC001,barcode02,alias02,positive_control,,alien diff --git a/python/test/example_tests/sample_sheets/good/single_barcoding.csv b/python/test/example_tests/sample_sheets/good/single_barcoding.csv index 3ac64ba..72d4960 100644 --- a/python/test/example_tests/sample_sheets/good/single_barcoding.csv +++ b/python/test/example_tests/sample_sheets/good/single_barcoding.csv @@ -2,4 +2,4 @@ flow_cell_id,barcode,alias,type FC001,barcode01,alias01,test_sample FC001,barcode02,alias02,positive_control FC001,barcode03,alias03,negative_control -FC001,barcode04,alias04,no_template_control \ No newline at end of file +FC001,barcode04,alias04,no_template_control diff --git a/python/test/example_tests/test_create_client_certificates.py b/python/test/example_tests/test_create_client_certificates.py index 9c7c944..f5386ac 100644 --- a/python/test/example_tests/test_create_client_certificates.py +++ b/python/test/example_tests/test_create_client_certificates.py @@ -8,6 +8,7 @@ import grpc from cryptography import x509 from minknow_api import manager_service, instance_pb2 +from minknow_api.tools.compatibility_helpers import datetime_utc_now from mock_server import Server, load_test_ca create_client_certs = ( @@ -119,8 +120,8 @@ def test_client_certs_days_valid(): ) # Check that it's valid for just one day (With 10 second tolerance) - actual_expiry = x509.load_pem_x509_certificate(client_cert).not_valid_after - expected_expiry = datetime.datetime.utcnow() + datetime.timedelta(days=1) + actual_expiry = x509.load_pem_x509_certificate(client_cert).not_valid_after_utc + expected_expiry = datetime_utc_now() + datetime.timedelta(days=1) assert abs(actual_expiry.timestamp() - expected_expiry.timestamp()) < 10 diff --git a/python/test/example_tests/test_start_protocol.py b/python/test/example_tests/test_start_protocol.py index ae23cad..17db782 100644 --- a/python/test/example_tests/test_start_protocol.py +++ b/python/test/example_tests/test_start_protocol.py @@ -2,6 +2,7 @@ import sys from dataclasses import dataclass from pathlib import Path +import os from mock_server import ( InstanceServicer, @@ -25,13 +26,17 @@ start_protocol_source = example_root / "start_protocol.py" -TEST_PROTOCOL_IDENTIFIER = "foo-identifier" +TEST_PROTOCOL_NAME = "foo-identifier" +TEST_BARCODING_PROTOCOL_NAME = "foo-barcoding-identifier" TEST_KIT_NAME = "foo-bar-kit" +TEST_PROTOCOL_IDENTIFIER = f"{TEST_PROTOCOL_NAME}:{TEST_KIT_NAME}" +TEST_BARCODING_PROTOCOL_IDENTIFIER = f"{TEST_BARCODING_PROTOCOL_NAME}:{TEST_KIT_NAME}" TEST_BASECLL_MODEL = "test.cfg" TEST_BASECLL_MODEL_OTHER = "test2.cfg" TEST_BARCODING_KIT = "foo-barcodes" TEST_PROTOCOL = protocol_pb2.ProtocolInfo( identifier=TEST_PROTOCOL_IDENTIFIER, + name=TEST_PROTOCOL_NAME, tag_extraction_result=protocol_pb2.ProtocolInfo.TagExtractionResult(success=True), tags={ "kit": protocol_pb2.ProtocolInfo.TagValue(string_value=TEST_KIT_NAME), @@ -47,7 +52,7 @@ }, ) TEST_BARCODING_PROTOCOL = protocol_pb2.ProtocolInfo( - identifier=TEST_PROTOCOL_IDENTIFIER, + identifier=TEST_BARCODING_PROTOCOL_IDENTIFIER, tag_extraction_result=protocol_pb2.ProtocolInfo.TagExtractionResult(success=True), tags={ "kit": protocol_pb2.ProtocolInfo.TagValue(string_value=TEST_KIT_NAME), @@ -534,7 +539,7 @@ def test_barcoding_start_protocol(): assert len(sequencing_position.protocol_service.protocol_runs) == 1 protocol = sequencing_position.protocol_service.protocol_runs[-1] - assert protocol.identifier == TEST_PROTOCOL_IDENTIFIER + assert protocol.identifier == TEST_BARCODING_PROTOCOL_IDENTIFIER assert protocol.args == [ "--base_calling=on", "--barcoding", @@ -561,13 +566,6 @@ def test_barcoding_start_protocol(): TEST_BARCODING_KIT, "--trim-barcodes", "--barcodes-both-ends", - "--detect-mid-strand-barcodes", - "--min-score", - "5", - "--min-score-rear", - "6", - "--min-score-mid", - "7", ], )[0] == 0 @@ -575,7 +573,7 @@ def test_barcoding_start_protocol(): assert len(sequencing_position.protocol_service.protocol_runs) == 2 protocol = sequencing_position.protocol_service.protocol_runs[-1] - assert protocol.identifier == TEST_PROTOCOL_IDENTIFIER + assert protocol.identifier == TEST_BARCODING_PROTOCOL_IDENTIFIER assert protocol.args == [ "--base_calling=on", "--barcoding", @@ -884,6 +882,190 @@ def test_output_start_protocol(): assert protocol.target_run_until_criteria == TEST_RUN_UNTIL_CRITERIA +def test_analysis_workflows_start_protocol(): + with SequencingPositionTestServer() as sequencing_position: + manager_servicer = ManagerServicer( + [ + manager_pb2.FlowCellPosition( + name="MN00000", + state=manager_pb2.FlowCellPosition.State.STATE_RUNNING, + rpc_ports=manager_pb2.FlowCellPosition.RpcPorts( + secure=sequencing_position.port + ), + ), + ] + ) + with Server([manager_servicer]) as server: + # Setup for experiment + test_flow_cell_id = "foo-bar-flow-cell" + sequencing_position.set_flow_cell_info( + FlowCellInfo(has_flow_cell=True, flow_cell_id=test_flow_cell_id) + ) + sequencing_position.set_protocol_list([TEST_PROTOCOL]) + + # test for file not found error + filepath = Path("test.json") + assert ( + run_start_protocol_example( + server.port, + [ + "--kit", + TEST_KIT_NAME, + "--position=MN00000", + "--workflow_json_file", + filepath, + ], + )[0] + == 1 + ) + + # test for empty json file with no data + open(filepath, "w").close() + assert ( + run_start_protocol_example( + server.port, + [ + "--kit", + TEST_KIT_NAME, + "--position=MN00000", + "--workflow_json_file", + filepath, + ], + )[0] + == 1 + ) + + # test for bad data in json file error + input_string = '{ "name" : "test json file", "data" : "i am a workflow"}' + filepath.write_text(input_string) + + assert ( + run_start_protocol_example( + server.port, + [ + "--kit", + TEST_KIT_NAME, + "--position=MN00000", + "--workflow_json_file", + filepath, + ], + )[0] + == 1 + ) + + # test for bad workflow data in json file error + input_string = '{ "workflow_id" : "blah", "parameters": {"foo": "bar"} ' # unclosed brace + filepath.write_text(input_string) + + assert ( + run_start_protocol_example( + server.port, + [ + "--kit", + TEST_KIT_NAME, + "--position=MN00000", + "--workflow_json_file", + filepath, + ], + )[0] + == 1 + ) + + # test for good data in json file + request_body = '{"workflow_id":"ZXBpMm1lLWxhYnMvd2YtaHVtYW4tdmFyaWF0aW9u","parameters":{"sv":true,"snp":true,"cnv":true,"str":true,"mod":true,"ref":"/data/hg38.fasta","phased":false,"include_all_ctgs":false,"output_gene_summary":false}}' + filepath.write_text(request_body) + + assert ( + run_start_protocol_example( + server.port, + [ + "--kit", + TEST_KIT_NAME, + "--position=MN00000", + "--workflow_json_file", + filepath, + ], + )[0] + == 0 + ) + protocol = sequencing_position.protocol_service.protocol_runs[-1] + assert ( + protocol.analysis_workflow_request.proxy_request.request_body + == request_body + ) + + # delete test json file when done + if os.path.exists(filepath): + os.remove(filepath) + + # test for no data json string error + assert ( + run_start_protocol_example( + server.port, + [ + "--kit", + TEST_KIT_NAME, + "--position=MN00000", + "--workflow_json_string", + "test_string", + ], + )[0] + == 1 + ) + + # test for bad json string data error + assert ( + run_start_protocol_example( + server.port, + [ + "--kit", + TEST_KIT_NAME, + "--position=MN00000", + "--workflow_json_string", + input_string, + ], + )[0] + == 1 + ) + + # test for good json string data + assert ( + run_start_protocol_example( + server.port, + [ + "--kit", + TEST_KIT_NAME, + "--position=MN00000", + "--workflow_json_string", + request_body, + ], + )[0] + == 0 + ) + protocol = sequencing_position.protocol_service.protocol_runs[-1] + assert ( + protocol.analysis_workflow_request.proxy_request.request_body + == request_body + ) + + # test for adding in both arguments error + assert ( + run_start_protocol_example( + server.port, + [ + "--kit", + TEST_KIT_NAME, + "--position=MN00000", + "--workflow_json_file", + filepath, + "--workflow_json_string", + request_body, + ], + )[0] + == 2 + ) + + def sample_sheet_csv_path(*args): return str( Path(__file__).parent.joinpath("sample_sheets", *args).with_suffix(".csv") @@ -933,13 +1115,6 @@ def test_sample_sheet_start_protocol(): TEST_BARCODING_KIT, "--trim-barcodes", "--barcodes-both-ends", - "--detect-mid-strand-barcodes", - "--min-score", - "5", - "--min-score-rear", - "6", - "--min-score-mid", - "7", ], )[0] == 0 @@ -1013,13 +1188,6 @@ def barcode_user_info_key(el): TEST_BARCODING_KIT, "--trim-barcodes", "--barcodes-both-ends", - "--detect-mid-strand-barcodes", - "--min-score", - "5", - "--min-score-rear", - "6", - "--min-score-mid", - "7", ], )[0] == 0 @@ -1132,13 +1300,6 @@ def barcode_user_info_key(el): TEST_BARCODING_KIT, "--trim-barcodes", "--barcodes-both-ends", - "--detect-mid-strand-barcodes", - "--min-score", - "5", - "--min-score-rear", - "6", - "--min-score-mid", - "7", ], )[0] == 1 @@ -1162,13 +1323,6 @@ def barcode_user_info_key(el): TEST_BARCODING_KIT, "--trim-barcodes", "--barcodes-both-ends", - "--detect-mid-strand-barcodes", - "--min-score", - "5", - "--min-score-rear", - "6", - "--min-score-mid", - "7", ], )[0] == 1 @@ -1272,7 +1426,6 @@ def test_read_until_start_protocol(): assert len(sequencing_position.protocol_service.protocol_runs) == 1 protocol = sequencing_position.protocol_service.protocol_runs[-1] assert protocol.identifier == TEST_PROTOCOL_IDENTIFIER - print(protocol.args) assert protocol.args == [ "--read_until", "filter_type=deplete", @@ -1286,3 +1439,127 @@ def test_read_until_start_protocol(): "--mux_scan_period=1.5", ] assert protocol.target_run_until_criteria == TEST_RUN_UNTIL_CRITERIA + + +def test_simulation_start_protocol(): + """Verify custom config arguments work as expected.""" + + with SequencingPositionTestServer() as sequencing_position: + manager_servicer = ManagerServicer( + [ + manager_pb2.FlowCellPosition( + name="MN00000", + state=manager_pb2.FlowCellPosition.State.STATE_RUNNING, + rpc_ports=manager_pb2.FlowCellPosition.RpcPorts( + secure=sequencing_position.port + ), + ), + ] + ) + with Server([manager_servicer]) as server: + # Setup for experiment + test_flow_cell_id = "foo-bar-flow-cell" + sequencing_position.set_flow_cell_info( + FlowCellInfo(has_flow_cell=True, flow_cell_id=test_flow_cell_id) + ) + sequencing_position.set_protocol_list([TEST_PROTOCOL]) + + assert ( + run_start_protocol_example( + server.port, + [ + "--kit", + TEST_KIT_NAME, + "--position=MN00000", + "--simulation", + "non-existent.fast5", + ], + )[0] + != 0 + ) + + assert ( + run_start_protocol_example( + server.port, + [ + "--kit", + TEST_KIT_NAME, + "--position=MN00000", + "--simulation", + __file__, # We know this file exists + ], + )[0] + == 0 + ) + + assert len(sequencing_position.protocol_service.protocol_runs) == 1 + protocol = sequencing_position.protocol_service.protocol_runs[-1] + assert protocol.identifier == TEST_PROTOCOL_IDENTIFIER + assert protocol.args == [ + "--fast5=off", + "--pod5=off", + "--fastq=off", + "--bam=off", + "--active_channel_selection=on", + "--mux_scan_period=1.5", + "--simulation", + __file__, + ] + + +def test_custom_config_start_protocol(): + """Verify custom config arguments work as expected.""" + + with SequencingPositionTestServer() as sequencing_position: + manager_servicer = ManagerServicer( + [ + manager_pb2.FlowCellPosition( + name="MN00000", + state=manager_pb2.FlowCellPosition.State.STATE_RUNNING, + rpc_ports=manager_pb2.FlowCellPosition.RpcPorts( + secure=sequencing_position.port + ), + ), + ] + ) + with Server([manager_servicer]) as server: + # Setup for experiment + test_flow_cell_id = "foo-bar-flow-cell" + sequencing_position.set_flow_cell_info( + FlowCellInfo(has_flow_cell=True, flow_cell_id=test_flow_cell_id) + ) + sequencing_position.set_protocol_list( + [TEST_PROTOCOL, TEST_BARCODING_PROTOCOL] + ) + + assert ( + run_start_protocol_example( + server.port, + [ + "--kit", + TEST_KIT_NAME, + "--position=MN00000", + "--config-name", + "foo", + ], + )[0] + != 0 + ) + + assert ( + run_start_protocol_example( + server.port, + [ + "--kit", + TEST_KIT_NAME, + "--position=MN00000", + "--config-name", + TEST_PROTOCOL_NAME, + ], + )[0] + == 0 + ) + + assert len(sequencing_position.protocol_service.protocol_runs) == 1 + protocol = sequencing_position.protocol_service.protocol_runs[-1] + assert protocol.identifier == TEST_PROTOCOL_IDENTIFIER